From c0df5fef12882707b24001df5c89fe6c7e77fb7c Mon Sep 17 00:00:00 2001 From: secretr Date: Mon, 14 Sep 2009 18:22:16 +0000 Subject: [PATCH] News front-end done - SEO, real SEF URLs (category list, item view), default item view changed to 'extend', default category list changed to 'list', comments are rendered now by news code, new and improved news shortcodes --- class2.php | 6 +- e107.htaccess | 19 +- e107_admin/newspost.php | 30 +-- .../core/news/apache_mod_rewrite/main.php | 89 ++++++- e107_files/e_url/core/news/main.php | 12 +- .../shortcode/batch/news_shortcodes.php | 47 +++- e107_handlers/e107_class.php | 7 +- e107_handlers/news_class.php | 128 ++++++++-- e107_languages/English/lan_news.php | 7 +- news.php | 219 +++++++++++++++--- 10 files changed, 467 insertions(+), 97 deletions(-) diff --git a/class2.php b/class2.php index 8b73af090..ca7f9f3b0 100644 --- a/class2.php +++ b/class2.php @@ -9,8 +9,8 @@ * General purpose file * * $Source: /cvs_backup/e107_0.8/class2.php,v $ -* $Revision: 1.142 $ -* $Date: 2009-09-13 10:29:56 $ +* $Revision: 1.143 $ +* $Date: 2009-09-14 18:22:15 $ * $Author: secretr $ * */ @@ -84,7 +84,7 @@ if($register_globals == true) } define('e_AJAX_REQUEST', isset($_REQUEST['ajax_used'])); -$_REQUEST['ajax_used'] = ''; unset($_REQUEST['ajax_used']); +unset($_REQUEST['ajax_used']); if(isset($_E107['minimal']) || e_AJAX_REQUEST) { diff --git a/e107.htaccess b/e107.htaccess index 8edbcbea8..3c5d70424 100644 --- a/e107.htaccess +++ b/e107.htaccess @@ -3,7 +3,7 @@ Options +FollowSymLinks RewriteEngine On -### Set this to your e107 site root +### Set this to your e107 site root, path relative to web root RewriteBase / ### send 404 on missing files in these folders @@ -15,15 +15,18 @@ RewriteCond %{REQUEST_FILENAME} !-l ### NEWS SEF URLs - set 'news' to the 'URL identifier' value (news Administration area) ### + RewriteRule ^news/?$ news.php [L] RewriteRule ^news/(.*)$ news.php?rewrite=$1 [L] + + ## Use this on your own risk. + ## Quick & dirty solution for news rewrite without (empty) 'URL identifier', + ## extremely useful for blog site owners + ## Keep in mind it should be your last RewriteRule! + ## You also might want to change your Front page (administration) to your site root, e.g. '/' + #DirectoryIndex news.php index.php index.html + #RewriteRule ^(.*)$ news.php?rewrite=$1 [L] + -### REMOVE ### -RewriteRule ^news/?$ news.php -#item, default, cat actions -#RewriteRule ^news/([a-z]+)-([0-9]+)-([0-9]+)(\.html)?$ news.php?$1.$2.$3 [L] -#extend, cat, list actions -#RewriteRule ^news/([a-z]+)-([0-9]+)(\.html)?$ news.php?$1.$2 [L] -### REMOVE END ### #ErrorDocument 400 /error.php?400 diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php index d28d2306f..f2080774c 100644 --- a/e107_admin/newspost.php +++ b/e107_admin/newspost.php @@ -9,8 +9,8 @@ * News Administration * * $Source: /cvs_backup/e107_0.8/e107_admin/newspost.php,v $ - * $Revision: 1.52 $ - * $Date: 2009-09-13 16:37:17 $ + * $Revision: 1.53 $ + * $Date: 2009-09-14 18:22:15 $ * $Author: secretr $ */ require_once("../class2.php"); @@ -1133,7 +1133,7 @@ class admin_newspost $row = e107::getDb()->db_Fetch(); $_POST['news_title'] = $row['news_title']; - $_POST['data'] = $row['news_body']; + $_POST['news_body'] = $row['news_body']; $_POST['news_author'] = $row['news_author']; $_POST['news_extended'] = $row['news_extended']; $_POST['news_allow_comments'] = $row['news_allow_comments']; @@ -1194,23 +1194,23 @@ class admin_newspost { if ($sql->db_Select("submitnews", "*", "submitnews_id=".$this->getId(), TRUE)) { - //list($id, $submitnews_name, $submitnews_email, $_POST['news_title'], $submitnews_category, $_POST['data'], $submitnews_datestamp, $submitnews_ip, $submitnews_auth, $submitnews_file) = $sql->db_Fetch(); + //list($id, $submitnews_name, $submitnews_email, $_POST['news_title'], $submitnews_category, $_POST['news_body'], $submitnews_datestamp, $submitnews_ip, $submitnews_auth, $submitnews_file) = $sql->db_Fetch(); $row = $sql->db_Fetch(); $_POST['news_title'] = $row['submitnews_title']; - $_POST['data'] = $row['submitnews_item']; + $_POST['news_body'] = $row['submitnews_item']; $_POST['cat_id'] = $row['submitnews_category']; if (defsettrue('e_WYSIWYG')) { - if (substr($_POST['data'],-7,7) == '[/html]') $_POST['data'] = substr($_POST['data'],0,-7); - if (substr($_POST['data'],0,6) == '[html]') $_POST['data'] = substr($_POST['data'],6); - $_POST['data'] .= "
".NWSLAN_49." {$row['submitnews_name']}"; - $_POST['data'] .= ($row['submitnews_file'])? "

": ''; + if (substr($_POST['news_body'],-7,7) == '[/html]') $_POST['news_body'] = substr($_POST['news_body'],0,-7); + if (substr($_POST['news_body'],0,6) == '[html]') $_POST['news_body'] = substr($_POST['news_body'],6); + $_POST['news_body'] .= "
".NWSLAN_49." {$row['submitnews_name']}"; + $_POST['news_body'] .= ($row['submitnews_file'])? "

": ''; } else { - $_POST['data'] .= "\n[[b]".NWSLAN_49." {$row['submitnews_name']}[/b]]"; - $_POST['data'] .= ($row['submitnews_file'])?"\n\n[img]{e_NEWSIMAGE}{$row['submitnews_file']}[/img]": ""; + $_POST['news_body'] .= "\n[[b]".NWSLAN_49." {$row['submitnews_name']}[/b]]"; + $_POST['news_body'] .= ($row['submitnews_file'])?"\n\n[img]{e_NEWSIMAGE}{$row['submitnews_file']}[/img]": ""; } } @@ -1226,7 +1226,7 @@ class admin_newspost //XXX DB UPLOADS STILL SUPPORTED? $upload_file = "pub_" . (preg_match('#Binary\s(.*?)\/#', $row['upload_file'], $match) ? $match[1] : $row['upload_file']); $_POST['news_title'] = LAN_UPLOAD.": ".$row['upload_name']; - $_POST['data'] = $row['upload_description']."\n[b]".NWSLAN_49." [link=".$e107->url->getUrl('core:user', 'main', 'id='.$post_author_id)."]".$post_author_name."[/link][/b]\n\n[file=request.php?".$upload_file."]{$row['upload_name']}[/file]\n"; + $_POST['news_body'] = $row['upload_description']."\n[b]".NWSLAN_49." [link=".$e107->url->getUrl('core:user', 'main', 'id='.$post_author_id)."]".$post_author_name."[/link][/b]\n\n[file=request.php?".$upload_file."]{$row['upload_name']}[/file]\n"; } } @@ -1353,8 +1353,8 @@ class admin_newspost ".NWSLAN_13.":
"; - $val = (strstr($tp->post_toForm($_POST['data']), "[img]http") ? $tp->post_toForm($_POST['data']) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['data']))); - $text .= $frm->bbarea('data', $val, 'news', 'helpb'); + $val = (strstr($tp->post_toForm($_POST['news_body']), "[img]http") ? $tp->post_toForm($_POST['news_body']) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['news_body']))); + $text .= $frm->bbarea('news_body', $val, 'news', 'helpb'); // Extended news form textarea // Fixes Firefox issue with hidden wysiwyg textarea. @@ -1751,7 +1751,7 @@ class admin_newspost $_POST['comment_total'] = $id ? $e107->sql->db_Count("comments", "(*)", " WHERE comment_item_id={$id} AND comment_type='0'") : 0; $_PR = $_POST; - $_PR['news_body'] = $e107->tp->post_toHTML($_PR['data'],FALSE); + $_PR['news_body'] = $e107->tp->post_toHTML($_PR['news_body'],FALSE); $_PR['news_title'] = $e107->tp->post_toHTML($_PR['news_title'],FALSE,"emotes_off, no_make_clickable"); $_PR['news_summary'] = $e107->tp->post_toHTML($_PR['news_summary']); $_PR['news_extended'] = $e107->tp->post_toHTML($_PR['news_extended']); diff --git a/e107_files/e_url/core/news/apache_mod_rewrite/main.php b/e107_files/e_url/core/news/apache_mod_rewrite/main.php index 4991db54c..f0e38b6b5 100644 --- a/e107_files/e_url/core/news/apache_mod_rewrite/main.php +++ b/e107_files/e_url/core/news/apache_mod_rewrite/main.php @@ -1,14 +1,30 @@ 'Go to News front page'); //TODO - LANs + session_write_close(); + header('HTTP/1.1 404 Not Found', true); + header('Location: '.SITEURL.'error.php?404'); + exit; + } + + $parsed = array(); + switch($sefdata['news_rewrite_type']) + { + case '2': //Category list + $parsed = array('list', $sefdata['news_rewrite_source']); + break; + + case '1': //Item view + $parsed = array('extend', $sefdata['news_rewrite_source']); + break; + } + + if(count($chinks) > 1) + { + + $parsed = array_merge($parsed, array_slice($chunks, 1)); + } + + $_parsed_request[$request_str] = $parsed; + return $_parsed_request[$request_str]; +} + diff --git a/e107_files/e_url/core/news/main.php b/e107_files/e_url/core/news/main.php index 12487e6a7..3929b4dd4 100644 --- a/e107_files/e_url/core/news/main.php +++ b/e107_files/e_url/core/news/main.php @@ -1,10 +1,15 @@ e107->tp->toHTML($this->news_item['news_extended'], true, 'BODY, fromadmin', $this->news_item['news_author']); $news_body .= '

'.$news_extended; } + return $news_body; } @@ -107,11 +108,17 @@ class news_shortcodes $news_item = $this->news_item; $param = $this->param; + if($param['current_action'] == 'extend') + { + return ''; + } + if (varsettrue($pref['multilanguage'])) { // Can have multilanguage news table, monlingual comment table. If the comment table is multilingual, it'll only count entries in the current language - $news_item['news_comment_total'] = $sql->db_Select("comments", "*", "comment_item_id='".$news_item['news_id']."' AND comment_type='0' "); + $news_item['news_comment_total'] = $sql->db_Count("comments", "(*)", "WHERE comment_item_id='".$news_item['news_id']."' AND comment_type='0' "); } - + + //XXX - ??? - another query? We should cache it in news table. if ($pref['comments_icon'] && $news_item['news_comment_total']) { $sql->db_Select('comments', 'comment_datestamp', "comment_item_id='".intval($news_item['news_id'])."' AND comment_type='0' ORDER BY comment_datestamp DESC LIMIT 0,1"); @@ -130,7 +137,7 @@ class news_shortcodes { $NEWIMAGE = $param['image_nonew_small']; } - return (!$news_item['news_allow_comments'] ? ''.($pref['comments_icon'] ? $NEWIMAGE : '')." ".$param['commentlink'].$news_item['news_comment_total'].'' : $param['commentoffstring']); + return (!$news_item['news_allow_comments'] ? ''.($pref['comments_icon'] ? $NEWIMAGE : '')." ".$param['commentlink'].$news_item['news_comment_total'].'' : $param['commentoffstring']); } function sc_trackback($parm) @@ -184,7 +191,7 @@ class news_shortcodes function sc_newscommentlink($parm) { - return ($this->news_item['news_allow_comments'] ? $this->param['commentoffstring'] : " ".$this->param['commentlink'].''); + return ($this->news_item['news_allow_comments'] ? $this->param['commentoffstring'] : " news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$this->param['commentlink'].''); } function sc_newscommentcount($parm) @@ -220,8 +227,8 @@ class news_shortcodes { if (ADMIN && getperms('H')) { - $adop_icon = (file_exists(THEME."images/newsedit.png") ? THEME_ABS."images/newsedit.png" : e_IMAGE_ABS."generic/newsedit.png"); - return " \n"; + $adop_icon = (file_exists(THEME."images/newsedit.png") ? THEME_ABS."images/newsedit.png" : e_IMAGE_ABS."admin_images/edit_16.png"); + return " ".LAN_NEWS_25."\n"; } else { @@ -256,19 +263,19 @@ class news_shortcodes function sc_captionclass() { $news_title = $this->e107->tp->toHTML($this->news_item['news_title'], TRUE,'no_hook,emotes_off, no_make_clickable'); - return "
".($this->news_item['news_render_type'] == 1 ? "".$news_title."" : $news_title)."
"; + return "
".($this->news_item['news_render_type'] == 1 ? "news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$news_title."" : $news_title)."
"; } function sc_admincaption() { $news_title = $this->e107->tp->toHTML($this->news_item['news_title'], TRUE,'no_hook,emotes_off, no_make_clickable'); - return "
".($this->news_item['news_render_type'] == 1 ? "".$news_title."" : $news_title)."
"; + return "
".($this->news_item['news_render_type'] == 1 ? "news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$news_title."" : $news_title)."
"; } function sc_adminbody($parm) { $news_body = $this->sc_newsbody($parm); - return "
".$news_body.'
'; + return "
".$news_body.'
'; } function sc_newssummary() @@ -359,6 +366,26 @@ class news_shortcodes break; } } + + /** + * Example usage: {NEWSITEM_SCHOOK=mysc_name|my_var1=val1&myvar2=myval2} + * will fire {MYSC_NAME=news_id=1&my_var1=val1&myvar2=myval2} + * Inside your 'MYSC_NAME' shortcode you are also able to access current item data this way + * + * $newsdata = e107::getRegistry('core/news/schook_data'); + * //returns array('data' => (array) $current_news_data, 'params' => array() $current_params) + * + * + * @param string $parm + * @return string + */ + function sc_newsitem_schook($parm) + { + $parm = explode('|', $parm, 2); + $parm[1] = 'news_id='.$this->news_item['news_id'].(varset($parm[1]) ? '&'.$parm[1] : ''); + e107::setRegistry('core/news/schook_data', array('data' => $this->news_item, 'params' => $this->param)); + return $this->e107->tp->parseTemplate('{'.strtoupper($parm[0]).'='.$parm[1].'}'); + } function sc_newsinfo() { diff --git a/e107_handlers/e107_class.php b/e107_handlers/e107_class.php index 685513641..aa9a1caa4 100644 --- a/e107_handlers/e107_class.php +++ b/e107_handlers/e107_class.php @@ -9,8 +9,8 @@ * e107 Main * * $Source: /cvs_backup/e107_0.8/e107_handlers/e107_class.php,v $ - * $Revision: 1.49 $ - * $Date: 2009-09-13 16:37:18 $ + * $Revision: 1.50 $ + * $Date: 2009-09-14 18:22:15 $ * $Author: secretr $ */ @@ -119,7 +119,8 @@ class e107 'e_menu' => '{e_HANDLER}menu_class.php', 'e107plugin' => '{e_HANDLER}plugin_class.php', 'xmlClass' => '{e_HANDLER}xml_class.php', - 'e107_traffic' => '{e_HANDLER}traffic_class.php' + 'e107_traffic' => '{e_HANDLER}traffic_class.php', + 'comment' => '{e_HANDLER}comment_class.php' ); /** diff --git a/e107_handlers/news_class.php b/e107_handlers/news_class.php index 082ec1608..7930aa81d 100644 --- a/e107_handlers/news_class.php +++ b/e107_handlers/news_class.php @@ -9,8 +9,8 @@ * News handler * * $Source: /cvs_backup/e107_0.8/e107_handlers/news_class.php,v $ - * $Revision: 1.22 $ - * $Date: 2009-09-13 16:37:18 $ + * $Revision: 1.23 $ + * $Date: 2009-09-14 18:22:15 $ * $Author: secretr $ */ @@ -340,6 +340,9 @@ class e_news_tree extends e_model } class news { + + protected static $_rewrite_data = array(); + protected static $_rewrite_map = null; //FIXME - LANs //TODO - synch WIKI docs, add rewrite data to the event data @@ -718,6 +721,97 @@ class news { 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); @@ -731,7 +825,7 @@ class news { ecache::set_sys("news_sefurl".$sefstr, $data, true); } - function render_newsitem($news, $mode = 'default', $n_restrict = '', $NEWS_TEMPLATE = '', $param='') + 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')) { @@ -756,19 +850,21 @@ class news { $news['comment_total'] = 0; } - if (!$param) - { - $param['caticon'] = ICONSTYLE; - $param['commentoffstring'] = COMMENTOFFSTRING; - $param['commentlink'] = COMMENTLINK; - $param['trackbackstring'] = (defined("TRACKBACKSTRING") ? TRACKBACKSTRING : ""); - $param['trackbackbeforestring'] = (defined("TRACKBACKBEFORESTRING") ? TRACKBACKBEFORESTRING : ""); - $param['trackbackafterstring'] = (defined("TRACKBACKAFTERSTRING") ? TRACKBACKAFTERSTRING : ""); - $param['itemlink'] = (defined("NEWSLIST_ITEMLINK")) ? NEWSLIST_ITEMLINK : ""; - $param['thumbnail'] =(defined("NEWSLIST_THUMB")) ? NEWSLIST_THUMB : "border:0px"; - $param['catlink'] = (defined("NEWSLIST_CATLINK")) ? NEWSLIST_CATLINK : ""; - $param['caticon'] = (defined("NEWSLIST_CATICON")) ? NEWSLIST_CATICON : ICONSTYLE; - } + $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'])) diff --git a/e107_languages/English/lan_news.php b/e107_languages/English/lan_news.php index 6c41f8ab6..40aaec509 100644 --- a/e107_languages/English/lan_news.php +++ b/e107_languages/English/lan_news.php @@ -4,9 +4,9 @@ | e107 website system - Language File. | | $Source: /cvs_backup/e107_0.8/e107_languages/English/lan_news.php,v $ -| $Revision: 1.1.1.1 $ -| $Date: 2006-12-02 04:34:39 $ -| $Author: mcfly_e107 $ +| $Revision: 1.2 $ +| $Date: 2009-09-14 18:22:16 $ +| $Author: secretr $ +----------------------------------------------------------------------------+ */ define("PAGE_NAME", "News"); @@ -36,6 +36,7 @@ define("LAN_NEWS_21", "News updated in database."); // define("LAN_NEWS_22", "Go to page: "); define("LAN_NEWS_23", "News Categories"); define("LAN_NEWS_24", "create pdf of this news item"); +define("LAN_NEWS_25", "Edit"); define("LAN_NEWS_82", "News - Category"); define("LAN_NEWS_83", "No news items at the moment - please check back soon."); diff --git a/news.php b/news.php index e43e1af43..6f2def42c 100644 --- a/news.php +++ b/news.php @@ -9,8 +9,8 @@ * News frontend * * $Source: /cvs_backup/e107_0.8/news.php,v $ - * $Revision: 1.19 $ - * $Date: 2009-09-13 16:37:18 $ + * $Revision: 1.20 $ + * $Date: 2009-09-14 18:22:15 $ * $Author: secretr $ */ @@ -39,17 +39,9 @@ if (!defined("ITEMVIEW")) define("ITEMVIEW", varset($pref['newsposts'],15)); } -/* -WORK IN PROGRESS -if(isset($_GET['rewrite'])) -{ - $query = $_GET['rewrite']; -} -var_dump($query);*/ - if (e_QUERY) { - $tmp = explode(".", e_QUERY); + $tmp = e107::getUrl()->parseRequest('core:news', 'main', urldecode(e_QUERY)); $action = $tmp[0]; // At least one parameter here $sub_action = varset($tmp[1],''); // Usually a numeric category, but don't presume yet $id = varset($tmp[2],''); // ID of specific news item where required @@ -62,6 +54,7 @@ if (e_QUERY) // Usually the first query parameter is the action. // For any of the 'list' modes (inc month, day), the action being second is a legacy situation // .... which can hopefully go sometime +//SecretR: Gone, gone... if (is_numeric($action) && isset($tmp[1]) && (($tmp[1] == 'list') || ($tmp[1] == 'month') || ($tmp[1] == 'day'))) { $action = $tmp[1]; @@ -87,6 +80,19 @@ Variables Used: $ix = new news; $nobody_regexp = "'(^|,)(".str_replace(",", "|", e_UC_NOBODY).")(,|$)'"; +//Add rewrite search to db queries only if needed +$rewrite_join = $rewrite_cols = $rewrite_join_cat = $rewrite_cols_cat = ''; +if(NEWS_REWRITE) +{ + //item + $rewrite_join = 'LEFT JOIN #news_rewrite AS nr ON n.news_id=nr.news_rewrite_source AND nr.news_rewrite_type=1'; + $rewrite_cols = ', nr.*'; + + //category + $rewrite_join_cat = 'LEFT JOIN #news_rewrite AS ncr ON n.news_category=ncr.news_rewrite_source AND ncr.news_rewrite_type=2'; + $rewrite_cols_cat = ', ncr.news_rewrite_id AS news_category_rewrite_id, ncr.news_rewrite_string AS news_category_rewrite_string '; +} + //------------------------------------------------------ // DISPLAY NEWS IN 'CATEGORY' FORMAT HERE //------------------------------------------------------ @@ -114,9 +120,14 @@ if ($action == 'cat' || $action == 'all') if(!defined("NEWSALL_LIMIT")) { define("NEWSALL_LIMIT",10); } // show archive of all news items using list-style template. $news_total = $sql->db_Count("news", "(*)", "WHERE news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (news_class REGEXP ".$nobody_regexp.") AND news_start < ".time()." AND (news_end=0 || news_end>".time().")"); - $query = "SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, + nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 + {$rewrite_join} + {$rewrite_join_cat} WHERE 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().") ORDER BY n.news_sticky DESC, n.news_datestamp DESC @@ -128,17 +139,29 @@ if ($action == 'cat' || $action == 'all') // show archive of all news items in a particular category using list-style template. $news_total = $sql->db_Count("news", "(*)", "WHERE news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (news_class REGEXP ".$nobody_regexp.") AND news_start < ".time()." AND (news_end=0 || news_end>".time().") AND news_category=".intval($sub_action)); if(!defined("NEWSLIST_LIMIT")) { define("NEWSLIST_LIMIT",10); } - $query = "SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, nc.category_meta_keywords, + nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$nobody_regexp.") + {$rewrite_join} + {$rewrite_join_cat} + WHERE n.news_category=".intval($sub_action)." AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().") - AND n.news_category=".intval($sub_action)." + AND n.news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (n.news_class REGEXP ".$nobody_regexp.") ORDER BY n.news_datestamp DESC LIMIT ".intval($newsfrom).",".NEWSLIST_LIMIT; } - - if($category_name) + + $newsList = array(); + if($sql->db_Select_gen($query)) + { + $newsList = $sql->db_getList(); + } + + if($action == 'cat') setNewsFrontMeta($newsList[1], 'category'); + elseif($category_name) { define("e_PAGETITLE", $tp->toHTML($category_name,FALSE,"TITLE")); } @@ -167,12 +190,14 @@ if ($action == 'cat' || $action == 'all') \n"; } + + $param = array(); $param['itemlink'] = (defined("NEWSLIST_ITEMLINK")) ? NEWSLIST_ITEMLINK : ""; $param['thumbnail'] =(defined("NEWSLIST_THUMB")) ? NEWSLIST_THUMB : "border:0px"; $param['catlink'] = (defined("NEWSLIST_CATLINK")) ? NEWSLIST_CATLINK : ""; $param['caticon'] = (defined("NEWSLIST_CATICON")) ? NEWSLIST_CATICON : ICONSTYLE; - $sql->db_Select_gen($query); - $newsList = $sql->db_getList(); + $param['current_action'] = $action; + foreach($newsList as $row) { $text .= $ix->render_newsitem($row, 'return', '', $NEWSLISTSTYLE, $param); @@ -218,10 +243,15 @@ if ($action == "extend") if(isset($pref['trackbackEnabled']) && $pref['trackbackEnabled']) { - $query = "SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, + nc.category_icon, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 LEFT JOIN #trackback AS tb ON tb.trackback_pid = n.news_id + {$rewrite_join} + {$rewrite_join_cat} WHERE n.news_id=".intval($sub_action)." 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().") @@ -229,14 +259,38 @@ if ($action == "extend") } else { - $query = "SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, nc.category_meta_keywords, + nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 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().") AND n.news_id=".intval($sub_action); + {$rewrite_join} + {$rewrite_join_cat} + WHERE 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().") + AND n.news_id=".intval($sub_action); } $sql->db_Select_gen($query); $news = $sql->db_Fetch(); - + + //***NEW [SecretR] - comments handled inside now + if(!$news['news_allow_comments'] && isset($_POST['commentsubmit'])) + { + $pid = intval(varset($_POST['pid'], 0)); // ID of the specific comment being edited (nested comments - replies) + + $clean_authorname = $_POST['author_name']; + $clean_comment = $_POST['comment']; + $clean_subject = $_POST['subject']; + + e107::getSingleton('comment')->enter_comment($clean_authorname, $clean_comment, 'news', $sub_action, $pid, $clean_subject); + } + + //More SEO + setNewsFrontMeta($news); + /* if($news['news_title']) { if($pref['meta_news_summary'] && $news['news_title']) @@ -244,11 +298,21 @@ if ($action == "extend") define("META_DESCRIPTION",SITENAME.": ".$news['news_title']." - ".$news['news_summary']); } define("e_PAGETITLE",$news['news_title']); - } + }*/ require_once(HEADERF); + + $param = array(); + $param['current_action'] = $action; + ob_start(); - $ix->render_newsitem($news, "extend"); + $ix->render_newsitem($news, 'extend', '', '', $param); + if(!$news['news_allow_comment']) + { + global $comment_edit_query; //FIXME - kill me + $comment_edit_query = 'comment.news.'.$news['news_id']; + e107::getSingleton('comment')->compose_comment('news', 'comment', $news['news_id'], null, $news['news_title'], FALSE); + } $cache_data = ob_get_contents(); ob_end_flush(); setNewsCache($cacheString, $cache_data); @@ -274,9 +338,14 @@ switch ($action) case "list" : $sub_action = intval($sub_action); // $news_total = $sql->db_Count("news", "(*)", "WHERE news_category={$sub_action} AND news_class REGEXP '".e_CLASS_REGEXP."' AND NOT (news_class REGEXP ".$nobody_regexp.") AND news_start < ".time()." AND (news_end=0 || news_end>".time().")"); - $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 + $query = " + SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, + nc.category_icon, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 + {$rewrite_join} + {$rewrite_join_cat} WHERE 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().") AND n.news_category={$sub_action} @@ -289,19 +358,29 @@ switch ($action) $news_total = 1; if(isset($pref['trackbackEnabled']) && $pref['trackbackEnabled']) { - $query = "SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, + nc.category_icon, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 LEFT JOIN #trackback AS tb ON tb.trackback_pid = n.news_id + {$rewrite_join} + {$rewrite_join_cat} WHERE n.news_id={$sub_action} 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().") GROUP by n.news_id"; } else { - $query = "SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon FROM #news AS n + $query = " + SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, + nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 + {$rewrite_join} + {$rewrite_join_cat} WHERE n.news_id={$sub_action} 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().")"; } @@ -324,9 +403,14 @@ switch ($action) } $startdate = mktime(0, 0, 0, $month, $day, $year); $enddate = mktime(23, 59, 59, $month, $lastday, $year); - $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 + $query = " + SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, + nc.category_icon, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 + {$rewrite_join} + {$rewrite_join_cat} WHERE 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().") AND n.news_render_type<2 AND n.news_datestamp > {$startdate} AND n.news_datestamp < {$enddate} @@ -347,10 +431,16 @@ switch ($action) // Get number of news item to show if(isset($pref['trackbackEnabled']) && $pref['trackbackEnabled']) { - $query = "SELECT SQL_CALC_FOUND_ROWS COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, COUNT(*) AS tbcount FROM #news AS n + $query = " + SELECT SQL_CALC_FOUND_ROWS COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, + nc.category_name, nc.category_icon, nc.category_meta_keywords, nc.category_meta_description, + COUNT(*) AS tbcount{$rewrite_cols_cat}{$rewrite_cols} + 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 LEFT JOIN #trackback AS tb ON tb.trackback_pid = n.news_id + {$rewrite_join} + {$rewrite_join_cat} WHERE 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().") AND n.news_render_type<2 @@ -359,9 +449,14 @@ switch ($action) } else { - $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 + $query = " + SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_name, nc.category_icon, + nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols} + 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 + {$rewrite_join} + {$rewrite_join_cat} WHERE 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().") AND n.news_render_type<2 @@ -421,14 +516,24 @@ $frows = $sql -> db_Fetch(); $p_title = ($action == "item") ? $newsAr[1]['news_title'] : $tp->toHTML($newsAr[1]['category_name'],FALSE,"TITLE"); -if($action != "" && !is_numeric($action)) +switch($action) +{ + case 'item': + setNewsFrontMeta($newsAr[1]); + break; + case 'list': + setNewsFrontMeta($newsAr[1], 'category'); + break; +} + +/*if($action != "" && !is_numeric($action)) { if($action == "item" && $pref['meta_news_summary'] && $newsAr[1]['news_title']) { define("META_DESCRIPTION",SITENAME.": ".$newsAr[1]['news_title']." - ".$newsAr[1]['news_summary']); } define("e_PAGETITLE", $p_title); -} +}*/ require_once(HEADERF); if(!$action) @@ -456,13 +561,15 @@ if(isset($pref['news_unstemplate']) && $pref['news_unstemplate'] && file_exists( $newspercolumn = (isset($NEWSITEMSPERCOLUMN) ? $NEWSITEMSPERCOLUMN : 10); $newsdata = array(); $loop = 1; + $param = array(); + $param['current_action'] = $action; foreach($newsAr as $news) { if(is_array($ALTERNATECLASSES)) { $newsdata[$loop] .= "
".$ix->render_newsitem($news, "return")."
"; $ALTERNATECLASSES = array_reverse($ALTERNATECLASSES); } else { - $newsdata[$loop] .= $ix->render_newsitem($news, "return"); + $newsdata[$loop] .= $ix->render_newsitem($news, 'return', '', '', $param); } $loop ++; if($loop > $newscolumns) { @@ -501,7 +608,9 @@ else } // #### normal newsitems, rendered via render_newsitem(), the $query is changed above (no other changes made) --------- - + $param = array(); + $param['current_action'] = $action; + $i= 1; while(isset($newsAr[$i]) && $i <= $interval) { $news = $newsAr[$i]; @@ -518,7 +627,7 @@ else unset($news['news_render_type']); } - $ix->render_newsitem($news); + $ix->render_newsitem($news, 'default', '', '', $param); $i++; } @@ -679,4 +788,42 @@ function render_newscats(){ // -- CNN Style Categories. ---- } } +function setNewsFrontMeta($news, $type='news') +{ + if($type == 'news') + { + if($news['news_title'] && !defined('e_PAGETITLE')) + { + define('e_PAGETITLE', $news['news_title']); + } + + if($news['news_meta_keywords'] && !defined('META_KEYWORDS')) + { + define('META_KEYWORDS', $news['news_meta_keywords']); + } + + if($news['news_meta_description'] && !defined('META_DESCRIPTION')) + { + define('META_DESCRIPTION', $news['news_meta_description']); + } + return; + } + + if($news['category_name'] && !defined('e_PAGETITLE')) + { + define('e_PAGETITLE', $news['category_name']); + } + + if($news['category_meta_keywords'] && !defined('META_KEYWORDS')) + { + define('META_KEYWORDS', $news['category_meta_keywords']); + } + + if($news['category_meta_description'] && !defined('META_DESCRIPTION')) + { + define('META_DESCRIPTION', $news['category_meta_description']); + } +} + + ?> \ No newline at end of file