';
return $this->nb_elements > 0 ? $res : '';
}
}
/**
@ingroup DC_CORE
@nosubgrouping
@brief Dotclear Generic column class.
Dotclear Generic column handles each column object use in adminGenericList class.
*/
class adminGenericColumn
{
protected $core; /// object dcCore object
protected $id; /// string ID of defined column
protected $title; /// string Title of defined column
protected $callback; /// array Callback calls to display defined column
protected $html; /// string Extra HTML for defined column
protected $visibility; /// boolean Visibility of defined column
/**
Inits Generic column object
@param id string Column id
@param title string Column title (for table headers)
@param callback array Column callback (used for display)
@param html string Extra html (used for table headers)
@param can_hide boolean Defines if the column can be hidden or not
*/
public function __construct($id,$title,$callback,$html = null,$can_hide = true)
{
if (!is_string($id) || $id === '') {
throw new Exception(__('Invalid column ID'));
}
if (!is_string($title)) {
throw new Exception(__('Invalid column title'));
}
if (is_null($html) || !is_string($html)) {
$html = '';
}
if (!empty($html)) {
$html = ' '.$html;
}
if (!is_bool($can_hide)) {
$can_hide = true;
}
try {
if (!is_array($callback) || count($callback) < 2) {
throw new Exception(__('Callback parameter should be an array'));
}
$r = new ReflectionClass($callback[0]);
$f = $r->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->can_hide = $can_hide;
$this->visibility = true;
}
/**
Gets information of defined column
@param info string Column info to retrive
@return mixed The information requested, null otherwise
*/
public function getInfo($info)
{
return property_exists(get_class($this),$info) ? $this->{$info} : null;
}
/**
Sets visibility of defined column
@param visibility boolean Column visibility
*/
public function setVisibility($visibility)
{
if (is_bool($visibility)) {
$this->visibility = $visibility;
}
}
/**
Returns visibility status of defined column
@return boolean true if column is visible, false otherwise
*/
public function isVisible()
{
return $this->visibility;
}
/**
Returns if the defined column can be hidden
@return boolean true if column can be hidden, false otherwise
*/
public function canHide()
{
return $this->can_hide;
}
}
/**
@ingroup DC_CORE
@nosubgrouping
@brief abstract Generic list class.
Dotclear Generic list handles administration lists
*/
abstract class adminGenericList
{
protected $core;
protected $rs;
protected $rs_count;
protected $columns;
/*
Sets columns of defined list
*/
abstract function setColumns();
/**
Inits List object
@param core dcCore dcCore object
@param rs recordSet Items recordSet to display
@param rs_count int Total items number
*/
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');
$this->html_start = __('start');
$this->html_end = __('end');
$this->setColumns();
$core->callBehavior('adminListConstruct',$this);
$this->setColumnsVisibility();
}
/**
Returns HTML code form used to choose which column to display
@return string HTML code form
*/
public function getColumnsForm()
{
$block =
'
';
}
/**
Returns HTML code list to display
@param page string|int Current page
@param nb_per_page string|int Number of items to display in each page
@param enclose_block string HTML wrapper of defined list
@return string HTML code list
*/
public function display($page,$nb_per_page,$enclose_block = '')
{
if ($this->rs->isEmpty())
{
echo '
';
}
}
/**
Adds column to defined list
@param id string Column id
@param title string Column title (for table headers)
@param callback array Column callback (used for display)
@param html string Extra html (used for table headers)
@param can_hide boolean Defines if the column can be hidden or not
*/
protected function addColumn($id,$title,$callback,$html = null,$can_hide = true)
{
try {
$c = new adminGenericColumn($id,$title,$callback,$html,$can_hide);
$this->columns[$id] = $c;
}
catch (Exception $e) {
if (DC_DEBUG) {
$this->core->error->add($e->getMessage());
}
}
}
/**
Returns default caption text
@return string Default caption
*/
protected function getDefaultCaption()
{
return;
}
/**
Returns default HTMl code line
@return string Default HTMl code line
*/
protected function getDefaultLine()
{
return '
%s
';
}
/**
Sets columns visibility of defined list
*/
private 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 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;
}
if (!$v->canHide()) {
$visibility = 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');
}
}
/**
Returns HTML code for each line of defined list
@return string HTML code line
*/
private function displayLine()
{
$res = '';
foreach ($this->columns as $k => $v) {
if ($v->isVisible()) {
$c = $v->getInfo('callback');
$func = $c[1];
$res .= $this->{$c[1]}();
}
}
return sprintf($this->getDefaultLine(),$res);
}
/**
Returns caption of defined list
@param page string|int Current page
@return string HTML caption tag
*/
private function getCaption($page)
{
$caption = $this->getDefaultCaption();
if (!empty($caption)) {
$caption = sprintf(
'
%s - %s
',
$caption,sprintf(__('Page %s'),$page)
);
}
return $caption;
}
}
/**
@ingroup DC_CORE
@nosubgrouping
@brief abstract posts list class.
Handle posts list on admin side
*/
class adminPostList extends adminGenericList
{
public function setColumns()
{
$this->addColumn('title',__('Title'),array('adminPostList','getTitle'),' class="maximal"',false);
$this->addColumn('date',__('Date'),array('adminPostList','getDate'));
$this->addColumn('datetime',__('Date and time'),array('adminPostList','getDateTime'));
$this->addColumn('category',__('Category'),array('adminPostList','getCategory'));
$this->addColumn('author',__('Author'),array('adminPostList','getAuthor'));
$this->addColumn('comment',__('Comments'),array('adminPostList','getComments'));
$this->addColumn('trackback',__('Trackbacks'),array('adminPostList','getTrackbacks'));
$this->addColumn('status',__('Status'),array('adminPostList','getStatus'));
}
protected function getDefaultCaption()
{
return __('Entries list');
}
protected function getDefaultLine()
{
return
'
';
}
}
/**
@ingroup DC_CORE
@nosubgrouping
@brief abstract mini posts list class.
Handle mini posts list on admin side (used for link popup)
*/
class adminPostMiniList extends adminPostList
{
public function setColumns()
{
$this->addColumn('title',__('Title'),array('adminPostList','getTitle'),' class="maximal"',false);
$this->addColumn('date',__('Date'),array('adminPostList','getDate'));
$this->addColumn('author',__('Author'),array('adminPostList','getAuthor'));
$this->addColumn('status',__('Status'),array('adminPostList','getStatus'));
}
protected function getTitle()
{
return
'
'.
form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable()).' '.
'rs->getURL()).'">'.
html::escapeHTML($this->rs->post_title).'';
}
}
/**
@ingroup DC_CORE
@nosubgrouping
@brief abstract comments list class.
Handle comments list on admin side
*/
class adminCommentList extends adminGenericList
{
public function setColumns()
{
$this->addColumn('title',__('Title'),array('adminCommentList','getTitle'),' class="maximal"',false);
$this->addColumn('date',__('Date'),array('adminCommentList','getDate'));
$this->addColumn('author',__('Author'),array('adminCommentList','getAuthor'));
$this->addColumn('type',__('Type'),array('adminCommentList','getType'));
$this->addColumn('status',__('Status'),array('adminCommentList','getStatus'));
$this->addColumn('edit','',array('adminCommentList','getEdit'));
}
protected function getDefaultCaption()
{
return __('Comments list');
}
protected function getDefaultLine()
{
return
'