diff --git a/e107_handlers/admin_handler.php b/e107_handlers/admin_handler.php index 24cd2dfd6..88418dc5c 100644 --- a/e107_handlers/admin_handler.php +++ b/e107_handlers/admin_handler.php @@ -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: + * + * $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 .= " +
+ "; + + foreach ($form['fieldsets'] as $elid => $data) + { + $elid = $form['id'].'-'.$elid; + $text .= " +
+ {$data['legend']} + + + + + + + "; + + foreach($data['fields'] as $key => $att) + { + + $parms = vartrue($att['formparms'], array()); + if(!is_array($parms)) parse_str($parms, $parms); + $label = vartrue($att['note']) ? '
'.deftrue($att['note'], $att['note']).'
' : ''; + $help = vartrue($att['help']) ? '
'.deftrue($att['help'], $att['help']).'
' : ''; + + // type null - system (special) fields + if($att['type'] !== null && !vartrue($att['noedit']) && $key != $form['primary']) + { + $text .= " + + + + + "; + } + + } + + $text .= " + +
+ ".defset($att['title'], $att['title']).$label." + + ".$this->renderElement($key, $model->getIfPosted($key), $att)." + {$help} +
+
+ "; + // TODO - make this optional, introduce ui_parameters variable (array) + $text .= ' +
+ 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).' +
+ '; + if($controller->getId()) + { + $text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update'); + $text .= ""; + } + else + { + $text .= $this->admin_button('etrigger_submit', LAN_CREATE, 'create'); + $text .= ""; + } + $text .= $this->admin_button('etrigger_cancel', LAN_CANCEL, 'cancel'); + + $text .= " +
+
+
+ "; + } + } + + + + 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
"; - + // TODO - make this optional, introduce ui_parameters variable (array) + $text .= ' +
+ 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).' +
+ '; if($controller->getId()) { $text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update'); diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index 14ccc5fa8..93fd7d0d7 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.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 "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 = "
".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=select}")."
"; - $ret = "
".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=preview}")."
"; - return $text; + $ret .= "
".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=preview}")."
"; + 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[]' diff --git a/e107_handlers/message_handler.php b/e107_handlers/message_handler.php index 59b795077..ce38af4ca 100644 --- a/e107_handlers/message_handler.php +++ b/e107_handlers/message_handler.php @@ -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 diff --git a/e107_handlers/model_class.php b/e107_handlers/model_class.php index 78de0331f..6cff50459 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.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; } diff --git a/e107_plugins/release/admin_config.php b/e107_plugins/release/admin_config.php index b3f6f1e88..ab12a6142 100644 --- a/e107_plugins/release/admin_config.php +++ b/e107_plugins/release/admin_config.php @@ -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(); diff --git a/e107_plugins/release/includes/admin.php b/e107_plugins/release/includes/admin.php index a95d9b625..553e8ef31 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.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' ); /** diff --git a/e107_themes/_blank/admin_style.css b/e107_themes/_blank/admin_style.css index dbd2e8e9a..3b0e098fc 100644 --- a/e107_themes/_blank/admin_style.css +++ b/e107_themes/_blank/admin_style.css @@ -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 */ diff --git a/e107_themes/jayya/style.css b/e107_themes/jayya/style.css index 392f1d9ce..f9fb1415a 100644 --- a/e107_themes/jayya/style.css +++ b/e107_themes/jayya/style.css @@ -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 */