diff --git a/e107_admin/comment.php b/e107_admin/comment.php
index f35b0ceec..28d2af8f2 100644
--- a/e107_admin/comment.php
+++ b/e107_admin/comment.php
@@ -11,9 +11,9 @@
| GNU General Public License (http://gnu.org).
|
| $Source: /cvs_backup/e107_0.8/e107_admin/comment.php,v $
-| $Revision: 1.11 $
-| $Date: 2009-11-05 00:11:56 $
-| $Author: e107coders $
+| $Revision: 1.12 $
+| $Date: 2009-11-05 17:32:18 $
+| $Author: secretr $
+----------------------------------------------------------------------------+
*/
require_once("../class2.php");
@@ -54,8 +54,24 @@ class comments_admin_ui extends e_admin_ui
{
protected $pluginTitle = LAN_COMMENTMAN;
- protected $pluginName = 'comments';
+ protected $pluginName = 'core';
protected $table = "comments";
+
+ /**
+ * If present this array will be used to build your list query
+ * You can link fileds from $field array with 'table' parameter, which should equal to a key (table) from this array
+ * 'leftField', 'rightField' and 'fields' attributes here are required, the rest is optional
+ *
+ * @var array [optional]
+ */
+ protected $tableJoin = array (
+ 'user' => array('leftField' => 'comment_author_id', 'rightField' => 'user_id', 'fields' => '*'/*, 'leftTable' => '', 'joinType' => 'LEFT JOIN', 'whereJoin' => '', 'where' => ''*/)
+ );
+
+ //protected $listQry = "SELECT SQL_CALC_FOUND_ROWS * FROM #comments"; // without any Order or Limit.
+
+ protected $editQry = "SELECT * FROM #comments WHERE comment_id = {ID}";
+
protected $pid = "comment_id";
protected $perPage = 10;
protected $batchDelete = true;
@@ -65,10 +81,11 @@ class comments_admin_ui extends e_admin_ui
'comment_id' => array('title'=> ID, 'type' => 'int', 'width' =>'5%', 'forced'=> TRUE),
'comment_item_id' => array('title'=> "item id", 'type' => 'text', 'width' => 'auto'),
'comment_subject' => array('title'=> "subject", 'type' => 'text', 'width' => 'auto', 'thclass' => 'left first'), // Display name
- 'comment_comment' => array('title'=> "comment", 'type' => 'textarea', 'width' => '30%', 'readParms' => 'expand=...&truncate=50'), // Display name
- 'comment_author_id' => array('title'=> "authorID", 'type' => 'text', 'width' => 'auto'), // User name
+ 'comment_comment' => array('title'=> "comment", 'type' => 'textarea', 'width' => '30%', 'readParms' => 'expand=...&truncate=50&bb=1'), // Display name
+ 'comment_author_id' => array('title'=> "authorID", 'type' => 'number', 'width' => 'auto'), // User id
'comment_author_name' => array('title'=> "authorName",'type' => 'text', 'width' => 'auto'), // User name
- 'comment_datestamp' => array('title'=> "datestamp", 'type' => 'datestamp', 'width' => 'auto'), // User name
+ 'user_name' => array('title'=> "System user", 'type' => 'text', 'width' => 'auto', 'table' => 'user', 'noedit' => true), // User name
+ 'comment_datestamp' => array('title'=> "datestamp", 'type' => 'datestamp', 'width' => 'auto'), // User date
'comment_blocked' => array('title'=> "blocked", 'type' => 'text', 'width' => 'auto'), // Photo
'comment_ip' => array('title'=> "IP", 'type' => 'text', 'width' => '10%', 'thclass' => 'center' ), // Real name (no real vetting)
'comment_type' => array('title'=> "Type", 'type' => 'method', 'width' => '10%', 'thclass' => 'center', 'filter'=>TRUE,'batch'=>TRUE ), // No real vetting
@@ -86,10 +103,6 @@ class comments_admin_ui extends e_admin_ui
'pref_name' => array('title'=> 'name', 'type' => 'text')
);
- protected $listQry = "SELECT * FROM #comments"; // without any Order or Limit.
-
- protected $editQry = "SELECT * FROM #comments WHERE comment_id = {ID}";
-
}
//TODO Block and Unblock buttons, moderated comments?
diff --git a/e107_admin/cpage.php b/e107_admin/cpage.php
index 2edad08d1..2ab2ce828 100644
--- a/e107_admin/cpage.php
+++ b/e107_admin/cpage.php
@@ -9,9 +9,9 @@
* Custom Menus/Pages Administration
*
* $Source: /cvs_backup/e107_0.8/e107_admin/cpage.php,v $
- * $Revision: 1.24 $
- * $Date: 2009-11-01 23:10:57 $
- * $Author: e107coders $
+ * $Revision: 1.25 $
+ * $Date: 2009-11-05 17:32:17 $
+ * $Author: secretr $
*
*/
@@ -111,7 +111,7 @@ class page
{
global $pref,$user_pref, $admin_log;
- if(isset($_POST['submit-e-columns']))
+ if(isset($_POST['etrigger_ecolumns']))
{
$user_pref['admin_cpage_columns'] = $_POST['e-columns'];
save_prefs('user');
diff --git a/e107_admin/links.php b/e107_admin/links.php
index c54d2a2d2..c8e570b3f 100644
--- a/e107_admin/links.php
+++ b/e107_admin/links.php
@@ -9,9 +9,9 @@
* Administration Area - Site Links
*
* $Source: /cvs_backup/e107_0.8/e107_admin/links.php,v $
- * $Revision: 1.31 $
- * $Date: 2009-10-26 09:51:56 $
- * $Author: e107coders $
+ * $Revision: 1.32 $
+ * $Date: 2009-11-05 17:32:17 $
+ * $Author: secretr $
*
*/
@@ -208,7 +208,7 @@ class links
$this->mode = $_GET['mode'];
}
- if (varset($_POST['submit-e-columns']))
+ if (varset($_POST['etrigger_ecolumns']))
{
$user_pref['admin_links_columns'] = $_POST['e-columns'];
save_prefs('user');
diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php
index 9695b3433..111ab1e1a 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.62 $
- * $Date: 2009-10-30 17:59:32 $
+ * $Revision: 1.63 $
+ * $Date: 2009-11-05 17:32:17 $
* $Author: secretr $
*/
require_once("../class2.php");
@@ -453,7 +453,7 @@ class admin_newspost
$this->_observe_newsCommentsRecalc();
}
- if(isset($_POST['submit-e-columns'])) //elseif fails.
+ if(isset($_POST['etrigger_ecolumns'])) //elseif fails.
{
$this->_observe_saveColumns();
}
@@ -1143,7 +1143,7 @@ class admin_newspost
}
// AUTO RENDER
- $text .= $frm->trow($this->fields, $this->fieldpref, $row, 'news_id');
+ $text .= $frm->renderTableRow($this->fields, $this->fieldpref, $row, 'news_id');
}
$text .= "
diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php
index 7b1368a14..6aa09c84c 100644
--- a/e107_admin/plugin.php
+++ b/e107_admin/plugin.php
@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org).
|
| $Source: /cvs_backup/e107_0.8/e107_admin/plugin.php,v $
-| $Revision: 1.53 $
-| $Date: 2009-11-04 21:59:35 $
+| $Revision: 1.54 $
+| $Date: 2009-11-05 17:32:17 $
| $Author: secretr $
+----------------------------------------------------------------------------+
*/
@@ -127,7 +127,7 @@ class pluginManager{
$this -> pluginProcessUpload();
}
- if(isset($_POST['submit-e-columns']))
+ if(isset($_POST['etrigger_ecolumns']))
{
$user_pref['admin_pluginmanager_columns'] = $_POST['e-columns'];
save_prefs('user');
diff --git a/e107_admin/userclass2.php b/e107_admin/userclass2.php
index 412f32215..d728a8402 100644
--- a/e107_admin/userclass2.php
+++ b/e107_admin/userclass2.php
@@ -9,9 +9,9 @@
* Administration Area - User classes
*
* $Source: /cvs_backup/e107_0.8/e107_admin/userclass2.php,v $
- * $Revision: 1.31 $
- * $Date: 2009-11-05 12:26:43 $
- * $Author: e107coders $
+ * $Revision: 1.32 $
+ * $Date: 2009-11-05 17:32:18 $
+ * $Author: secretr $
*
*/
@@ -861,7 +861,7 @@ class uclass_manager
function uclass_manager()
{
global $user_pref;
- if(isset($_POST['submit-e-columns']))
+ if(isset($_POST['etrigger_ecolumns']))
{
$user_pref['admin_userclass_columns'] = $_POST['e-columns'];
save_prefs('user');
diff --git a/e107_admin/users.php b/e107_admin/users.php
index 987d139cb..e2fa482bf 100644
--- a/e107_admin/users.php
+++ b/e107_admin/users.php
@@ -10,9 +10,9 @@
* Administration Area - Users
*
* $Source: /cvs_backup/e107_0.8/e107_admin/users.php,v $
-* $Revision: 1.61 $
-* $Date: 2009-10-21 21:36:10 $
-* $Author: e107steved $
+* $Revision: 1.62 $
+* $Date: 2009-11-05 17:32:17 $
+* $Author: secretr $
*
*/
require_once ('../class2.php');
@@ -762,7 +762,7 @@ class users
function usersSaveColumnPref()
{
global $pref,$user_pref,$admin_log;
- if (isset ($_POST['submit-e-columns']))
+ if (isset ($_POST['etrigger_ecolumns']))
{
$user_pref['admin_users_columns'] = $_POST['e-columns'];
save_prefs('user');
diff --git a/e107_handlers/admin_handler.php b/e107_handlers/admin_handler.php
index c3b28112e..79e87e0aa 100644
--- a/e107_handlers/admin_handler.php
+++ b/e107_handlers/admin_handler.php
@@ -1894,10 +1894,13 @@ class e_admin_ui extends e_admin_controller_ui
protected $validationRules = array();
protected $prefs = array();
protected $pluginName;
+
protected $listQry;
+ protected $tableJoin;
protected $editQry;
protected $table;
protected $pid;
+
protected $pluginTitle;
protected $perPage = 20;
protected $batchDelete = true;
@@ -2140,10 +2143,11 @@ class e_admin_ui extends e_admin_controller_ui
{
$tp = e107::getParser();
$multi_name = vartrue($this->fields['checkboxes']['toggle'], 'multiselect');
- $selected = $tp->toDB(array_values($this->getPosted($multi_name, array())));
+ $selected = array_values($this->getPosted($multi_name, array()));
if(empty($selected)) return;
+ $selected = array_map('intval', $selected);
$trigger = $tp->toDB(explode('__', $batch_trigger));
$this->triggersEnabled(false); //disable further triggering
@@ -2160,26 +2164,38 @@ class e_admin_ui extends e_admin_controller_ui
$this->getTreeModel()->setMessages();
break;
- case 'bool': // FIXME - tree method update
+ case 'bool':
// direct query
$field = $trigger[1];
- $value = $trigger[2];
- if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}={$value} WHERE ".$this->getPrimaryName()." IN (".implode(', ', $selected).")"))
+ $value = $trigger[2] ? 1 : 0;
+ $cnt = $this->getTreeModel()->update($field, $value, $selected, $value, false);
+ if($cnt)
{
- $this->getTreeModel()->addMessageSuccess($cnt.' records successfully updated.', true);
+ $this->getTreeModel()->addMessageSuccess($cnt.' records successfully updated.');
}
$this->getTreeModel()->setMessages();
- $this->redirectAction();
break;
- case 'boolreverse': // FIXME - tree method update
+ case 'boolreverse':
// direct query
$field = $trigger[1]; //TODO - errors
- if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}=1-{$field} WHERE ".$this->getPrimaryName()." IN (".implode(', ', $selected).")"))
+ $tree = $this->getTreeModel();
+ $cnt = $tree->update($field, "1-{$field}", $selected, null, false);
+ if($cnt)
{
- e107::getMessage()->add($cnt.' records successfully reversed.', E_MESSAGE_SUCCESS, true);
+ $tree->addMessageSuccess($cnt.' records successfully reversed.');
+ //sync models
+ foreach ($selected as $id)
+ {
+ if($tree->hasNode($id))
+ {
+ $tree->getNode($id)
+ ->set($field, $syncvalue)
+ ->setMessages();
+ }
+ }
}
- $this->redirectAction();
+ $this->getTreeModel()->setMessages();
break;
default:
@@ -2191,14 +2207,17 @@ class e_admin_ui extends e_admin_controller_ui
}
else // default handling
{
- // FIXME - tree method update
$field = $trigger[0];
$value = $trigger[1]; //TODO - errors
- if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}='{$value}' WHERE ".$this->getPrimaryName()." IN (".implode(', ', $selected).")"))
- {
- e107::getMessage()->add(''.$value.' set for '.$cnt.' records.', E_MESSAGE_SUCCESS, true);
+
+ $cnt = $this->getTreeModel()->update($field, "'".$value."'", $selected, $value, false);
+ if($cnt)
+ {
+ $vttl = $this->getUI()->renderValue($field, $value, $this->getFieldAttr($field));
+ $this->getTreeModel()->addMessageSuccess(''.$vttl.' set for '.$cnt.' records.');
}
- $this->redirectAction();
+ $this->getTreeModel()->setMessages();
+ //$this->redirectAction();
}
break;
}
@@ -2274,39 +2293,102 @@ class e_admin_ui extends e_admin_controller_ui
$searchQuery = $tp->toDB($request->getQuery('searchquery', ''));
list($filterField, $filterValue) = $tp->toDB(explode('__', $request->getQuery('filter_options', '')));
- if($filterField)
+ // TODO - we have var types in current model, use them!
+ if($filterField && $filterValue !== '' && isset($this->fields[$filterField]))
{
- $searchQry[] = $filterField." = '".$filterValue."'";
+ $ftable = vartrue($this->fields[$filterField]['table'], $this->getTableName());
+ $searchQry[] = "`{$ftable}.`$filterField` = '".$filterValue."'";
}
$filter = array();
foreach($this->fields as $key=>$var)
{
+ $ftable = vartrue($var['table'], $this->getTableName());
if(($var['type'] == 'text' || $var['type'] == 'method') && $searchQuery)
{
- $filter[] = "(".$key." REGEXP ('".$searchQuery."'))";
+ $filter[] = "(`{$ftable}`.`".$key."` REGEXP ('".$searchQuery."'))";
}
}
- if(count($filter)>0)
+
+ //$qry = $this->listQry;
+ // We dont need list qry anymore!
+ $jwhere = array();
+ $joins = array();
+ if($this->tableJoin)
+ {
+ $qry = "SELECT `#".$this->getTableName()."`.*";
+ foreach ($this->tableJoin as $jtable => $tparams)
+ {
+ // Select fields
+ $fields = vartrue($tparams['fields']);
+ if('*' === $fields)
+ {
+ $qry .= ", `#{$jtable}`.*";
+ }
+ else
+ {
+ $fields = array_map('trim', explode(',', $fields));
+ foreach ($fields as $field)
+ {
+ $qry .= ", `#{$jtable}`.`{$field}`";
+ }
+ }
+ // Prepare Joins
+ $joins[] = "
+ ".vartrue($tparams['joinType'], 'LEFT JOIN')." `#{$jtable}` ON `#".vartrue($tparams['leftTable'], $this->getTableName())."`.`".vartrue($tparams['leftField'])."` = `#{$jtable}`.`".vartrue($tparams['rightField'])."`".(vartrue($tparams['whereJoin']) ? ' '.$tparams['whereJoin'] : '');
+
+ // Prepare Where
+ if(vartrue($tparams['where']))
+ {
+ $jwhere[] = $tparams['where'];
+ }
+ }
+
+ //From
+ $qry .= " FROM `#".$this->getTableName()."`";
+
+ // Joins
+ if(count($joins) > 0)
+ {
+ $qry .= "\n".implode("\n", $joins);
+ }
+ }
+ else
+ {
+ $qry = "SELECT `#".$this->getTableName()."`.* FROM `#".$this->getTableName()."`";
+ }
+
+ // join where
+ if(count($jwhere) > 0)
+ {
+ $searchQry[] = " (".implode(" AND ",$jwhere)." )";
+ }
+ // filter where
+ if(count($filter) > 0)
{
$searchQry[] = " (".implode(" OR ",$filter)." )";
}
- $qry = $this->listQry;
+ // where query
if(count($searchQry) > 0)
{
$qry .= " WHERE ".implode(" AND ", $searchQry);
}
-
- $qry .= ' ORDER BY '.$tp->toDB($request->getQuery('field', $this->getPrimaryName())).' '.($request->getQuery('asc') == 'desc' ? 'DESC' : 'ASC');
+ $orderField = $request->getQuery('field', $this->getPrimaryName());
+ if(isset($this->fields[$orderField]))
+ {
+ $ftable = vartrue($this->fields[$orderField]['table'], $this->getTableName());
+ // no need of sanitize - it's found in field array
+ $qry .= ' ORDER BY `#'.$ftable.'`.`'.$orderField.'` '.($request->getQuery('asc') == 'desc' ? 'DESC' : 'ASC');
+ }
if($this->getPerPage())
{
- $from = $request->getQuery('from', 0) < 1 ? 1 : intval($request->getQuery('from'));
- $startfrom = ($from-1) * intval($this->getPerPage());
- $qry .= ' LIMIT '.$startfrom.', '.intval($this->getPerPage());
+ $from = intval($request->getQuery('from', 0));
+ //$startfrom = ($from-1) * intval($this->getPerPage());
+ $qry .= ' LIMIT '.$from.', '.intval($this->getPerPage());
}
return $qry;
}
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 44420e74c..124893a27 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -9,9 +9,9 @@
* Form Handler
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $
- * $Revision: 1.68 $
- * $Date: 2009-11-05 12:26:44 $
- * $Author: e107coders $
+ * $Revision: 1.69 $
+ * $Date: 2009-11-05 17:32:18 $
+ * $Author: secretr $
*
*/
@@ -848,7 +848,8 @@ class e_form
* @param string $pid - eg. table_id
* @return
*/
- function trow($fieldarray, $currentlist, $fieldvalues, $pid)
+
+ function renderTableRow($fieldarray, $currentlist, $fieldvalues, $pid)
{
$cnt = 0;
$ret = '';
@@ -857,6 +858,8 @@ class e_form
$currentlist = $obj->fieldpref;
$pid = $obj->pid;*/
+ $trclass = vartrue($fieldvalues['__trclass']) ? ' class="'.$trclass.'"' : '';
+ unset($fieldvalues['__trclass']);
foreach ($fieldarray as $field => $data)
{
@@ -878,169 +881,8 @@ class e_form
}
$tdclass = vartrue($data['class']);
- $value = $fieldvalues[$field];
- $tp = e107::getParser();
-
- $parms = array();
- if(isset($data['readParms']))
- {
- if(is_string($data['readParms'])) parse_str($data['readParms'], $data['readParms']);
- $parms = $data['readParms'];
- }
-
- switch($field) // special fields
- {
- case 'options':
- if(!$value)
- {
- parse_str(str_replace('&', '&', e_QUERY), $query); //FIXME - FIX THIS
- // keep other vars in tact
- $query['action'] = 'edit';
- $query['id'] = $fieldvalues[$pid];
-
- //$edit_query = array('mode' => varset($query['mode']), 'action' => varset($query['action']), 'id' => $fieldvalues[$pid]);
- $query = http_build_query($query);
-
- $value = " ";
- $value .= $this->submit_image('etrigger_delete['.$fieldvalues[$pid].']', $fieldvalues[$pid], 'delete', LAN_DELETE.' [ ID: '.$fieldvalues[$pid].' ]');
- }
- $data['type'] = 'text';
- break;
-
- case 'checkboxes':
- $value = $this->checkbox(vartrue($data['toggle'], 'multiselect').'['.$fieldvalues[$pid].']', $fieldvalues[$pid]);
- $data['type'] = 'text';
- $tdclass = $tdclass ? $tdclass.' autocheck e-pointer' : 'autocheck e-pointer';
- break;
- }
- //FIXME - move this block to separate method renderValue(), similar to renderElement()
- switch($data['type'])
- {
- case 'number':
- if($parms)
- {
- if(!isset($parms['sep'])) $value = number_format($number, $parms['decimals']);
- else $value = number_format($number, $parms['decimals'], vartrue($parms['point'], '.'), vartrue($parms['sep'], ' '));
- }
- $value = vartrue($parms['pre']).$value.vartrue($parms['post']);
- // else same
- break;
-
- case 'dropdown':
- case 'text':
- if(vartrue($parms['truncate']))
- {
- $value = $tp->text_truncate($value, $parms['truncate'], '...');
- }
- elseif(vartrue($parms['htmltruncate']))
- {
- $value = $tp->html_truncate($value, $parms['htmltruncate'], '...');
- }
- $value = vartrue($parms['pre']).$value.vartrue($parms['post']);
- break;
-
- case 'bbarea':
- case 'textarea':
- $expand = '...';
- $toexpand = false;
- if($data['type'] == 'bbarea' && !isset($parms['bb'])) $parms['bb'] = true; //force bb parsing for bbareas
- $id = trim(str_replace('_', '-', $field));
- if(!vartrue($parms['noparse'])) $value = $tp->toHTML($value, (vartrue($parms['bb']) ? true : false), vartrue($parms['parse']));
- if(vartrue($parms['expand']))
- {
- $expand = ' '.defset($parms['expand'], $parms['expand'])."";
- }
-
- $oldval = $value;
- if(vartrue($parms['truncate']))
- {
- $value = $oldval = strip_tags($value);
- $value = $tp->text_truncate($value, $parms['truncate'], $expand);
- $toexpand = $value != $oldval;
- }
- elseif(vartrue($parms['htmltruncate']))
- {
- $value = $tp->html_truncate($value, $parms['htmltruncate'], $expand);
- $toexpand = $value != $oldval;
- }
- if($toexpand)
- {
- // force hide! TODO - core style .expand-c (expand container)
- $value .= '