1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-02 20:57:26 +02:00

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

This commit is contained in:
secretr
2009-09-14 18:22:16 +00:00
parent 83e167422a
commit c0df5fef12
10 changed files with 467 additions and 97 deletions

View File

@@ -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)
{

View File

@@ -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]
### 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 ###
## 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]
</IfModule>
#ErrorDocument 400 /error.php?400

View File

@@ -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'] .= "<br /><b>".NWSLAN_49." {$row['submitnews_name']}</b>";
$_POST['data'] .= ($row['submitnews_file'])? "<br /><br /><img src='{e_NEWSIMAGE}{$row['submitnews_file']}' class='f-right' />": '';
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'] .= "<br /><b>".NWSLAN_49." {$row['submitnews_name']}</b>";
$_POST['news_body'] .= ($row['submitnews_file'])? "<br /><br /><img src='{e_NEWSIMAGE}{$row['submitnews_file']}' class='f-right' />": '';
}
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
<td class='label'>".NWSLAN_13.":<br /></td>
<td class='control'>";
$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']);

View File

@@ -1,14 +1,30 @@
<?php
/*
* Copyright e107 Inc e107.org, Licensed under GNU GPL (http://www.gnu.org/licenses/gpl.txt)
* $Id: main.php,v 1.3 2009-09-13 16:37:18 secretr Exp $
* $Id: main.php,v 1.4 2009-09-14 18:22:16 secretr Exp $
*
* eURL configuration script
*/
function url_news_main($parms)
if (!defined('e107_INIT')) { exit; }
require_once(e_HANDLER.'news_class.php');
define('NEWS_REWRITE', true);
function url_news_main($parms = array())
{
//$base = e_HTTP.$sefbase.$parms['action'];
$base = e_HTTP.(e107::getPref('news_sefbase') ? e107::getPref('news_sefbase').'/' : '');
if(isset($parms['sef']))
{
$parms['sef'] = urlencode($parms['sef']);
}
elseif(vartrue($parms['id']))
{
//'sef' is not set, which means we don't know it!
$parms['sef'] = urlencode(news::retrieveRewriteString($parms['id'], $parms['action']));
}
switch ($parms['action'])
{
//Main news page
@@ -48,3 +64,72 @@ function url_news_main($parms)
}
}
function parse_url_news_main($request)
{
static $_parsed_request = array();
$known_actions = array('cat', 'list', 'item', 'extend', 'default', 'month', 'day');
//runtime cache
if(isset($_parsed_request[$request]))
{
return $_parsed_request[$request];
}
$request_str = $request;
parse_str($request, $request);
if(!isset($request['rewrite']))
{
$_parsed_request[''] = array();
return array();
}
$chunks = explode('/', $request['rewrite']);
//action found in the request
if(in_array($chunks[0], $known_actions))
{
$_parsed_request[$request_str] = $chunks;
return $_parsed_request[$request_str];
}
//sef string
if(!($sefdata = news::getRewriteCache($chunks[0])))
{
$sefdata = news::retrieveRewriteData($chunks[0], true);
}
//not found - redirect
if(empty($sefdata))
{
if(!session_id()) session_start();
$_SESSION['e107_http_referer'] = ltrim(SITEURL, '/').url_news_main().$request['rewrite'];
$_SESSION['e107_error_return'] = array(url_news_main() => '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];
}

View File

@@ -1,10 +1,15 @@
<?php
/*
* Copyright e107 Inc e107.org, Licensed under GNU GPL (http://www.gnu.org/licenses/gpl.txt)
* $Id: main.php,v 1.4 2009-09-13 16:37:17 secretr Exp $
* $Id: main.php,v 1.5 2009-09-14 18:22:15 secretr Exp $
*
* eURL configuration script
*/
if (!defined('e107_INIT')) { exit; }
define('NEWS_REWRITE', false);
function url_news_main($parms)
{
$base = e_HTTP.'news.php?'.$parms['action'];
@@ -47,3 +52,8 @@ function url_news_main($parms)
}
}
function parse_url_news_main($request)
{
return explode('.', $request);
}

View File

@@ -1,7 +1,7 @@
<?php
/*
* Copyright e107 Inc e107.org, Licensed under GNU GPL (http://www.gnu.org/licenses/gpl.txt)
* $Id: news_shortcodes.php,v 1.26 2009-09-13 16:37:17 secretr Exp $
* $Id: news_shortcodes.php,v 1.27 2009-09-14 18:22:15 secretr Exp $
*
* News shortcode batch
*/
@@ -62,6 +62,7 @@ class news_shortcodes
$news_extended = $this->e107->tp->toHTML($this->news_item['news_extended'], true, 'BODY, fromadmin', $this->news_item['news_author']);
$news_body .= '<br /><br />'.$news_extended;
}
return $news_body;
}
@@ -107,11 +108,17 @@ class news_shortcodes
$news_item = $this->news_item;
$param = $this->param;
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' ");
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_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 : '')." <a href='".e_HTTP."comment.php?comment.news.".$news_item['news_id']."'>".$param['commentlink'].$news_item['news_comment_total'].'</a>' : $param['commentoffstring']);
return (!$news_item['news_allow_comments'] ? ''.($pref['comments_icon'] ? $NEWIMAGE : '')." <a href='".e107::getUrl()->create('core:news', 'main', 'action=extend&id='.$news_item['news_id'].'&sef='.$news_item['news_rewrite_string'])."'>".$param['commentlink'].$news_item['news_comment_total'].'</a>' : $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'] : " <a href='".e_HTTP."comment.php?comment.news.".$this->news_item['news_id']."'>".$this->param['commentlink'].'</a>');
return ($this->news_item['news_allow_comments'] ? $this->param['commentoffstring'] : " <a href='".e107::getUrl()->create('core:news', 'main', 'action=extend&id='.$this->news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$this->param['commentlink'].'</a>');
}
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 " <a href='".e_ADMIN_ABS."newspost.php?create.edit.".$this->news_item['news_id']."'><img src='".$adop_icon."' alt='' class='icon' /></a>\n";
$adop_icon = (file_exists(THEME."images/newsedit.png") ? THEME_ABS."images/newsedit.png" : e_IMAGE_ABS."admin_images/edit_16.png");
return " <a href='".e_ADMIN_ABS."newspost.php?create.edit.".$this->news_item['news_id']."'><img src='".$adop_icon."' alt='".LAN_NEWS_25."' class='icon' /></a>\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 "<div class='category".$this->news_item['news_category']."'>".($this->news_item['news_render_type'] == 1 ? "<a href='".e_HTTP."comment.php?comment.news.".$this->news_item['news_id']."'>".$news_title."</a>" : $news_title)."</div>";
return "<div class='category".$this->news_item['news_category']."'>".($this->news_item['news_render_type'] == 1 ? "<a href='".e107::getUrl()->create('core:news', 'main', 'action=extend&id='.$this->news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$news_title."</a>" : $news_title)."</div>";
}
function sc_admincaption()
{
$news_title = $this->e107->tp->toHTML($this->news_item['news_title'], TRUE,'no_hook,emotes_off, no_make_clickable');
return "<div class='".(defined(ADMINNAME) ? ADMINNAME : "null")."'>".($this->news_item['news_render_type'] == 1 ? "<a href='".e_HTTP."comment.php?comment.news.".$this->news_item['news_id']."'>".$news_title."</a>" : $news_title)."</div>";
return "<div class='".(defined('ADMINNAME') ? ADMINNAME : "null")."'>".($this->news_item['news_render_type'] == 1 ? "<a href='".e107::getUrl()->create('core:news', 'main', 'action=extend&id='.$this->news_item['news_id'].'&sef='.$this->news_item['news_rewrite_string'])."'>".$news_title."</a>" : $news_title)."</div>";
}
function sc_adminbody($parm)
{
$news_body = $this->sc_newsbody($parm);
return "<div class='".(defined(ADMINNAME) ? ADMINNAME : 'null')."'>".$news_body.'</div>';
return "<div class='".(defined('ADMINNAME') ? ADMINNAME : 'null')."'>".$news_body.'</div>';
}
function sc_newssummary()
@@ -360,6 +367,26 @@ class news_shortcodes
}
}
/**
* 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
* <code>
* $newsdata = e107::getRegistry('core/news/schook_data');
* //returns array('data' => (array) $current_news_data, 'params' => array() $current_params)
* </code>
*
* @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()
{
$news_item = $this->news_item;

View File

@@ -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'
);
/**

View File

@@ -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 $
*/
@@ -341,6 +341,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
function submit_item($news, $smessages = false)
@@ -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']))

View File

@@ -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.");

213
news.php
View File

@@ -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')
</div>\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] .= "<div class='{$ALTERNATECLASSES[0]}'>".$ix->render_newsitem($news, "return")."</div>";
$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,6 +608,8 @@ 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) {
@@ -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']);
}
}
?>