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 = '
'.__('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 = '%s | ',$v->getInfo('html'),$v->getInfo('title')); } } $html_block .= '
---|
'.__('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 '