From 3370a02fd828676c96f27abf0e95c502edd292d9 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Sun, 7 Dec 2014 20:50:34 +0000 Subject: [PATCH] orm: Convert Team to ORM --- include/class.i18n.php | 2 +- include/class.staff.php | 63 ++++------- include/class.team.php | 217 ++++++++++++++++++++---------------- include/staff/team.inc.php | 78 ++++++++----- include/staff/teams.inc.php | 105 ++++++++++------- scp/teams.php | 22 ++-- 6 files changed, 275 insertions(+), 212 deletions(-) diff --git a/include/class.i18n.php b/include/class.i18n.php index b208feb0e..915628893 100644 --- a/include/class.i18n.php +++ b/include/class.i18n.php @@ -57,7 +57,7 @@ class Internationalization { // help_topic 'help_topic.yaml' => 'Topic::__create', 'filter.yaml' => 'Filter::create', - 'team.yaml' => 'Team::create', + 'team.yaml' => 'Team::__create', // Organization 'organization.yaml' => 'Organization::__create', // Ticket diff --git a/include/class.staff.php b/include/class.staff.php index 0b53f9296..8a79df61e 100644 --- a/include/class.staff.php +++ b/include/class.staff.php @@ -37,18 +37,20 @@ implements AuthenticatedUser { 'constraint' => array('group_id' => 'Group.group_id'), ), 'teams' => array( - 'constraint' => array('staff_id' => 'StaffTeamMember.staff_id'), + 'null' => true, + 'list' => true, + 'reverse' => 'TeamMember.staff', ), ), ); var $authkey; var $departments; - var $teams; var $timezone; var $stats = array(); var $_extra; var $passwd_change; + var $_teams = null; function __onload() { // WE have to patch info here to support upgrading from old versions. @@ -375,16 +377,13 @@ implements AuthenticatedUser { function getTeams() { - if (!isset($this->teams)) { - $this->teams = array(); - $sql='SELECT team_id FROM '.TEAM_MEMBER_TABLE - .' WHERE staff_id='.db_input($this->getId()); - if(($res=db_query($sql)) && db_num_rows($res)) - while(list($id)=db_fetch_row($res)) - $this->teams[] = $id; + if (!isset($this->_teams)) { + $this->_teams = array(); + foreach ($this->teams as $team) + $this->_teams[] = $team->team_id; } - return $this->teams; + return $this->_teams; } /* stats */ @@ -530,27 +529,30 @@ implements AuthenticatedUser { } function updateTeams($team_ids) { - if ($team_ids && is_array($team_ids)) { - $teams = StaffTeamMember::objects() + + if (is_array($team_ids)) { + $members = TeamMember::objects() ->filter(array('staff_id' => $this->getId())); - foreach ($teams as $member) { + foreach ($members as $member) { if ($idx = array_search($member->team_id, $team_ids)) { - // XXX: Do we really need to track the time of update? - $member->updated = SqlFunction::NOW(); - $member->save(); unset($team_ids[$idx]); - } - else { + } else { $member->delete(); } } + foreach ($team_ids as $id) { - StaffTeamMember::create(array( - 'updated'=>SqlFunction::NOW(), - 'staff_id'=>$this->getId(), 'team_id'=>$id + TeamMember::create(array( + 'staff_id'=>$this->getId(), + 'team_id'=>$id ))->save(); } + } else { + TeamMember::objects() + ->filter(array('staff_id'=>$this->getId())) + ->delete(); } + return true; } @@ -573,9 +575,7 @@ implements AuthenticatedUser { .' WHERE staff_id='.db_input($this->getId())); // Cleanup Team membership table. - TeamMember::objects() - ->filter(array('staff_id'=>$this->getId())) - ->delete(); + $this->updateTeams(array()); return true; } @@ -809,19 +809,4 @@ implements AuthenticatedUser { return false; } } - -class StaffTeamMember extends VerySimpleModel { - static $meta = array( - 'table' => TEAM_MEMBER_TABLE, - 'pk' => array('staff_id', 'team_id'), - 'joins' => array( - 'staff' => array( - 'constraint' => array('staff_id' => 'Staff.staff_id'), - ), - 'team' => array( - 'constraint' => array('team_id' => 'Team.team_id'), - ), - ), - ); -} ?> diff --git a/include/class.team.php b/include/class.team.php index 8ba31af52..7784d87bc 100644 --- a/include/class.team.php +++ b/include/class.team.php @@ -20,16 +20,19 @@ class Team extends VerySimpleModel { 'table' => TEAM_TABLE, 'pk' => array('team_id'), 'joins' => array( - 'staffmembers' => array( - 'reverse' => 'StaffTeamMember.team' - ), 'lead' => array( + 'null' => true, 'constraint' => array('lead_id' => 'Staff.staff_id'), ), + 'members' => array( + 'null' => true, + 'list' => true, + 'reverse' => 'TeamMember.team', + ), ), ); - var $members; + var $_members; function asVar() { return $this->__toString(); @@ -52,16 +55,18 @@ class Team extends VerySimpleModel { } function getMembers() { - if (!isset($this->members)) { - $this->members = Staff::objects() - ->filter(array('teams__team_id'=>$this->getId())) - ->order_by('lastname', 'firstname'); + + if (!isset($this->_members)) { + $this->_members = array(); + foreach ($this->members as $m) + $this->_members[] = $m->staff; } - return $this->members; + + return $this->_members; } function hasMember($staff) { - return $this->getMembers() + return $this->members ->filter(array('staff_id'=>$staff->getId())) ->count() !== 0; } @@ -114,16 +119,58 @@ class Team extends VerySimpleModel { return $T != $tag ? $T : $default; } - function updateMembership($vars) { + function update($vars, &$errors=array()) { - // Delete staff marked for removal... - if ($vars['remove']) { - $this->staffmembers - ->filter(array( - 'staff_id__in' => $vars['remove'])) - ->delete(); + if (!$vars['name']) { + $errors['name']=__('Team name is required'); + } elseif(($tid=self::getIdByName($vars['name'])) && $tid!=$vars['id']) { + $errors['name']=__('Team name already exists'); } - return true; + + if ($errors) + return false; + + // Reset team lead if they're getting removed + if (isset($this->lead_id) + && $this->lead_id == $vars['lead_id'] + && $vars['remove'] + && in_array($this->lead_id, $vars['remove'])) + $vars['lead_id'] =0 ; + + $this->isenabled = $vars['isenabled']; + $this->noalerts = isset($vars['noalerts']) ? $vars['noalerts'] : 0; + $this->lead_id = $vars['lead_id'] ?: 0; + $this->name = $vars['name']; + $this->notes = Format::sanitize($vars['notes']); + + if ($this->save()) { + // Remove checked members + if ($vars['remove'] && is_array($vars['remove'])) { + TeamMember::objects() + ->filter(array( + 'staff_id__in' => $vars['remove'])) + ->delete(); + } + + return true; + } + + if (isset($this->team_id)) { + $errors['err']=sprintf(__('Unable to update %s.'), __('this team')) + .' '.__('Internal error occurred'); + } else { + $errors['err']=sprintf(__('Unable to create %s.'), __('this team')) + .' '.__('Internal error occurred'); + } + + return false; + } + + function save($refetch=false) { + if ($this->dirty) + $this->updated = SqlFunction::NOW(); + + return parent::save($refetch || $this->dirty); } function delete() { @@ -146,106 +193,88 @@ class Team extends VerySimpleModel { return true; } - function save($refetch=false) { - if ($this->dirty) - $this->updated = SqlFunction::NOW(); - return parent::save($refetch || $this->dirty); - } - /* ----------- Static function ------------------*/ + static function getIdByName($name) { - static function getIdbyName($name) { - $row = static::objects() - ->filter(array('name'=>$name)) + $row = self::objects() + ->filter(array('name'=>trim($name))) ->values_flat('team_id') ->first(); - return $row ? $row[0] : null; + return $row ? $row[0] : 0; } - static function getTeams( $availableOnly=false ) { - static $names; - - if (isset($names)) - return $names; - - $names = array(); - $teams = static::objects() - ->values_flat('team_id', 'name', 'isenabled'); + static function getTeams($criteria=array()) { + static $teams = null; + if (!$teams || $criteria) { + $teams = array(); + $query = static::objects() + ->values_flat('team_id', 'name', 'isenabled') + ->order_by('name'); - if ($availableOnly) { - //Make sure the members are active...TODO: include group check!! - $teams->annotate(array('members'=>Aggregate::COUNT('staffmembers'))) + if (isset($criteria['active']) && $criteria['active']) { + $query->annotate(array('members_count'=>Aggregate::COUNT('members'))) ->filter(array( 'isenabled'=>1, - 'staffmembers__staff__isactive'=>1, - 'staffmembers__staff__onvacation'=>0, - 'staffmembers__staff__group__group_enabled'=>1, + 'members__staff__isactive'=>1, + 'members__staff__onvacation'=>0, + 'members__staff__group__group_enabled'=>1, )) - ->filter(array('members__gt'=>0)) - ->order_by('name'); - } - - foreach ($teams as $row) { - list($id, $name, $isenabled) = $row; - $names[$id] = self::getLocalById($id, 'name', $name); - if (!$isenabled) - $names[$id] .= ' ' . __('(disabled)'); + ->filter(array('members_count__gt'=>0)); + } + + $items = array(); + foreach ($query as $row) { + //TODO: Fix enabled - flags is a bit field. + list($id, $name, $enabled) = $row; + $items[$id] = sprintf('%s%s', + self::getLocalById($id, 'name', $name), + $enabled ? '' : ' ' . __('(disabled)')); + } + + //TODO: sort if $criteria['localize']; + if ($criteria) + return $items; + + $teams = $items; } - return $names; + return $teams; } static function getActiveTeams() { - return self::getTeams(true); + static $teams = null; + + if (!isset($teams)) + $teams = self::getTeams(array('active'=>true)); + + return $teams; } - static function create($vars=array()) { + static function create($vars=false) { $team = parent::create($vars); $team->created = SqlFunction::NOW(); return $team; } - function update($vars, &$errors) { - if (isset($this->team_id) && $this->getId() != $vars['id']) - $errors['err']=__('Missing or invalid team'); - - if(!$vars['name']) { - $errors['name']=__('Team name is required'); - } elseif(strlen($vars['name'])<3) { - $errors['name']=__('Team name must be at least 3 chars.'); - } elseif(($tid=static::getIdByName($vars['name'])) - && (!isset($this->team_id) || $tid!=$this->getId())) { - $errors['name']=__('Team name already exists'); - } - - if ($errors) - return false; - - $this->isenabled = $vars['isenabled']; - $this->name = $vars['name']; - $this->noalerts = isset($vars['noalerts'])?$vars['noalerts']:0; - $this->notes = Format::sanitize($vars['notes']); - if (isset($vars['lead_id'])) - $this->lead_id = $vars['lead_id']; - - // reset team lead if they're being removed from the team - if ($this->getLeadId() == $vars['lead_id'] - && $vars['remove'] && in_array($this->getLeadId(), $vars['remove'])) - $this->lead_id = 0; + static function __create($vars, &$errors) { + return self::create($vars)->save(); + } - if ($this->save()) - return $this->updateMembership($vars); +} - if ($this->__new__) { - $errors['err']=sprintf(__('Unable to create %s.'), __('this team')) - .' '.__('Internal error occurred'); - } - else { - $errors['err']=sprintf(__('Unable to update %s.'), __('this team')) - .' '.__('Internal error occurred'); - } - return false; - } +class TeamMember extends VerySimpleModel { + static $meta = array( + 'table' => TEAM_MEMBER_TABLE, + 'pk' => array('team_id', 'staff_id'), + 'joins' => array( + 'team' => array( + 'constraint' => array('team_id' => 'Team.team_id'), + ), + 'staff' => array( + 'constraint' => array('staff_id' => 'Staff.staff_id'), + ), + ), + ); } ?> diff --git a/include/staff/team.inc.php b/include/staff/team.inc.php index 0d5fdd2d3..ec651205c 100644 --- a/include/staff/team.inc.php +++ b/include/staff/team.inc.php @@ -1,8 +1,8 @@ <?php if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied'); -$info=array(); +$info=$members=array(); $qstr=''; -if($team && $_REQUEST['a']!='add'){ +if ($team && $_REQUEST['a']!='add') { //Editing Team $title=__('Update Team'); $action='update'; @@ -11,7 +11,8 @@ if($team && $_REQUEST['a']!='add'){ $info['id']=$team->getId(); $trans['name'] = $team->getTranslateTag('name'); $qstr.='&id='.$team->getId(); -}else { + $members = $team->getMembers(); +} else { $title=__('Add New Team'); $action='create'; $submit_text=__('Create Team'); @@ -19,16 +20,29 @@ if($team && $_REQUEST['a']!='add'){ $info['noalerts']=0; $qstr.='&a='.$_REQUEST['a']; } -$info=Format::htmlchars(($errors && $_POST)?$_POST:$info); + +$info = Format::htmlchars(($errors && $_POST) ? $_POST : $info); ?> <form action="teams.php?<?php echo $qstr; ?>" method="post" id="save"> <?php csrf_token(); ?> <input type="hidden" name="do" value="<?php echo $action; ?>"> <input type="hidden" name="a" value="<?php echo Format::htmlchars($_REQUEST['a']); ?>"> <input type="hidden" name="id" value="<?php echo $info['id']; ?>"> - <h2><?php echo __('Team');?> + <h2><?php echo __('Team');?> <i class="help-tip icon-question-sign" href="#teams"></i> </h2> +<br> +<ul class="tabs"> + <li class="active"><a href="#team"> + <i class="icon-file"></i> <?php echo __('Team'); ?></a></li> + <?php + if ($members) { ?> + <li><a href="#members"> + <i class="icon-group"></i> <?php echo __('Members'); ?></a></li> + <?php + } ?> +</ul> +<div id="team" class="tab_content"> <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2"> <thead> <tr> @@ -71,9 +85,8 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); <span> <select name="lead_id"> <option value="0">— <?php echo __('None');?> —</option> - <option value="" disabled="disabled"><?php echo __('Select Team Lead (Optional)');?></option> <?php - if($team && ($members=$team->getMembers())){ + if ($members) { foreach($members as $k=>$staff){ $selected=($info['lead_id'] && $staff->getId()==$info['lead_id'])?'selected="selected"':''; echo sprintf('<option value="%d" %s>%s</option>',$staff->getId(),$selected,$staff->getName()); @@ -96,25 +109,6 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); <i class="help-tip icon-question-sign" href="#assignment_alert"></i> </td> </tr> - <?php - if($team && ($members=$team->getMembers())){ ?> - <tr> - <th colspan="2"> - <em><strong><?php echo __('Team Members'); ?></strong>: - <i class="help-tip icon-question-sign" href="#members"></i> -</em> - </th> - </tr> - <?php - foreach($members as $k=>$staff){ - echo sprintf('<tr><td colspan=2><span style="width:350px;padding-left:5px; display:block;" class="pull-left"> - <b><a href="staff.php?id=%d">%s</a></span></b> - <input type="checkbox" name="remove[]" value="%d"><i>'.__('Remove').'</i></td></tr>', - $staff->getId(),$staff->getName(),$staff->getId()); - - - } - } ?> <tr> <th colspan="2"> <em><strong><?php echo __('Admin Notes');?></strong>: <?php echo __('Internal notes viewable by all admins.');?> </em> @@ -128,9 +122,39 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); </tr> </tbody> </table> +</div> +<?php +if ($members) { ?> +<div id="members" class="tab_content" style="display:none"> + <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <thead> + <tr> + <th> + <em><?php echo __('Agents who are members of this team'); ?><i + class="help-tip icon-question-sign" href="#members"></i></em> + </th> + </tr> + </thead> + <tbody> + <?php + foreach($members as $k=>$staff) { + echo sprintf('<tr><td colspan=2><span style="width:350px;padding-left:5px; display:block;" class="pull-left"> + <b><a href="staff.php?id=%d">%s</a></span></b> + <input type="checkbox" name="remove[]" value="%d"><i>'.__('Remove').'</i></td></tr>', + $staff->getId() , + $staff->getName(), + $staff->getId()); + + } + ?> + </tbody> + </table> +</div> +<?php +} ?> <p style="text-align:center"> <input type="submit" name="submit" value="<?php echo $submit_text; ?>"> <input type="reset" name="reset" value="<?php echo __('Reset');?>"> - <input type="button" name="cancel" value="<?php echo __('Cancel');?>" onclick='window.location.href="teams.php"'> + <input type="button" name="cancel" value="<?php echo __('Cancel');?>" onclick='window.location.href="?"'> </p> </form> diff --git a/include/staff/teams.inc.php b/include/staff/teams.inc.php index d05c371d7..22c08c207 100644 --- a/include/staff/teams.inc.php +++ b/include/staff/teams.inc.php @@ -2,40 +2,44 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied'); $qstr=''; -$sql='SELECT team.*,count(m.staff_id) as members,CONCAT_WS(" ",lead.firstname,lead.lastname) as team_lead '. - ' FROM '.TEAM_TABLE.' team '. - ' LEFT JOIN '.TEAM_MEMBER_TABLE.' m ON(m.team_id=team.team_id) '. - ' LEFT JOIN '.STAFF_TABLE.' lead ON(lead.staff_id=team.lead_id) '; -$sql.=' WHERE 1'; -$sortOptions=array('name'=>'team.name','status'=>'team.isenabled','members'=>'members','lead'=>'team_lead','created'=>'team.created'); -$orderWays=array('DESC'=>'DESC','ASC'=>'ASC'); -$sort=($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])])?strtolower($_REQUEST['sort']):'name'; +$sortOptions=array( + 'name' => 'name', + 'status' => 'isenabled', + 'members' => 'members_count', + 'lead' => 'lead__lastname', + 'created' => 'created', + 'updated' => 'updated', + ); + +$orderWays = array('DESC'=>'DESC', 'ASC'=>'ASC'); +$sort = ($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])]) ? strtolower($_REQUEST['sort']) : 'name'; + //Sorting options... -if($sort && $sortOptions[$sort]) { - $order_column =$sortOptions[$sort]; +if ($sort && $sortOptions[$sort]) { + $order_column = $sortOptions[$sort]; } -$order_column=$order_column?$order_column:'team.name'; -if($_REQUEST['order'] && $orderWays[strtoupper($_REQUEST['order'])]) { - $order=$orderWays[strtoupper($_REQUEST['order'])]; +$order_column = $order_column ? $order_column : 'name'; + +if ($_REQUEST['order'] && isset($orderWays[strtoupper($_REQUEST['order'])])) { + $order = $orderWays[strtoupper($_REQUEST['order'])]; +} else { + $order = 'ASC'; } -$order=$order?$order:'ASC'; -if($order_column && strpos($order_column,',')){ +if ($order_column && strpos($order_column,',')) { $order_column=str_replace(','," $order,",$order_column); } $x=$sort.'_sort'; $$x=' class="'.strtolower($order).'" '; -$order_by="$order_column $order "; - +$page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1; +$count = Team::objects()->count(); +$pageNav = new Pagenate($count, $page, PAGE_LIMIT); +$_qstr = $qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']); +$pageNav->setURL('teams.php', $_qstr); +$showing = $pageNav->showing().' '._N('team', 'teams', $count); $qstr.='&order='.($order=='DESC'?'ASC':'DESC'); -$query="$sql GROUP BY team.team_id ORDER BY $order_by"; -$res=db_query($query); -if($res && ($num=db_num_rows($res))) - $showing=sprintf(__('Showing 1-%1$d of %2$d teams'), $num, $num); -else - $showing=__('No teams found!'); ?> <div class="pull-left" style="width:700px;padding-top:5px;"> @@ -65,38 +69,52 @@ else </thead> <tbody> <?php - $total=0; - $ids=($errors && is_array($_POST['ids']))?$_POST['ids']:null; - if($res && db_num_rows($res)): - while ($row = db_fetch_array($res)) { + $ids= ($errors && is_array($_POST['ids'])) ? $_POST['ids'] : null; + if ($count) { + $teams = Team::objects() + ->annotate(array( + 'members_count'=>SqlAggregate::COUNT('members', true), + )) + ->order_by(sprintf('%s%s', + strcasecmp($order, 'DESC') ? '' : '-', + $order_column)) + ->limit($pageNav->getLimit()) + ->offset($pageNav->getStart()); + + foreach ($teams as $team) { + $id = $team->getId(); $sel=false; - if($ids && in_array($row['team_id'],$ids)) + if ($ids && in_array($id, $ids)) $sel=true; ?> - <tr id="<?php echo $row['team_id']; ?>"> + <tr id="<?php echo $id; ?>"> <td width=7px> - <input type="checkbox" class="ckb" name="ids[]" value="<?php echo $row['team_id']; ?>" - <?php echo $sel?'checked="checked"':''; ?>> </td> - <td><a href="teams.php?id=<?php echo $row['team_id']; ?>"><?php echo $row['name']; ?></a> </td> - <td> <?php echo $row['isenabled']?__('Active'):'<b>'.__('Disabled').'</b>'; ?></td> + <input type="checkbox" class="ckb" name="ids[]" + value="<?php echo $id; ?>" + <?php echo $sel ? 'checked="checked"' : ''; ?>> </td> + <td><a href="teams.php?id=<?php echo $id; ?>"><?php echo + $team->getName(); ?></a> </td> + <td> <?php echo $team->isActive() ? __('Active') : '<b>'.__('Disabled').'</b>'; ?></td> <td style="text-align:right;padding-right:25px"> - <?php if($row['members']>0) { ?> - <a href="staff.php?tid=<?php echo $row['team_id']; ?>"><?php echo $row['members']; ?></a> - <?php }else{ ?> 0 + <?php if ($team->members_count > 0) { ?> + <a href="staff.php?tid=<?php echo $id; ?>"><?php + echo $team->members_count; ?></a> + <?php } else { ?> 0 <?php } ?> </td> - <td><a href="staff.php?id=<?php echo $row['lead_id']; ?>"><?php echo $row['team_lead']; ?> </a></td> - <td><?php echo Format::date($row['created']); ?> </td> - <td><?php echo Format::datetime($row['updated']); ?> </td> + <td><a href="staff.php?id=<?php + echo $team->getLeadId(); ?>"><?php echo $team->lead ?: ''; ?> </a></td> + <td><?php echo Format::date($team->created); ?> </td> + <td><?php echo Format::datetime($team->updated); ?> </td> </tr> <?php - } //end of while. - endif; ?> + } //end of foreach + }?> <tfoot> <tr> <td colspan="7"> - <?php if($res && $num){ ?> + <?php if ($count){ ?> <?php echo __('Select');?>: <a id="selectAll" href="#ckb"><?php echo __('All');?></a> <a id="selectNone" href="#ckb"><?php echo __('None');?></a> @@ -109,7 +127,8 @@ else </tfoot> </table> <?php -if($res && $num): //Show options.. +if ($count): //Show options.. + echo '<div> '.__('Page').':'.$pageNav->getPageLinks().' </div>'; ?> <p class="centered" id="actions"> <input class="button" type="submit" name="enable" value="<?php echo __('Enable');?>" > diff --git a/scp/teams.php b/scp/teams.php index 42fb2cbdd..28e72adbf 100644 --- a/scp/teams.php +++ b/scp/teams.php @@ -33,8 +33,8 @@ if($_POST){ } break; case 'create': - $team = Team::create(); - if ($team->update($_POST,$errors)) { + $_team = Team::create(); + if (($_team->update($_POST, $errors))){ $msg=sprintf(__('Successfully added %s'),Format::htmlchars($_POST['team'])); $_REQUEST['a']=null; }elseif(!$errors['err']){ @@ -49,10 +49,13 @@ if($_POST){ $count=count($_POST['ids']); switch(strtolower($_POST['a'])) { case 'enable': - $sql='UPDATE '.TEAM_TABLE.' SET isenabled=1 ' - .' WHERE team_id IN ('.implode(',', db_input($_POST['ids'])).')'; + $num = Team::objects()->filter(array( + 'team_id__in' => $_POST['ids'] + ))->update(array( + 'isenabled' => 1 + )); - if(db_query($sql) && ($num=db_affected_rows())) { + if ($num) { if($num==$count) $msg = sprintf(__('Successfully activated %s'), _N('selected team', 'selected teams', $count)); @@ -65,10 +68,13 @@ if($_POST){ } break; case 'disable': - $sql='UPDATE '.TEAM_TABLE.' SET isenabled=0 ' - .' WHERE team_id IN ('.implode(',', db_input($_POST['ids'])).')'; + $num = Team::objects()->filter(array( + 'team_id__in' => $_POST['ids'] + ))->update(array( + 'isenabled' => 0 + )); - if(db_query($sql) && ($num=db_affected_rows())) { + if ($num) { if($num==$count) $msg = sprintf(__('Successfully disabled %s'), _N('selected team', 'selected teams', $count)); -- GitLab