Dotclear

source: inc/admin/lib.pager.php @ 2852:86651202b279

Revision 2852:86651202b279, 16.5 KB checked in by Dsls, 11 years ago (diff)

Tuned redirections and admin urls management, should work with media & attachments now
Added adminurl->redirect to avoid confusion in "when to use & and when not to"

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14class dcPager extends pager
15{
16     protected $form_action;
17     protected $form_hidden;
18
19     protected function getLink($li_class,$href,$img_src,$img_src_nolink,$img_alt,$enable_link) {
20          if ($enable_link) {
21               $formatter = '<li class="%s btn"><a href="%s"><img src="%s" alt="%s"/></a><span class="hidden">%s</span></li>';
22               return sprintf ($formatter,
23                    $li_class,$href,$img_src,$img_alt,$img_alt);
24          } else {
25               $formatter = '<li class="%s no-link btn"><img src="%s" alt="%s"/></li>';
26               return sprintf ($formatter,
27                    $li_class,$img_src_nolink,$img_alt,$img_alt);
28          }
29     }
30     public function setURL() {
31          parent::setURL();
32          $url = parse_url($_SERVER['REQUEST_URI']);
33          if (isset($url['query'])) {
34               parse_str($url['query'],$args);
35          } else {
36               $args=array();
37          }
38          # Removing session information
39          if (session_id())
40          {
41               if (isset($args[session_name()]))
42                    unset($args[session_name()]);
43          }
44          if (isset($args[$this->var_page])) {
45               unset($args[$this->var_page]);
46          }
47          if (isset($args['ok'])) {
48               unset($args['ok']);
49          }
50          $this->form_hidden = '';
51          foreach ($args as $k=>$v) {
52               if (is_array($v)) {
53                    foreach ($v as $k2=>$v2) {
54                         $this->form_hidden .= form::hidden(array($k.'[]'),$v2);
55                    }
56               } else {
57                    $this->form_hidden .= form::hidden(array($k),$v);
58               }
59          }
60          $this->form_action = $url['path'];
61     }
62
63     /**
64     * Pager Links
65     *
66     * Returns pager links
67     *
68     * @return string
69     */
70     public function getLinks()
71     {
72          $this->setURL();
73          $htmlFirst = $this->getLink(
74               "first",
75               sprintf($this->page_url,1),
76               "images/pagination/first.png",
77               "images/pagination/no-first.png",
78               __('First page'),
79               ($this->env > 1)
80          );
81          $htmlPrev = $this->getLink(
82               "prev",
83               sprintf($this->page_url,$this->env-1),
84               "images/pagination/previous.png",
85               "images/pagination/no-previous.png",
86               __('Previous page'),
87               ($this->env > 1)
88          );
89          $htmlNext = $this->getLink(
90               "next",
91               sprintf($this->page_url,$this->env+1),
92               "images/pagination/next.png",
93               "images/pagination/no-next.png",
94               __('Next page'),
95               ($this->env < $this->nb_pages)
96          );
97          $htmlLast = $this->getLink(
98               "last",
99               sprintf($this->page_url,$this->nb_pages),
100               "images/pagination/last.png",
101               "images/pagination/no-last.png",
102               __('Last page'),
103               ($this->env < $this->nb_pages)
104          );
105          $htmlCurrent =
106               '<li class="active"><strong>'.
107               sprintf(__('Page %s / %s'),$this->env,$this->nb_pages).
108               '</strong></li>';
109
110          $htmlDirect =
111               ($this->nb_pages > 1 ?
112                    sprintf('<li class="direct-access">'.__('Direct access page %s'),
113                         form::field(array($this->var_page),3,10)).
114                    '<input type="submit" value="'.__('ok').'" class="reset" '.
115                    'name="ok" />'.$this->form_hidden.'</li>' : '');
116
117          $res =
118               '<form action="'.$this->form_action.'" method="get">'.
119               '<div class="pager"><ul>'.
120               $htmlFirst.
121               $htmlPrev.
122               $htmlCurrent.
123               $htmlNext.
124               $htmlLast.
125               $htmlDirect.
126               '</ul>'.
127               '</div>'.
128               '</form>'
129          ;
130
131          return $this->nb_elements > 0 ? $res : '';
132     }
133}
134
135class adminGenericList
136{
137     protected $core;
138     protected $rs;
139     protected $rs_count;
140
141     public function __construct($core,$rs,$rs_count)
142     {
143          $this->core =& $core;
144          $this->rs =& $rs;
145          $this->rs_count = $rs_count;
146          $this->html_prev = __('&#171; prev.');
147          $this->html_next = __('next &#187;');
148     }
149}
150
151class adminPostList extends adminGenericList
152{
153     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
154     {
155          if ($this->rs->isEmpty())
156          {
157               if( $filter ) {
158                    echo '<p><strong>'.__('No entry matches the filter').'</strong></p>';
159               } else {
160                    echo '<p><strong>'.__('No entry').'</strong></p>';
161               }
162          }
163          else
164          {
165               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
166               $entries = array();
167               if (isset($_REQUEST['entries'])) {
168                    foreach ($_REQUEST['entries'] as $v) {
169                         $entries[(integer)$v]=true;
170                    }
171               }
172               $html_block =
173               '<div class="table-outer">'.
174               '<table>';
175
176               if( $filter ) {
177                    $html_block .= '<caption>'.sprintf(__('List of %s entries match the filter.'), $this->rs_count).'</caption>';
178               } else {
179                    $html_block .= '<caption class="hidden">'.__('Entries list').'</caption>';
180               }
181
182               $html_block .= '<tr>'.
183               '<th colspan="2" class="first">'.__('Title').'</th>'.
184               '<th scope="col">'.__('Date').'</th>'.
185               '<th scope="col">'.__('Category').'</th>'.
186               '<th scope="col">'.__('Author').'</th>'.
187               '<th scope="col"><img src="images/comments.png" alt="" title="'.__('Comments').'" /><span class="hidden">'.__('Comments').'</span></th>'.
188               '<th scope="col"><img src="images/trackbacks.png" alt="" title="'.__('Trackbacks').'" /><span class="hidden">'.__('Trackbacks').'</span></th>'.
189               '<th scope="col">'.__('Status').'</th>'.
190               '</tr>%s</table></div>';
191
192               if ($enclose_block) {
193                    $html_block = sprintf($enclose_block,$html_block);
194               }
195
196               echo $pager->getLinks();
197
198               $blocks = explode('%s',$html_block);
199
200               echo $blocks[0];
201
202               while ($this->rs->fetch())
203               {
204                    echo $this->postLine(isset($entries[$this->rs->post_id]));
205               }
206
207               echo $blocks[1];
208
209               echo $pager->getLinks();
210          }
211     }
212
213     private function postLine($checked)
214     {
215          if ($this->core->auth->check('categories',$this->core->blog->id)) {
216               $cat_link = '<a href="'.$this->core->adminurl->get('admin.category',array('id' => '%s')).'">%s</a>';
217               $cat_link = str_replace('%25s','%s',$cat_link);
218          } else {
219               $cat_link = '%2$s';
220          }
221
222          if ($this->rs->cat_title) {
223               $cat_title = sprintf($cat_link,$this->rs->cat_id,
224               html::escapeHTML($this->rs->cat_title));
225          } else {
226               $cat_title = __('(No cat)');
227          }
228
229          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
230          switch ($this->rs->post_status) {
231               case 1:
232                    $img_status = sprintf($img,__('Published'),'check-on.png');
233                    break;
234               case 0:
235                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
236                    break;
237               case -1:
238                    $img_status = sprintf($img,__('Scheduled'),'scheduled.png');
239                    break;
240               case -2:
241                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
242                    break;
243          }
244
245          $protected = '';
246          if ($this->rs->post_password) {
247               $protected = sprintf($img,__('Protected'),'locker.png');
248          }
249
250          $selected = '';
251          if ($this->rs->post_selected) {
252               $selected = sprintf($img,__('Selected'),'selected.png');
253          }
254
255          $attach = '';
256          $nb_media = $this->rs->countMedia();
257          if ($nb_media > 0) {
258               $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments');
259               $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png');
260          }
261
262          $res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
263          ' id="p'.$this->rs->post_id.'">';
264
265          $res .=
266          '<td class="nowrap">'.
267          form::checkbox(array('entries[]'),$this->rs->post_id,$checked,'','',!$this->rs->isEditable()).'</td>'.
268          '<td class="maximal" scope="row"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'.
269          html::escapeHTML($this->rs->post_title).'</a></td>'.
270          '<td class="nowrap count">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
271          '<td class="nowrap">'.$cat_title.'</td>'.
272          '<td class="nowrap">'.html::escapeHTML($this->rs->user_id).'</td>'.
273          '<td class="nowrap count">'.$this->rs->nb_comment.'</td>'.
274          '<td class="nowrap count">'.$this->rs->nb_trackback.'</td>'.
275          '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
276          '</tr>';
277
278          return $res;
279     }
280}
281
282class adminPostMiniList extends adminGenericList
283{
284     public function display($page,$nb_per_page,$enclose_block='')
285     {
286          if ($this->rs->isEmpty())
287          {
288               echo '<p><strong>'.__('No entry').'</strong></p>';
289          }
290          else
291          {
292               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
293
294               $html_block =
295               '<div class="table-outer clear">'.
296               '<table><caption class="hidden">'.__('Entries list').'</caption><tr>'.
297               '<th scope="col">'.__('Title').'</th>'.
298               '<th scope="col">'.__('Date').'</th>'.
299               '<th scope="col">'.__('Author').'</th>'.
300               '<th scope="col">'.__('Status').'</th>'.
301               '</tr>%s</table></div>';
302
303               if ($enclose_block) {
304                    $html_block = sprintf($enclose_block,$html_block);
305               }
306
307               echo $pager->getLinks();
308
309               $blocks = explode('%s',$html_block);
310
311               echo $blocks[0];
312
313               while ($this->rs->fetch())
314               {
315                    echo $this->postLine();
316               }
317
318               echo $blocks[1];
319
320               echo $pager->getLinks();
321          }
322     }
323
324     private function postLine()
325     {
326          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
327          switch ($this->rs->post_status) {
328               case 1:
329                    $img_status = sprintf($img,__('Published'),'check-on.png');
330                    break;
331               case 0:
332                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
333                    break;
334               case -1:
335                    $img_status = sprintf($img,__('Scheduled'),'scheduled.png');
336                    break;
337               case -2:
338                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
339                    break;
340          }
341
342          $protected = '';
343          if ($this->rs->post_password) {
344               $protected = sprintf($img,__('Protected'),'locker.png');
345          }
346
347          $selected = '';
348          if ($this->rs->post_selected) {
349               $selected = sprintf($img,__('Selected'),'selected.png');
350          }
351
352          $attach = '';
353          $nb_media = $this->rs->countMedia();
354          if ($nb_media > 0) {
355               $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments');
356               $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png');
357          }
358
359          $res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
360          ' id="p'.$this->rs->post_id.'">';
361
362          $res .=
363          '<td scope="row" class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'" '.
364          'title="'.html::escapeHTML($this->rs->getURL()).'">'.
365          html::escapeHTML($this->rs->post_title).'</a></td>'.
366          '<td class="nowrap count">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
367          '<td class="nowrap">'.html::escapeHTML($this->rs->user_id).'</td>'.
368          '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
369          '</tr>';
370
371          return $res;
372     }
373}
374
375class adminCommentList extends adminGenericList
376{
377     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
378     {
379          if ($this->rs->isEmpty())
380          {
381               if( $filter ) {
382                    echo '<p><strong>'.__('No comments or trackbacks matches the filter').'</strong></p>';
383               } else {
384                    echo '<p><strong>'.__('No comments').'</strong></p>';
385               }
386          }
387          else
388          {
389               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
390
391               $comments = array();
392               if (isset($_REQUEST['comments'])) {
393                    foreach ($_REQUEST['comments'] as $v) {
394                         $comments[(integer)$v]=true;
395                    }
396               }
397               $html_block =
398               '<div class="table-outer">'.
399               '<table>';
400
401               if( $filter ) {
402                    $html_block .= '<caption>'.
403                         sprintf(__(
404                              'Comment or trackback matching the filter.',
405                              'List of %s comments or trackbacks matching the filter.',
406                              $this->rs_count), $this->rs_count).
407                         '</caption>';
408               } else {
409                    $html_block .= '<caption class="hidden">'.__('Comments and trackbacks list').'</caption>';
410               }
411
412               $html_block .= '<tr>'.
413               '<th colspan="2" scope="col" abbr="comm" class="first">'.__('Type').'</th>'.
414               '<th scope="col">'.__('Author').'</th>'.
415               '<th scope="col">'.__('Date').'</th>'.
416               '<th scope="col" class="txt-center">'.__('Status').'</th>'.
417               '<th scope="col" abbr="entry">'.__('Entry').'</th>'.
418               '</tr>%s</table></div>';
419
420               if ($enclose_block) {
421                    $html_block = sprintf($enclose_block,$html_block);
422               }
423
424               echo $pager->getLinks();
425
426               $blocks = explode('%s',$html_block);
427
428               echo $blocks[0];
429
430               while ($this->rs->fetch())
431               {
432                    echo $this->commentLine(isset($comments[$this->rs->comment_id]));
433               }
434
435               echo $blocks[1];
436
437               echo $pager->getLinks();
438          }
439     }
440
441     private function commentLine($checked=false)
442     {
443          global $author, $status, $sortby, $order, $nb_per_page;
444
445          $author_url =
446          $this->core->adminurl->get('admin.comments',array(
447               'n' => $nb_per_page,
448               'status' => $status,
449               'sortby' => $sortby,
450               'order' => $order,
451               'author' => $this->rs->comment_author
452               ));
453
454          $post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id);
455
456          $comment_url = $this->core->adminurl->get('admin.comment',array('id' => $this->rs->comment_id));
457
458          $comment_dt =
459          dt::dt2str($this->core->blog->settings->system->date_format.' - '.
460          $this->core->blog->settings->system->time_format,$this->rs->comment_dt);
461
462          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
463          switch ($this->rs->comment_status) {
464               case 1:
465                    $img_status = sprintf($img,__('Published'),'check-on.png');
466                    break;
467               case 0:
468                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
469                    break;
470               case -1:
471                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
472                    break;
473               case -2:
474                    $img_status = sprintf($img,__('Junk'),'junk.png');
475                    break;
476          }
477
478          $post_title = html::escapeHTML($this->rs->post_title);
479          if (mb_strlen($post_title) > 70) {
480               $post_title = mb_strcut($post_title,0,67).'...';
481          }
482          $comment_title = sprintf(__('Edit the %1$s from %2$s'),
483               $this->rs->comment_trackback ? __('trackback') : __('comment'),
484               html::escapeHTML($this->rs->comment_author));
485
486          $res = '<tr class="line'.($this->rs->comment_status != 1 ? ' offline' : '').'"'.
487          ' id="c'.$this->rs->comment_id.'">';
488
489          $res .=
490          '<td class="nowrap">'.
491          form::checkbox(array('comments[]'),$this->rs->comment_id,$checked,'','',0).'</td>'.
492          '<td class="nowrap" abbr="'.__('Type and author').'" scope="row">'.
493               '<a href="'.$comment_url.'" title="'.$comment_title.'">'.
494               '<img src="images/edit-mini.png" alt="'.__('Edit').'"/> '.
495               ($this->rs->comment_trackback ? __('trackback') : __('comment')).' '.'</a></td>'.
496          '<td class="nowrap maximal"><a href="'.$author_url.'">'.html::escapeHTML($this->rs->comment_author).'</a></td>'.
497          '<td class="nowrap count">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->comment_dt).'</td>'.
498          '<td class="nowrap status txt-center">'.$img_status.'</td>'.
499          '<td class="nowrap discrete"><a href="'.$post_url.'">'.
500          $post_title.'</a>'.
501          ($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').'</td>';
502
503          $res .= '</tr>';
504
505          return $res;
506     }
507}
508
509class adminUserList extends adminGenericList
510{
511     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
512     {
513          if ($this->rs->isEmpty())
514          {
515               if( $filter ) {
516                    echo '<p><strong>'.__('No user matches the filter').'</strong></p>';
517               } else {
518                    echo '<p><strong>'.__('No user').'</strong></p>';
519               }
520          }
521          else
522          {
523               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
524
525               $html_block =
526               '<div class="table-outer clear">'.
527               '<table>';
528
529               if( $filter ) {
530                    $html_block .= '<caption>'.sprintf(__('List of %s users match the filter.'), $this->rs_count).'</caption>';
531               } else {
532                    $html_block .= '<caption class="hidden">'.__('Users list').'</caption>';
533               }
534
535               $html_block .= '<tr>'.
536               '<th colspan="2" scope="col" class="first">'.__('Username').'</th>'.
537               '<th scope="col">'.__('First Name').'</th>'.
538               '<th scope="col">'.__('Last Name').'</th>'.
539               '<th scope="col">'.__('Display name').'</th>'.
540               '<th scope="col" class="nowrap">'.__('Entries (all types)').'</th>'.
541               '</tr>%s</table></div>';
542
543               if ($enclose_block) {
544                    $html_block = sprintf($enclose_block,$html_block);
545               }
546
547               echo $pager->getLinks();
548
549               $blocks = explode('%s',$html_block);
550
551               echo $blocks[0];
552
553               while ($this->rs->fetch())
554               {
555                    echo $this->userLine();
556               }
557
558               echo $blocks[1];
559
560               echo $pager->getLinks();
561          }
562     }
563
564     private function userLine()
565     {
566          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
567          $img_status = '';
568
569          $p = $this->core->getUserPermissions($this->rs->user_id);
570
571          if (isset($p[$this->core->blog->id]['p']['admin'])) {
572               $img_status = sprintf($img,__('admin'),'admin.png');
573          }
574          if ($this->rs->user_super) {
575               $img_status = sprintf($img,__('superadmin'),'superadmin.png');
576          }
577          return
578          '<tr class="line">'.
579          '<td class="nowrap">'.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post).
580          form::checkbox(array('users[]'),$this->rs->user_id).'</td>'.
581          '<td class="maximal" scope="row"><a href="'.$this->core->adminurl->get('admin.user',array('id' => $this->rs->user_id)).'">'.
582          $this->rs->user_id.'</a>&nbsp;'.$img_status.'</td>'.
583          '<td class="nowrap">'.html::escapeHTML($this->rs->user_firstname).'</td>'.
584          '<td class="nowrap">'.html::escapeHTML($this->rs->user_name).'</td>'.
585          '<td class="nowrap">'.html::escapeHTML($this->rs->user_displayname).'</td>'.
586          '<td class="nowrap count"><a href="'.$this->core->adminurl->get('admin.posts',array('user_id' => $this->rs->user_id)).'">'.
587          $this->rs->nb_post.'</a></td>'.
588          '</tr>';
589     }
590}
Note: See TracBrowser for help on using the repository browser.

Sites map