OssnPagination.php
Go to the documentation of this file.
1 <?php
2 /**
3  * Open Source Social Network
4  *
5  * @package (Informatikon.com).ossn
6  * @author OSSN Core Team <[email protected]>
7  * @copyright 2014 iNFORMATIKON TECHNOLOGIES
8  * @license General Public Licence http://www.opensource-socialnetwork.org/licence
9  * @link http://www.opensource-socialnetwork.org/licence
10  */
12  /**
13  * Construct a pagination class;
14  *
15  * @return void
16  */
17  public function __construct($ppage = 10, array $options = array()) {
18  if(is_integer($ppage)) {
19  $this->ppage = (int) $ppage;
20  }
21  $this->options = $options;
22  }
23 
24  /**
25  * Get current url with arguments;
26  *
27  * @return string
28  */
29  public static function constructUrlArgs($kill = array()) {
30 
31  unset($_GET['h']);
32  unset($_GET['p']);
33  unset($_GET['offset']);
34 
35  //kill someof variables
36  if(!empty($kill)) {
37  foreach($kill as $type) {
38  if(isset($_GET[$type])) {
39  unset($_GET[$type]);
40  }
41  }
42  }
43 
44  if(count($_GET)) {
45  $args_url = '';
46  foreach($_GET as $key => $value) {
47  if(!ctype_alnum($value)) {
48  continue;
49  }
50  //validate input again
51  $value = input($key);
52  if($key != 'page') {
53  $value = input($key);
54  $args_url .= '&' . $key . '=' . $value;
55  }
56  }
57  return $args_url;
58  }
59  }
60 
61  /**
62  * Set arrays or objects to pagination;
63  *
64  * @params array|object $item Item
65  *
66  * @return void
67  */
68  public function setItem($item) {
69  if(is_object($item)) {
70  $this->item_class = get_class($item);
71  $item = get_object_vars($item);
72  }
73  if(is_array($item) && !empty($item)) {
74  $this->setItem = $item;
75  }
76  }
77 
78  /**
79  * Get spilted array or object;
80  *
81  * object may changed to arrays
82  *
83  * @return boolean
84  */
85  public function getItem() {
86  $item = $this->getItems();
87  if(empty($item)) {
88  $item = array();
89  }
90  $offset = (int) input('offset');
91  if(empty($offset)) {
92  $offset = 1;
93  }
94  if(array_key_exists($offset, $item)) {
95  if(!empty($this->item_class)) {
96  return arrayObject($item[$offset], $this->item_class);
97  }
98  return $item[$offset];
99  }
100  return false;
101  }
102 
103  /**
104  * Spilt a arrays or objects into pagination
105  *
106  * @return boolean
107  */
108  private function getItems() {
109  if(!isset($this->setItem)) {
110  return false;
111  }
112  $item = $this->setItem;
113  if(is_array($item)) {
114  $newitem = array_chunk($item, $this->ppage);
115  return arraySerialize($newitem);
116  }
117  }
118 
119  /**
120  * Output pagination bar
121  *
122  * @return false|string
123  */
124  public function pagination($vars = array()) {
125  if(!isset($this->setItem) && !isset($vars)) {
126  return false;
127  }
128  if(!empty($vars)) {
129  $vars['offset'] = (int) input('offset');
130  $vars['total'] = abs($vars['limit'] / $vars['page_limit']);
131  $vars['total'] = (int) ceil($vars['total']);
132  return $this->view($vars);
133  }
134  $item = $this->setItem;
135  if(is_array($item)) {
136  $newitem = array_chunk($item, $this->ppage);
137  $newitem_total = count($newitem);
138  $pages = arraySerialize($newitem);
139 
140  $offset = (int) input('offset');
141  if(!array_key_exists($offset, $pages)) {
142  $view = 1;
143  } elseif(array_key_exists($offset, $pages)) {
144  $view = $offset;
145  }
146  $params['offset'] = $view;
147  $params['total'] = $newitem_total;
148  return $this->view($params);
149  }
150 
151  }
152 
153  /**
154  * Call a structure of pagination;
155  *
156  * @param array $params array(count, active)
157  *
158  * @return string
159  */
160  private function view($params) {
161  $theme = ossn_site_settings('theme');
162  return ossn_view("themes/{$theme}/pagination/view", $params);
163  }
164 
165 } //CLASS