diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php index 42b121910..6c54ce012 100644 --- a/e107_admin/plugin.php +++ b/e107_admin/plugin.php @@ -86,6 +86,307 @@ if(isset($_POST['uninstall_cancel'])) } +// Experimental rewrite for v2.1.5 ---------------------- + + + + +class plugman_adminArea extends e_admin_dispatcher +{ + + protected $modes = array( + + 'main' => array( + 'controller' => 'plugin_ui', + 'path' => null, + 'ui' => 'plugin_form_ui', + 'uipath' => null + ), + + + ); + + + protected $adminMenu = array( + + 'main/list' => array('caption'=> LAN_MANAGE, 'perm' => 'P'), + 'main/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'), + + // 'main/custom' => array('caption'=> 'Custom Page', 'perm' => 'P') + ); + + protected $adminMenuAliases = array( + 'main/edit' => 'main/list' + ); + + protected $adminMenuIcon = 'e-plugmanager-24'; + + + /** + * @var string $var['installed']['text'] = EPL_ADLAN_22; + $var['installed']['link'] = e_SELF; + + $var['avail']['text'] = EPL_ADLAN_23; + $var['avail']['link'] = e_SELF."?avail"; + + + $var['online']['text'] = EPL_ADLAN_220; + $var['online']['link'] = e_SELF."?mode=online"; + + + if(E107_DEBUG_LEVEL > 0) + { + $var['upload']['text'] = EPL_ADLAN_38; + $var['upload']['link'] = e_SELF."?mode=upload"; + } + + $var['create']['text'] = EPL_ADLAN_114; + $var['create']['link'] = e_SELF."?mode=create"; + + + + + + $keys = array_keys($var); + + $action = (in_array($this->action,$keys)) ? $this->action : "installed"; + + if($this->action == 'lans') + { + $action = 'create'; + } + + $icon = e107::getParser()->toIcon('e-plugmanager-24'); + $caption = $icon."".ADLAN_98.""; + */ + + protected $menuTitle = ADLAN_98; +} + + + + + +class plugin_ui extends e_admin_ui +{ + + protected $pluginTitle = ADLAN_98; + protected $pluginName = 'core'; + // protected $eventName = 'plugman-plugin'; // remove comment to enable event triggers in admin. + protected $table = 'plugin'; + protected $pid = 'plugin_id'; + protected $perPage = 10; + protected $batchDelete = true; + protected $batchExport = true; + protected $batchCopy = true; + // protected $sortField = 'somefield_order'; + // protected $orderStep = 10; + // protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable. + + // protected $listQry = "SELECT * FROM `#tableName` WHERE field != '' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit. + + protected $listOrder = 'plugin_id DESC'; + + protected $fields = array( + 'checkboxes' => array('title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect',), + 'plugin_id' => array('title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_icon' => array('title' => LAN_ICON, 'type' => 'icon', 'data' => 'str', "width" => "5%", 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_name' => array('title' => LAN_TITLE, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_version' => array('title' => LAN_VERSION, 'type' => 'text', 'data' => false, 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_date' => array('title' => "Released", 'type' => 'text', 'data' => false, "width" => "8%", 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_category' => array('title' => LAN_CATEGORY, 'type' => 'dropdown', 'data' => 'str', 'width' => 'auto', 'batch' => true, 'filter' => true, 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left',), + + 'plugin_author' => array('title' => LAN_AUTHOR, 'type' => 'text', 'data' => false, 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_compatible' => array('title' => "Compatible", 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_description' => array('title' => LAN_DESCRIPTION, 'type' => 'textarea', 'data' => false, 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + + 'plugin_path' => array('title' => 'Path', 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_installflag' => array('title' => 'Installed', 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'plugin_addons' => array('title' => 'Addons', 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left',), + 'options' => array('title' => LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1',), + ); + + protected $fieldpref = array('plugin_icon', 'plugin_name', 'plugin_version', 'plugin_description', 'plugin_compatible', 'plugin_released','plugin_author', 'plugin_category','plugin_installflag'); + + + // protected $preftabs = array('General', 'Other' ); + protected $prefs = array( + ); + + + public function init() + { + // Set drop-down values (if any). + $this->fields['plugin_category']['writeParms']['optArray'] = e107::getPlug()->getCategoryList(); // array('plugin_category_0','plugin_category_1', 'plugin_category_2'); // Example Drop-down array. + + } + + // Modify the list data. + public function ListObserver() + { + parent::ListObserver(); + + $tree = $this->getTreeModel(); + + $plg = e107::getPlug(); + + foreach ($tree->getTree() as $id => $model) + { + $path = $model->get('plugin_path'); + + $plg->load($path); + + $model->set('plugin_name',$plg->getName()); + $model->set('plugin_date',$plg->getDate()); + $model->set('plugin_description',$plg->getDescription()); + $model->set('plugin_icon',$plg->getIcon(32, 'path')); + + } + + + } + + + + + + + // ------- Customize Create -------- + + public function beforeCreate($new_data,$old_data) + { + return $new_data; + } + + public function afterCreate($new_data, $old_data, $id) + { + // do something + } + + public function onCreateError($new_data, $old_data) + { + // do something + } + + + // ------- Customize Update -------- + + public function beforeUpdate($new_data, $old_data, $id) + { + return $new_data; + } + + public function afterUpdate($new_data, $old_data, $id) + { + // do something + } + + public function onUpdateError($new_data, $old_data, $id) + { + // do something + } + + + /* + // optional - a custom page. + public function customPage() + { + $text = 'Hello World!'; + $otherField = $this->getController()->getFieldVar('other_field_name'); + return $text; + + } + */ + +} + + + +class plugin_form_ui extends e_admin_form_ui +{ + + + // Custom Method/Function + function plugin_name($curVal,$mode) + { + $frm = e107::getForm(); + + switch($mode) + { + case 'read': // List Page + return $curVal; + break; + + case 'write': // Edit Page + return $frm->text('plugin_name',$curVal, 255, 'size=large'); + break; + + case 'filter': + case 'batch': + return array(); + break; + } + } + + + // Custom Method/Function + function plugin_addons($curVal,$mode) + { + $frm = e107::getForm(); + + switch($mode) + { + case 'read': // List Page + return $curVal; + break; + + case 'write': // Edit Page + return $frm->text('plugin_addons',$curVal, 255, 'size=large'); + break; + + case 'filter': + case 'batch': + return array(); + break; + } + } + +} + +if(deftrue('e_DEBUG_PLUGMANAGER')) +{ + new plugman_adminArea(); + require_once(e_ADMIN."auth.php"); + e107::getAdminUI()->runPage(); +} + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------------- + + class pluginmanager_form extends e_form { @@ -1247,7 +1548,7 @@ class pluginManager{ $text = ""; - $plg = e107::getPlug(); + foreach($pluginList as $plug) { @@ -1266,20 +1567,14 @@ class pluginManager{ $plugin_config_icon = ""; - if(deftrue('e_DEBUG_PLUGMANAGER')) + + if($plugin->parse_plugin($plug['plugin_path'])) { - $plg->load($plug['plugin_path']); - $plug_vars = $plg->getMeta(); - } - else - { - if($plugin->parse_plugin($plug['plugin_path'])) - { - $plug_vars = $plugin->plug_vars; - } + $plug_vars = $plugin->plug_vars; } + if(varset($plug['plugin_category']) == "menu") // Hide "Menu Only" plugins. { continue; diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index b25fe6eb7..38e8e5f18 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -37,7 +37,7 @@ class e_plugin const CACHETIME = 120; // 2 hours const CACHETAG = "Meta_plugin"; - private $_accepted_categories = array('settings', 'users', 'content', 'tools', 'manage', 'misc', 'menu', 'about'); + private $_accepted_categories = array('settings'=>'settings', 'users'=>'users', 'content'=>'content','tools'=> 'tools', 'manage'=>'manage','misc'=> 'misc', 'menu'=>'menu', 'about'=> 'about'); function __construct() { @@ -63,6 +63,11 @@ class e_plugin return $this; } + public function getCategoryList() + { + return $this->_accepted_categories; + } + public function clearCache() { @@ -85,6 +90,31 @@ class e_plugin } + public function getDate() + { + if(isset($this->_data[$this->_plugdir]['@attributes']['date'])) + { + return $this->_data[$this->_plugdir]['@attributes']['date']; + } + + return false; + } + + public function getAuthor() + { + if(!isset($this->_data[$this->_plugdir]['author'])) + { + return false; + } + + return print_r($this->_data[$this->_plugdir]['author'],true); + + return (string) $this->_data[$this->_plugdir]['author']; + + } + + + public function getCategory() { if(!isset($this->_data[$this->_plugdir]['category'])) @@ -92,7 +122,7 @@ class e_plugin return false; } - return $this->_data[$this->_plugdir]['category']; + return (string) $this->_data[$this->_plugdir]['category']; } @@ -109,9 +139,11 @@ class e_plugin } - public function getIcon($size = 16) + public function getIcon($size = 16,$opt='') { + + $link = $this->_data[$this->_plugdir]['adminLinks']['link'][0]['@attributes']; $k = array(16 => 'iconSmall', 32 => 'icon', 128=>'icon128'); @@ -126,6 +158,11 @@ class e_plugin $caption = $this->getName(); + if($opt === 'path') + { + return e107::getParser()->createConstants(e_PLUGIN_ABS.$this->_plugdir.'/'.$link[$key]); + } + return "\"".$caption."\""; }