add('Validation error: News title can\'t be empty!', E_MESSAGE_ERROR, $smessages);
}
if(empty($news['news_category']))
{
$error = true;
$emessage->add('Validation error: News category can\'t be empty!', E_MESSAGE_ERROR, $smessages);
}
$data = array();
//DB Array
$data['data']['news_title'] = $news['news_title'];
$data['_FIELD_TYPES']['news_title'] = 'todb';
$data['data']['news_body'] = $news['news_body'];
$data['_FIELD_TYPES']['news_body'] = 'todb';
$data['data']['news_extended'] = $news['news_extended'];
$data['_FIELD_TYPES']['news_extended'] = 'todb';
$data['data']['news_datestamp'] = $news['news_datestamp'];
$data['_FIELD_TYPES']['news_datestamp'] = 'int';
$data['data']['news_author'] = $news['news_author'] ? $news['news_author'] : USERID;
$data['_FIELD_TYPES']['news_author'] = 'int';
$data['data']['news_category'] = $news['news_category'];
$data['_FIELD_TYPES']['news_category'] = 'int';
$data['data']['news_allow_comments'] = $news['news_allow_comments'];
$data['_FIELD_TYPES']['news_allow_comments'] = 'int';
$data['data']['news_start'] = $news['news_start'];
$data['_FIELD_TYPES']['news_start'] = 'int';
$data['data']['news_end'] = $news['news_end'];
$data['_FIELD_TYPES']['news_end'] = 'int';
$data['data']['news_class'] = $news['news_class'];
$data['_FIELD_TYPES']['news_class'] = 'todb';
$data['data']['news_render_type'] = $news['news_render_type'];
$data['_FIELD_TYPES']['news_render_type'] = 'int';
$data['data']['news_render_type'] = $news['news_render_type'];
$data['_FIELD_TYPES']['news_render_type'] = 'int';
//news_comment_total
$data['data']['news_summary'] = $news['news_summary'];
$data['_FIELD_TYPES']['news_summary'] = 'todb';
$data['data']['news_thumbnail'] = $news['news_thumbnail'];
$data['_FIELD_TYPES']['news_thumbnail'] = 'todb';
$data['data']['news_sticky'] = $news['news_sticky'];
$data['_FIELD_TYPES']['news_sticky'] = 'int';
$data['data']['news_summary'] = $news['news_summary'];
$data['_FIELD_TYPES']['news_summary'] = 'todb';
$data['data']['news_thumbnail'] = $news['news_thumbnail'];
$data['_FIELD_TYPES']['news_thumbnail'] = 'todb';
$data['data']['news_sticky'] = $news['news_sticky'];
$data['_FIELD_TYPES']['news_sticky'] = 'int';
$data['data']['news_meta_keywords'] = $news['news_meta_keywords'];
$data['_FIELD_TYPES']['news_meta_keywords'] = 'todb';
$data['data']['news_meta_description'] = strip_tags($tp->toHTML($news['news_meta_description'], true)); //handle bbcodes
$data['_FIELD_TYPES']['news_meta_description'] = 'todb';
$datarw = array();
$datarw['data']['news_rewrite_id'] = $news['news_rewrite_id'];
$datarw['_FIELD_TYPES']['news_rewrite_id'] = 'int';
$datarw['data']['news_rewrite_string'] = trim($news['news_rewrite_string']);
$datarw['_FIELD_TYPES']['news_rewrite_string'] = 'todb';
$datarw['data']['news_rewrite_type'] = 1;
$datarw['_FIELD_TYPES']['news_rewrite_type'] = 'int';
if($error)
{
$data['error'] = true;
return $data;
}
//XXX - Now hooks are executed only if no mysql error is found. Should it stay so?
if ($news['news_id'])
{
// Updating existing item
$data['WHERE'] = 'news_id='.intval($news['news_id']);
//$vals = "news_datestamp = '".intval($news['news_datestamp'])."', ".$author_insert." news_title='".$news['news_title']."', news_body='".$news['news_body']."', news_extended='".$news['news_extended']."', news_category='".intval($news['cat_id'])."', news_allow_comments='".intval($news['news_allow_comments'])."', news_start='".intval($news['news_start'])."', news_end='".intval($news['news_end'])."', news_class='".$tp->toDB($news['news_class'])."', news_render_type='".intval($news['news_rendertype'])."' , news_summary='".$news['news_summary']."', news_thumbnail='".$tp->toDB($news['news_thumbnail'])."', news_sticky='".intval($news['news_sticky'])."' WHERE news_id='".intval($news['news_id'])."' ";
if ($sql->db_Update('news', $data))
{
e107::getAdminLog()->logArrayAll('NEWS_09', $data['data']);
//manage rewrites
$data['data']['news_id'] = $news['news_id'];
if('error' === $this->handleRewriteSubmit('update', $data['data'], $datarw, $smessages))
{
$error = true;
}
e107::getEvent()->trigger('newsupd', $data['data']);
$message = LAN_NEWS_21;
$emessage->add(LAN_NEWS_21, E_MESSAGE_SUCCESS, $smessages);
e107::getCache()->clear('news.php');
//FIXME - triggerHook should return array(message, message_type)
$evdata = array('method'=>'update', 'table'=>'news', 'id'=>$news['news_id'], 'plugin'=>'news', 'function'=>'submit_item');
$emessage->add(e107::getEvent()->triggerHook($evdata), E_MESSAGE_INFO, $smessages);
}
else
{
if($sql->getLastErrorNumber())
{
$error = true;
$emessage->add(LAN_NEWS_5, E_MESSAGE_ERROR, $smessages);
$message = "".LAN_NEWS_5."";
}
else
{
$data['data']['news_id'] = $news['news_id'];
$check = $this->handleRewriteSubmit('update', $data['data'], $datarw, $smessages);
if ($check === true)
{
$message = LAN_NEWS_21;
$emessage->add(LAN_NEWS_21, E_MESSAGE_SUCCESS, $smessages);
}
elseif ($check === 'error')
{
$error = true;
}
else
{
$emessage->add(LAN_NEWS_46, E_MESSAGE_INFO, $smessages);
$message = "".LAN_NEWS_46."";
}
//FIXME - triggerHook should return array(message, message_type)
$evdata = array('method'=>'update', 'table'=>'news', 'id'=>$news['news_id'], 'plugin'=>'news', 'function'=>'submit_item');
$emessage->add(e107::getEvent()->triggerHook($evdata), E_MESSAGE_INFO, $smessages);
}
}
}
else
{
// Adding item
$data['data']['news_id'] = $sql->db_Insert('news', $data);
$news['news_id'] = $data['data']['news_id'];
//$news['news_id'] = $sql ->db_Insert('news', "0, '".$news['news_title']."', '".$news['news_body']."', '".$news['news_extended']."', ".intval($news['news_datestamp']).", ".intval($news['news_author']).", '".intval($news['cat_id'])."', '".intval($news['news_allow_comments'])."', '".intval($news['news_start'])."', '".intval($news['news_end'])."', '".$tp->toDB($news['news_class'])."', '".intval($news['news_rendertype'])."', '0' , '".$news['news_summary']."', '".$tp->toDB($news['news_thumbnail'])."', '".intval($news['news_sticky'])."' ")
if ($data['data']['news_id'])
{
//
$message = LAN_NEWS_6;
$emessage->add(LAN_NEWS_6, E_MESSAGE_SUCCESS, $smessages);
e107::getCache()->clear('news.php');
//moved down - prevent wrong mysql_insert_id
e107::getAdminLog()->logArrayAll('NEWS_08', $data['data']);
//manage rewrites
if('error' === $this->handleRewriteSubmit('insert', $data['data'], $datarw, $smessages))
{
$error = true;
}
e107::getEvent()->trigger('newspost', $data['data']);
//XXX - triggetHook after trigger?
$evdata = array('method'=>'create', 'table'=>'news', 'id'=>$data['data']['news_id'], 'plugin'=>'news', 'function'=>'submit_item');
$emessage->add($e_event->triggerHook($evdata), E_MESSAGE_INFO, $smessages);
}
else
{
$error = true;
$message = "".LAN_NEWS_7."";
$emessage->add(LAN_NEWS_7, E_MESSAGE_ERROR, $smessages);
}
}
/* FIXME - trackback should be hooked! */
if($news['news_id'] && $pref['trackbackEnabled'])
{
$excerpt = e107::getParser()->text_truncate(strip_tags(e107::getParser()->post_toHTML($news['news_body'])), 100, '...');
// $id=mysql_insert_id();
$permLink = $e107->base_path."comment.php?comment.news.".intval($news['news_id']);
require_once(e_PLUGIN."trackback/trackbackClass.php");
$trackback = new trackbackClass();
if($_POST['trackback_urls'])
{
$urlArray = explode("\n", $_POST['trackback_urls']);
foreach($urlArray as $pingurl)
{
if(!$terror = $trackback->sendTrackback($permLink, $pingurl, $news['news_title'], $excerpt))
{
$message .= "
successfully pinged {$pingurl}.";
$emessage->add("Successfully pinged {$pingurl}.", E_MESSAGE_SUCCESS, $smessages);
}
else
{
$message .= "
was unable to ping {$pingurl}
[ Error message returned was : '{$terror}'. ]";
$emessage->add("was unable to ping {$pingurl}
[ Error message returned was : '{$terror}'. ]", E_MESSAGE_ERROR, $smessages);
}
}
}
if(isset($_POST['pingback_urls']))
{
if ($urlArray = $trackback->getPingUrls($news['news_body'])) //FIXME - missing method!!!
{
foreach($urlArray as $pingurl)
{
if ($trackback -> sendTrackback($permLink, $pingurl, $news['news_title'], $excerpt))
{
$message .= "
successfully pinged {$pingurl}.";
$emessage->add("Successfully pinged {$pingurl}.", E_MESSAGE_SUCCESS, $smessages);
}
else
{
$message .= "Pingback to {$pingurl} failed ...";
$emessage->add("Pingback to {$pingurl} failed ...", E_MESSAGE_ERROR, $smessages);
}
}
}
else
{
$message .= "
No pingback addresses were discovered";
$emessage->add("No pingback addresses were discovered", E_MESSAGE_INFO, $smessages);
}
}
}
/* end trackback */
//return $message;
$data['message'] = $message;
$data['error'] = $error;
return $data;
}
/**
* Manage SEF URL string for current news
* 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)
{
$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 $e107, $tp, $sql, $override, $pref, $ns, $NEWSSTYLE, $NEWSLISTSTYLE, $news_shortcodes, $loop_uid;
if ($override_newsitem = $override -> override_check('render_newsitem')) {
$result = call_user_func($override_newsitem, $news, $mode, $n_restrict, $NEWS_TEMPLATE, $param);
if ($result == 'return')
{
return;
}
}
if (!is_object($e107->tp)) $e107->tp = new e_parse;
if ($n_restrict == 'userclass')
{
$news['news_id'] = 0;
$news['news_title'] = LAN_NEWS_1;
$news['data'] = LAN_NEWS_2;
$news['news_extended'] = "";
$news['news_allow_comments'] = 1;
$news['news_start'] = 0;
$news['news_end'] = 0;
$news['news_render_type'] = 0;
$news['comment_total'] = 0;
}
$tmp = array();
$tmp['caticon'] = ICONSTYLE;
$tmp['commentoffstring'] = COMMENTOFFSTRING;
$tmp['commentlink'] = COMMENTLINK;
$tmp['trackbackstring'] = (defined("TRACKBACKSTRING") ? TRACKBACKSTRING : "");
$tmp['trackbackbeforestring'] = (defined("TRACKBACKBEFORESTRING") ? TRACKBACKBEFORESTRING : "");
$tmp['trackbackafterstring'] = (defined("TRACKBACKAFTERSTRING") ? TRACKBACKAFTERSTRING : "");
$tmp['itemlink'] = (defined("NEWSLIST_ITEMLINK")) ? NEWSLIST_ITEMLINK : "";
$tmp['thumbnail'] =(defined("NEWSLIST_THUMB")) ? NEWSLIST_THUMB : "border:0px";
$tmp['catlink'] = (defined("NEWSLIST_CATLINK")) ? NEWSLIST_CATLINK : "";
$tmp['caticon'] = (defined("NEWSLIST_CATICON")) ? NEWSLIST_CATICON : ICONSTYLE;
if(!$param) $param = array();
$param = array_merge($tmp, $param);
// Next three images aren't always defined by the caller, even if most of $param is.
if (!isset($param['image_nonew_small']))
{
if (!defined("IMAGE_nonew_small"))
{
define("IMAGE_nonew_small", (file_exists(THEME."images/nonew_comments.png") ? " " : "
"));
}
$param['image_nonew_small'] = IMAGE_nonew_small;
}
if (!isset($param['image_new_small']))
{
if (!defined("IMAGE_new_small"))
{
define("IMAGE_new_small", (file_exists(THEME."images/new_comments.png") ? "
" : "
"));
}
$param['image_new_small'] = IMAGE_new_small;
}
if (!isset($param['image_sticky']))
{
if (!defined("IMAGE_sticky"))
{
define("IMAGE_sticky", (file_exists(THEME."images/sticky.png") ? "
" : "
"));
}
$param['image_sticky'] = IMAGE_sticky;
}
cachevars('current_news_item', $news);
cachevars('current_news_param', $param);
if ($news['news_render_type'] == 1 && $mode != "extend") {
if (function_exists("news_list")) {
$NEWS_PARSE = news_list($news);
} else if ($NEWSLISTSTYLE) {
$NEWS_PARSE = $NEWSLISTSTYLE;
} else {
$NEWS_PARSE = "{NEWSICON} {NEWSTITLELINK}