diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php index 4bb54a84f..bb5743575 100644 --- a/e107_admin/plugin.php +++ b/e107_admin/plugin.php @@ -765,163 +765,34 @@ class pluginManager{ } - - // FIXME - move it to plugin handler, similar to install_plugin() routine + function pluginUninstall() { - $pref = e107::getPref(); - $admin_log = e107::getAdminLog(); - $plugin = e107::getPlugin(); - $tp = e107::getParser(); - $sql = e107::getDb(); - $eplug_folder = ''; - if(!isset($_POST['uninstall_confirm'])) - { // $id is already an integer - $this->pluginConfirmUninstall(); - return; - } - $plug = $plugin->getinfo($this->id); + if(!isset($_POST['uninstall_confirm'])) + { // $id is already an integer - // Check if plugin is being used by another plugin before uninstalling it. - if(isset($plug['plugin_path'])) - { - if ($plugin->isUsedByAnotherPlugin($plug['plugin_path'])) - { - $this->action = 'installed'; // Render plugin list. - return; - } + $this->pluginConfirmUninstall(); + return; } - $text = ''; - //Uninstall Plugin - if ($plug['plugin_installflag'] == TRUE ) - { - $eplug_folder = $plug['plugin_path']; - $_path = e_PLUGIN.$plug['plugin_path'].'/'; + $post = e107::getParser()->filter($_POST); + $text = e107::getPlugin()->uninstall($this->id, $post); + $this->show_message($text, E_MESSAGE_SUCCESS); - if(file_exists($_path.'plugin.xml')) - { - unset($_POST['uninstall_confirm']); - $plugin->install_plugin_xml($this->id, 'uninstall', $tp->filter($_POST)); //$_POST must be used. - } - else - { // Deprecated - plugin uses plugin.php - $eplug_table_names = null; - $eplug_prefs = null; - $eplug_comment_ids= null; - $eplug_array_pref= null; - $eplug_menu_name = null; - $eplug_link = null; - $eplug_link_url = null; - $eplug_link_name = null; - $eplug_userclass = null; - $eplug_version = null; + $this->action = 'installed'; - include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); + $log = e107::getPlugin()->getLog(); + e107::getDebug()->log($log); - $func = $eplug_folder.'_uninstall'; - if (function_exists($func)) - { - $text .= call_user_func($func); - } - - if($_POST['delete_tables']) - { - if (is_array($eplug_table_names)) - { - $result = $plugin->manage_tables('remove', $eplug_table_names); - if ($result !== TRUE) - { - $text .= EPL_ADLAN_27.' '.MPREFIX.$result.' - '.EPL_ADLAN_30.'
'; - } - else - { - $text .= EPL_ADLAN_28."
"; - } - } - } - else - { - $text .= EPL_ADLAN_49."
"; - } - - if (is_array($eplug_prefs)) - { - $plugin->manage_prefs('remove', $eplug_prefs); - $text .= EPL_ADLAN_29."
"; - } - - if (is_array($eplug_comment_ids)) - { - $text .= ($plugin->manage_comments('remove', $eplug_comment_ids)) ? EPL_ADLAN_50."
" : ""; - } - - if (is_array($eplug_array_pref)) - { - foreach($eplug_array_pref as $key => $val) - { - $plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val); - } - } - - if ($eplug_menu_name) - { - $sql->delete('menus', "menu_name='{$eplug_menu_name}' "); - } - - if ($eplug_link) - { - $plugin->manage_link('remove', $eplug_link_url, $eplug_link_name); - } - - if ($eplug_userclass) - { - $plugin->manage_userclass('remove', $eplug_userclass); - } - - $sql->update('plugin', "plugin_installflag=0, plugin_version='{$eplug_version}' WHERE plugin_id='{$this->id}' "); - $plugin->manage_search('remove', $eplug_folder); - - $plugin->manage_notify('remove', $eplug_folder); - - // it's done inside install_plugin_xml(), required only here - if (isset($pref['plug_installed'][$plug['plugin_path']])) - { - unset($pref['plug_installed'][$plug['plugin_path']]); - } - e107::getConfig('core')->setPref($pref); - $plugin->rebuildUrlConfig(); - e107::getConfig('core')->save(); - } - - $logInfo = deftrue($plug['plugin_name'],$plug['plugin_name']). " v".$plug['plugin_version']." ({e_PLUGIN}".$plug['plugin_path'].")"; - e107::getLog()->add('PLUGMAN_03', $logInfo, E_LOG_INFORMATIVE, ''); - } - - if(!empty($_POST['delete_files']) && ($plug['plugin_installflag'] == true)) - { - if(!empty($eplug_folder)) - { - $result = e107::getFile()->rmtree(e_PLUGIN.$eplug_folder); - $text .= ($result ? '
'.EPL_ADLAN_86.e_PLUGIN.$eplug_folder : '
'.EPL_ADLAN_87.'
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32); - } - } - else - { - $text .= '
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32; - } - - $plugin->save_addon_prefs('update'); - - $this->show_message($text, E_MESSAGE_SUCCESS); - // $ns->tablerender(EPL_ADLAN_1.' '.$tp->toHtml($plug['plugin_name'], "", "defs,emotes_off,no_make_clickable"), $text); - - $this->action = 'installed'; - return; + return; } + + + + function pluginProcessUpload() { if (!$_POST['ac'] == md5(ADMINPWCHANGE)) diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php index 6c69d8282..090ba4fbe 100644 --- a/e107_handlers/e_parse_class.php +++ b/e107_handlers/e_parse_class.php @@ -3617,8 +3617,9 @@ class e_parser } $idAtt = (!empty($parm['id'])) ? "id='".$parm['id']."' " : ''; + $style = (!empty($parm['style'])) ? "style='".$parm['style']."' " : ''; - $text = "<".$tag." {$idAtt}class='".$prefix.$id.$size.$spin.$rotate.$fixedW."'>" ; + $text = "<".$tag." {$idAtt}class='".$prefix.$id.$size.$spin.$rotate.$fixedW."' {$style}>" ; $text .= ($space !== false) ? $space : ""; return $text; diff --git a/e107_handlers/menu_class.php b/e107_handlers/menu_class.php index a74ea5d8e..b517fecc9 100644 --- a/e107_handlers/menu_class.php +++ b/e107_handlers/menu_class.php @@ -212,7 +212,64 @@ class e_menu return e107::getDb()->update('menus', $qry); } - + + /** + * Add a Menu to the Menu Table. + * @param string $plugin folder name + * @param string $menufile name without the .php + * @return bool|int + */ + public function add($plugin, $menufile) + { + $sql = e107::getDb(); + + if(empty($plugin) || empty($menufile)) + { + return false; + } + + if($sql->select('menus', 'menu_id' , 'menu_path="'.$plugin.'/" AND menu_name="'.$menufile.'" LIMIT 1')) + { + return false; + } + + $insert = array( + 'menu_id' => 0, + 'menu_name' => $menufile, + 'menu_location' => 0, + 'menu_order' => 0, + 'menu_class' => 0, + 'menu_pages' => 0, + 'menu_path' => $plugin."/", + 'menu_layout' => '', + 'menu_parms' => '' + ); + + return $sql->insert('menus', $insert); + + + } + + + /** + * Remove a menu from the Menu table. + * @param string $plugin folder name + * @param string $menufile + * @return int + */ + public function remove($plugin, $menufile=null) + { + $qry = 'menu_path="'.$plugin.'/" '; + + if(!empty($menufile)) + { + $qry .= ' AND menu_name="'.$menufile.'" '; + } + + return e107::getDb()->delete('menus', $qry); + } + + /** * Function to retrieve Menu data from tables. */ diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index e8eabb39e..314aab0ed 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -183,6 +183,7 @@ class e107plugin var $unInstallOpts; var $module = array(); private $options = array(); + private $log = array(); function __construct() { @@ -552,6 +553,7 @@ class e107plugin function manage_category($cat) { + $this->log("Running ".__FUNCTION__); if (vartrue($cat) && in_array($cat, $this->accepted_categories)) { return $cat; @@ -564,7 +566,7 @@ class e107plugin function manage_icons($plugin = '', $function = '') { - + $this->log("Running ".__FUNCTION__); if ($plugin == '') { return; @@ -587,6 +589,7 @@ class e107plugin { $status = ($med->removePath(e_PLUGIN.$plugin, 'icon')) ? E_MESSAGE_SUCCESS : E_MESSAGE_ERROR; $mes->add(IMALAN_164, $status); + $this->log("Deleted Icons from Media-Manager "); // No LANS } return; } @@ -710,6 +713,7 @@ class e107plugin */ function manage_extended_field($action, $field_name, $field_attrib, $field_source = '') { + $this->log("Running ".__FUNCTION__); $mes = e107::getMessage(); $this->setUe(); @@ -854,6 +858,7 @@ class e107plugin function manage_extended_field_sql($action, $field_name) { + $this->log("Running ".__FUNCTION__); $f = e_CORE.'sql/extended_'.preg_replace('/[^\w]/', '', $field_name).'.php'; // quick security, always good idea if(!is_readable($f)) return false; @@ -910,6 +915,7 @@ class e107plugin function manage_userclass($action, $class_name, $class_description='') { + $this->log("Running ".__FUNCTION__); global $e107; $tp = e107::getParser(); $sql = e107::getDb(); @@ -1037,6 +1043,7 @@ class e107plugin // $prefType specifies the storage type - may be 'pref', 'listPref' or 'arrayPref' function manage_prefs($action, $var, $prefType = 'pref', $path = '', $unEscape = FALSE) { + $this->log("Running ".__FUNCTION__); global $pref; if (!is_array($var)) return; @@ -1125,6 +1132,7 @@ class e107plugin function manage_comments($action, $comment_id) { + $this->log("Running ".__FUNCTION__); $sql = e107::getDb(); $tp = e107::getParser(); @@ -1149,6 +1157,7 @@ class e107plugin // 'upgrade' and 'remove' operate on all language variants of the same table function manage_tables($action, $var) { + $this->log("Running ".__FUNCTION__); $sql = e107::getDB(); $mes = e107::getMessage(); @@ -1322,6 +1331,7 @@ class e107plugin function manage_notify($action, $eplug_folder) { + $this->log("Running ".__FUNCTION__); $tp = e107::getParser(); // $notify_prefs = $sysprefs -> get('notify_prefs'); // $notify_prefs = $eArrayStorage -> ReadArray($notify_prefs); @@ -1386,7 +1396,7 @@ class e107plugin */ public function rebuildUrlConfig() { - + $this->log("Running ".__FUNCTION__); $modules = eRouter::adminReadModules(); // get all available locations, non installed plugins will be ignored $config = eRouter::adminBuildConfig(e107::getPref('url_config'), $modules); // merge with current config $locations = eRouter::adminBuildLocations($modules); // rebuild locations pref @@ -1413,6 +1423,22 @@ class e107plugin return $txt; } + + private function log($message) + { + $this->log[] = $message; + } + + public function getLog() + { + $text = $this->log; + + $this->log = array(); + + return $text; + + } + /** * Install routine for XML file * @param mixed $id (the number of the plugin in the DB) or the path to the plugin folder. eg. 'forum' @@ -1423,7 +1449,7 @@ class e107plugin * 'delete_xfields' - to delete extended fields * 'delete_ipool' - to delete icon pool entry * + any defined in _setup.php in the uninstall_options() method. - * @return void + * @return bool */ function install_plugin_xml($id, $function = '', $options = null) { @@ -1433,7 +1459,7 @@ class e107plugin $mes = e107::getMessage(); $event = e107::getEvent(); - $mes->addDebug("Running ".$function); + $this->log("Running Plugin: ".$function); $error = array(); // Array of error messages $canContinue = TRUE; // Clear flag if must abort part way through @@ -1478,16 +1504,19 @@ class e107plugin if (!file_exists($path.'plugin.xml') || $function == '') { $error[] = EPL_ADLAN_77; + $this->log("Cannot find plugin.xml"); // Do NOT LAN. Debug Only. $canContinue = false; } if ($canContinue && $this->parse_plugin_xml($plug['plugin_path'])) { $plug_vars = $this->plug_vars; + $this->log("Vars: ".print_r($plug_vars,true)); } else { $error[] = EPL_ADLAN_76; + $this->log("Error in plugin.xml"); $canContinue = FALSE; } @@ -1502,6 +1531,7 @@ class e107plugin if ($canContinue === false) { + $this->log("Cannot Continue. Line:".__LINE__); // Do NOT LAN. Debug Only. return false; } @@ -1615,6 +1645,9 @@ class e107plugin $this->XmlMediaCategories($function, $plug_vars); } + $this->XmlMenus($this->plugFolder, $function, $plug_vars['files']); + + $this->manage_icons($this->plugFolder, $function); //FIXME @@ -1653,11 +1686,13 @@ class e107plugin } - e107::getMessage()->addDebug("updated Installed plugins pref: ".print_a($p_installed,true)); + $this->rebuildUrlConfig(); + $this->log("Updated 'plug_installed' core pref. "); + e107::getConfig('core')->save(true, false, false); /* if($function == 'install') @@ -1706,11 +1741,14 @@ class e107plugin $event->trigger('admin_plugin_refresh', $plug); } + return null; + } private function removeCrons($plug_vars) { + $this->log("Running ".__METHOD__); if(!file_exists(e_PLUGIN. $plug_vars['folder']."/e_cron.php")) { @@ -1719,6 +1757,7 @@ class e107plugin if(e107::getDb()->delete('cron', 'cron_function LIKE "'. $plug_vars['folder'] . '::%"')) { + $this->log($plug_vars['folder']." crons removed successfully."); // no LANs. e107::getMessage()->addDebug($plug_vars['folder']." crons removed successfully."); // No LAN necessary } @@ -1726,7 +1765,70 @@ class e107plugin } + private function XmlMenus($plug, $function, $files) + { + $this->log("Running ".__FUNCTION__); + $menuFiles = array(); + + + + foreach($files as $file) + { + if($file === 'e_menu.php') + { + continue; + } + + if(substr($file,-9) === '_menu.php') + { + $menuFiles[] = basename($file, '.php'); + } + + + } + + $this->log("Scanning for _menu.php files - ". count($menuFiles)." found."); // Debug info, no LAN + + + if(empty($menuFiles)) + { + return false; + } + + + switch($function) + { + case "install": + case "refresh": + + $this->log("Adding menus to menus table."); // NO LANS - debug info! + + foreach($menuFiles as $menu) + { + if(!e107::getMenu()->add($plug, $menu)) + { + $this->log("Couldn't add ".$menu." to menus table."); // NO LAN + } + } + + break; + + case "uninstall": + + $this->log("Removing menus from menus table."); // No Lan + + if(!e107::getMenu()->remove($plug)) + { + $this->log("Couldn't remove menus for plugin: ".$plug); // NO LAN + } + + break; + + } + + return null; + } /** * Parse {plugin}_sql.php file and install/upgrade/uninstall tables. @@ -1736,18 +1838,20 @@ class e107plugin */ function XmlTables($function, $plug, $options = array()) { + $this->log("Running ".__METHOD__); $sqlFile = e_PLUGIN.$plug['plugin_path'].'/'.str_replace("_menu","", $plug['plugin_path'])."_sql.php"; if(!file_exists($sqlFile)) // No File, so return; { - e107::getMessage()->addDebug("No SQL File Found at: ".$sqlFile); + $this->log("No SQL File Found at: ".$sqlFile); return; } if(!is_readable($sqlFile)) // File Can't be read. { e107::getMessage()->addError("Can't read SQL definition: ".$sqlFile); + $this->log("Can't read SQL definition: ".$sqlFile); return; } @@ -1763,6 +1867,7 @@ class e107plugin if(empty($contents)) { e107::getMessage()->addError("Can't read SQL definition: ".$sqlFile); + $this->log("Can't read SQL definition: ".$sqlFile); return; } @@ -1834,6 +1939,7 @@ class e107plugin */ function isUsedByAnotherPlugin($plugin) { + $this->log("Running ".__FUNCTION__); $db = e107::getDb(); $tp = e107::getParser(); $mes = e107::getMessage(); @@ -1915,6 +2021,7 @@ class e107plugin */ function XmlDependencies($tags) { + $this->log("Running ".__METHOD__); $db = e107::getDb(); $mes = e107::getMessage(); @@ -2080,6 +2187,7 @@ class e107plugin */ function XmlLanguageFiles($function, $tag='', $when = '') { + $this->log("Running ".__FUNCTION__); $core = e107::getConfig('core'); $updated = false; @@ -2138,6 +2246,7 @@ class e107plugin if($updated === true) { + $this->log("Prefs saved"); $core->save(true,false,false); //FIXME do this quietly without an s-message } @@ -2151,6 +2260,8 @@ class e107plugin */ function XmlSiteLinks($function, $plug_vars) { + $this->log("Running ".__FUNCTION__); + $mes = e107::getMessage(); if(vartrue($this->options['nolinks'])) @@ -2230,6 +2341,7 @@ class e107plugin */ function XmlAdminLinks($function, $tag) { + $this->log("Running ".__FUNCTION__); foreach ($tag['link'] as $link) { $attrib = $link['@attributes']; @@ -2273,6 +2385,7 @@ class e107plugin // Only 1 category per file-type allowed. ie. 1 for images, 1 for files. function XmlMediaCategories($function, $tag) { + $this->log("Running ".__FUNCTION__); $mes = e107::getMessage(); // print_a($tag); @@ -2349,15 +2462,15 @@ class e107plugin */ function XmlBBcodes($function, $tag) { - $mes = e107::getMessage(); - //print_a($tag); + $this->log("Running ".__FUNCTION__); + switch ($function) { case 'install': // Probably best to leave well alone if(vartrue($tag['bbcodes']['@attributes']['imgResize'])) { e107::getConfig('core')->setPref('resize_dimensions/'.$this->plugFolder."-bbcode", array('w'=>300,'h'=>300)); - $mes->debug('Adding imageResize for: '.$this->plugFolder); + $this->log('Adding imageResize for: '.$this->plugFolder); } break; @@ -2367,7 +2480,7 @@ class e107plugin //e107::getConfig('core')->removePref('resize_dimensions/'.$this->plugFolder); //e107::getConfig('core')->removePref('e_imageresize/'.$this->plugFolder); e107::getConfig('core')->removePref('resize_dimensions/'.$this->plugFolder."-bbcode"); - $mes->debug('Removing imageResize for: '.$this->plugFolder."-bbcode"); + $this->log('Removing imageResize for: '.$this->plugFolder."-bbcode"); } break; @@ -2387,6 +2500,7 @@ class e107plugin function XmlUserClasses($function, $array) { $mes = e107::getMessage(); + $this->log("Running ".__FUNCTION__); foreach ($array['class'] as $uclass) { @@ -2446,6 +2560,7 @@ class e107plugin */ function XmlExtendedFields($function, $array) { + $this->log("Running ".__FUNCTION__); $mes = e107::getMessage(); $this->setUe(); @@ -2511,7 +2626,7 @@ class e107plugin */ function XmlPrefs($mode = 'core', $function, $prefArray) { - + $this->log("Running ".__FUNCTION__); //XXX Could also be used for theme prefs.. perhaps this function should be moved elsewhere? //TODO array support for prefs. ? or array() as used in xml site export? @@ -2571,6 +2686,7 @@ class e107plugin case 'uninstall': $config->remove($key, $value); $mes->addSuccess(EPL_ADLAN_242, $key); + $this->log("Removing Pref: ".$key); break; } } @@ -2674,7 +2790,8 @@ class e107plugin return FALSE; // IMPORTANT. } - // DEPRECATED - See XMLPrefs(); +/* @deprecated + // @deprecated - See XMLPrefs(); function parse_prefs($pref_array, $mode = 'simple') { $ret = array(); @@ -2712,6 +2829,8 @@ class e107plugin return $ret; } +*/ + function install_plugin_php($id) { $function = 'install'; @@ -2719,6 +2838,8 @@ class e107plugin $mes = e107::getMessage(); $mySQLprefix = MPREFIX; // Fix for some plugin.php files. + $this->log("Running Legacy Plugin: ".$function); + if(is_array($id)) { $plug = $id; @@ -2736,6 +2857,9 @@ class e107plugin $this->parse_plugin_php($plug['plugin_path']); $plug_vars = $this->plug_vars; + $eplug_folder = ''; + $text = ''; + include($_path.'plugin.php'); $func = $eplug_folder.'_install'; @@ -2744,16 +2868,18 @@ class e107plugin $text .= call_user_func($func); } - if (is_array($eplug_tables)) + if(!empty($eplug_tables) && is_array($eplug_tables)) { $result = $this->manage_tables('add', $eplug_tables); - if ($result === TRUE) + if ($result === true) { $text .= EPL_ADLAN_19.'
'; + $this->log("Tables added"); $mes->addSuccess(EPL_ADLAN_19); } else { + $this->log("Unable to create tables for this plugin."); // NO LANS - debug info! $mes->addError(EPL_ADLAN_18); } @@ -2766,18 +2892,19 @@ class e107plugin }*/ if (varset($plug_vars['mainPrefs'])) //Core pref items - { $this->XmlPrefs('core', $function, $plug_vars['mainPrefs']); - $text .= EPL_ADLAN_8.'
'; + $this->log("Prefs added"); + //$text .= EPL_ADLAN_8.'
'; } - if (is_array($eplug_array_pref)) + if (!empty($eplug_array_pref) && is_array($eplug_array_pref)) { foreach ($eplug_array_pref as $key => $val) { $this->manage_plugin_prefs('add', $key, $eplug_folder, $val); } + $this->log("Adding Prefs: ". print_r($eplug_array_pref, true)); } if (varset($plug_vars['siteLinks'])) @@ -2794,6 +2921,8 @@ class e107plugin $this->manage_notify('add', $eplug_folder); + $this->XmlMenus($plug_vars['folder'], $function, $plug_vars['files']); + $eplug_addons = $this->getAddons($eplug_folder); $sql->update('plugin', "plugin_installflag = 1, plugin_addons = '{$eplug_addons}' WHERE plugin_id = ".(int) $id); @@ -2807,8 +2936,11 @@ class e107plugin e107::getConfig('core')->save(); + $this->save_addon_prefs('update'); + $text .= (isset($eplug_done) ? "
{$eplug_done}" : "
".LAN_INSTALL_SUCCESSFUL); - if ($eplug_conffile) + + if (!empty($eplug_conffile)) { $text .= "
".LAN_CONFIGURE.""; } @@ -2887,6 +3019,8 @@ class e107plugin function install($id, $options = array()) { global $sysprefs, $mySQLprefix; + $this->log("Running ".__METHOD__); + $ns = e107::getRender(); $sql = e107::getDb(); $tp = e107::getParser(); @@ -2904,12 +3038,13 @@ class e107plugin return "'{$id}' is missing from the plugin db table"; } - $plug['plug_action'] = 'install'; + $plug['plug_action'] = !empty($options['function']) ? $options['function'] : 'install'; if (!vartrue($plug['plugin_installflag'])) { $_path = e_PLUGIN.$plug['plugin_path'].'/'; - + + $this->log("Installing: ".$plug['plugin_path']); if (file_exists($_path.'plugin.xml')) { @@ -2926,10 +3061,171 @@ class e107plugin $text = EPL_ADLAN_21; } + + $this->log("Installation completed"); // no LANs return $text; } + + public function uninstall($id, $options = array()) + { + $pref = e107::getPref(); + $admin_log = e107::getAdminLog(); + $plugin = e107::getPlugin(); + $tp = e107::getParser(); + + $sql = e107::getDb(); + $plug = $this->getinfo($id); + + $this->log("Uninstalling :".$plug['plugin_path']." with options: ".print_r($options, true)); + + // Check if plugin is being used by another plugin before uninstalling it. + if(isset($plug['plugin_path'])) + { + if ($this->isUsedByAnotherPlugin($plug['plugin_path'])) + { + $this->action = 'installed'; // Render plugin list. + return false; + } + } + + $text = ''; + //Uninstall Plugin + if ($plug['plugin_installflag'] == true ) + { + $eplug_folder = $plug['plugin_path']; + $_path = e_PLUGIN.$plug['plugin_path'].'/'; + + if(file_exists($_path.'plugin.xml')) + { + unset($_POST['uninstall_confirm']); + $this->install_plugin_xml($plug, 'uninstall', $options); //$_POST must be used. + } + else + { // Deprecated - plugin uses plugin.php + $eplug_table_names = null; + $eplug_prefs = null; + $eplug_comment_ids= null; + $eplug_array_pref= null; + $eplug_menu_name = null; + $eplug_link = null; + $eplug_link_url = null; + $eplug_link_name = null; + $eplug_userclass = null; + $eplug_version = null; + + include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); + + $func = $eplug_folder.'_uninstall'; + if (function_exists($func)) + { + $text .= call_user_func($func); + } + + if(!empty($options['delete_tables'])) + { + + if (is_array($eplug_table_names)) + { + $result = $this->manage_tables('remove', $eplug_table_names); + if ($result !== TRUE) + { + $text .= EPL_ADLAN_27.' '.MPREFIX.$result.' - '.EPL_ADLAN_30.'
'; + $this->log("Unable to delete table."); // No LANS + } + else + { + $text .= EPL_ADLAN_28."
"; + $this->log("Deleting tables."); // NO LANS + } + } + } + else + { + $text .= EPL_ADLAN_49."
"; + $this->log("Tables left intact by request."); // No LANS + } + + if (is_array($eplug_prefs)) + { + $this->manage_prefs('remove', $eplug_prefs); + $text .= EPL_ADLAN_29."
"; + } + + if (is_array($eplug_comment_ids)) + { + $text .= ($this->manage_comments('remove', $eplug_comment_ids)) ? EPL_ADLAN_50."
" : ""; + } + + if (is_array($eplug_array_pref)) + { + foreach($eplug_array_pref as $key => $val) + { + $this->manage_plugin_prefs('remove', $key, $eplug_folder, $val); + } + } +/* + if ($eplug_menu_name) + { + $sql->delete('menus', "menu_name='{$eplug_menu_name}' "); + }*/ + $folderFiles = scandir(e_PLUGIN.$plug['plugin_path']); + $this->XmlMenus($eplug_folder,'uninstall',$folderFiles); + + if ($eplug_link) + { + $this->manage_link('remove', $eplug_link_url, $eplug_link_name); + } + + if ($eplug_userclass) + { + $this->manage_userclass('remove', $eplug_userclass); + } + + $sql->update('plugin', "plugin_installflag=0, plugin_version='{$eplug_version}' WHERE plugin_path='{$eplug_folder}' "); + $this->manage_search('remove', $eplug_folder); + + $this->manage_notify('remove', $eplug_folder); + + // it's done inside install_plugin_xml(), required only here + if (isset($pref['plug_installed'][$plug['plugin_path']])) + { + unset($pref['plug_installed'][$plug['plugin_path']]); + } + e107::getConfig('core')->setPref($pref); + $this->rebuildUrlConfig(); + e107::getConfig('core')->save(false,true,false); + } + + $logInfo = deftrue($plug['plugin_name'],$plug['plugin_name']). " v".$plug['plugin_version']." ({e_PLUGIN}".$plug['plugin_path'].")"; + e107::getLog()->add('PLUGMAN_03', $logInfo, E_LOG_INFORMATIVE, ''); + } + + if(!empty($_POST['delete_files']) && ($plug['plugin_installflag'] == true)) + { + if(!empty($eplug_folder)) + { + $result = e107::getFile()->rmtree(e_PLUGIN.$eplug_folder); + $text .= ($result ? '
'.EPL_ADLAN_86.e_PLUGIN.$eplug_folder : '
'.EPL_ADLAN_87.'
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32); + } + } + else + { + $text .= '
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32; + } + + $this->save_addon_prefs('update'); + + $this->log("Uninstall completed"); + + return $text; + } + + + + + /* * scan the plugin table and create path-array-prefs for each addon. * @@ -3379,7 +3675,7 @@ class e107plugin $ret['administration']['iconSmall'] = str_replace($plugName."/","",$eplug_icon_small); $ret['administration']['configFile'] = varset($eplug_conffile); - if (varset($eplug_conffile)) + if(varset($eplug_conffile)) { $ret['adminLinks']['link'][0]['@attributes']['url'] = varset($eplug_conffile); $ret['adminLinks']['link'][0]['@attributes']['description'] = LAN_CONFIGURE; @@ -3387,23 +3683,27 @@ class e107plugin $ret['adminLinks']['link'][0]['@attributes']['iconSmall'] = str_replace($plugName."/","",$eplug_icon_small); $ret['adminLinks']['link'][0]['@attributes']['primary'] = 'true'; } - if (vartrue($eplug_link) && varset($eplug_link_name) && varset($eplug_link_url)) + if(vartrue($eplug_link) && varset($eplug_link_name) && varset($eplug_link_url)) { $ret['siteLinks']['link'][0]['@attributes']['url'] = $tp->createConstants($eplug_link_url, 1); $ret['siteLinks']['link'][0]['@attributes']['perm'] = varset($eplug_link_perms); $ret['siteLinks']['link'][0]['@value'] = varset($eplug_link_name); } - if (vartrue($eplug_userclass) && vartrue($eplug_userclass_description)) + if(vartrue($eplug_userclass) && vartrue($eplug_userclass_description)) { $ret['userClasses']['class'][0]['@attributes']['name'] = $eplug_userclass; $ret['userClasses']['class'][0]['@attributes']['description'] = $eplug_userclass_description; } + $ret['files'] = preg_grep('/^([^.])/', scandir(e_PLUGIN.$plugName,SCANDIR_SORT_ASCENDING)); + + // Set this key so we know the vars came from a plugin.php file // $ret['plugin_php'] = true; // Should no longer be needed. $this->plug_vars = $ret; + return true; } @@ -3428,8 +3728,10 @@ class e107plugin return FALSE; } - $this->plug_vars['category'] = (isset($this->plug_vars['category'])) ? $this->manage_category($this->plug_vars['category']) : "misc"; $this->plug_vars['folder'] = $plugName; // remove the need for tag in plugin.xml. + $this->plug_vars['category'] = (isset($this->plug_vars['category'])) ? $this->manage_category($this->plug_vars['category']) : "misc"; + $this->plug_vars['files'] = preg_grep('/^([^.])/', scandir(e_PLUGIN.$plugName,SCANDIR_SORT_ASCENDING)); + if(varset($this->plug_vars['description'])) {