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