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"

RevLine 
[0]1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
[1179]6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
[0]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
[1909]14class dcPager extends pager
15{
[1926]16     protected $form_action;
17     protected $form_hidden;
[2566]18
[1917]19     protected function getLink($li_class,$href,$img_src,$img_src_nolink,$img_alt,$enable_link) {
[1909]20          if ($enable_link) {
[1917]21               $formatter = '<li class="%s btn"><a href="%s"><img src="%s" alt="%s"/></a><span class="hidden">%s</span></li>';
[1909]22               return sprintf ($formatter,
23                    $li_class,$href,$img_src,$img_alt,$img_alt);
24          } else {
[1917]25               $formatter = '<li class="%s no-link btn"><img src="%s" alt="%s"/></li>';
[1909]26               return sprintf ($formatter,
[1917]27                    $li_class,$img_src_nolink,$img_alt,$img_alt);
[1909]28          }
29     }
[1926]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) {
[1998]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               }
[1926]59          }
60          $this->form_action = $url['path'];
61     }
[2566]62
[1909]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),
[1917]76               "images/pagination/first.png",
77               "images/pagination/no-first.png",
[1909]78               __('First page'),
79               ($this->env > 1)
80          );
81          $htmlPrev = $this->getLink(
82               "prev",
83               sprintf($this->page_url,$this->env-1),
[1917]84               "images/pagination/previous.png",
85               "images/pagination/no-previous.png",
[1909]86               __('Previous page'),
87               ($this->env > 1)
88          );
89          $htmlNext = $this->getLink(
90               "next",
91               sprintf($this->page_url,$this->env+1),
[1917]92               "images/pagination/next.png",
93               "images/pagination/no-next.png",
[1909]94               __('Next page'),
95               ($this->env < $this->nb_pages)
96          );
97          $htmlLast = $this->getLink(
98               "last",
99               sprintf($this->page_url,$this->nb_pages),
[1917]100               "images/pagination/last.png",
101               "images/pagination/no-last.png",
[1909]102               __('Last page'),
103               ($this->env < $this->nb_pages)
104          );
[2566]105          $htmlCurrent =
[1909]106               '<li class="active"><strong>'.
107               sprintf(__('Page %s / %s'),$this->env,$this->nb_pages).
108               '</strong></li>';
[2566]109
110          $htmlDirect =
[1931]111               ($this->nb_pages > 1 ?
112                    sprintf('<li class="direct-access">'.__('Direct access page %s'),
[2323]113                         form::field(array($this->var_page),3,10)).
[1931]114                    '<input type="submit" value="'.__('ok').'" class="reset" '.
115                    'name="ok" />'.$this->form_hidden.'</li>' : '');
[2566]116
117          $res =
[1926]118               '<form action="'.$this->form_action.'" method="get">'.
[1932]119               '<div class="pager"><ul>'.
[1909]120               $htmlFirst.
121               $htmlPrev.
122               $htmlCurrent.
123               $htmlNext.
124               $htmlLast.
[1917]125               $htmlDirect.
[1909]126               '</ul>'.
127               '</div>'.
128               '</form>'
129          ;
[2566]130
[1909]131          return $this->nb_elements > 0 ? $res : '';
132     }
133}
134
[0]135class adminGenericList
136{
137     protected $core;
138     protected $rs;
139     protected $rs_count;
[2566]140
[0]141     public function __construct($core,$rs,$rs_count)
142     {
143          $this->core =& $core;
144          $this->rs =& $rs;
145          $this->rs_count = $rs_count;
[1600]146          $this->html_prev = __('&#171; prev.');
147          $this->html_next = __('next &#187;');
[0]148     }
149}
150
151class adminPostList extends adminGenericList
152{
[2128]153     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
[0]154     {
155          if ($this->rs->isEmpty())
156          {
[2128]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               }
[0]162          }
163          else
164          {
[1909]165               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
[1476]166               $entries = array();
167               if (isset($_REQUEST['entries'])) {
168                    foreach ($_REQUEST['entries'] as $v) {
169                         $entries[(integer)$v]=true;
170                    }
171               }
[0]172               $html_block =
[2002]173               '<div class="table-outer">'.
[2135]174               '<table>';
[2566]175
[2131]176               if( $filter ) {
177                    $html_block .= '<caption>'.sprintf(__('List of %s entries match the filter.'), $this->rs_count).'</caption>';
[2128]178               } else {
[2131]179                    $html_block .= '<caption class="hidden">'.__('Entries list').'</caption>';
[2128]180               }
[2566]181
[2128]182               $html_block .= '<tr>'.
[1508]183               '<th colspan="2" class="first">'.__('Title').'</th>'.
[1600]184               '<th scope="col">'.__('Date').'</th>'.
185               '<th scope="col">'.__('Category').'</th>'.
186               '<th scope="col">'.__('Author').'</th>'.
[2127]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>'.
[1600]189               '<th scope="col">'.__('Status').'</th>'.
[2002]190               '</tr>%s</table></div>';
[2566]191
[0]192               if ($enclose_block) {
193                    $html_block = sprintf($enclose_block,$html_block);
194               }
[2566]195
[1909]196               echo $pager->getLinks();
[2566]197
[0]198               $blocks = explode('%s',$html_block);
[2566]199
[0]200               echo $blocks[0];
[2566]201
[0]202               while ($this->rs->fetch())
203               {
[1476]204                    echo $this->postLine(isset($entries[$this->rs->post_id]));
[0]205               }
[2566]206
[0]207               echo $blocks[1];
[2566]208
[1909]209               echo $pager->getLinks();
[0]210          }
211     }
[2566]212
[1476]213     private function postLine($checked)
[0]214     {
215          if ($this->core->auth->check('categories',$this->core->blog->id)) {
[2852]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);
[0]218          } else {
219               $cat_link = '%2$s';
220          }
[2566]221
[0]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 {
[1364]226               $cat_title = __('(No cat)');
[0]227          }
[2566]228
[0]229          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
230          switch ($this->rs->post_status) {
231               case 1:
[1353]232                    $img_status = sprintf($img,__('Published'),'check-on.png');
[0]233                    break;
234               case 0:
[1353]235                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
[0]236                    break;
237               case -1:
[1353]238                    $img_status = sprintf($img,__('Scheduled'),'scheduled.png');
[0]239                    break;
240               case -2:
[1353]241                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
[0]242                    break;
243          }
[2566]244
[0]245          $protected = '';
246          if ($this->rs->post_password) {
[1353]247               $protected = sprintf($img,__('Protected'),'locker.png');
[0]248          }
[2566]249
[0]250          $selected = '';
251          if ($this->rs->post_selected) {
[1353]252               $selected = sprintf($img,__('Selected'),'selected.png');
[0]253          }
[2566]254
[0]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          }
[2566]261
[0]262          $res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
263          ' id="p'.$this->rs->post_id.'">';
[2566]264
[0]265          $res .=
266          '<td class="nowrap">'.
[1476]267          form::checkbox(array('entries[]'),$this->rs->post_id,$checked,'','',!$this->rs->isEditable()).'</td>'.
[1600]268          '<td class="maximal" scope="row"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'.
[0]269          html::escapeHTML($this->rs->post_title).'</a></td>'.
[1668]270          '<td class="nowrap count">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
[0]271          '<td class="nowrap">'.$cat_title.'</td>'.
[1146]272          '<td class="nowrap">'.html::escapeHTML($this->rs->user_id).'</td>'.
[1668]273          '<td class="nowrap count">'.$this->rs->nb_comment.'</td>'.
274          '<td class="nowrap count">'.$this->rs->nb_trackback.'</td>'.
[0]275          '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
276          '</tr>';
[2566]277
[0]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          {
[1910]292               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
[2566]293
[0]294               $html_block =
[2002]295               '<div class="table-outer clear">'.
296               '<table><caption class="hidden">'.__('Entries list').'</caption><tr>'.
[1600]297               '<th scope="col">'.__('Title').'</th>'.
298               '<th scope="col">'.__('Date').'</th>'.
299               '<th scope="col">'.__('Author').'</th>'.
300               '<th scope="col">'.__('Status').'</th>'.
[2002]301               '</tr>%s</table></div>';
[2566]302
[0]303               if ($enclose_block) {
304                    $html_block = sprintf($enclose_block,$html_block);
305               }
[2566]306
[1909]307               echo $pager->getLinks();
[2566]308
[0]309               $blocks = explode('%s',$html_block);
[2566]310
[0]311               echo $blocks[0];
[2566]312
[0]313               while ($this->rs->fetch())
314               {
315                    echo $this->postLine();
316               }
[2566]317
[0]318               echo $blocks[1];
[2566]319
[1909]320               echo $pager->getLinks();
[0]321          }
322     }
[2566]323
[0]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:
[1353]329                    $img_status = sprintf($img,__('Published'),'check-on.png');
[0]330                    break;
331               case 0:
[1353]332                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
[0]333                    break;
334               case -1:
[1353]335                    $img_status = sprintf($img,__('Scheduled'),'scheduled.png');
[0]336                    break;
337               case -2:
[1353]338                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
[0]339                    break;
340          }
[2566]341
[0]342          $protected = '';
343          if ($this->rs->post_password) {
[1353]344               $protected = sprintf($img,__('Protected'),'locker.png');
[0]345          }
[2566]346
[0]347          $selected = '';
348          if ($this->rs->post_selected) {
[1353]349               $selected = sprintf($img,__('Selected'),'selected.png');
[0]350          }
[2566]351
[0]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          }
[2566]358
[0]359          $res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
360          ' id="p'.$this->rs->post_id.'">';
[2566]361
[0]362          $res .=
[1600]363          '<td scope="row" class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'" '.
[0]364          'title="'.html::escapeHTML($this->rs->getURL()).'">'.
365          html::escapeHTML($this->rs->post_title).'</a></td>'.
[1668]366          '<td class="nowrap count">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
[1146]367          '<td class="nowrap">'.html::escapeHTML($this->rs->user_id).'</td>'.
[0]368          '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
369          '</tr>';
[2566]370
[0]371          return $res;
372     }
373}
374
375class adminCommentList extends adminGenericList
376{
[2135]377     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
[0]378     {
379          if ($this->rs->isEmpty())
380          {
[2135]381               if( $filter ) {
382                    echo '<p><strong>'.__('No comments or trackbacks matches the filter').'</strong></p>';
383               } else {
[2666]384                    echo '<p><strong>'.__('No comments').'</strong></p>';
[2135]385               }
[0]386          }
387          else
388          {
[1910]389               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
[2566]390
[1905]391               $comments = array();
392               if (isset($_REQUEST['comments'])) {
393                    foreach ($_REQUEST['comments'] as $v) {
394                         $comments[(integer)$v]=true;
395                    }
[2566]396               }
[0]397               $html_block =
[2002]398               '<div class="table-outer">'.
[2135]399               '<table>';
[2566]400
[2135]401               if( $filter ) {
[2386]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>';
[2135]408               } else {
409                    $html_block .= '<caption class="hidden">'.__('Comments and trackbacks list').'</caption>';
410               }
[2566]411
[2135]412               $html_block .= '<tr>'.
[1668]413               '<th colspan="2" scope="col" abbr="comm" class="first">'.__('Type').'</th>'.
414               '<th scope="col">'.__('Author').'</th>'.
[1587]415               '<th scope="col">'.__('Date').'</th>'.
416               '<th scope="col" class="txt-center">'.__('Status').'</th>'.
[2152]417               '<th scope="col" abbr="entry">'.__('Entry').'</th>'.
[2002]418               '</tr>%s</table></div>';
[1587]419
[0]420               if ($enclose_block) {
421                    $html_block = sprintf($enclose_block,$html_block);
422               }
[2566]423
[1909]424               echo $pager->getLinks();
[2566]425
[0]426               $blocks = explode('%s',$html_block);
[2566]427
[0]428               echo $blocks[0];
[2566]429
[0]430               while ($this->rs->fetch())
431               {
[2008]432                    echo $this->commentLine(isset($comments[$this->rs->comment_id]));
[0]433               }
[2566]434
[0]435               echo $blocks[1];
[2566]436
[1909]437               echo $pager->getLinks();
[0]438          }
439     }
[2566]440
[2008]441     private function commentLine($checked=false)
[0]442     {
443          global $author, $status, $sortby, $order, $nb_per_page;
[2566]444
[0]445          $author_url =
[2817]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               ));
[2566]453
[0]454          $post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id);
[2566]455
[2817]456          $comment_url = $this->core->adminurl->get('admin.comment',array('id' => $this->rs->comment_id));
[2566]457
[0]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);
[2566]461
[0]462          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
463          switch ($this->rs->comment_status) {
464               case 1:
[1353]465                    $img_status = sprintf($img,__('Published'),'check-on.png');
[0]466                    break;
467               case 0:
[1353]468                    $img_status = sprintf($img,__('Unpublished'),'check-off.png');
[0]469                    break;
470               case -1:
[1353]471                    $img_status = sprintf($img,__('Pending'),'check-wrn.png');
[0]472                    break;
473               case -2:
[1353]474                    $img_status = sprintf($img,__('Junk'),'junk.png');
[0]475                    break;
476          }
[2566]477
[1508]478          $post_title = html::escapeHTML($this->rs->post_title);
[2152]479          if (mb_strlen($post_title) > 70) {
480               $post_title = mb_strcut($post_title,0,67).'...';
[0]481          }
[1668]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));
[2566]485
[0]486          $res = '<tr class="line'.($this->rs->comment_status != 1 ? ' offline' : '').'"'.
487          ' id="c'.$this->rs->comment_id.'">';
[2566]488
[0]489          $res .=
490          '<td class="nowrap">'.
[2071]491          form::checkbox(array('comments[]'),$this->rs->comment_id,$checked,'','',0).'</td>'.
[1929]492          '<td class="nowrap" abbr="'.__('Type and author').'" scope="row">'.
[1668]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>'.
[1587]498          '<td class="nowrap status txt-center">'.$img_status.'</td>'.
[2152]499          '<td class="nowrap discrete"><a href="'.$post_url.'">'.
[2777]500          $post_title.'</a>'.
[1587]501          ($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').'</td>';
[2566]502
[0]503          $res .= '</tr>';
[2566]504
[0]505          return $res;
506     }
507}
508
509class adminUserList extends adminGenericList
510{
[2135]511     public function display($page,$nb_per_page,$enclose_block='',$filter=false)
[0]512     {
513          if ($this->rs->isEmpty())
514          {
[2135]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               }
[0]520          }
521          else
522          {
[1910]523               $pager = new dcPager($page,$this->rs_count,$nb_per_page,10);
[2566]524
[0]525               $html_block =
[2002]526               '<div class="table-outer clear">'.
[2135]527               '<table>';
[2566]528
[2135]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               }
[2566]534
[2135]535               $html_block .= '<tr>'.
[1600]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>'.
[1670]540               '<th scope="col" class="nowrap">'.__('Entries (all types)').'</th>'.
[2002]541               '</tr>%s</table></div>';
[2566]542
[0]543               if ($enclose_block) {
544                    $html_block = sprintf($enclose_block,$html_block);
545               }
[2566]546
[1909]547               echo $pager->getLinks();
[2566]548
[0]549               $blocks = explode('%s',$html_block);
[2566]550
[0]551               echo $blocks[0];
[2566]552
[0]553               while ($this->rs->fetch())
554               {
555                    echo $this->userLine();
556               }
[2566]557
[0]558               echo $blocks[1];
[2566]559
[1909]560               echo $pager->getLinks();
[0]561          }
562     }
[2566]563
[0]564     private function userLine()
565     {
566          $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
567          $img_status = '';
[2566]568
[0]569          $p = $this->core->getUserPermissions($this->rs->user_id);
[2566]570
[0]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).
[860]580          form::checkbox(array('users[]'),$this->rs->user_id).'</td>'.
[2817]581          '<td class="maximal" scope="row"><a href="'.$this->core->adminurl->get('admin.user',array('id' => $this->rs->user_id)).'">'.
[0]582          $this->rs->user_id.'</a>&nbsp;'.$img_status.'</td>'.
[1146]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>'.
[2817]586          '<td class="nowrap count"><a href="'.$this->core->adminurl->get('admin.posts',array('user_id' => $this->rs->user_id)).'">'.
[0]587          $this->rs->nb_post.'</a></td>'.
588          '</tr>';
589     }
590}
Note: See TracBrowser for help on using the repository browser.

Sites map