getMethod($callback[1]); $p = $r->getParentClass(); if (!$p || $p->name != 'adminGenericList') { throw new Exception(__('Callback class should be inherited of adminGenericList class')); } } catch (Exception $e) { throw new Exception(sprintf(__('Invalid column callback: %s'),$e->getMessage())); } $this->id = $id; $this->title = $title; $this->callback = $callback; $this->html = $html; $this->visibility = true; } public function getInfo($k) { return property_exists(get_class($this),$k) ? $this->{$k} : null; } public function setVisibility($visibility) { if (is_bool($visibility)) { $this->visibility = $visibility; } } public function isVisible() { return $this->visibility; } } class adminGenericList { protected $core; protected $rs; protected $rs_count; protected $columns; public function __construct($core,$rs,$rs_count) { $this->core =& $core; $this->rs =& $rs; $this->rs_count = $rs_count; $this->context = get_class($this); $this->columns = array(); $this->form_prefix = 'col_%s'; $this->form_trigger = 'add_filter'; $this->html_prev = __('«prev.'); $this->html_next = __('next»'); # Post columns $this->addColumn('adminPostList','title',__('Title'),array('adminPostList','getTitle')); $this->addColumn('adminPostList','date',__('Date'),array('adminPostList','getDate')); $this->addColumn('adminPostList','category',__('Category'),array('adminPostList','getCategory')); $this->addColumn('adminPostList','author',__('Author'),array('adminPostList','getAuthor')); $this->addColumn('adminPostList','comment',__('Comments'),array('adminPostList','getComments')); $this->addColumn('adminPostList','trackback',__('Trackbacks'),array('adminPostList','getTrackbacks')); $this->addColumn('adminPostList','status',__('Status'),array('adminPostList','getStatus')); # Post (mini list) columns $this->addColumn('adminPostMiniList','title',__('Title'),array('adminPostList','getTitle')); $this->addColumn('adminPostMiniList','date',__('Date'),array('adminPostList','getDate')); $this->addColumn('adminPostMiniList','author',__('Author'),array('adminPostList','getAuthor')); $this->addColumn('adminPostMiniList','status',__('Status'),array('adminPostList','getStatus')); # Comment columns $this->addColumn('adminCommentList','title',__('Title'),array('adminCommentList','getTitle')); $this->addColumn('adminCommentList','date',__('Date'),array('adminCommentList','getDate')); $this->addColumn('adminCommentList','author',__('Author'),array('adminCommentList','getAuthor')); $this->addColumn('adminCommentList','type',__('Type'),array('adminCommentList','getType')); $this->addColumn('adminCommentList','status',__('Status'),array('adminCommentList','getStatus')); $this->addColumn('adminCommentList','edit','',array('adminCommentList','getEdit')); # User columns $this->addColumn('adminUserList','username',__('Username'),array('adminUserList','getUserName')); $this->addColumn('adminUserList','firstname',__('First name'),array('adminUserList','getFirstName')); $this->addColumn('adminUserList','lastname',__('Last name'),array('adminUserList','getLastName')); $this->addColumn('adminUserList','displayname',__('Display name'),array('adminUserList','getDisplayName')); $this->addColumn('adminUserList','entries',__('Entries'),array('adminUserList','getEntries')); $core->callBehavior('adminGenericListConstruct',$this); $this->setColumnsVisibility(); } public function addColumn($context,$id,$title,$callback,$html = null) { try { if (!array_key_exists($context,$this->columns)) { $this->columns[$context] = array(); } $c = new adminGenericColumn($id,$title,$callback,$html); $this->columns[$context][$c->getInfo('id')] = $c; } catch (Exception $e) { if (DC_DEBUG) { $this->core->error->add($e->getMessage()); } } } public function setColumnsVisibility() { $ws = $this->core->auth->user_prefs->addWorkspace('lists'); $user_pref = !is_null($ws->{$this->context}) ? unserialize($ws->{$this->context}) : array(); foreach ($this->columns[$this->context] as $k => $v) { $visibility = array_key_exists($k,$user_pref) ? $user_pref[$k] : true; if (array_key_exists($this->form_trigger,$_REQUEST)) { $key = sprintf($this->form_prefix,$k); $visibility = !array_key_exists($key,$_REQUEST) ? false : true; } $v->setVisibility($visibility); $user_pref[$k] = $visibility; } if (array_key_exists($this->form_trigger,$_REQUEST)) { $this->core->auth->user_prefs->lists->put($this->context,serialize($user_pref),'string'); } } public function getColumnsForm() { $block = '

'.__('Displayed information').'

'. ''; $list = array(); foreach ($this->columns[$this->context] as $k => $v) { $col_id = sprintf($this->form_prefix,$k); $col_label = sprintf('',$col_id,$v->getInfo('title')); $col_html = sprintf('
  • %s
  • ',$col_label.form::checkbox($col_id,1,$v->isVisible())); array_push($list,$col_html); } return !empty($list) ? sprintf($block,implode('',$list)) : ''; } public function display($page,$nb_per_page,$enclose_block='') { if ($this->rs->isEmpty()) { echo '

    '.__('No entry').'

    '; } else { $pager = new pager($page,$this->rs_count,$nb_per_page,10); $pager->html_prev = $this->html_prev; $pager->html_next = $this->html_next; $pager->var_page = 'page'; $html_block = ''; foreach ($this->columns[$this->context] as $k => $v) { if ($v->isVisible()) { $html_block .= sprintf('%s',$v->getInfo('html'),$v->getInfo('title')); } } $html_block .= '%s
    '; if ($enclose_block) { $html_block = sprintf($enclose_block,$html_block); } echo '

    '.__('Page(s)').' : '.$pager->getLinks().'

    '; $blocks = explode('%s',$html_block); echo $blocks[0]; while ($this->rs->fetch()) { echo $this->displayLine(); } echo $blocks[1]; echo '

    '.__('Page(s)').' : '.$pager->getLinks().'

    '; } } private function displayLine() { $res = ''; foreach ($this->columns[$this->context] as $k => $v) { if ($v->isVisible()) { $c = $v->getInfo('callback'); $func = $c[1]; $res .= $this->{$c[1]}(); } } return sprintf($this->getDefaultLine(),$res); } protected function getDefaultLine() { return '%s'; } } class adminPostList extends adminGenericList { protected function getDefaultLine() { return '%s'; } protected function getTitle() { return ''. form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable()).' '. ''. html::escapeHTML($this->rs->post_title).''; } protected function getDate() { return ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).''; } protected function getCategory() { if ($this->core->auth->check('categories',$this->core->blog->id)) { $cat_link = '%s'; } else { $cat_link = '%2$s'; } if ($this->rs->cat_title) { $cat_title = sprintf($cat_link,$this->rs->cat_id, html::escapeHTML($this->rs->cat_title)); } else { $cat_title = __('None'); } return ''.$cat_title.''; } protected function getAuthor() { return ''.$this->rs->user_id.''; } protected function getComments() { return ''.$this->rs->nb_comment.''; } protected function getTrackbacks() { return ''.$this->rs->nb_trackback.''; } protected function getStatus() { $img = '%1$s'; switch ($this->rs->post_status) { case 1: $img_status = sprintf($img,__('published'),'check-on.png'); break; case 0: $img_status = sprintf($img,__('unpublished'),'check-off.png'); break; case -1: $img_status = sprintf($img,__('scheduled'),'scheduled.png'); break; case -2: $img_status = sprintf($img,__('pending'),'check-wrn.png'); break; } $protected = ''; if ($this->rs->post_password) { $protected = sprintf($img,__('protected'),'locker.png'); } $selected = ''; if ($this->rs->post_selected) { $selected = sprintf($img,__('selected'),'selected.png'); } $attach = ''; $nb_media = $this->rs->countMedia(); if ($nb_media > 0) { $attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments'); $attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png'); } return ''.$img_status.' '.$selected.' '.$protected.' '.$attach.''; } } class adminPostMiniList extends adminPostList{} class adminCommentList extends adminGenericList { protected function getDefaultLine() { return '%s'; } protected function getTitle() { $post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id); return ''. form::checkbox(array('comments[]'),$this->rs->comment_id,'','','',0).' '. ''. html::escapeHTML($this->rs->post_title).''. ($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').''; } protected function getDate() { return ''.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->comment_dt).''; } protected function getAuthor() { global $author, $status, $sortby, $order, $nb_per_page; $author_url = 'comments.php?n='.$nb_per_page. '&status='.$status. '&sortby='.$sortby. '&order='.$order. '&author='.rawurlencode($this->rs->comment_author); $comment_author = html::escapeHTML($this->rs->comment_author); if (mb_strlen($comment_author) > 20) { $comment_author = mb_strcut($comment_author,0,17).'...'; } return ''.$comment_author.''; } protected function getType() { return ''.($this->rs->comment_trackback ? __('trackback') : __('comment')).''; } protected function getStatus() { $img = '%1$s'; switch ($this->rs->comment_status) { case 1: $img_status = sprintf($img,__('published'),'check-on.png'); break; case 0: $img_status = sprintf($img,__('unpublished'),'check-off.png'); break; case -1: $img_status = sprintf($img,__('pending'),'check-wrn.png'); break; case -2: $img_status = sprintf($img,__('junk'),'junk.png'); break; } return ''.$img_status.''; } protected function getEdit() { $comment_url = 'comment.php?id='.$this->rs->comment_id; return ''. ''; } } class adminUserList extends adminGenericList { protected function getUserName() { $img = '%1$s'; $img_status = ''; $p = $this->core->getUserPermissions($this->rs->user_id); if (isset($p[$this->core->blog->id]['p']['admin'])) { $img_status = sprintf($img,__('admin'),'admin.png'); } if ($this->rs->user_super) { $img_status = sprintf($img,__('superadmin'),'superadmin.png'); } return ''.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post). form::checkbox(array('user_id[]'),$this->rs->user_id).' '. ''. $this->rs->user_id.' '.$img_status.''; } protected function getFirstName() { return ''.$this->rs->user_firstname.''; } protected function getLastName() { return ''.$this->rs->user_name.''; } protected function getDisplayName() { return ''.$this->rs->user_displayname.''; } protected function getEntries() { return ''. $this->rs->nb_post.''; } } ?>