X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2FPlugin%2FEditor.php;fp=include%2FPlugin%2FEditor.php;h=9de3b2f1c2a75b45ade74d2c0b1b1cc358899fd6;hb=6855525e48fad5de270500a5445c4f4ff85d8bda;hp=0000000000000000000000000000000000000000;hpb=e69709aa8ee6108a1197e46b45367ba8dab55a52;p=diogenes.git diff --git a/include/Plugin/Editor.php b/include/Plugin/Editor.php new file mode 100644 index 0000000..9de3b2f --- /dev/null +++ b/include/Plugin/Editor.php @@ -0,0 +1,290 @@ +plug_barrel = $plug_barrel; + $this->plug_page = $plug_page; + $this->plug_page_wperms = $plug_page_wperms; + } + + + /** Run the plugin editor. + * + * @param $page + * @param $outputvar + */ + function run(&$page, $outputvar = '') + { + global $globals; + + $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; + $target = isset($_REQUEST['plug_target']) ? $_REQUEST['plug_target'] : ''; + + // load all available plugins + $cachefile = $globals->plugins->cacheFile($this->plug_barrel); + + // if the tree cache does not exits, try to init it + if (!file_exists($cachefile)) { + $globals->plugins->compileCache($cachefile, $this->plug_barrel); + } + $cache = $globals->plugins->readCache($cachefile, $this->plug_barrel); + $available = $globals->plugins->cachedAvailable($cache, $this->plug_barrel, $this->plug_page); + + + // handle updates + switch ($action) { + case "move_up": case "move_down": + if ($this->readonly) die("Sorry, this plugin view is read-only."); + + $delta = ($action == "move_down") ? 1 : -1; + //$page->info("moving plugin '$target'.."); + $plugcache_a = $globals->plugins->cacheGet($cache, $this->plug_barrel, $this->plug_page, $target); + $plug_a =& $globals->plugins->load($plugcache_a); + //$plug_a =& $globals->plugins->get($target); + + if (is_object($plug_a) && ($plug_a->active)) { + $old_pos = $plug_a->pos; + //$plug_b =& $globals->plugins->getAtPos($old_pos + $delta); + $plugcache_b = $globals->plugins->cacheGetAtPos($cache, $this->plug_barrel, $this->plug_page, $old_pos + $delta); + + if (is_array($plugcache_b)) + { + $plug_b =& $globals->plugins->load($plugcache_b); + + // swap the current plugin and the next plugin + if (is_object($plug_b) && ($plug_b->active)) + { + $plug_a->writeParams($this->plug_barrel, $this->plug_page, $old_pos + $delta); + $plug_b->writeParams($this->plug_barrel, $this->plug_page, $old_pos); + } + } + } + $globals->plugins->compileCache($cachefile, $this->plug_barrel); + $cache = $globals->plugins->readCache($cachefile, $this->plug_barrel); + $available = $globals->plugins->cachedAvailable($cache, $this->plug_barrel, $this->plug_page); + break; + + case "update": + if ($this->readonly) die("Sorry, this plugin view is read-only."); + + // list of active plugins + $active = array(); + if (isset($_REQUEST['plugins_active'])) { + $active = array_values($_REQUEST['plugins_active']); + } + + foreach ($available as $plugin) { + $plugentry =& $globals->plugins->cacheGet($cache, $this->plug_barrel, $this->plug_page, $plugin); + if (!is_array($plugentry) and $this->plug_page) { + $plugentry = $globals->plugins->cacheGet($cache, $this->plug_barrel, 0, $plugin); + if (is_array($plugentry)) + { + $plugentry['active'] = 0; + } + } + + // check we have a valid cache entry + if (!is_array($plugentry)) { + $page->info("could not find plugin '$plugin' in cache for barrel '{$this->plug_barrel}'"); + return; + } + + $plug_h =& $globals->plugins->load($plugentry); + + if (is_object($plug_h) && is_array($plugentry)) { + $pos = array_search($plugin, $active); + + if ($pos !== false) { + // check the plugin is allowed in the current context + if ($this->plug_barrel and $this->plug_page) { + $wperms = $this->plug_page_wperms; + + // $page->info("checking plugin '$plugin' vs. write permissions '$wperms'.."); + if (!$plug_h->allow_wperms($wperms)) + { + $page->info("plugin '$plugin' is not allowed with write permissions '$wperms'!"); + break; + } + } + + // retrieve parameters from REQUEST + foreach ($plug_h->params as $key => $val) + { + if (isset($_REQUEST[$plug_h->name."_".$key])) { + $plug_h->params[$key] = $_REQUEST[$plug_h->name."_".$key]; + } + } + + // write parameters to database + $plug_h->writeParams($this->plug_barrel, $this->plug_page, $pos); + } else { + // erase parameters from database + $plug_h->eraseParams($this->plug_barrel, $this->plug_page); + } + } + } + + // log this action + if ($this->plug_barrel) + { + if ($this->plug_page) + { + $page->log('page_plugins', $this->plug_barrel.":".$this->plug_page); + } else { + $page->log('barrel_plugins', $this->plug_barrel.":*"); + } + } + + $globals->plugins->compileCache($cachefile, $this->plug_barrel); + $cache = $globals->plugins->readCache($cachefile, $this->plug_barrel); + $available = $globals->plugins->cachedAvailable($cache, $this->plug_barrel, $this->plug_page); + break; + } + + // get dump of plugins to fill out form + $page->assign('plug_barrel', $this->plug_barrel); + $page->assign('plug_page', $this->plug_page); + + $plugs = array(); + + // start by adding the active plugins + foreach ($cache as $plugcache) + { + if (in_array($plugcache['plugin'], $available) and ($plugcache['page'] == $this->plug_page) and ($plugcache['active'])) + { + // check we have a valid plugin handle + $plug_h = $globals->plugins->load($plugcache); + if (!is_object($plug_h)) { + + $page->info("could not load disabled plugin '{$plugcache['plugin']}' in barrel '{$this->plug_barrel}'"); + + } else { + + $plugentry = $plug_h->dump(); + $plugentry['icon'] = $globals->icons->get_action_icon('plugins'); + $type = $plugentry['type']; + if (!empty($plugs[$type])) { + $plugentry['move_up'] = 1; + $last = count($plugs[$type]) - 1; + $plugs[$type][$last]['move_down'] = 1; + } else { + $plugs[$type] = array(); + } + array_push($plugs[$type], $plugentry); + + } + } + } + + // next we add the disabled plugins + if (!$this->readonly) + { + foreach ($available as $plugname) + { + $plugcache = $globals->plugins->cacheGet($cache, $this->plug_barrel, $this->plug_page, $plugname); + if (!is_array($plugcache) or !$plugcache['active']) + { + $plugcache = $globals->plugins->cacheGet($cache, $this->plug_barrel, 0, $plugname); + $plugcache['active'] = 0; + $plug_h = $globals->plugins->load($plugcache); + if (!is_object($plug_h)) { + $page->info("could not load disabled plugin '$plugname' in barrel '{$this->plug_barrel}'"); + return; + } + + $plugentry = $plug_h->dump(); + $plugentry['icon'] = $globals->icons->get_action_icon('plugins'); + $type = $plugentry['type']; + if (empty($plugs[$type])) { + $plugs[$type] = array(); + } + array_push($plugs[$type], $plugentry); + } + } + } + + /* + echo "plugins
";
+    print_r($plugs);
+    echo "
"; + */ + $page->assign('plugins', $plugs); + + // values + $page->assign('show_params', $this->show_params); + $page->assign('readonly',$this->readonly); + + // translations + $page->assign('msg_submit', __("Submit")); + $page->assign('msg_plugedit_plugin', __("plugin")); + $page->assign('msg_plugedit_plugins', __("plugins")); + $page->assign('msg_plugedit_description', __("description")); + $page->assign('msg_plugedit_parameters', __("parameters")); + $page->assign('msg_move_up', __("move up")); + $page->assign('msg_move_down', __("move down")); + + // if requested, assign the content to be displayed + if (!empty($outputvar)) { + $page->assign($outputvar, $page->fetch('plugin-editor.tpl')); + } + } + + + /** Do not display plugin parameters. + * + * @param $hide boolean + */ + function hide_params($hide) + { + $this->show_params = !$hide; + } + +} + +?>