From a6adeca93c2a56898d9eff58ed816e1e3db564c0 Mon Sep 17 00:00:00 2001
From: SecretR <secretr@e107.org>
Date: Tue, 19 Feb 2013 18:36:58 +0200
Subject: [PATCH] Issue #106: News Category SEF

---
 e107_admin/newspost.php                       |  42 +++++-
 .../shortcodes/batch/news_shortcodes.php      |   7 +
 .../shortcodes/single/news_categories.sc      | 120 ++++++++++++------
 e107_core/shortcodes/single/news_category.sc  |   6 +-
 e107_handlers/form_handler.php                |   1 +
 e107_plugins/news/templates/news_template.php |  54 ++++++--
 news.php                                      |  64 ++++++----
 7 files changed, 210 insertions(+), 84 deletions(-)

diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php
index 9fdac3c42..ad0524661 100644
--- a/e107_admin/newspost.php
+++ b/e107_admin/newspost.php
@@ -92,19 +92,21 @@ class news_cat_ui extends e_admin_ui
 		protected $pid			= "category_id";
 		protected $perPage = 0; //no limit
 		protected $batchDelete = false;
+		protected $sortField = 'category_order';
+		protected $listOrder	= "category_order ASC";
 		
 		protected $fields = array(
 			'checkboxes'				=> array('title'=> '',				'type' => null, 			'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
 			'category_id'				=> array('title'=> LAN_ID,				'type' => 'number',			'width' =>'5%', 'forced'=> TRUE, 'readonly'=>TRUE),
          	'category_icon' 			=> array('title'=> LAN_ICON,			'type' => 'icon', 			'data' => 'str',		'width' => '100px',	'thclass' => 'center', 'class'=>'center', 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60','readonly'=>FALSE,	'batch' => FALSE, 'filter'=>FALSE),			       	
-         	'category_name' 			=> array('title'=> LAN_TITLE,			'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE),
+         	'category_name' 			=> array('title'=> LAN_TITLE,			'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE, 'validate' => true, 'inline' => true),
          
          	'category_meta_description' => array('title'=> LAN_DESCRIPTION,		'type' => 'textarea',			'width' => 'auto', 'thclass' => 'left','readParms' => 'expand=...&truncate=150&bb=1', 'readonly'=>FALSE),
 			'category_meta_keywords' 	=> array('title'=> "Meta Keywords",		'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE),		
 			'category_sef' 				=> array('title'=> "SEF Url String",	'type' => 'text',			'width' => 'auto', 'readonly'=>FALSE), // Display name
 			'category_manager' 			=> array('title'=> "Manage Permissions",'type' => 'userclass',		'width' => 'auto', 'data' => 'int','batch'=>TRUE, 'filter'=>TRUE),
 			'category_order' 			=> array('title'=> LAN_ORDER,			'type' => 'text',			'width' => 'auto', 'thclass' => 'right', 'class'=> 'right' ),										
-			'options' 					=> array('title'=> LAN_OPTIONS,			'type' => null,				'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center')
+			'options' 					=> array('title'=> LAN_OPTIONS,			'type' => null,				'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center', 'sort' => true)
 		);
 
 		protected $fieldpref = array('checkboxes', 'category_icon', 'category_id', 'category_name', 'category_description','category_manager', 'category_order', 'options');
@@ -123,13 +125,45 @@ class news_cat_ui extends e_admin_ui
 		
 		public function beforeCreate($new_data)
 		{
-	
+			if(empty($new_data['category_sef']))
+			{
+				$new_data['category_sef'] = eHelper::title2sef($new_data['category_name']);
+			}
+			else 
+			{
+				$new_data['category_sef'] = eHelper::secureSef($new_data['category_sef']);
+			}
+			$sef = e107::getParser()->toDB($new_data['category_sef']);
+			
+			if(e107::getDb()->count('news_category', '(*)', "category_sef='{$sef}'"))
+			{
+				e107::getMessage()->addError('Please choose unique SEF URL string for this category');
+				return false;
+			}
+			
+			if(empty($new_data['category_order']))
+			{
+				$c = e107::getDb()->count('news_category');
+				$new_data['category_order'] = $c ? $c : 0;
+			}
+			
+			return $new_data;
 		}
 		
 		
 		public function beforeUpdate($new_data, $old_data, $id)
 		{
-	
+			if(empty($new_data['category_sef']))
+			{
+				$new_data['category_sef'] = eHelper::title2sef($new_data['category_name']);
+			}
+			$sef = e107::getParser()->toDB($new_data['category_sef']);
+			if(e107::getDb()->count('news_category', '(*)', "category_sef='{$sef}' AND category_id!=".intval($id)))
+			{
+				e107::getMessage()->addError('Please choose unique SEF URL string for this category');
+				return false;
+			}
+			return $new_data;
 		}
 
 }
diff --git a/e107_core/shortcodes/batch/news_shortcodes.php b/e107_core/shortcodes/batch/news_shortcodes.php
index 74f03a1cd..6f25de93e 100644
--- a/e107_core/shortcodes/batch/news_shortcodes.php
+++ b/e107_core/shortcodes/batch/news_shortcodes.php
@@ -41,6 +41,13 @@ class news_shortcodes extends e_shortcode
 		return $this->e107->tp->toHTML($this->news_item['news_title'], TRUE, 'TITLE');
 	}
 
+	function sc_newsurltitle()
+	{
+		$title = $this->sc_newstitle();
+		// FIXME generic parser toAttribute method (currently toAttribute() isn't appropriate)
+		return '<a href="'.$this->sc_newsurl().'" title="'.preg_replace('/\'|"|<|>/s', '', $this->news_item['news_title']).'">'.$title.'</a>';
+	}
+	
 	function sc_newsbody($parm)
 	{
 		e107::getBB()->setClass("news");
diff --git a/e107_core/shortcodes/single/news_categories.sc b/e107_core/shortcodes/single/news_categories.sc
index f9f626b7d..04ac91d0b 100644
--- a/e107_core/shortcodes/single/news_categories.sc
+++ b/e107_core/shortcodes/single/news_categories.sc
@@ -5,7 +5,15 @@
  * News Categories shortcode
 */
 //<?
-global $e107, $sql,$pref,$tp,$NEWSCAT,$NEWSCAT_ITEM;
+global $NEWSCAT,$NEWSCAT_ITEM;
+
+// FIXME full rewrite!!!
+
+$e107 = e107::getInstance();
+$sql = e107::getDb();
+$pref = e107::getPref();
+$tp = e107::getParser();
+$scbatch = e107::getScBatch('news');
 
 $cString = 'nq_news_categories_sc';
 $cached = e107::getCache()->retrieve($cString);
@@ -21,11 +29,19 @@ $ix = new news;
 $nbr_cols = (isset($pref['nbr_cols'])) ? $pref['nbr_cols'] : 1;
 $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
 
-	if(!defined("NEWSCAT_AMOUNT")){
+	if(!defined("NEWSCAT_AMOUNT"))
+	{
 		define("NEWSCAT_AMOUNT",3);
 	}
 
-	if(!$NEWSCAT){
+	// News templates with BC
+	if(!$NEWSCAT)
+	{
+		$tmpl = e107::getTemplate('news', 'news', 'category');
+		$NEWSCAT = $tmpl['body'];
+	}
+	if(!$NEWSCAT)
+	{
 		$NEWSCAT = "
 			<div style='padding:5px'><div style='border-bottom:1px inset black; padding-bottom:1px;margin-bottom:5px'>
 			{NEWSCATICON}&nbsp;{NEWSCATEGORY}
@@ -34,8 +50,15 @@ $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
 			</div>
 			";
 	}
-
-	if(!$NEWSCAT_ITEM){
+	
+	// News templates with BC
+	if(!$NEWSCAT_ITEM)
+	{
+		$tmpl = e107::getTemplate('news', 'news', 'category');
+		$NEWSCAT_ITEM = $tmpl['item'];
+	}
+	if(!$NEWSCAT_ITEM)
+	{
 		$NEWSCAT_ITEM = "
 		<div style='width:100%;padding-bottom:2px'>
 		<table style='width:100%' cellpadding='0' cellspacing='0' border='0'>
@@ -52,23 +75,29 @@ $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
 	}
 
 
-	if(!defined("NEWSCAT_CATLINK")){
+	if(!defined("NEWSCAT_CATLINK"))
+	{
 			define("NEWSCAT_CATLINK","");
 	}
-	if(!defined("NEWSCAT_ITEMLINK")){
+	if(!defined("NEWSCAT_ITEMLINK"))
+	{
 			define("NEWSCAT_ITEMLINK","");
 	}
-	if(!defined("NEWSCAT_STYLE")){
+	if(!defined("NEWSCAT_STYLE"))
+	{
 			define("NEWSCAT_STYLE","width:96%");
 	}
-	if(!defined("NEWSCAT_CATICON")){
+	if(!defined("NEWSCAT_CATICON"))
+	{
 			define("NEWSCAT_CATICON","border:0px");
 	}
-	if(!defined("NEWSCAT_THUMB")){
+	if(!defined("NEWSCAT_THUMB"))
+	{
 			define("NEWSCAT_THUMB","border:0px");
 	}
 
-	if(!defined("NEWSCAT_CELL")){
+	if(!defined("NEWSCAT_CELL"))
+	{
 			define("NEWSCAT_CELL","vertical-align:top");
 	}
 
@@ -79,24 +108,37 @@ $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
 	$param['catlink'] = NEWSCAT_CATLINK;
 	$param['caticon'] = NEWSCAT_CATICON;
 
-	$sql2 = new db;
-	$qry = "SELECT nc.*, ncr.news_rewrite_string AS news_category_rewrite_string, ncr.news_rewrite_id AS news_category_rewrite_id FROM #news_category AS nc
-        LEFT JOIN #news_rewrite AS ncr ON nc.category_id=ncr.news_rewrite_source AND ncr.news_rewrite_type=2
-        ORDER BY nc.category_order ASC
-    ";
+	// get categories
+	$sql2 = e107::getDb('sql2');
+	$_time = time();
+	$qry = "SELECT nc.*, COUNT(n.news_id) as ccount FROM #news_category AS nc 
+	LEFT JOIN #news as n ON n.news_category=nc.category_id
+	WHERE   n.news_class IN (".USERCLASS_LIST.") 
+            AND (n.news_start=0 || news_start < {$_time}) 
+            AND (n.news_end=0 || news_end > {$_time})
+	GROUP BY nc.category_id
+	ORDER BY nc.category_order ASC";
 	if(!$sql2->db_Select_gen($qry))
 	{
         return '';
     }
-
+	$cats = array();
+	while ($row = $sql2->db_Fetch()) 
+	{
+		if($row['ccount'] > 0) $cats[$row['category_id']] = $row;
+	}
+	if(empty($cats)) return;
+	
 	$text3 = "\n\n\n
 	<div style='width:100%;text-align:center;margin-left:auto;margin-right:auto'>
 	<table style='".NEWSCAT_STYLE."'  cellpadding='0' cellspacing='0'>
 	\n";
 	$t = 0;
-			$wid = floor(100/$nbr_cols);
-	while ($row3 = $sql2->db_Fetch()) {
+	$wid = floor(100/$nbr_cols);
+	foreach($cats as $row3)
+	{
 		extract($row3);
+		$scbatch->setScVar('news_item', $row3);
 		//quick fix
 		if($category_icon)
 		{
@@ -110,30 +152,22 @@ $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
 				$category_icon = e_IMAGE_ABS."icons/".$category_icon;
 			}
 		}
-		$search[0] = "/\{NEWSCATICON\}(.*?)/si";
-		$replace[0] = ($category_icon) ? "<a href='".e107::getUrl('core:news', 'main', 'action=list&id='.$category_id.'&sef='.$news_category_rewrite_string)."'><img src='".$category_icon."' alt='' style='".$param['caticon']."' /></a>" : "";
-
-		$search[1] = "/\{NEWSCATEGORY\}(.*?)/si";
-		$replace[1] = ($category_name) ? "<a href='".e107::getUrl('core:news', 'main', 'action=list&id='.$category_id.'&sef='.$news_category_rewrite_string)."' style='".$param['catlink']."' >".$tp->toHTML($category_name,TRUE,"defs")."</a>" : "";
-
-		$text3 .= ($t % $nbr_cols == 0) ? "<tr>" : "";
-		$text3 .= "\n<td style='".NEWSCAT_CELL."; width:$wid%;'>\n";
 
 // Grab each news item.--------------
-    	$cqry = "SELECT n.*, nr.* FROM #news AS n
-            LEFT JOIN #news_rewrite AS nr ON n.news_id=nr.news_rewrite_source AND nr.news_rewrite_type=1
+    	$cqry = "SELECT n.* FROM #news AS n
             WHERE news_category='".intval($category_id)."' 
             AND news_class IN (".USERCLASS_LIST.") 
-            AND (news_start=0 || news_start < ".time().") 
-            AND (news_end=0 || news_end>".time().")
+            AND (news_start=0 || news_start < {$_time}) 
+            AND (news_end=0 || news_end > {$_time})
             ORDER BY news_datestamp DESC LIMIT 0,".NEWSCAT_AMOUNT;
 
         $count = $sql->db_Select_gen($cqry);
 		//$count = $sql->db_Select("news", "*", "news_category='".intval($category_id)."' AND news_class IN (".USERCLASS_LIST.") AND (news_start=0 || news_start < ".time().") AND (news_end=0 || news_end>".time().")  ORDER BY news_datestamp DESC LIMIT 0,".NEWSCAT_AMOUNT);
 		if($count)
 		{
-            while ($row = $sql->db_Fetch()) {
-    
+            while ($row = $sql->db_Fetch()) 
+            {
+    			$scbatch->setScVar('news_item', $row);
     			//$row['category_name'] = $category_name;
     			//$row['category_icon'] = $category_icon;
     			$row = array_merge($row, $row3);
@@ -142,24 +176,38 @@ $nbr_cols = (defined("NEWSCAT_COLS")) ? NEWSCAT_COLS : $nbr_cols;
     		}
 		}
 // ----------------------------------
+		$search[0] = "/\{NEWSCATICON\}(.*?)/si";
+		$replace[0] = $scbatch->sc_newscaticon('url');
+
+		$search[1] = "/\{NEWSCATEGORY\}(.*?)/si";
+		$replace[1] = $scbatch->sc_newscategory();
 
 		$search[2] = "/\{NEWSCAT_ITEM\}(.*?)/si";
 		$replace[2] = $textbody;
+		
+
+		$text3 .= ($t % $nbr_cols == 0) ? "<tr>" : "";
+		$text3 .= "\n<td style='".NEWSCAT_CELL."; width:$wid%;'>\n";
 
 		$text3 .= preg_replace($search, $replace,$NEWSCAT);
 		unset($textbody);
 
 
 		$text3 .= "\n</td>\n";
-		if (($t+1) % $nbr_cols == 0) {
+
+		if (($t+1) % $nbr_cols == 0) 
+		{
 			$text3 .= "</tr>";
 			$t++;
-		} else {
+		} 
+		else 
+		{
 			$t++;
 		}
 	}
 
-	while ($t % $nbr_cols != 0){
+	while ($t % $nbr_cols != 0)
+	{
 		$text3 .= "<td style='".NEWSCAT_CELL.";width:{$wid}%'>&nbsp;</td>\n";
 		$text3 .= (($t+1) % $nbr_cols == 0) ? "</tr>" : "";
 		$t++;
diff --git a/e107_core/shortcodes/single/news_category.sc b/e107_core/shortcodes/single/news_category.sc
index 3ede96742..770c80730 100644
--- a/e107_core/shortcodes/single/news_category.sc
+++ b/e107_core/shortcodes/single/news_category.sc
@@ -1,3 +1,5 @@
-require_once(e_PLUGIN."alt_news/alt_news.php");
-alt_news($parm);
+//<?
+// FIXME obsolete, remove, or switch to  news_categories_menu (BC)
+//require_once(e_PLUGIN."alt_news/alt_news.php");
+//alt_news($parm);
 return "";
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index f4894c27e..5a62b41f3 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -1847,6 +1847,7 @@ class e_form
 		}
 	
 		if(vartrue($attributes['inline'])) $parms['editable'] = true; // attribute alias
+		if(vartrue($attributes['sort'])) $parms['sort'] = true; // attribute alias
 		
 		$tp = e107::getParser();
 		switch($field) // special fields
diff --git a/e107_plugins/news/templates/news_template.php b/e107_plugins/news/templates/news_template.php
index f9e51607c..110d033e7 100644
--- a/e107_plugins/news/templates/news_template.php
+++ b/e107_plugins/news/templates/news_template.php
@@ -14,17 +14,18 @@ global $sc_style;
 //$NEWS_MENU_TEMPLATE['list']['start']       = '<ul class="nav nav-list news-menu-months">';
 //$NEWS_MENU_TEMPLATE['list']['end']         = '</ul>';
 $NEWS_TEMPLATE['list']['item'] = '
-	<div class="news-list-item">
-		<h2>{NEWSTITLE}</h2>
-		<div class="item-date">{NEWSDATE=short}</div>
-		<div class="item-author">{NEWSAUTHOR}</div>
- 
-		<div class="item-body">
+	<div class="list-item">
+		<h2>{NEWSURLTITLE}</h2>
+		<div class="category">in {NEWSCATEGORY}</div>
+		<div class="date">{NEWSDATE=short}</div>
+		<div class="author">{NEWSAUTHOR}</div>
+ 		
+		<div class="body">
 			{NEWSIMAGE}
 			{NEWSBODY}
 			{EXTENDED}
 		</div>
-		<div class="item-options">
+		<div class="options">
 			{NEWSCOMMENTS} {EMAILICON} {PRINTICON} {PDFICON} {ADMINOPTIONS}
 		</div>
 	</div>
@@ -35,19 +36,44 @@ $NEWS_TEMPLATE['list']['item'] = '
 //$NEWS_MENU_TEMPLATE['view']['start']       = '<ul class="nav nav-list news-menu-months">';
 //$NEWS_MENU_TEMPLATE['view']['end']         = '</ul>';
 $NEWS_TEMPLATE['view']['item'] = '
-	<div class="news-view-item">
+	<div class="view-item">
 		<h2>{NEWSTITLE}</h2>
-		<div class="item-date">{NEWSDATE=short}</div>
-		<div class="item-author">{NEWSAUTHOR}</div>
- 
-		<div class="item-body">
+		<div class="category">in {NEWSCATEGORY}</div>
+		<div class="date">{NEWSDATE=short}</div>
+		<div class="author">{NEWSAUTHOR}</div>
+
+		<div class="body">
 			{NEWSIMAGE}
 			{NEWSBODY}
 			{EXTENDED}
 		</div>
-		<div class="item-options">
+		<div class="options">
 			{NEWSCOMMENTS} {EMAILICON} {PRINTICON} {PDFICON} {ADMINOPTIONS}
 		</div>
 	</div>
 ';
-//$NEWS_MENU_TEMPLATE['view']['separator']   = '<br />';
\ No newline at end of file
+//$NEWS_MENU_TEMPLATE['view']['separator']   = '<br />';
+
+
+###### news_categories.sc (temporary) - TODO rewrite news, template standards ######
+$NEWS_TEMPLATE['category']['body'] = '
+	<div style="padding:5px"><div style="border-bottom:1px inset black; padding-bottom:1px;margin-bottom:5px">
+	{NEWSCATICON}&nbsp;{NEWSCATEGORY}
+	</div>
+	{NEWSCAT_ITEM}
+	</div>
+';
+
+$NEWS_TEMPLATE['category']['item'] = '
+	<div style="width:100%;padding-bottom:2px">
+	<table style="width:100%" cellpadding="0" cellspacing="0" border="0">
+	<tr>
+	<td style="width:2px;vertical-align:top">&#8226;
+	</td>
+	<td style="text-align:left;vertical-align:top;padding-left:3px">
+	{NEWSTITLELINK}
+	<br />
+	</td></tr>
+	</table>
+	</div>
+';
\ No newline at end of file
diff --git a/news.php b/news.php
index 901892f75..f12c5f588 100644
--- a/news.php
+++ b/news.php
@@ -45,6 +45,11 @@ if (!defined('ITEMVIEW'))
 {
 	define('ITEMVIEW', varset($pref['newsposts'],15));
 }
+// XXX remove ITEMVIEW?
+if(!defined("NEWSALL_LIMIT")) 
+{
+	define("NEWSALL_LIMIT",varset($pref['newsposts'],15)); 
+}
 
 if (e_QUERY) //TODO add support for $_GET['cat'] and $_GET['mode'] and phase-out the x.x.x format. 
 {
@@ -149,12 +154,11 @@ if ($action == 'cat' || $action == 'all' || vartrue($_GET['tag']))
 	}
 	if ($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,
-		nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+		SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon,
+		nc.category_meta_keywords, nc.category_meta_description
 		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
@@ -170,8 +174,8 @@ if ($action == 'cat' || $action == 'all' || vartrue($_GET['tag']))
 		$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, nc.category_meta_keywords,
-		nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+		SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon, nc.category_meta_keywords,
+		nc.category_meta_description
 		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
@@ -185,8 +189,8 @@ if ($action == 'cat' || $action == 'all' || vartrue($_GET['tag']))
 	{
 		$tagsearch = preg_replace('#[^a-zA-Z0-9\-]#','', $_GET['tag']);
 		$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}
+		SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon, nc.category_meta_keywords,
+		nc.category_meta_description
 		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
@@ -272,7 +276,7 @@ if ($action == 'cat' || $action == 'all' || vartrue($_GET['tag']))
 	//
 	//	$text .= "<div class='nextprev'>".$tp->parseTemplate("{NEXTPREV={$parms}}")."</div>";
 
-	$amount = ($action == "all") ? NEWSALL_LIMIT : NEWSLIST_LIMIT;
+	$amount = NEWSLIST_LIMIT;
 	$nitems = defined('NEWS_NEXTPREV_NAVCOUNT') ? '&navcount='.NEWS_NEXTPREV_NAVCOUNT : '' ;
 	$url = rawurlencode(e107::getUrl()->create($newsRoute, $newsUrlparms));
 	$parms  = 'tmpl_prefix='.deftrue('NEWS_NEXTPREV_TMPL', 'default').'&total='.$news_total.'&amount='.$amount.'&current='.$newsfrom.$nitems.'&url='.$url;
@@ -312,8 +316,8 @@ 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, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+	  	SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef,
+		nc.category_icon, nc.category_meta_keywords, nc.category_meta_description
 	  	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
@@ -326,8 +330,8 @@ if ($action == 'extend')
 	else
 	{
 		$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}
+	  	SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon, nc.category_meta_keywords,
+		nc.category_meta_description
 	  	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
@@ -455,8 +459,8 @@ switch ($action)
 		$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, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+		SELECT  SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef,
+		nc.category_icon, nc.category_meta_keywords, nc.category_meta_description
 		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
@@ -473,8 +477,8 @@ switch ($action)
 		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, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+	  	SELECT COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef,
+		nc.category_icon, nc.category_meta_keywords, nc.category_meta_description
 		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
@@ -486,8 +490,8 @@ switch ($action)
 		else
 		{
 			$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}
+	  	SELECT n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon,
+		nc.category_meta_keywords, nc.category_meta_description
 		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
@@ -514,8 +518,8 @@ 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, nc.category_meta_keywords, nc.category_meta_description{$rewrite_cols_cat}{$rewrite_cols}
+		SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef,
+		nc.category_icon, nc.category_meta_keywords, nc.category_meta_description
 		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
@@ -540,9 +544,9 @@ 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, nc.category_meta_keywords, nc.category_meta_description,
-		COUNT(*) AS tbcount{$rewrite_cols_cat}{$rewrite_cols}
+		SELECT SQL_CALC_FOUND_ROWS COUNT(tb.trackback_pid) AS tb_count, n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id
+		nc.category_name, nc.category_sef, nc.category_icon, nc.category_meta_keywords, nc.category_meta_description,
+		COUNT(*) AS tbcount
 		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
@@ -551,20 +555,20 @@ switch ($action)
 		AND n.news_start < ".time()." AND (n.news_end=0 || n.news_end>".time().")
 		AND (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type))
 		GROUP by n.news_id
-		ORDER BY news_sticky DESC, ".$order." DESC LIMIT ".intval($newsfrom).",".$pref['newsposts'];
+		ORDER BY news_sticky DESC, ".$order." DESC LIMIT ".intval($newsfrom).",".ITEMVIEW;
 		}
 		else
 		{
 			$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}
+		SELECT SQL_CALC_FOUND_ROWS n.*, u.user_id, u.user_name, u.user_customtitle, nc.category_id, nc.category_name, nc.category_sef, nc.category_icon,
+		nc.category_meta_keywords, nc.category_meta_description
 		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 (FIND_IN_SET('0', n.news_render_type) OR FIND_IN_SET(1, n.news_render_type))
-		ORDER BY n.news_sticky DESC, ".$order." DESC LIMIT ".intval($newsfrom).",".$pref['newsposts'];
+		ORDER BY n.news_sticky DESC, ".$order." DESC LIMIT ".intval($newsfrom).",".ITEMVIEW;
 		}
 }	// END - switch($action)
 
@@ -744,16 +748,20 @@ else
 	$param['current_action'] = $action;
 	
 	// Get Correct Template 
+	// XXX we use $NEWSLISTSTYLE above - correct as we are currently in list mode
+	// TODO requires BC testing if we comment this one
 	if(vartrue($NEWSSTYLE)) 
 	{
 		$template =  $NEWSSTYLE;
 	}
 	else 
 	{
-		$tmp = e107::getTemplate('news', 'news', 'view');
+		$tmp = e107::getTemplate('news', 'news', 'list');
 		$template = $tmp['item'];
 		unset($tmp);
 	}
+
+