diff --git a/e107_admin/header.php b/e107_admin/header.php index 9162e79ef..c82b9cb99 100644 --- a/e107_admin/header.php +++ b/e107_admin/header.php @@ -9,8 +9,8 @@ * Admin Header * * $Source: /cvs_backup/e107_0.8/e107_admin/header.php,v $ - * $Revision: 1.50 $ - * $Date: 2009-10-31 17:57:15 $ + * $Revision: 1.51 $ + * $Date: 2009-11-02 17:45:29 $ * $Author: secretr $ */ @@ -189,7 +189,7 @@ echo "
"; echo(defined("CORE_LC")) ? "\n" : ""; -echo "
- * $form = array(
- * 'id' => 'myplugin',
- * 'url' => '{e_PLUGIN}myplug/admin_config.php',
- * 'fieldsets' => array(
- * 'create' => array(
- * 'primary' => 'primary_id',
- * 'legend' => 'Fieldset Legend',
- * 'fields' => array(...), //see e_admin_ui::$fields
- *
- * )
- * )
- * );
- *
- * @param array $form
- * @param array $models instances of e_admin_model
- * @return string
- */
- function createForm($forms, $models)
- {
- $text = '';
- foreach ($forms as $fid => $form)
- {
- $model = $models[$fid];
- $text .= "
-
- ";
- }
- }
-
-
-
- return $text;
- }
-
/**
* This will use the above (after it's done)
+ * TODO - lans
* Generic DB Record Creation Form.
* @return string
*/
function getCreate()
{
$controller = $this->getController();
- $model = $controller->getModel();
$request = $controller->getRequest();
- $elid = ($controller->getPluginName() == 'core' ? 'core-' : '').str_replace('_', '-', $controller->getTableName()); //TODO - method getElId()
-
- $text = "
-
- ";
+ else
+ {
+ $legend = 'New record';
+ }
+ $forms = $models = array();
+ $forms[] = array(
+ 'id' => $this->getElementId(),
+ //'url' => e_SELF,
+ //'query' => 'self', or custom GET query, self is default
+ 'tabs' => true, // TODO - NOT IMPLEMENTED YET - enable tabs (only if fieldset count is > 1)
+ 'fieldsets' => array(
+ 'create' => array(
+ 'legend' => $legend,
+ 'fields' => $controller->getFields(), //see e_admin_ui::$fields
+ 'after_submit_options' => true, // or true for default redirect options
+ 'after_submit_default' => $request->getPosted('__after_submit_action', $controller->getDefaultAction()), // or true for default redirect options
+ 'triggers' => 'auto', // standard create/update-cancel triggers
+ )
+ )
+ );
+ $models[] = $controller->getModel();
- return $text;
+ return $this->createForm($forms, $models);
}
/**
@@ -2550,68 +2484,40 @@ class e_admin_form_ui extends e_form
{
$tp = e107::getParser();
$controller = $this->getController();
- $request = $controller->getRequest();
- $tree = $controller->getTreeModel()->getTree();
- $total = $controller->getTreeModel()->getTotal();
-
- $amount = $controller->getPerPage();
- $from = $controller->getQuery('from', 0);
- $field = $controller->getQuery('field', $controller->getPrimaryName());
- $asc = strtoupper($controller->getQuery('asc', 'desc'));
- $elid = ($controller->getPluginName() == 'core' ? 'core-' : '').str_replace('_', '-', $controller->getTableName());
-
- $text = $tree ? $this->renderFilter($tp->post_toForm(array($controller->getQuery('searchquery'), $controller->getQuery('filter_options')))) : '';
- $text .= "
-
- ";
-
- if($tree)
- {
- $parms = $total.",".$amount.",".$from.",".e_SELF.'?'.$request->buildQueryString('from=[FROM]');
- $text .= e107::getParser()->parseTemplate("{NEXTPREV={$parms}}");
- }
-
- return $text;
+ $request = $controller->getRequest();
+ $tree = $controller->getTreeModel();
+ $options = array(
+ 'id' => $this->getElementId(), // unique string used for building element ids, REQUIRED
+ 'pid' => $controller->getPrimaryName(), // primary field name, REQUIRED
+ //'url' => e_SELF, default
+ //'query' => e_QUERY, default
+ 'head_query' => $request->buildQueryString(array(), true, 'field,asc,from'), // without field, asc and from vars, REQUIRED
+ 'np_query' => $request->buildQueryString(array(), true, 'from'), // without from var, REQUIRED for next/prev functionality
+ 'legend' => $controller->getPluginTitle(), // hidden by default
+ 'form_pre' => !$tree->isEmpty() ? $this->renderFilter($tp->post_toForm(array($controller->getQuery('searchquery'), $controller->getQuery('filter_options')), $controller->getModel().'/'.$controller->getAction())) : '',
+ 'form_post' => '', // markup to be added after closing form element
+ 'fields' => $controller->getFields(), // see e_admin_ui::$fields
+ 'fieldpref' => $controller->getFieldPref(), // see e_admin_ui::$fieldpref
+ 'table_pre' => '', // markup to be added before opening table element
+ 'table_post' => !$tree->isEmpty() ? $this->renderBatch($controller->getBatchDelete()) : '',
+ 'fieldset_pre' => '', // markup to be added before opening fieldset element
+ 'fieldset_post' => '', // markup to be added after closing fieldset element
+ 'perPage' => $controller->getPerPage(), // if 0 - no next/prev navigation
+ 'from' => $controller->getQuery('from', 0), // current page, default 0
+ 'field' => $controller->getQuery('field'), //current order field name, default - primary field
+ 'asc' => $controller->getQuery('asc', 'desc'), //current 'order by' rule, default 'asc'
+ );
+ return $this->listForm($options, $tree);
}
- function renderFilter($current_query = array(), $input_options = array())
+ function renderFilter($current_query = array(), $location = '', $input_options = array())
{
if(!$input_options) $input_options = array('size' => 20);
+ if(!$location)
+ {
+ $location = 'main/list'; //default location
+ }
+ $l = explode('/', $location);
$text = "
- "; //TODO assign CSS
+ ";
return $text;
}
@@ -2673,14 +2579,18 @@ class e_admin_form_ui extends e_form
switch($val['type'])
{
case 'boolean': //TODO modify description based on $val['parm]
- $option[$key."_1"] = LAN_YES;
- $option[$key."_0"] = LAN_NO;
+ $option['bool__'.$key.'__1'] = LAN_YES;
+ $option['bool__'.$key.'__0'] = LAN_NO;
+ if($type == 'batch')
+ {
+ $option['boolreverse__'.$key] = LAN_BOOL_REVERSE;
+ }
break;
case 'dropdown': // use the array $parm;
- foreach($val['parm'] as $k=>$name)
+ foreach($val['parm'] as $k => $name)
{
- $option[$key."_".$k] = $name;
+ $option[$key.'__'.$k] = $name;
}
break;
@@ -2695,9 +2605,9 @@ class e_admin_form_ui extends e_form
case 'userclass':
case 'userclasses':
$classes = e107::getUserClass()->uc_required_class_list($val['parms']);
- foreach($classes as $k=>$name)
+ foreach($classes as $k => $name)
{
- $option[$key."_".$k] = $name;
+ $option[$key.'__'.$k] = $name;
}
break;
@@ -2706,9 +2616,9 @@ class e_admin_form_ui extends e_form
$list = call_user_func_array(array($this, $method), array('', $type));
if(is_array($list))
{
- foreach($list as $k=>$name)
+ foreach($list as $k => $name)
{
- $option[$key."_".$k] = $name;
+ $option[$key.'__'.$k] = $name;
}
}
break;
@@ -2729,94 +2639,10 @@ class e_admin_form_ui extends e_form
}
- /**
- * Render Form Element
- * @param string $key
- * @param mixed $value
- * @param array $attributes field attributes including render parameters, element options
- * @return string
- */
- function renderElement($key, $value, $attributes)
+ public function getElementId()
{
- $parms = vartrue($attributes['parms'], array());
- if(is_string($parms)) parse_str($parms, $parms);
-
- //FIXME - this block is present in trow(), so make it separate method, use it in both methods
- switch($attributes['type'])
- {
- case 'number':
- $maxlength = vartrue($parms['maxlength'], 255);
- unset($parms['maxlength']);
- if(!vartrue($parms['size'])) $parms['size'] = 15;
- if(!vartrue($parms['class'])) $parms['class'] = 'tbox number';
- return $this->text($key, $value, $maxlength, $parms);
- break;
-
- case 'url':
- case 'text':
- $maxlength = vartrue($parms['maxlength'], 255);
- unset($parms['maxlength']);
- return $this->text($key, $value, $maxlength, $parms);
- break;
-
- case 'image': //TODO - thumb, image list shortcode, js tooltip...
- $label = varset($parms['label']);
- unset($parms['label']);
- return $this->imagepicker($key, $value, $label, $parms);
- break;
-
- case 'icon':
- $label = varset($parms['label']);
- $ajax = varset($parms['ajax']) ? true : false;
- unset($parms['label'], $parms['ajax']);
- return $this->iconpicker($key, $value, $label, $parms, $ajax);
- break;
-
- case 'datestamp':
- return $this->datepicker($key, $value, $parms);
- break;
-
- case 'dropdown':
- $eloptions = vartrue($parms['dropdown'], array());
- if(is_string($eloptions)) parse_str($eloptions);
- unset($parms['dropdown']);
- return $this->selectbox($name, $eloptions, $value, $parms);
- break;
-
- case 'userclass':
- case 'userclasses':
- $uc_options = vartrue($parms['userclass'], '');
- unset($parms['userclass']);
- $method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_checkbox';
- return $this->$method($key, $value, $uc_options, $parms);
- break;
-
- case 'user_name':
- case 'user_loginname':
- case 'user_login':
- case 'user_customtitle':
- case 'user_email':
- //user_id expected
- //$value = get_user_data($value);
- return $this->user($key, $value, $parms);
- break;
-
- case 'boolean':
- $lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
- $ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
- unset($parms['enabled'], $parms['disabled']);
- return $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled));
- break;
-
- case 'method': // Custom Function
- return call_user_func_array(array($this, $key), array($value, 'form'));
- break;
-
- default:
- //unknown type
- break;
- }
-
+ $controller = $this->getController();
+ return str_replace('_', '-', ($controller->getPluginName() == 'core' ? 'core-'.$controller->getTableName() : 'plugin-'.$controller->getPluginName()));
}
/**
@@ -2977,79 +2803,6 @@ class e_admin_ui_dummy extends e_form
$query = $field." = ".$value." WHERE ".$this->pid." IN (".implode(",",$ids).") ";
$count = $sql->db_Update($this->table,$query);
}
-
-
-
-
-
-
- /**
- * Generic Save DB Record Function.
- * @param object $id [optional]
- * @return
- */
- function saveRecord($id=FALSE)
- {
- global $e107cache, $admin_log, $e_event;
-
- $sql = e107::getDb();
- $tp = e107::getParser();
- $mes = e107::getMessage();
-
- $insert_array = array();
-
- //TODO validation and sanitizing using above classes.
-
- foreach($this->fields as $key=>$att)
- {
- if($att['forced']!=TRUE)
- {
- $insert_array[$key] = $_POST[$key];
- }
- }
-
- if($id)
- {
- $insert_array['WHERE'] = $this->primary." = ".$id;
- $status = $sql->db_Update($this->table,$insert_array) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
- $message = LAN_UPDATED; // deliberately ambiguous - to be used on success or error.
-
- }
- else
- {
- $status = $sql->db_Insert($this->table,$insert_array) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
- $message = LAN_CREATED;
- }
-
-
- $mes->add($message, $status);
- }
-
- /**
- * Generic Delete DB Record Function.
- * @param object $id
- * @return
- */
- function deleteRecord($id)
- {
- if(!$id || !$this->primary || !$this->table)
- {
- return;
- }
-
- $mes = e107::getMessage();
- $sql = e107::getDb();
-
- $query = $this->primary." = ".$id;
- $status = $sql->db_Delete($this->table,$query) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
- $message = LAN_DELETED;
- $mes->add($message, $status);
- }
-
-
-
-
-
/**
* Generic Options/Preferences Form.
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 93fd7d0d7..558ad1902 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -9,8 +9,8 @@
* Form Handler
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $
- * $Revision: 1.62 $
- * $Date: 2009-11-01 19:05:25 $
+ * $Revision: 1.63 $
+ * $Date: 2009-11-02 17:45:28 $
* $Author: secretr $
*
*/
@@ -1000,6 +1000,351 @@ class e_form
return '';
}
+
+ /**
+ * Generic List Form
+ * Search for the following GET variables:
+ * Expected options array format:
+ *
+ * 'myplugin', // unique string used for building element ids, REQUIRED
+ * 'pid' => 'primary_id', // primary field name, REQUIRED
+ * 'url' => '{e_PLUGIN}myplug/admin_config.php', // if not set, e_SELF is used
+ * 'query' => 'mode=main&action=list', // or e_QUERY if not set
+ * 'head_query' => 'mode=main&action=list', // without field, asc and from vars, REQUIRED
+ * 'np_query' => 'mode=main&action=list', // without from var, REQUIRED for next/prev functionality
+ * 'legend' => 'Fieldset Legend', // hidden by default
+ * 'form_pre' => '', // markup to be added before opening form element (e.g. Filter form)
+ * 'form_post' => '', // markup to be added after closing form element
+ * 'fields' => array(...), // see e_admin_ui::$fields
+ * 'fieldpref' => array(...), // see e_admin_ui::$fieldpref
+ * 'table_pre' => '', // markup to be added before opening table element
+ * 'table_post' => '', // markup to be added after closing table element (e.g. Batch actions)
+ * 'fieldset_pre' => '', // markup to be added before opening fieldset element
+ * 'fieldset_post' => '', // markup to be added after closing fieldset element
+ * 'perPage' => 15, // if 0 - no next/prev navigation
+ * 'from' => 0, // current page, default 0
+ * 'field' => 'field_name', //current order field name, default - primary field
+ * 'asc' => 'desc', //current 'order by' rule, default 'asc'
+ * );
+ * $list = new e_admin_tree_model($data);
+ *
+ * @param array $options
+ * @param e_admin_tree_model $list
+ * @return string
+ */
+ public function listForm($options, $list)
+ {
+ $tp = e107::getParser();
+ $tree = $list->getTree();
+ $total = $list->getTotal();
+
+ $amount = $options['perPage'];
+ $from = vartrue($options['from'], 0);
+ $field = vartrue($options['field'], $options['pid']);
+ $asc = strtoupper(vartrue($options['asc'], 'asc'));
+ $elid = $options['id'];
+ $query = isset($options['query']) ? $options['query'] : e_QUERY ;
+ $url = (isset($options['url']) ? $tp->replaceConstants($options['url'], 'abs') : e_SELF);
+ $formurl = $url.($query ? '?'.$query : '');
+ $fields = $options['fields'];
+ $current_fields = $options['fieldpref'];
+
+ $text .= "
+ ".vartrue($options['form_pre'])."
+
+ ".vartrue($options['form_post'])."
+ ";
+
+ return $text;
+ }
+
+ /**
+ * Generic DB Record Management Form.
+ * TODO - lans
+ * Expected arrays format:
+ *
+ * 'myplugin',
+ * 'url' => '{e_PLUGIN}myplug/admin_config.php', //if not set, e_SELF is used
+ * 'query' => 'mode=main&action=edit&id=1', //or e_QUERY if not set
+ * 'tabs' => true, // TODO - NOT IMPLEMENTED YET - enable tabs (only if fieldset count is > 1)
+ * 'fieldsets' => array(
+ * 'general' => array(
+ * 'legend' => 'Fieldset Legend',
+ * 'fields' => array(...), //see e_admin_ui::$fields
+ * 'after_submit_options' => array('action' => 'Label'[,...]), // or true for default redirect options
+ * 'after_submit_default' => 'action_name',
+ * 'triggers' => 'auto', // standard create/update-cancel triggers
+ * //or custom trigger array in format array('sibmit' => array('Title', 'create', '1'), 'cancel') - trigger name - title, action, optional hidden value (in this case named sibmit_value)
+ * ),
+ * 'advanced' => array(
+ * 'legend' => 'Fieldset Legend',
+ * 'fields' => array(...), //see e_admin_ui::$fields
+ * 'after_submit_options' => array('__default' => 'action_name' 'action' => 'Label'[,...]), // or true for default redirect options
+ * 'triggers' => 'auto', // standard create/update-cancel triggers
+ * //or custom trigger array in format array('sibmit' => array('Title', 'create', '1'), 'cancel') - trigger name - title, action, optional hidden value (in this case named sibmit_value)
+ * )
+ * )
+ * );
+ * $models[0] = new e_admin_model($data);
+ * $models[0]->setFieldIdName('primary_id'); // you need to do it if you don't use your own admin model extension
+ *
+ * @param array $forms numerical array
+ * @param array $models numerical array with values instance of e_admin_model
+ * @return string
+ */
+ function createForm($forms, $models)
+ {
+ $text = '';
+ foreach ($forms as $fid => $form)
+ {
+ $model = $models[$fid];
+ $query = isset($form['query']) ? $form['query'] : e_QUERY ;
+ $url = (isset($form['url']) ? e107::getParser()->replaceConstants($form['url'], 'abs') : e_SELF).($query ? '?'.$query : '');
+
+ $text .= "
+
+ ";
+ }
+ return $text;
+ }
+
+ /**
+ * Auto-render Form Element
+ * @param string $key
+ * @param mixed $value
+ * @param array $attributes field attributes including render parameters, element options
+ * @return string
+ */
+ function renderElement($key, $value, $attributes)
+ {
+ $parms = vartrue($attributes['parms'], array());
+ if(is_string($parms)) parse_str($parms, $parms);
+
+ //FIXME - this block is present in trow(), so make it separate method, use it in both methods
+ switch($attributes['type'])
+ {
+ case 'number':
+ $maxlength = vartrue($parms['maxlength'], 255);
+ unset($parms['maxlength']);
+ if(!vartrue($parms['size'])) $parms['size'] = 15;
+ if(!vartrue($parms['class'])) $parms['class'] = 'tbox number';
+ return $this->text($key, $value, $maxlength, $parms);
+ break;
+
+ case 'url':
+ case 'text':
+ $maxlength = vartrue($parms['maxlength'], 255);
+ unset($parms['maxlength']);
+ return $this->text($key, $value, $maxlength, $parms);
+ break;
+
+ case 'image': //TODO - thumb, image list shortcode, js tooltip...
+ $label = varset($parms['label']);
+ unset($parms['label']);
+ return $this->imagepicker($key, $value, $label, $parms);
+ break;
+
+ case 'icon':
+ $label = varset($parms['label']);
+ $ajax = varset($parms['ajax']) ? true : false;
+ unset($parms['label'], $parms['ajax']);
+ return $this->iconpicker($key, $value, $label, $parms, $ajax);
+ break;
+
+ case 'datestamp':
+ return $this->datepicker($key, $value, $parms);
+ break;
+
+ case 'dropdown':
+ $eloptions = vartrue($parms['dropdown'], array());
+ if(is_string($eloptions)) parse_str($eloptions);
+ unset($parms['dropdown']);
+ return $this->selectbox($name, $eloptions, $value, $parms);
+ break;
+
+ case 'userclass':
+ case 'userclasses':
+ $uc_options = vartrue($parms['userclass'], '');
+ unset($parms['userclass']);
+ $method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_checkbox';
+ return $this->$method($key, $value, $uc_options, $parms);
+ break;
+
+ case 'user_name':
+ case 'user_loginname':
+ case 'user_login':
+ case 'user_customtitle':
+ case 'user_email':
+ //user_id expected
+ //$value = get_user_data($value);
+ return $this->user($key, $value, $parms);
+ break;
+
+ case 'boolean':
+ $lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
+ $ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
+ unset($parms['enabled'], $parms['disabled']);
+ return $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled));
+ break;
+
+ case 'method': // Custom Function
+ return call_user_func_array(array($this, $key), array($value, 'form'));
+ break;
+
+ default:
+ //unknown type
+ break;
+ }
+
+ }
// The 2 functions below are for demonstration purposes only, and may be moved/modified before release.
function filterType($fieldarray)
diff --git a/e107_handlers/model_class.php b/e107_handlers/model_class.php
index 6cff50459..145299c76 100644
--- a/e107_handlers/model_class.php
+++ b/e107_handlers/model_class.php
@@ -9,8 +9,8 @@
* e107 Base Model
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $
- * $Revision: 1.28 $
- * $Date: 2009-11-01 19:05:25 $
+ * $Revision: 1.29 $
+ * $Date: 2009-11-02 17:45:29 $
* $Author: secretr $
*/
@@ -1993,6 +1993,7 @@ class e_tree_model extends e_model
{
$sql = e107::getDb();
$class_name = $this->getParam('model_class');
+ $this->_total = $sql->total_results = false;
if($sql->db_Select_gen($this->getParam('db_query')))
{
$this->_total = $sql->total_results; //requires SQL_CALC_FOUND_ROWS in query - see db handler
@@ -2002,6 +2003,7 @@ class e_tree_model extends e_model
$tmp = new $class_name($tmp);
$this->setNode($tmp->get($this->getFieldIdName()), $tmp);
}
+ // FIXME - test for type of $this->_total to avoid query if table is empty
if(!$this->_total && $this->getModelTable())
{
//SQL_CALC_FOUND_ROWS not found in the query, do one more query
diff --git a/e107_plugins/release/includes/admin.php b/e107_plugins/release/includes/admin.php
index 553e8ef31..8fa807986 100644
--- a/e107_plugins/release/includes/admin.php
+++ b/e107_plugins/release/includes/admin.php
@@ -9,8 +9,8 @@
* Release Plugin Administration UI
*
* $Source: /cvs_backup/e107_0.8/e107_plugins/release/includes/admin.php,v $
- * $Revision: 1.2 $
- * $Date: 2009-11-01 19:05:26 $
+ * $Revision: 1.3 $
+ * $Date: 2009-11-02 17:45:28 $
* $Author: secretr $
*/
@@ -68,7 +68,7 @@ class plugin_release_admin_ui extends e_admin_ui
protected $pid = "release_id";
// optional
- protected $perPage = 20;
+ protected $perPage = 2;
// default - true
protected $batchDelete = true;
@@ -87,6 +87,7 @@ class plugin_release_admin_ui extends e_admin_ui
'release_date' => array('title'=> LAN_DATE, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'thclass' => ''),
'release_compatibility' => array('title'=> 'compatib', 'type' => 'text', 'data' => 'str', 'width' => '10%', 'thclass' => 'center' ),
'release_url' => array('title'=> 'release_url', 'type' => 'url', 'data' => 'str', 'width' => '20%', 'thclass' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'parms' => 'truncate=30', 'validate' => true, 'help' => 'Enter release URL here', 'error' => 'please, ener valid URL'),
+ 'test_list_1' => array('title'=> 'test 1', 'type' => 'boolean', 'data' => 'int', 'width' => '5%', 'thclass' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'noedit' => true),
'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced'=>TRUE)
);