Files
piratepoet/lib/Listing/Handler.php
Jonathan Labreuille 3fe895a7fe Listing Handler
- added a Listing Handler class to take care of listing params
- added status column to Subscriber
- added specific methods to both Newsletter & Subscriber models for listing
2015-09-02 14:47:18 +02:00

65 lines
1.7 KiB
PHP

<?php
namespace MailPoet\Listing;
if(!defined('ABSPATH')) exit;
class Handler {
private $data = array();
private $model = null;
function __construct($model, $data = array()) {
$this->model = $this->getModel($model);
$this->data = array(
// pagination
'offset' => (isset($data['offset']) ? (int)$data['offset'] : 0),
'limit' => (isset($data['limit']) ? (int)$data['limit'] : 50),
// searching
'search' => (isset($data['search']) ? $data['search'] : null),
// sorting
'sort_by' => (isset($data['sort_by']) ? $data['sort_by'] : 'id'),
'sort_order' => (isset($data['sort_order']) ? $data['sort_order'] : 'asc'),
// grouping
'group' => (isset($data['group']) ? $data['group'] : null)
);
$this->setSearch();
$this->setOrder();
$this->setGroup();
}
private function getModel($model) {
return \Model::factory('\MailPoet\Models\\'.$model);
}
private function setSearch() {
if($this->data['search'] === null) {
return;
}
return $this->model->filter('search', $this->data['search']);
}
private function setOrder() {
return $this->model
->{'order_by_'.$this->data['sort_order']}($this->data['sort_by']);
}
private function setGroup() {
if($this->data['group'] === null) {
return;
}
return $this->model->filter('group', $this->data['group']);
}
function get() {
return array(
'count' => $this->model->count(),
'filters' => [],
'groups' => $this->model->filter('groups'),
'items' => $this->model
->offset($this->data['offset'])
->limit($this->data['limit'])
->find_array()
);
}
}