mirror of
https://github.com/e107inc/e107.git
synced 2025-08-18 04:12:00 +02:00
News item/category models and trees updated, usage shown in news menus; new newsurl shortcode.
This commit is contained in:
@@ -76,7 +76,9 @@ class news_shortcodes extends e_shortcode
|
||||
|
||||
function sc_newscomments($parm)
|
||||
{
|
||||
global $pref, $sql;
|
||||
$pref = e107::getPref();
|
||||
$sql = e107::getDb();
|
||||
|
||||
if($pref['comments_disabled'] == 1)
|
||||
{
|
||||
return;
|
||||
@@ -86,7 +88,7 @@ class news_shortcodes extends e_shortcode
|
||||
|
||||
if($param['current_action'] == 'extend')
|
||||
{
|
||||
return '';
|
||||
return LAN_NEWS_99.' ('.$news_item['news_comment_total'].')';
|
||||
}
|
||||
|
||||
if (vartrue($pref['multilanguage']))
|
||||
@@ -120,7 +122,10 @@ class news_shortcodes extends e_shortcode
|
||||
{
|
||||
global $pref;
|
||||
if(!varsettrue($pref['trackbackEnabled'])) { return ''; }
|
||||
return ($this->param['trackbackbeforestring'] ? $this->param['trackbackbeforestring'] : '')."<a href='".e_HTTP."comment.php?comment.news.".$this->news_item['news_id']."#track'>".$this->param['trackbackstring'].$this->news_item['tb_count'].'</a>'.($this->param['trackbackafterstring'] ? $this->param['trackbackafterstring'] : '');
|
||||
$news_item = $this->news_item;
|
||||
$news_item['#'] = 'track';
|
||||
|
||||
return ($this->param['trackbackbeforestring'] ? $this->param['trackbackbeforestring'] : '')."<a href='".e107::getUrl()->create('news/view/item', $this->news_item)."'>".$this->param['trackbackstring'].$this->news_item['tb_count'].'</a>'.($this->param['trackbackafterstring'] ? $this->param['trackbackafterstring'] : '');
|
||||
}
|
||||
|
||||
function sc_newsheader($parm)
|
||||
@@ -172,7 +177,7 @@ class news_shortcodes extends e_shortcode
|
||||
|
||||
function sc_emailicon($parm)
|
||||
{
|
||||
global $pref;
|
||||
$pref = e107::getPref();
|
||||
if (!check_class(varset($pref['email_item_class'],e_UC_MEMBER)))
|
||||
{
|
||||
return '';
|
||||
@@ -189,7 +194,7 @@ class news_shortcodes extends e_shortcode
|
||||
|
||||
function sc_pdficon()
|
||||
{
|
||||
global $pref;
|
||||
$pref = e107::getPref();
|
||||
if (!$pref['plug_installed']['pdf']) { return ''; }
|
||||
return $this->e107->tp->parseTemplate('{PDF='.LAN_NEWS_24.'^news.'.$this->news_item['news_id'].'}');
|
||||
}
|
||||
@@ -347,6 +352,11 @@ class news_shortcodes extends e_shortcode
|
||||
return "<a style='".(isset($this->param['itemlink']) ? $this->param['itemlink'] : 'null')."' href='{$url}'>".$this->news_item['news_title'].'</a>';
|
||||
}
|
||||
|
||||
function sc_newsurl()
|
||||
{
|
||||
return $this->e107->url->create('news/view/item', $this->news_item);
|
||||
}
|
||||
|
||||
function sc_newscaticon($parm = '')
|
||||
{
|
||||
// BC
|
||||
|
@@ -276,233 +276,6 @@ class news {
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
// DEPRECATED - NOT TO BE USED. Way too many changes required to make it work.
|
||||
|
||||
/**
|
||||
* Manage SEF URL string for current news // Deprecated.
|
||||
* FIXME - news rewrites should go to different handler
|
||||
*
|
||||
* @param string $action insert|update
|
||||
* @param array $news_data XXX - could be changed to news_id only (integer)
|
||||
* @param array $rewrite_data
|
||||
* @param boolean $session_message [optional] default false
|
||||
* @return mixed true|false for data has been[not] changed; 'error' for DB error
|
||||
*/
|
||||
/*
|
||||
function handleRewriteSubmit($action, $news_data, $rewrite_data, $session_message = false)
|
||||
{
|
||||
return TRUE;
|
||||
|
||||
// Deprecated.
|
||||
|
||||
$rewrite_data['data']['news_rewrite_source'] = $news_data['news_id'];
|
||||
$rewrite_data['_FIELD_TYPES']['news_rewrite_source'] = 'int';
|
||||
|
||||
$old_rewrite_data = array();
|
||||
if(e107::getDb()->db_Select('news_rewrite', '*', 'news_rewrite_source='.intval($rewrite_data['data']['news_rewrite_source']).' AND news_rewrite_type='.intval($rewrite_data['data']['news_rewrite_type'])))
|
||||
{
|
||||
$old_rewrite_data = e107::getDb()->db_Fetch();
|
||||
}
|
||||
|
||||
//Delete if required
|
||||
if (empty($rewrite_data['data']['news_rewrite_string']))
|
||||
{
|
||||
if($old_rewrite_data)
|
||||
{
|
||||
self::clearRewriteCache($old_rewrite_data['news_rewrite_string']);
|
||||
e107::getDb()->db_Delete('news_rewrite', 'news_rewrite_id='.$old_rewrite_data['news_rewrite_id']);
|
||||
e107::getAdminLog()->logArrayAll('NEWS_13', $old_rewrite_data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
switch($action)
|
||||
{
|
||||
case 'insert':
|
||||
$rewrite_data['data']['news_rewrite_id'] = 0;
|
||||
if($rewrite_data['data']['news_rewrite_id'] = e107::getDb()->db_Insert('news_rewrite', $rewrite_data))
|
||||
{
|
||||
if($old_rewrite_data) self::clearRewriteCache($old_rewrite_data['news_rewrite_string']);
|
||||
self::setRewriteCache($rewrite_data['data']['news_rewrite_string'], $rewrite_data['data']);
|
||||
e107::getAdminLog()->logArrayAll('NEWS_12', $rewrite_data['data']);
|
||||
return true;
|
||||
}
|
||||
eMessage::getInstance()->add('Friendly URL string related problem detected!', E_MESSAGE_ERROR, $session_message);
|
||||
if(1062 == e107::getDb()->getLastErrorNumber()) //detect duplicate mysql errnum
|
||||
{
|
||||
eMessage::getInstance()->add('Friendly URL should be unique! ', E_MESSAGE_ERROR, $session_message);
|
||||
}
|
||||
eMessage::getInstance()->add('mySQL error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText(), E_MESSAGE_DEBUG, $session_message);
|
||||
return 'error';
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
$id = intval($rewrite_data['data']['news_rewrite_id']);
|
||||
unset($rewrite_data['data']['news_rewrite_id']);
|
||||
if($id)
|
||||
{
|
||||
$rewrite_data['WHERE'] = 'news_rewrite_id='.$id;
|
||||
if(e107::getDb()->db_Update('news_rewrite', $rewrite_data))
|
||||
{
|
||||
$rewrite_data['data']['news_rewrite_id'] = $id;
|
||||
if($old_rewrite_data) self::clearRewriteCache($old_rewrite_data['news_rewrite_string']);
|
||||
self::setRewriteCache($rewrite_data['data']['news_rewrite_string'], $rewrite_data['data']);
|
||||
e107::getAdminLog()->logArrayAll('NEWS_12', $rewrite_data['data']);
|
||||
return true;
|
||||
}
|
||||
elseif (e107::getDb()->getLastErrorNumber())
|
||||
{
|
||||
eMessage::getInstance()->add('Friendly URL string related problem detected!', E_MESSAGE_ERROR, $session_message);
|
||||
if(1062 == e107::getDb()->getLastErrorNumber()) //detect duplicate mysql errnum
|
||||
{
|
||||
eMessage::getInstance()->add('Friendly URL string should be unique! ', E_MESSAGE_ERROR, $session_message);
|
||||
}
|
||||
eMessage::getInstance()->add('mySQL error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText(), E_MESSAGE_DEBUG, $session_message);
|
||||
return 'error';
|
||||
}
|
||||
|
||||
$rewrite_data['data']['news_rewrite_id'] = $id;
|
||||
if($old_rewrite_data) self::clearRewriteCache($old_rewrite_data['news_rewrite_string']);
|
||||
self::setRewriteCache($rewrite_data['data']['news_rewrite_string'], $rewrite_data['data']);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$rewrite_data['data']['news_rewrite_id'] = 0;
|
||||
if($rewrite_data['data']['news_rewrite_id'] = e107::getDb()->db_Insert('news_rewrite', $rewrite_data))
|
||||
{
|
||||
if($old_rewrite_data) self::clearRewriteCache($old_rewrite_data['news_rewrite_string']);
|
||||
self::setRewriteCache($rewrite_data['data']['news_rewrite_string'], $rewrite_data['data']);
|
||||
e107::getAdminLog()->logArrayAll('NEWS_12', $rewrite_data['data']);
|
||||
return true;
|
||||
}
|
||||
|
||||
eMessage::getInstance()->add('Friendly URL string related problem detected!', E_MESSAGE_ERROR, $session_message);
|
||||
if(1062 == e107::getDb()->getLastErrorNumber()) //detect duplicate mysql errnum
|
||||
{
|
||||
eMessage::getInstance()->add('Friendly URL string should be unique! ', E_MESSAGE_ERROR, $session_message);
|
||||
}
|
||||
eMessage::getInstance()->add('mySQL error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText(), E_MESSAGE_DEBUG, $session_message);
|
||||
return 'error';
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
public static function retrieveRewriteString($news_id, $type = 1)
|
||||
{
|
||||
//XXX - Best way we have now, discuss
|
||||
if(null === self::$_rewrite_map)
|
||||
{
|
||||
$tmp = e107::getCache()->retrieve_sys('nomd5_news_rewrite_map');
|
||||
if(false !== $tmp && ($tmp = e107::getArrayStorage()->ReadArray($tmp)))
|
||||
{
|
||||
self::$_rewrite_map = $tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
self::$_rewrite_map = array();
|
||||
if(e107::getDb()->db_Select('news_rewrite'))
|
||||
{
|
||||
while ($tmp = e107::getDb()->db_Fetch())
|
||||
{
|
||||
self::$_rewrite_map[$tmp['news_rewrite_type']][$tmp['news_rewrite_source']] = $tmp['news_rewrite_string'];
|
||||
}
|
||||
}
|
||||
e107::getCache()->set_sys('nomd5_news_rewrite_map', e107::getArrayStorage()->WriteArray(self::$_rewrite_map, false));
|
||||
}
|
||||
unset($tmp);
|
||||
}
|
||||
|
||||
//convert type if needed
|
||||
if(is_string($type))
|
||||
{
|
||||
switch($type)
|
||||
{
|
||||
case 'item':
|
||||
case 'extend':
|
||||
$type = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
$type = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (isset(self::$_rewrite_map[$type][$news_id]) ? self::$_rewrite_map[$type][$news_id] : '');
|
||||
}
|
||||
|
||||
|
||||
public static function retrieveRewriteData($sefstr, $force = true)
|
||||
{
|
||||
//check runtime cache
|
||||
if(isset(self::$_rewrite_data[$sefstr]))
|
||||
{
|
||||
return self::$_rewrite_data[$sefstr];
|
||||
}
|
||||
|
||||
//check server cache if allowed
|
||||
if(!$force && ($ret = self::getRewriteCache($sefstr, true)))
|
||||
{
|
||||
self::$_rewrite_data[$sefstr] = $ret;
|
||||
return self::$_rewrite_data[$sefstr];
|
||||
}
|
||||
|
||||
//search DB
|
||||
$ret = array();
|
||||
if(e107::getDb()->db_Select('news_rewrite', '*', "news_rewrite_string='".e107::getParser()->toDB($sefstr)."'"))
|
||||
{
|
||||
$ret = e107::getDb()->db_Fetch();
|
||||
}
|
||||
|
||||
//set runtime cache
|
||||
self::$_rewrite_data[$sefstr] = $ret;
|
||||
|
||||
//set server cache
|
||||
if($ret)
|
||||
{
|
||||
self::setRewriteCache($sefstr, $ret);
|
||||
}
|
||||
|
||||
return self::$_rewrite_data[$sefstr];
|
||||
}
|
||||
*/
|
||||
/*
|
||||
public static function getRewriteCache($sefstr, $toArray = true)
|
||||
{
|
||||
$sefstr = md5($sefstr);
|
||||
|
||||
$ret = ecache::retrieve_sys('news_sefurl'.$sefstr, false, true);
|
||||
|
||||
if($ret && $toArray)
|
||||
{
|
||||
return e107::getArrayStorage()->ReadArray($ret);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public static function clearRewriteCache($sefstr = '')
|
||||
{
|
||||
if($sefstr) $sefstr = md5($sefstr);
|
||||
ecache::clear_sys("news_sefurl".$sefstr);
|
||||
}
|
||||
|
||||
public static function setRewriteCache($sefstr, $data)
|
||||
{
|
||||
$sefstr = md5($sefstr);
|
||||
if(is_array($data)) $data = e107::getArrayStorage()->WriteArray($data, false);
|
||||
ecache::set_sys("news_sefurl".$sefstr, $data, true);
|
||||
}
|
||||
*/
|
||||
|
||||
function render_newsitem($news, $mode = 'default', $n_restrict = '', $NEWS_TEMPLATE = '', $param = array())
|
||||
{
|
||||
global $NEWSSTYLE, $NEWSLISTSTYLE;
|
||||
@@ -637,9 +410,11 @@ class news {
|
||||
|
||||
require_once(e_HANDLER.'model_class.php');
|
||||
|
||||
class e_news_item extends e_model
|
||||
class e_news_item extends e_front_model
|
||||
{
|
||||
protected $_loaded_once = false;
|
||||
protected $_db_table = 'news';
|
||||
protected $_field_id = 'news_id';
|
||||
protected $_cache_string = 'news_item_';
|
||||
|
||||
/**
|
||||
* Shortcodes - simple field getter (basic formatting)
|
||||
@@ -659,7 +434,7 @@ class e_news_item extends e_model
|
||||
{
|
||||
parse_str(varset($tmp[1]), $parm);
|
||||
}
|
||||
$val = $this->get($field, '');
|
||||
$val = $this->field($field, '');
|
||||
|
||||
//do more with $parm array, just an example here
|
||||
if(varsettrue($parm['format']))
|
||||
@@ -717,7 +492,7 @@ class e_news_item extends e_model
|
||||
* @param mixed $default
|
||||
* @return mixed data
|
||||
*/
|
||||
public function get($news_field, $default = null)
|
||||
public function field($news_field, $default = null)
|
||||
{
|
||||
return parent::get('news_'.$news_field, $default);
|
||||
}
|
||||
@@ -731,8 +506,7 @@ class e_news_item extends e_model
|
||||
*/
|
||||
public function load($id, $force = false)
|
||||
{
|
||||
if($force || !$this->_loaded_once)
|
||||
{
|
||||
|
||||
$id = intval($id);
|
||||
$nobody_regexp = "'(^|,)(".str_replace(",", "|", e_UC_NOBODY).")(,|$)'";
|
||||
|
||||
@@ -742,18 +516,19 @@ class e_news_item extends e_model
|
||||
WHERE n.news_id={$id} AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$nobody_regexp.")
|
||||
AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")";
|
||||
|
||||
if(e107::getDb()->db_Select_gen($query))
|
||||
{
|
||||
$this->setData(e107::getDb()->db_Fetch());
|
||||
}
|
||||
$this->_loaded_once = true;
|
||||
}
|
||||
$this->setParam('db_query', $query);
|
||||
|
||||
parent::load($id, $force);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
class e_news_tree extends e_model
|
||||
class e_news_tree extends e_front_tree_model
|
||||
{
|
||||
protected $_db_table = 'news';
|
||||
protected $_field_id = 'news_id';
|
||||
protected $_cache_string = 'news_tree_';
|
||||
|
||||
/**
|
||||
* Current tree news category id
|
||||
*
|
||||
@@ -761,24 +536,6 @@ class e_news_tree extends e_model
|
||||
*/
|
||||
protected $_current_category_id;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $_tree_db_total = array();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param unknown_type $category_id
|
||||
*/
|
||||
public function __construct($category_id = null)
|
||||
{
|
||||
if(null !== $category_id)
|
||||
{
|
||||
$this->load($category_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set current category Id
|
||||
*
|
||||
@@ -787,89 +544,18 @@ class e_news_tree extends e_model
|
||||
*/
|
||||
function setCurrentCategoryId($category_id)
|
||||
{
|
||||
$this->_current_category_id = intval($category_id);
|
||||
$this->_current_category_id = $category_id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get news item object from the tree
|
||||
* Preparing for future news SEF string (string $name)
|
||||
*
|
||||
* @param string|integer $name
|
||||
* @param integer $category_id optional category Id
|
||||
* @return e_news_item
|
||||
*/
|
||||
function getNode($name, $category_id = null)
|
||||
public function getCurrentCategoryId()
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
return $this->getData('__tree/'.$category_id.'/'.$name);
|
||||
return $this->_current_category_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set news item object
|
||||
*
|
||||
* @param string|integer $name
|
||||
* @param array $data
|
||||
* @param integer $category_id optional category Id
|
||||
* @return e_news_tree
|
||||
*/
|
||||
function setNode($name, $data, $category_id = null)
|
||||
public function hasCurrentCategoryId()
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
$this->setData('__tree/'.$category_id.'/'.$name, new e_news_item($data));
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set new category tree
|
||||
*
|
||||
* @param array $tree
|
||||
* @param integer $category_id
|
||||
* @return e_news_tree
|
||||
*/
|
||||
public function setTree(array $tree, $category_id = null)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
$this->setData('__tree/'.$category_id, $tree);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tree by category id
|
||||
*
|
||||
* @param integer $category_id
|
||||
* @return array
|
||||
*/
|
||||
public function getTree($category_id = null)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
return $this->getData('__tree/'.$category_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Total records found (DB)
|
||||
* @param integer $category_id [optional]
|
||||
* @return integer
|
||||
*/
|
||||
function getTreeTotal($category_id = null)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
return (isset($this->_tree_db_total[$category_id]) ? $this->_tree_db_total[$category_id] : 0);
|
||||
return $this->_current_category_id !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -877,84 +563,140 @@ class e_news_tree extends e_model
|
||||
*
|
||||
* @param integer $category_id
|
||||
* @param boolean $force
|
||||
* @param array $qry_data limit_from, limit_to, order, date [YYYYMMDD], day[DD], month [MM]
|
||||
* @param array $params DB query parameters
|
||||
* @return e_news_tree
|
||||
*/
|
||||
public function load($category_id = 0, $force = false, $qry_data = array())
|
||||
public function load($category_id = 0, $force = false, $params = array())
|
||||
{
|
||||
$category_id = intval($category_id);
|
||||
if(is_string($qry_data)) { parse_str($qry_data, $qry_data); }
|
||||
if(!$this->hasCurrentCategoryId() || $force) $this->setCurrentCategoryId($category_id);
|
||||
|
||||
$limit_from = varset($qry_data['limit_from'], 0);
|
||||
$limit_to = varset($qry_data['limit_to'], e107::getPref('newspost', 15));
|
||||
$order = varset($qry_data['order'], 'n.news_sticky DESC, n.news_datestamp DESC');
|
||||
$this->setParam('model_class', 'e_news_item')
|
||||
->setParam('db_order', vartrue($params['db_order'], 'news_datestamp DESC'))
|
||||
->setParam('db_limit', vartrue($params['db_limit'], '0,10'))
|
||||
->setParam('db_where', $category_id ? 'news_category='.$category_id : '')
|
||||
->setParam('noCacheStringModify', false);
|
||||
|
||||
$this->setCurrentCategoryId($category_id);
|
||||
return parent::load($force);
|
||||
}
|
||||
|
||||
//TODO - file cache $cacheString = md5($category_id.$limit_from.$order.e_CLASS_REGEXP);
|
||||
|
||||
if($force || !$this->isTree())
|
||||
/**
|
||||
* Load joined tree by category id
|
||||
*
|
||||
* @param integer $category_id
|
||||
* @param boolean $force
|
||||
* @param array $params DB query parameters
|
||||
* @return e_news_tree
|
||||
*/
|
||||
public function loadJoin($category_id = 0, $force = false, $params = array())
|
||||
{
|
||||
$nobody_regexp = "'(^|,)(".str_replace(",", "|", e_UC_NOBODY).")(,|$)'";
|
||||
$category_id = intval($category_id);
|
||||
if(!$this->hasCurrentCategoryId() || $force) $this->setCurrentCategoryId($category_id);
|
||||
|
||||
$where = vartrue($params['db_where']);
|
||||
if($category_id)
|
||||
{
|
||||
$where = ' news_category='.$category_id.' AND';
|
||||
$where = ($where ? ' AND ' : '').' news_category='.$category_id.' AND';
|
||||
}
|
||||
if($where) $where = 'WHERE '.$where;
|
||||
|
||||
$this->setParam('model_class', 'e_news_item');
|
||||
|
||||
$db_order = vartrue($params['db_order'], 'news_datestamp DESC');
|
||||
$db_limit = vartrue($params['db_limit'], '0,10');
|
||||
|
||||
|
||||
$query = "SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n
|
||||
LEFT JOIN #user AS u ON n.news_author = u.user_id
|
||||
LEFT JOIN #news_category AS nc ON n.news_category = nc.category_id
|
||||
WHERE{$where} n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
|
||||
{$where}
|
||||
ORDER BY ".$db_order." LIMIT ".$db_limit;
|
||||
|
||||
$this->setParam('db_query', $query);
|
||||
|
||||
return parent::load($force);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load active joined tree by category id
|
||||
*
|
||||
* @param integer $category_id
|
||||
* @param boolean $force
|
||||
* @param array $params DB query parameters
|
||||
* @return e_news_tree
|
||||
*/
|
||||
public function loadJoinActive($category_id = 0, $force = false, $params = array())
|
||||
{
|
||||
$where = vartrue($params['db_where']);
|
||||
|
||||
$nobody_regexp = "'(^|,)(".str_replace(",", "|", e_UC_NOBODY).")(,|$)'";
|
||||
$time = time();
|
||||
|
||||
$where = ($where ? ' AND ' : '')."n.news_start < {$time} AND (n.news_end=0 || n.news_end>{$time})
|
||||
AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$nobody_regexp.")
|
||||
ORDER BY ".e107::getParser()->toDB($order)." LIMIT ".intval($limit_from).",".intval($limit_to);
|
||||
|
||||
$tree = array();
|
||||
if(e107::getDb()->db_Select_gen($query))
|
||||
{
|
||||
$this->_tree_db_total[$category_id] = (integer) e107::getDb()->total_results;
|
||||
|
||||
while (true)
|
||||
{
|
||||
$row = e107::getDb()->db_Fetch();
|
||||
if(!$row)
|
||||
{
|
||||
break;
|
||||
}
|
||||
$tree[$row['news_id']] = new e_news_item($row);
|
||||
}
|
||||
}
|
||||
$this->setTree($tree);
|
||||
";
|
||||
|
||||
return $this->loadJoin($category_id, $force, $params);
|
||||
}
|
||||
|
||||
return $this;
|
||||
/**
|
||||
* Render Category tree
|
||||
*
|
||||
* @param array $template
|
||||
* @param array $parms [return, parsesc=>1|0, mode=>string]
|
||||
* @param boolean $tablerender
|
||||
* @return string
|
||||
*/
|
||||
function render($template = array(), $parms = array(), $tablerender = true)
|
||||
{
|
||||
if(!$this->hasTree())
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
function isTree($category_id = null)
|
||||
$ret = array();
|
||||
$tp = e107::getParser();
|
||||
$param['current_action'] = 'list';
|
||||
// TODO more default parameters
|
||||
|
||||
$bullet = defined('BULLET') ? THEME_ABS.'images/'.BULLET : THEME_ABS.'images/bullet2.gif';
|
||||
$vars = new e_vars(array(
|
||||
'bullet' => $bullet,
|
||||
'total' => $this->getTotal(),
|
||||
'currentTotal' => count($this->getTree()),
|
||||
));
|
||||
|
||||
$parser = e107::getParser();
|
||||
$batch = e107::getScBatch('news')
|
||||
->setScVar('param', $param);
|
||||
|
||||
$i = 1;
|
||||
foreach ($this->getTree() as $news)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
$vars->counter = $i;
|
||||
$batch->setScVar('news_item', $news->getData());
|
||||
$ret[] = $parser->parseTemplate($template['item'], true, $obj, $vars);
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $this->isData('__tree/'.$category_id);
|
||||
if($ret)
|
||||
{
|
||||
$separator = varset($template['separator'], '');
|
||||
$ret = $parser->simpleParse($template['start'], $vars).implode($separator, $ret).$parser->simpleParse($template['end'], $vars);
|
||||
$return = isset($parms['return']) ? true : false;
|
||||
|
||||
if($tablerender)
|
||||
{
|
||||
$caption = vartrue($parms['caption']) ? defset($parms['caption'], $parms['caption']) : LAN_NEWSLATEST_MENU_TITLE; // found in plugins/news/languages/English.php
|
||||
$mod = true === $tablerender ? 'news_latest_menu' : $tablerender;
|
||||
return e107::getRender()->tablerender($caption, $ret, varset($parms['mode'], $mod), $return);
|
||||
}
|
||||
|
||||
function isNode($name, $category_id = null)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
return $this->isData('__tree/'.$category_id.'/'.$name);
|
||||
if($return) return $ret;
|
||||
echo $ret;
|
||||
}
|
||||
|
||||
function hasNode($name, $category_id = null)
|
||||
{
|
||||
if(null === $category_id)
|
||||
{
|
||||
$category_id = $this->_current_category_id;
|
||||
}
|
||||
return $this->hasData('__tree/'.$category_id.'/'.$name);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1066,23 +808,6 @@ class e_news_category_tree extends e_front_tree_model
|
||||
->setModelTable('news_category');
|
||||
|
||||
return parent::load($force);
|
||||
|
||||
// $qry = "SELECT * FROM #news_category ORDER BY category_order ASC";
|
||||
|
||||
// $tree = array();
|
||||
// $sql = e107::getDb();
|
||||
// $sql->db_Mark_Time('news_category_tree');
|
||||
|
||||
// if($sql->db_Select_gen($qry))
|
||||
// {
|
||||
// while($row = $sql->db_Fetch())
|
||||
// {
|
||||
// $tree[$row['category_id']] = new e_news_category_item($row);
|
||||
// }
|
||||
// }
|
||||
// $this->setTree($tree);
|
||||
|
||||
// return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1117,39 +842,23 @@ class e_news_category_tree extends e_front_tree_model
|
||||
$this->setModelTable('news_category');
|
||||
|
||||
return parent::load($force);
|
||||
|
||||
// $tree = array();
|
||||
// $sql = e107::getDb();
|
||||
// $sql->db_Mark_Time('news_category_tree');
|
||||
|
||||
// if($sql->db_Select_gen($qry))
|
||||
// {
|
||||
// while($row = $sql->db_Fetch())
|
||||
// {
|
||||
// $tree[$row['category_id']] = new e_news_category_item($row);
|
||||
// }
|
||||
// }
|
||||
// $this->setTree($tree);
|
||||
|
||||
// return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render Category tree
|
||||
*
|
||||
* @param array $template
|
||||
* @param array $parms [return, parsesc=>1|0, mode=>string]
|
||||
* @param boolean $tablerender
|
||||
* @param array $force_template template override
|
||||
* @return string
|
||||
*/
|
||||
function render($parms = array(), $tablerender = true, $force_template = array())
|
||||
function render($template = array(), $parms = array(), $tablerender = true)
|
||||
{
|
||||
if(!$this->hasTree())
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
$template = $force_template; //TODO template search, more template freedom, tree shortcodes
|
||||
$ret = array();
|
||||
$tp = e107::getParser();
|
||||
|
||||
@@ -1162,14 +871,15 @@ class e_news_category_tree extends e_front_tree_model
|
||||
$tmp = explode('.', e_QUERY);
|
||||
if(vartrue($tmp[1])) $active = $tmp[1];
|
||||
}
|
||||
|
||||
$bullet = defined('BULLET') ? THEME_ABS.'images/'.BULLET : THEME_ABS.'images/bullet2.gif';
|
||||
$obj = new e_vars(array('bullet' => $bullet));
|
||||
|
||||
foreach ($this->getTree() as $cat)
|
||||
{
|
||||
$obj = null;
|
||||
$obj->active = '';
|
||||
if($active && $active == $cat->getId())
|
||||
{
|
||||
$obj = new e_vars(array('active' => ' active'));
|
||||
$obj->active = ' active';
|
||||
}
|
||||
|
||||
$ret[] = $cat->toHTML($template['item'], $parsesc, $obj);
|
||||
@@ -1178,7 +888,7 @@ class e_news_category_tree extends e_front_tree_model
|
||||
if($ret)
|
||||
{
|
||||
$separator = varset($template['separator'], '');
|
||||
$ret = implode($separator, $ret);
|
||||
$ret = $template['start'].implode($separator, $ret).$templatep['end'];
|
||||
$return = isset($parms['return']) ? true : false;
|
||||
|
||||
if($tablerender)
|
||||
|
Reference in New Issue
Block a user