Skip to content
Snippets Groups Projects
Commit 50a1bbd6 authored by Peter Rotich's avatar Peter Rotich
Browse files

orm: Convert agents listing to be ORM based

parent 21314d9e
No related branches found
No related tags found
No related merge requests found
<?php
if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied');
if (!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin())
die('Access Denied');
$qstr='';
$select='SELECT staff.*,CONCAT_WS(" ",firstname,lastname) as name, grp.group_name, dept.dept_name as dept,count(m.team_id) as teams ';
$from='FROM '.STAFF_TABLE.' staff '.
'LEFT JOIN '.GROUP_TABLE.' grp ON(staff.group_id=grp.group_id) '.
'LEFT JOIN '.DEPT_TABLE.' dept ON(staff.dept_id=dept.dept_id) '.
'LEFT JOIN '.TEAM_MEMBER_TABLE.' m ON(m.staff_id=staff.staff_id) ';
$where='WHERE 1 ';
if($_REQUEST['did'] && is_numeric($_REQUEST['did'])) {
$where.=' AND staff.dept_id='.db_input($_REQUEST['did']);
$qstr.='&did='.urlencode($_REQUEST['did']);
}
$sortOptions = array(
'name' => 'lastname',
'username' => 'username',
'status' => 'isactive',
'group' => 'group__name',
'dept' => 'dept__name',
'created' => 'created',
'login' => 'lastlogin'
);
if($_REQUEST['gid'] && is_numeric($_REQUEST['gid'])) {
$where.=' AND staff.group_id='.db_input($_REQUEST['gid']);
$qstr.='&gid='.urlencode($_REQUEST['gid']);
}
$orderWays = array('DESC'=>'DESC', 'ASC'=>'ASC');
$sort = ($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])]) ? strtolower($_REQUEST['sort']) : 'name';
if($_REQUEST['tid'] && is_numeric($_REQUEST['tid'])) {
$where.=' AND m.team_id='.db_input($_REQUEST['tid']);
$qstr.='&tid='.urlencode($_REQUEST['tid']);
if ($sort && $sortOptions[$sort]) {
$order_column = $sortOptions[$sort];
}
$sortOptions=array('name'=>'staff.firstname,staff.lastname','username'=>'staff.username','status'=>'isactive',
'group'=>'grp.group_name','dept'=>'dept.dept_name','created'=>'staff.created','login'=>'staff.lastlogin');
$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];
}
$order_column=$order_column?$order_column:'staff.firstname,staff.lastname';
$order_column = $order_column ? $order_column : 'lastname';
if($_REQUEST['order'] && $orderWays[strtoupper($_REQUEST['order'])]) {
$order=$orderWays[strtoupper($_REQUEST['order'])];
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 ";
$total=db_count('SELECT count(DISTINCT staff.staff_id) '.$from.' '.$where);
$page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1;
$pageNav=new Pagenate($total,$page,PAGE_LIMIT);
$pageNav->setURL('staff.php',$qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']));
//Ok..lets roll...create the actual query
//Filers
$filters = array();
if ($_REQUEST['did'] && is_numeric($_REQUEST['did'])) {
$filters += array('dept_id' => $_REQUEST['did']);
$qstr.='&did='.urlencode($_REQUEST['did']);
}
if ($_REQUEST['gid'] && is_numeric($_REQUEST['gid'])) {
$filters += array('group_id' => $_REQUEST['gid']);
$qstr.='&gid='.urlencode($_REQUEST['gid']);
}
if ($_REQUEST['tid'] && is_numeric($_REQUEST['tid'])) {
$filters += array('teams__team_id' => $_REQUEST['tid']);
$qstr.='&tid='.urlencode($_REQUEST['tid']);
}
//agents objects
$agents = Staff::objects()
->annotate(array(
'teams_count'=>SqlAggregate::COUNT('teams', true),
))
->order_by(sprintf('%s%s',
strcasecmp($order, 'DESC') ? '' : '-',
$order_column));
if ($filters)
$agents->filter($filters);
// paginate
$page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1;
$count = $agents->count();
$pageNav = new Pagenate($count, $page, PAGE_LIMIT);
$_qstr = $qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']);
$pageNav->setURL('staff.php', $_qstr);
$showing = $pageNav->showing().' '._N('agent', 'agents', $count);
$qstr.='&order='.($order=='DESC'?'ASC':'DESC');
$query="$select $from $where GROUP BY staff.staff_id ORDER BY $order_by LIMIT ".$pageNav->getStart().",".$pageNav->getLimit();
//echo $query;
// add limits.
$agents->limit($pageNav->getLimit())->offset($pageNav->getStart());
?>
<h2><?php echo __('Agents');?></h2>
<div class="pull-left" style="width:700px;">
<form action="staff.php" method="GET" name="filter">
<input type="hidden" name="a" value="filter" >
<select name="did" id="did">
<option value="0">&mdash; <?php echo __('All Department');?> &mdash;</option>
<?php
$sql='SELECT dept.dept_id, dept.dept_name,count(staff.staff_id) as users '.
'FROM '.DEPT_TABLE.' dept '.
'INNER JOIN '.STAFF_TABLE.' staff ON(staff.dept_id=dept.dept_id) '.
'GROUP By dept.dept_id HAVING users>0 ORDER BY dept_name';
if(($res=db_query($sql)) && db_num_rows($res)){
while(list($id,$name, $users)=db_fetch_row($res)){
if (($depts=Dept::getDepartments())) {
foreach ($depts as $id => $name) {
$sel=($_REQUEST['did'] && $_REQUEST['did']==$id)?'selected="selected"':'';
echo sprintf('<option value="%d" %s>%s (%s)</option>',$id,$sel,$name,$users);
echo sprintf('<option value="%d" %s>%s</option>',$id,$sel,$name);
}
}
?>
......@@ -76,14 +94,10 @@ $query="$select $from $where GROUP BY staff.staff_id ORDER BY $order_by LIMIT ".
<select name="gid" id="gid">
<option value="0">&mdash; <?php echo __('All Groups');?> &mdash;</option>
<?php
$sql='SELECT grp.group_id, group_name,count(staff.staff_id) as users '.
'FROM '.GROUP_TABLE.' grp '.
'INNER JOIN '.STAFF_TABLE.' staff ON(staff.group_id=grp.group_id) '.
'GROUP BY grp.group_id ORDER BY group_name';
if(($res=db_query($sql)) && db_num_rows($res)){
while(list($id,$name,$users)=db_fetch_row($res)){
if (($groups=Group::getGroups())) {
foreach ($groups as $id => $name) {
$sel=($_REQUEST['gid'] && $_REQUEST['gid']==$id)?'selected="selected"':'';
echo sprintf('<option value="%d" %s>%s (%s)</option>',$id,$sel,$name,$users);
echo sprintf('<option value="%d" %s>%s</option>',$id,$sel,$name);
}
}
?>
......@@ -91,13 +105,10 @@ $query="$select $from $where GROUP BY staff.staff_id ORDER BY $order_by LIMIT ".
<select name="tid" id="tid">
<option value="0">&mdash; <?php echo __('All Teams');?> &mdash;</option>
<?php
$sql='SELECT team.team_id, team.name, count(member.staff_id) as users FROM '.TEAM_TABLE.' team '.
'INNER JOIN '.TEAM_MEMBER_TABLE.' member ON(member.team_id=team.team_id) '.
'GROUP BY team.team_id ORDER BY team.name';
if(($res=db_query($sql)) && db_num_rows($res)){
while(list($id,$name,$users)=db_fetch_row($res)){
if (($teams=Team::getTeams())) {
foreach ($teams as $id => $name) {
$sel=($_REQUEST['tid'] && $_REQUEST['tid']==$id)?'selected="selected"':'';
echo sprintf('<option value="%d" %s>%s (%s)</option>',$id,$sel,$name,$users);
echo sprintf('<option value="%d" %s>%s</option>',$id,$sel,$name);
}
}
?>
......@@ -108,13 +119,6 @@ $query="$select $from $where GROUP BY staff.staff_id ORDER BY $order_by LIMIT ".
</div>
<div class="pull-right flush-right" style="padding-right:5px;"><b><a href="staff.php?a=add" class="Icon newstaff"><?php echo __('Add New Agent');?></a></b></div>
<div class="clear"></div>
<?php
$res=db_query($query);
if($res && ($num=db_num_rows($res)))
$showing=$pageNav->showing() . ' ' . _N('agent', 'agents', $num);
else
$showing=__('No agents found!');
?>
<form action="staff.php" method="POST" name="staff" >
<?php csrf_token(); ?>
<input type="hidden" name="do" value="mass_process" >
......@@ -135,31 +139,38 @@ else
</thead>
<tbody>
<?php
if($res && db_num_rows($res)):
$ids=($errors && is_array($_POST['ids']))?$_POST['ids']:null;
while ($row = db_fetch_array($res)) {
if ($count):
$ids = ($errors && is_array($_POST['ids'])) ? $_POST['ids'] : null;
foreach ($agents as $agent) {
$id = $agent->getId();
$sel=false;
if($ids && in_array($row['staff_id'],$ids))
if ($ids && in_array($id, $ids))
$sel=true;
?>
<tr id="<?php echo $row['staff_id']; ?>">
<tr id="<?php echo $id; ?>">
<td width=7px>
<input type="checkbox" class="ckb" name="ids[]" value="<?php echo $row['staff_id']; ?>" <?php echo $sel?'checked="checked"':''; ?> >
<td><a href="staff.php?id=<?php echo $row['staff_id']; ?>"><?php echo Format::htmlchars($row['name']); ?></a>&nbsp;</td>
<td><?php echo $row['username']; ?></td>
<td><?php echo $row['isactive']?__('Active'):'<b>'.__('Locked').'</b>'; ?>&nbsp;<?php echo $row['onvacation']?'<small>(<i>'.__('vacation').'</i>)</small>':''; ?></td>
<td><a href="groups.php?id=<?php echo $row['group_id']; ?>"><?php echo Format::htmlchars($row['group_name']); ?></a></td>
<td><a href="departments.php?id=<?php echo $row['dept_id']; ?>"><?php echo Format::htmlchars($row['dept']); ?></a></td>
<td><?php echo Format::date($row['created']); ?></td>
<td><?php echo Format::datetime($row['lastlogin']); ?>&nbsp;</td>
<input type="checkbox" class="ckb" name="ids[]"
value="<?php echo $id; ?>" <?php echo $sel ? 'checked="checked"' : ''; ?> >
<td><a href="staff.php?id=<?php echo $id; ?>"><?php echo
Format::htmlchars($agent->getName()); ?></a>&nbsp;</td>
<td><?php echo $agent->getUserName(); ?></td>
<td><?php echo $agent->isActive() ? __('Active') :'<b>'.__('Locked').'</b>'; ?>&nbsp;<?php
echo $agent->onvacation ? '<small>(<i>'.__('vacation').'</i>)</small>' : ''; ?></td>
<td><a href="groups.php?id=<?php echo $agent->getGroupId(); ?>"><?php
echo Format::htmlchars('FIXME'/*$agent->group->getName()*/); ?></a></td>
<td><a href="departments.php?id=<?php echo
$agent->getDeptId(); ?>"><?php
echo Format::htmlchars((string) $agent->dept); ?></a></td>
<td><?php echo Format::date($agent->created); ?></td>
<td><?php echo Format::datetime($agent->lastlogin); ?>&nbsp;</td>
</tr>
<?php
} //end of while.
} //end of foreach
endif; ?>
<tfoot>
<tr>
<td colspan="8">
<?php if($res && $num){ ?>
<?php if ($count) { ?>
<?php echo __('Select');?>:&nbsp;
<a id="selectAll" href="#ckb"><?php echo __('All');?></a>&nbsp;&nbsp;
<a id="selectNone" href="#ckb"><?php echo __('None');?></a>&nbsp;&nbsp;
......@@ -172,7 +183,7 @@ else
</tfoot>
</table>
<?php
if($res && $num): //Show options..
if ($count): //Show options..
echo '<div>&nbsp;'.__('Page').':'.$pageNav->getPageLinks().'&nbsp;</div>';
?>
<p class="centered" id="actions">
......
......@@ -52,10 +52,13 @@ if($_POST){
$count=count($_POST['ids']);
switch(strtolower($_POST['a'])) {
case 'enable':
$sql='UPDATE '.STAFF_TABLE.' SET isactive=1 '
.' WHERE staff_id IN ('.implode(',', db_input($_POST['ids'])).')';
$num = Staff::objects()->filter(array(
'staff_id__in' => $_POST['ids']
))->update(array(
'isactive' => 1
));
if(db_query($sql) && ($num=db_affected_rows())) {
if ($num) {
if($num==$count)
$msg = sprintf('Successfully activated %s',
_N('selected agent', 'selected agents', $count));
......@@ -68,10 +71,13 @@ if($_POST){
}
break;
case 'disable':
$sql='UPDATE '.STAFF_TABLE.' SET isactive=0 '
.' WHERE staff_id IN ('.implode(',', db_input($_POST['ids'])).') AND staff_id!='.db_input($thisstaff->getId());
$num = Staff::objects()->filter(array(
'staff_id__in' => $_POST['ids']
))->update(array(
'isactive' => 0
));
if(db_query($sql) && ($num=db_affected_rows())) {
if ($num) {
if($num==$count)
$msg = sprintf('Successfully disabled %s',
_N('selected agent', 'selected agents', $count));
......@@ -84,6 +90,7 @@ if($_POST){
}
break;
case 'delete':
$i = 0;
foreach($_POST['ids'] as $k=>$v) {
if($v!=$thisstaff->getId() && ($s=Staff::lookup($v)) && $s->delete())
$i++;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment