Skip to content
This repository has been archived by the owner on Mar 19, 2021. It is now read-only.

Commit

Permalink
Column Sorting and Result Limits
Browse files Browse the repository at this point in the history
  • Loading branch information
fbergkemper committed Sep 5, 2014
1 parent 533e561 commit 9450e94
Show file tree
Hide file tree
Showing 8 changed files with 261 additions and 76 deletions.
7 changes: 5 additions & 2 deletions module/Job/config/module.config.php
Expand Up @@ -36,10 +36,13 @@
'job' => array(
'type' => 'segment',
'options' => array(
'route' => '/job[/][:action][/:id]',
'route' => '/job[/][:action][/][:id][order_by/:order_by][/:order][/][limit/:limit]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '(?!\blimit\b)(?!\border_by\b)[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
'order_by' => '[a-zA-Z][a-zA-Z0-9_-]*',
'order' => 'ASC|DESC',
'limit' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Job\Controller\Job',
Expand Down
78 changes: 53 additions & 25 deletions module/Job/src/Job/Controller/JobController.php
Expand Up @@ -39,15 +39,20 @@ class JobController extends AbstractActionController

public function indexAction()
{

$paginator = $this->getJobTable()->fetchAll(true);
$order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'JobId';
$order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : 'DESC';
$limit = $this->params()->fromRoute('limit') ? $this->params()->fromRoute('limit') : '25';
$paginator = $this->getJobTable()->fetchAll(true, $order_by, $order);
$paginator->setCurrentPageNumber( (int) $this->params()->fromQuery('page', 1) );
$paginator->setItemCountPerPage(25);
$paginator->setItemCountPerPage($limit);

return new ViewModel(
array(
'paginator' => $paginator,
'allJobs' => $this->getJobTable()->fetchAll()
'order_by' => $order_by,
'order' => $order,
'limit' => $limit,
'allJobs' => $this->getJobTable()->fetchAll(),
)
);

Expand All @@ -68,59 +73,82 @@ public function detailsAction()

public function runningAction()
{
$paginator = $this->getJobTable()->getRunningJobs(true);
$order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'JobId';
$order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : 'DESC';
$limit = $this->params()->fromRoute('limit') ? $this->params()->fromRoute('limit') : '25';
$paginator = $this->getJobTable()->getRunningJobs(true, $order_by, $order);
$paginator->setCurrentPageNumber( (int) $this->params()->fromQuery('page', 1) );
$paginator->setItemCountPerPage(25);
$paginator->setItemCountPerPage($limit);

return new ViewModel(
array(
'paginator' => $paginator,
'runningJobs' => $this->getJobTable()->getRunningJobs()
)
);
'paginator' => $paginator,
'order_by' => $order_by,
'order' => $order,
'limit' => $limit,
'runningJobs' => $this->getJobTable()->getRunningJobs()
)
);
}

public function waitingAction()
{
$paginator = $this->getJobTable()->getWaitingJobs(true);
$order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'JobId';
$order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : 'DESC';
$limit = $this->params()->fromRoute('limit') ? $this->params()->fromRoute('limit') : '25';
$paginator = $this->getJobTable()->getWaitingJobs(true, $order_by, $order);
$paginator->setCurrentPageNumber( (int) $this->params()->fromQuery('page', 1) );
$paginator->setItemCountPerPage(25);
$paginator->setItemCountPerPage($limit);

return new ViewModel(
array(
'paginator' => $paginator,
'waitingJobs' => $this->getJobTable()->getWaitingJobs()
)
);
'paginator' => $paginator,
'order_by' => $order_by,
'order' => $order,
'limit' => $limit,
'waitingJobs' => $this->getJobTable()->getWaitingJobs()
)
);
}

public function unsuccessfulAction()
{
$paginator = $this->getJobTable()->getLast24HoursUnsuccessfulJobs(true);
$order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'JobId';
$order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : 'DESC';
$limit = $this->params()->fromRoute('limit') ? $this->params()->fromRoute('limit') : '25';
$paginator = $this->getJobTable()->getLast24HoursUnsuccessfulJobs(true, $order_by, $order);
$paginator->setCurrentPageNumber( (int) $this->params()->fromQuery('page', 1) );
$paginator->setItemCountPerPage(25);
$paginator->setItemCountPerPage($limit);

return new ViewModel(
array(
'paginator' => $paginator,
'lastUnsuccessfulJobs' => $this->getJobTable()->getLast24HoursUnsuccessfulJobs(),
)
);
'paginator' => $paginator,
'order_by' => $order_by,
'order' => $order,
'limit' => $limit,
'lastUnsuccessfulJobs' => $this->getJobTable()->getLast24HoursUnsuccessfulJobs(),
)
);
}

public function successfulAction()
{
$paginator = $this->getJobTable()->getLast24HoursSuccessfulJobs(true);
$order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'JobId';
$order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : 'DESC';
$limit = $this->params()->fromRoute('limit') ? $this->params()->fromRoute('limit') : '25';
$paginator = $this->getJobTable()->getLast24HoursSuccessfulJobs(true, $order_by, $order);
$paginator->setCurrentPageNumber( (int) $this->params()->fromQuery('page', 1) );
$paginator->setItemCountPerPage(25);
$paginator->setItemCountPerPage($limit);

return new ViewModel(
array(
'paginator' => $paginator,
'order_by' => $order_by,
'order' => $order,
'limit' => $limit,
'lastSuccessfulJobs' => $this->getJobTable()->getLast24HoursSuccessfulJobs(),
)
);

}

public function timelineAction()
Expand Down
59 changes: 45 additions & 14 deletions module/Job/src/Job/Model/JobTable.php
Expand Up @@ -57,7 +57,7 @@ public function getDbDriverConfig() {
return $config['db']['driver'];
}

public function fetchAll($paginated=false)
public function fetchAll($paginated=false, $order_by=null, $order=null)
{
$bsqlch = new BareosSqlCompatHelper($this->getDbDriverConfig());
$select = new Select();
Expand All @@ -67,8 +67,14 @@ public function fetchAll($paginated=false)
$bsqlch->strdbcompat("Job.ClientId = Client.ClientId"),
array($bsqlch->strdbcompat("ClientName") => $bsqlch->strdbcompat("Name"))
);
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");


if($order_by != null && $order != null) {
$select->order($bsqlch->strdbcompat($order_by) . " " . $order);
}
else {
$select->order($bsqlch->strdbcompat("JobId") . " DESC");
}

if($paginated) {
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Job());
Expand All @@ -80,9 +86,10 @@ public function fetchAll($paginated=false)
$paginator = new Paginator($paginatorAdapter);
return $paginator;
}

$resultSet = $this->tableGateway->select();
return $resultSet;
else {
$resultSet = $this->tableGateway->selectWith($select);
return $resultSet;
}
}

public function getJob($jobid)
Expand All @@ -109,7 +116,7 @@ public function getJob($jobid)
return $row;
}

public function getRunningJobs($paginated=false)
public function getRunningJobs($paginated=false, $order_by=null, $order=null)
{
$bsqlch = new BareosSqlCompatHelper($this->getDbDriverConfig());
$select = new Select();
Expand All @@ -119,12 +126,18 @@ public function getRunningJobs($paginated=false)
$bsqlch->strdbcompat("Job.ClientId = Client.ClientId"),
array($bsqlch->strdbcompat("ClientName") => $bsqlch->strdbcompat("Name"))
);
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
$select->where(
$bsqlch->strdbcompat("JobStatus") . " = 'R' OR " .
$bsqlch->strdbcompat("JobStatus") . " = 'l'"
);

if($order_by != null && $order != null) {
$select->order($bsqlch->strdbcompat($order_by) . " " . $order);
}
else {
$select->order($bsqlch->strdbcompat("JobId") . " DESC");
}

if($paginated) {
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Job());
Expand All @@ -142,7 +155,7 @@ public function getRunningJobs($paginated=false)
}
}

public function getWaitingJobs($paginated=false)
public function getWaitingJobs($paginated=false, $order_by=null, $order=null)
{
$bsqlch = new BareosSqlCompatHelper($this->getDbDriverConfig());
$select = new Select();
Expand All @@ -152,7 +165,6 @@ public function getWaitingJobs($paginated=false)
$bsqlch->strdbcompat("Job.ClientId = Client.ClientId"),
array($bsqlch->strdbcompat("ClientName") => $bsqlch->strdbcompat("Name"))
);
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
$select->where(
$bsqlch->strdbcompat("JobStatus") . " = 'F' OR " .
$bsqlch->strdbcompat("JobStatus") . " = 'S' OR " .
Expand All @@ -167,6 +179,13 @@ public function getWaitingJobs($paginated=false)
$bsqlch->strdbcompat("JobStatus") . " = 'q' OR " .
$bsqlch->strdbcompat("JobStatus") . " = 'C'"
);

if($order_by != null && $order != null) {
$select->order($bsqlch->strdbcompat($order_by) . " " . $order);
}
else {
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
}

if($paginated) {
$resultSetPrototype = new ResultSet();
Expand All @@ -185,7 +204,7 @@ public function getWaitingJobs($paginated=false)
}
}

public function getLast24HoursSuccessfulJobs($paginated=false)
public function getLast24HoursSuccessfulJobs($paginated=false, $order_by=null, $order=null)
{
$current_time = date("Y-m-d H:i:s",time());
$back24h_time = date("Y-m-d H:i:s",time() - (60*60*24));
Expand All @@ -198,7 +217,6 @@ public function getLast24HoursSuccessfulJobs($paginated=false)
$bsqlch->strdbcompat("Job.ClientId = Client.ClientId"),
array($bsqlch->strdbcompat("ClientName") => $bsqlch->strdbcompat("Name"))
);
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
$select->where(
"(" .
$bsqlch->strdbcompat("JobStatus") . " = 'T' OR " .
Expand All @@ -207,6 +225,13 @@ public function getLast24HoursSuccessfulJobs($paginated=false)
$bsqlch->strdbcompat("EndTime") . " >= '" . $back24h_time . "'"
);

if($order_by != null && $order != null) {
$select->order($bsqlch->strdbcompat($order_by) . " " . $order);
}
else {
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
}

if($paginated) {
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Job());
Expand All @@ -224,7 +249,7 @@ public function getLast24HoursSuccessfulJobs($paginated=false)
}
}

public function getLast24HoursUnsuccessfulJobs($paginated=false)
public function getLast24HoursUnsuccessfulJobs($paginated=false, $order_by=null, $order=null)
{
$current_time = date("Y-m-d H:i:s",time());
$back24h_time = date("Y-m-d H:i:s",time() - (60*60*24));
Expand All @@ -237,7 +262,6 @@ public function getLast24HoursUnsuccessfulJobs($paginated=false)
$bsqlch->strdbcompat("Job.ClientId = Client.ClientId"),
array($bsqlch->strdbcompat("ClientName") => $bsqlch->strdbcompat("Name"))
);
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
$select->where(
"(" .
$bsqlch->strdbcompat("JobStatus") . " = 'A' OR " .
Expand All @@ -248,6 +272,13 @@ public function getLast24HoursUnsuccessfulJobs($paginated=false)
$bsqlch->strdbcompat("EndTime") . " >= '" . $back24h_time . "'"
);

if($order_by != null && $order != null) {
$select->order($bsqlch->strdbcompat($order_by) . " " . $order);
}
else {
$select->order($bsqlch->strdbcompat("Job.JobId") . " DESC");
}

if($paginated) {
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Job());
Expand Down
41 changes: 33 additions & 8 deletions module/Job/view/job/job/index.phtml
Expand Up @@ -27,6 +27,23 @@
$title = 'Jobs';
$this->headTitle($title);

if($order_by == 'JobId')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'Name')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'ClientName')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'Type')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'Level')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'StartTime')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'EndTime')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';
elseif($order_by == 'JobStatus')
$url_order = $order == 'ASC' ? 'DESC' : 'ASC';

?>

<h3 class="text-muted"><?php echo $title; ?></h3>
Expand All @@ -45,6 +62,14 @@ $this->headTitle($title);

<?php if(count($this->allJobs) > 0) : ?>

<p>
Jobs per page:
<a href="<?php echo $this->url('job', array('order_by' => $this->order_by, 'order' => $this->order, 'limit' => '10', null, null, true)); ?>">10</a> |
<a href="<?php echo $this->url('job', array('order_by' => $this->order_by, 'order' => $this->order, 'limit' => '25', null, null, true)); ?>">25</a> |
<a href="<?php echo $this->url('job', array('order_by' => $this->order_by, 'order' => $this->order, 'limit' => '50', null, null, true)); ?>">50</a> |
<a href="<?php echo $this->url('job', array('order_by' => $this->order_by, 'order' => $this->order, 'limit' => '100', null, null, true)); ?>">100</a>
</p>

<div class="row">

<div class="col-md-12">
Expand All @@ -55,15 +80,15 @@ $this->headTitle($title);
<table class="table table-striped table-hover" style="font-size: 9pt;">

<tr>
<th><?php echo $this->translate("Job"); ?></th>
<th><?php echo $this->translate("Name"); ?></th>
<th><?php echo $this->translate("Client"); ?></th>
<th><?php echo $this->translate("Type"); ?></th>
<th><?php echo $this->translate("Level"); ?></th>
<th><?php echo $this->translate("Start"); ?></th>
<th><?php echo $this->translate("End"); ?></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'JobId', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Job"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'Name', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Name"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'ClientName', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Client"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'Type', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Type"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'Level', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Level"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'StartTime', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Start"); ?></a></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'EndTime', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("End"); ?></a></th>
<th><?php echo $this->translate("Duration"); ?></th>
<th><?php echo $this->translate("Status"); ?></th>
<th><a href="<?php echo $this->url('job', array('order_by' => 'JobStatus', 'order' => $url_order, 'limit' => $this->limit)); ?>"><?php echo $this->translate("Status"); ?></a></th>
<th><?php echo $this->translate("Action"); ?></th>

</tr>
Expand Down

0 comments on commit 9450e94

Please sign in to comment.