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

More admin tools work

This commit is contained in:
secretr
2009-11-01 19:05:26 +00:00
parent fc9419038b
commit 0c717f3d3d
8 changed files with 280 additions and 40 deletions

View File

@@ -911,6 +911,12 @@ class e_admin_dispatcher
*/
protected $modes;
/**
* Optional - map 'mode/action' pair to 'modeAlias/actionAlias'
* @var string
*/
protected $adminMenuAliases = array();
/**
* Optional (set by child class).
* Required for admin menu render
@@ -1213,7 +1219,7 @@ class e_admin_dispatcher
* Generic Admin Menu Generator
* @return string
*/
function renderMenu($return = true)
function renderMenu()
{
$tp = e107::getParser();
$var = array();
@@ -1241,17 +1247,21 @@ class e_admin_dispatcher
}
$var[$key][$k2] = $v;
}
// TODO slide down menu options?
if(!vartrue($var[$key]['link']))
{
$var[$key]['link'] = e_SELF.'?mode='.$tmp[0].'&action='.$tmp[1];
$var[$key]['link'] = e_SELF.'?mode='.$tmp[0].'&action='.$tmp[1]; // FIXME - URL based on $modes, remove url key
}
/*$var[$key]['text'] = $val['caption'];
$var[$key]['link'] = (vartrue($val['url']) ? $tp->replaceConstants($val['url'], 'abs') : e_SELF).'?mode='.$tmp[0].'&action='.$tmp[1];
$var[$key]['perm'] = $val['perm']; */
}
$request = $this->getRequest();
return e_admin_menu($this->menuTitle, $request->getMode().'/'.$request->getAction(), $var);
$selected = $request->getMode().'/'.$request->getAction();
$selected = vartrue($this->adminMenuAliases[$selected], $selected);
return e_admin_menu($this->menuTitle, $selected, $var);
}
}
@@ -1757,7 +1767,7 @@ class e_admin_controller
$url = $path.'?'.$request->buildQueryString($merge_query, false);
// Transfer all messages to session
e107::getMessage()->mergeWithSession();
e107::getMessage()->moveToSession();
// write session data
session_write_close();
// do redirect
@@ -2054,6 +2064,13 @@ class e_admin_ui extends e_admin_controller_ui
// Copy model messages to the default message stack
$this->getModel()->setMessages();
// Take action based on use choice after success
if(!$this->getModel()->hasError())
{
$this->doAfterSubmit($this->getModel()->getId(), 'edit');
}
}
/**
@@ -2065,6 +2082,39 @@ class e_admin_ui extends e_admin_controller_ui
return $this->getUI()->getCreate();
}
/**
* Take approproate action after successfull submit
*
* @param integer $id optional, needed only if redirect action is 'edit'
* @param string $noredirect_for don't redirect if action equals to its value
*/
public function doAfterSubmit($id = 0, $noredirect_for = '')
{
if($noredirect_for && $noredirect_for == $this->getPosted('__after_submit_action'))
{
return;
}
$choice = $this->getPosted('__after_submit_action', 0);
switch ($choice) {
case 'create': // create
$this->redirectAction('create', 'id');
break;
case 'edit': // edit
$this->redirectAction('edit', '', 'id='.$id);
break;
case 'list': // list
$this->redirectAction('list');
break;
default:
$this->redirectAction(preg_replace('/[^\w\-]/', '', $choice), 'id');
break;
}
return;
}
/**
* Convert posted values when needed (based on field type)
* @param array $data
@@ -2168,6 +2218,11 @@ class e_admin_ui extends e_admin_controller_ui
return vartrue($user_pref['admin_cols_'.$this->getTableName()], array());
}
/**
* Get current model
*
* @return e_admin_model
*/
public function getModel()
{
if(null === $this->_model)
@@ -2242,7 +2297,11 @@ class e_admin_ui extends e_admin_controller_ui
$this->_tree_model = $tree_model;
}
/**
* Get extended (UI) Form instance
*
* @return e_admin_form_ui
*/
public function getUI()
{
if(null === $this->_ui)
@@ -2254,7 +2313,7 @@ class e_admin_ui extends e_admin_controller_ui
}
else// default ui
{
$this->_ui = new e_admin_ui($this);
$this->_ui = new e_admin_form_ui($this);
}
}
return $this->_ui;
@@ -2292,6 +2351,115 @@ class e_admin_form_ui extends e_form
}
/**
* WORK IN PROGRESS
* Generic DB Record Creation Form.
* Expected array format:
* <code>
* $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
*
* )
* )
* );
* </code>
* @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 .= "
<form method='post' action='".e107::getParser()->replaceConstants($form['url'], 'abs')."' id='{$form['id']}-form' enctype='multipart/form-data'>
";
foreach ($form['fieldsets'] as $elid => $data)
{
$elid = $form['id'].'-'.$elid;
$text .= "
<fieldset id='{$elid}'>
<legend>{$data['legend']}</legend>
<table cellpadding='0' cellspacing='0' class='adminedit'>
<colgroup span='2'>
<col class='col-label' />
<col class='col-control' />
</colgroup>
<tbody>
";
foreach($data['fields'] as $key => $att)
{
$parms = vartrue($att['formparms'], array());
if(!is_array($parms)) parse_str($parms, $parms);
$label = vartrue($att['note']) ? '<div class="label-note">'.deftrue($att['note'], $att['note']).'</div>' : '';
$help = vartrue($att['help']) ? '<div class="field-help">'.deftrue($att['help'], $att['help']).'</div>' : '';
// type null - system (special) fields
if($att['type'] !== null && !vartrue($att['noedit']) && $key != $form['primary'])
{
$text .= "
<tr>
<td class='label'>
".defset($att['title'], $att['title']).$label."
</td>
<td class='control'>
".$this->renderElement($key, $model->getIfPosted($key), $att)."
{$help}
</td>
</tr>
";
}
}
$text .= "
</tbody>
</table>
<div class='buttons-bar center'>
";
// TODO - make this optional, introduce ui_parameters variable (array)
$text .= '
<div class="options">
After submit: '.$this->radio_multi('__after_submit_action', array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current'), $request->getPosted('__after_submit_action', 'list'), false).'
</div>
';
if($controller->getId())
{
$text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update');
$text .= "<input type='hidden' name='record_id' value='".$controller->getId()."' />";
}
else
{
$text .= $this->admin_button('etrigger_submit', LAN_CREATE, 'create');
$text .= "<input type='hidden' name='record_id' value='0' />";
}
$text .= $this->admin_button('etrigger_cancel', LAN_CANCEL, 'cancel');
$text .= "
</div>
</fieldset>
</form>
";
}
}
return $text;
}
/**
* This will use the above (after it's done)
* Generic DB Record Creation Form.
* @return string
*/
@@ -2344,7 +2512,12 @@ class e_admin_form_ui extends e_form
</table>
<div class='buttons-bar center'>
";
// TODO - make this optional, introduce ui_parameters variable (array)
$text .= '
<div class="options">
After submit: '.$this->radio_multi('__after_submit_action', array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current'), $request->getPosted('__after_submit_action', 'list'), false).'
</div>
';
if($controller->getId())
{
$text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update');

View File

@@ -9,8 +9,8 @@
* Form Handler
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $
* $Revision: 1.61 $
* $Date: 2009-10-30 17:59:30 $
* $Revision: 1.62 $
* $Date: 2009-11-01 19:05:25 $
* $Author: secretr $
*
*/
@@ -62,16 +62,16 @@ if (!defined('e107_INIT')) { exit; }
*/
class e_form
{
var $_tabindex_counter = 0;
var $_tabindex_enabled = true;
var $_cached_attributes = array();
protected $_tabindex_counter = 0;
protected $_tabindex_enabled = true;
protected $_cached_attributes = array();
/**
* @var user_class
*/
var $_uc;
protected $_uc;
function e_form($enable_tabindex = false)
function __construct($enable_tabindex = false)
{
$this->_tabindex_enabled = $enable_tabindex;
@@ -85,7 +85,7 @@ class e_form
return "<input type='text' name='{$name}' value='{$value}' maxlength='{$maxlength}'".$this->get_attributes($options, $name)." />";
}
function iconpreview($id,$default,$width='',$height='') // FIXME
function iconpreview($id, $default, $width='', $height='') // FIXME
{
$parms = $name."|".$width."|".$height."|".$id;
$sc_parameters .= 'mode=preview&default='.$default.'&id='.$id;
@@ -134,10 +134,10 @@ class e_form
//$parms .= "&click_target=data";
//$parms .= "&click_prefix=[img][[e_IMAGE]]newspost_images/";
//$parms .= "&click_postfix=[/img]";
$tp = e107::getParser();
$ret = "<div class='field-section'>".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=select}")."</div>";
$ret = "<div class='field-spacer'>".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=preview}")."</div>";
return $text;
$ret .= "<div class='field-spacer'>".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=preview}")."</div>";
return $ret;
}
/**
@@ -563,10 +563,13 @@ class e_form
if($id_value === false) return '';
//format data first
$name = $this->name2id($name);
$name = trim($this->name2id($name), '-');
$value = trim(preg_replace('#[^a-z0-9\-]/i#','-', $value), '-');
$value = str_replace("/","-",$value);
$value = trim(str_replace("/","-",$value), '-');
if(!$id_value && is_numeric($value)) $id_value = $value;
// clean - do it better, this could lead to dups
$id_value = trim($id_value, '-');
if(empty($id_value) ) return " {$return_attribute}='{$name}".($value ? "-{$value}" : '')."'";// also useful when name is e.g. name='my_name[some_id]'
elseif(is_numeric($id_value) && $name) return " {$return_attribute}='{$name}-{$id_value}'";// also useful when name is e.g. name='my_name[]'

View File

@@ -9,8 +9,8 @@
* Message Handler
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/message_handler.php,v $
* $Revision: 1.23 $
* $Date: 2009-10-30 17:59:32 $
* $Revision: 1.24 $
* $Date: 2009-11-01 19:05:25 $
* $Author: secretr $
*
*/
@@ -466,7 +466,6 @@ class eMessage
/**
* Merge _SESSION message array with the current messages
* TODO - merge stacks, merge custom stack to default
*
* @param boolean $reset
* @return eMessage
@@ -499,6 +498,38 @@ class eMessage
return $this;
}
/**
* Convert current messages to Session messages
*
* @param string $mstack false - move all message stacks
* @param string $message_type false - move all types
* @return unknown
*/
public function moveToSession($mstack = false, $message_type = false)
{
foreach (array_keys($this->_sysmsg) as $type)
{
if(!$this->isType($type) || ($message_type && $message_type !== $type))
{
unset($this->_sysmsg[$type]);
continue;
}
if(false === $mstack)
{
$_SESSION[$this->_session_id][$type] = array_merge_recursive( $_SESSION[$this->_session_id][$type], $this->_sysmsg[$type]);
continue;
}
if(isset($this->_sysmsg[$type][$mstack]))
{
$_SESSION[$this->_session_id][$type][$mstack] = $this->_sysmsg[$type][$mstack];
}
}
$this->reset($message_type, $mstack, false);
return $this;
}
/**
* Merge messages from source stack with destination stack
* and reset source stack

View File

@@ -9,8 +9,8 @@
* e107 Base Model
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $
* $Revision: 1.27 $
* $Date: 2009-10-30 17:59:31 $
* $Revision: 1.28 $
* $Date: 2009-11-01 19:05:25 $
* $Author: secretr $
*/
@@ -712,7 +712,7 @@ class e_model
*
* @param string $message
* @param boolean $session [optional]
* @return e_validator
* @return e_model
*/
public function addMessageInfo($message, $session = false)
{
@@ -720,12 +720,25 @@ class e_model
return $this;
}
/**
* Add system message of type Success
*
* @param string $message
* @param boolean $session [optional]
* @return e_model
*/
public function addMessageSuccess($message, $session = false)
{
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_SUCCESS, $session);
return $this;
}
/**
* Add system message of type Warning
*
* @param string $message
* @param boolean $session [optional]
* @return e_validator
* @return e_model
*/
public function addMessageWarning($message, $session = false)
{
@@ -738,7 +751,7 @@ class e_model
*
* @param string $message
* @param boolean $session [optional]
* @return e_validator
* @return e_model
*/
public function addMessageError($message, $session = false)
{
@@ -751,7 +764,7 @@ class e_model
*
* @param string $message
* @param boolean $session [optional]
* @return e_validator
* @return e_model
*/
public function addMessageDebug($message, $session = false)
{
@@ -775,7 +788,7 @@ class e_model
* Move model System messages (if any) to the default eMessage stack
*
* @param boolean $session store messages to session
* @return setMessages
* @return e_model
*/
public function setMessages($session = false)
{
@@ -1639,8 +1652,13 @@ class e_admin_model extends e_model
$this->_db_errno = e107::getDb()->getLastErrorNumber();
$this->addMessageError('SQL Insert Error', $session_messages); //TODO - Lan
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
return false;
}
// Set the reutrned ID
$this->setId($res);
$this->addMessageSuccess(LAN_CREATED);
return $res;
}
@@ -1693,9 +1711,12 @@ class e_admin_model extends e_model
{
$this->addMessageError('SQL Update Error', $session_messages); //TODO - Lan
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
return false;
}
$this->addMessageInfo(LAN_NO_CHANGE);
return 0;
}
$this->addMessageSuccess(LAN_UPDATED);
return $res;
}

View File

@@ -9,8 +9,8 @@
* e107 Release Plugin
*
* $Source: /cvs_backup/e107_0.8/e107_plugins/release/admin_config.php,v $
* $Revision: 1.12 $
* $Date: 2009-10-31 17:57:15 $
* $Revision: 1.13 $
* $Date: 2009-11-01 19:05:26 $
* $Author: secretr $
*
*/
@@ -42,7 +42,7 @@ e107::getAdminUI()->runPage();
require_once(e_ADMIN."footer.php");
/* OBSOLETE - see admin_shortcodes::sc_admin_menu()
function admin_config_adminmenu() //TODO move this into e_model_interface
function admin_config_adminmenu()
{
//global $rp;
//$rp->show_options();

View File

@@ -9,8 +9,8 @@
* Release Plugin Administration UI
*
* $Source: /cvs_backup/e107_0.8/e107_plugins/release/includes/admin.php,v $
* $Revision: 1.1 $
* $Date: 2009-10-31 17:57:15 $
* $Revision: 1.2 $
* $Date: 2009-11-01 19:05:26 $
* $Author: secretr $
*/
@@ -24,16 +24,26 @@ class plugin_release_admin extends e_admin_dispatcher
protected $modes = array(
'main' => array('controller' => 'plugin_release_admin_ui', 'path' => null, 'ui' => 'plugin_release_admin_form_ui', 'uipath' => null)
);
/**
* Format: 'MODE/ACTION' => array('caption' => 'Menu link title'[, 'url' => '{e_PLUGIN}release/admin_config.php', 'perm' => '0']);
* Additionally, any valid e_admin_menu() key-value pair could be added to the above array
* @var array
*/
protected $adminMenu = array(
'main/list' => array('caption'=> 'Release List', 'perm'=>'0'),
'main/create' => array('caption'=> LAN_CREATE, 'perm'=>'0'),
'main/options' => array('caption'=> LAN_OPTIONS, 'perm'=>'0'),
'main/custom' => array('caption'=> 'Custom Page', 'perm'=>0)
'main/list' => array('caption'=> 'Manage', 'perm' => '0'),
'main/create' => array('caption'=> LAN_CREATE, 'perm' => '0'),
'main/options' => array('caption'=> 'Settings', 'perm' => '0'),
'main/custom' => array('caption'=> 'Custom Page', 'perm' => '0')
);
/**
* Optional, map mode/action t
* Format: 'MODE/ACTION' => 'MODE ALIAS/ACTION ALIAS';
* @var array
*/
protected $adminMenuAliases = array(
'main/edit' => 'main/list'
);
/**

View File

@@ -345,6 +345,7 @@ button.cancel:active span {}
.buttons-bar { padding: 10px 0px; }
.buttons-bar button { margin-right: 10px; }
.buttons-bar button.f-right { margin-right: 0px; }
.buttons-bar .options { margin-bottom: 10px; }
/* Actions (adminlist) - input type image */
input.action { vertical-align: middle; } /* default */

View File

@@ -650,6 +650,7 @@ button.cancel:active span {}
.buttons-bar { padding: 10px 0px; }
.buttons-bar button { margin-right: 10px; }
.buttons-bar button.f-right { margin-right: 0px; }
.buttons-bar .options { margin-bottom: 10px; }
/* Actions (adminlist) - input type image */
input.action { vertical-align: middle; } /* default */