diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php index c431ec262..9af6bc24f 100644 --- a/e107_admin/plugin.php +++ b/e107_admin/plugin.php @@ -11,9 +11,9 @@ | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/e107_admin/plugin.php,v $ -| $Revision: 1.7 $ -| $Date: 2007-05-30 20:35:44 $ -| $Author: e107steved $ +| $Revision: 1.8 $ +| $Date: 2008-01-26 04:47:27 $ +| $Author: mcfly_e107 $ +----------------------------------------------------------------------------+ */ @@ -32,17 +32,22 @@ $tmp = explode('.', e_QUERY); $action = $tmp[0]; $id = intval($tmp[1]); -if (isset($_POST['upload'])) { - if (!$_POST['ac'] == md5(ADMINPWCHANGE)) { +if (isset($_POST['upload'])) +{ + if (!$_POST['ac'] == md5(ADMINPWCHANGE)) + { exit; } extract($_FILES); /* check if e_PLUGIN dir is writable ... */ - if(!is_writable(e_PLUGIN)) { + if(!is_writable(e_PLUGIN)) + { /* still not writable - spawn error message */ $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_39); - } else { + } + else + { /* e_PLUGIN is writable - continue */ $pref['upload_storagetype'] = "1"; require_once(e_HANDLER."upload_handler.php"); @@ -50,18 +55,24 @@ if (isset($_POST['upload'])) { $fileSize = $file_userfile['size'][0]; $fileType = $file_userfile['type'][0]; - if(strstr($file_userfile['type'][0], "gzip")) { + if(strstr($file_userfile['type'][0], "gzip")) + { $fileType = "tar"; - } else if (strstr($file_userfile['type'][0], "zip")) { + } + else if (strstr($file_userfile['type'][0], "zip")) + { $fileType = "zip"; - } else { + } + else + { /* not zip or tar - spawn error message */ $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_41); require_once("footer.php"); exit; } - if ($fileSize) { + if ($fileSize) + { $opref = $pref['upload_storagetype']; $pref['upload_storagetype'] = 1; /* temporarily set upload type pref to flatfile */ @@ -72,20 +83,27 @@ if (isset($_POST['upload'])) { /* attempt to unarchive ... */ - if($fileType == "zip") { + if($fileType == "zip") + { require_once(e_HANDLER."pclzip.lib.php"); $archive = new PclZip(e_PLUGIN.$archiveName); $unarc = ($fileList = $archive -> extract(PCLZIP_OPT_PATH, e_PLUGIN, PCLZIP_OPT_SET_CHMOD, 0666)); - } else { + } + else + { require_once(e_HANDLER."pcltar.lib.php"); $unarc = ($fileList = PclTarExtract($archiveName, e_PLUGIN)); } - if(!$unarc) { + if(!$unarc) + { /* unarc failed ... */ - if($fileType == "zip") { + if($fileType == "zip") + { $error = EPL_ADLAN_46." '".$archive -> errorName(TRUE)."'"; - } else { + } + else + { $error = EPL_ADLAN_47.PclErrorString().", ".EPL_ADLAN_48.intval(PclErrorCode()); } $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_42." ".$archiveName." ".$error); @@ -98,10 +116,13 @@ if (isset($_POST['upload'])) { /* get folder name ... */ $folderName = substr($fileList[0]['stored_filename'], 0, (strpos($fileList[0]['stored_filename'], "/"))); - if(file_exists(e_PLUGIN.$folderName."/plugin.php")) { + if(file_exists(e_PLUGIN.$folderName."/plugin.php") || file_exists(e_PLUGIN.$folderName."/plugin.xml")) + { /* upload is a plugin */ $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_43); - } else { + } + else + { /* upload is a menu */ $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_45); } @@ -124,12 +145,13 @@ if ($action == 'uninstall') $id = intval($id); $plug = $plugin->getinfo($id); //Uninstall Plugin - if ($plug['plugin_installflag'] == TRUE ) + if ($plug['plugin_installflag'] == TRUE ) { include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); $func = $eplug_folder.'_uninstall'; - if (function_exists($func)) { + if (function_exists($func)) + { $text .= call_user_func($func); } @@ -153,25 +175,30 @@ if ($action == 'uninstall') $text .= EPL_ADLAN_49."
"; } - if (is_array($eplug_prefs)) { + if (is_array($eplug_prefs)) + { $plugin->manage_prefs('remove', $eplug_prefs); $text .= EPL_ADLAN_29."
"; } - if (is_array($eplug_comment_ids)) { + if (is_array($eplug_comment_ids)) + { $text .= ($plugin->manage_comments('remove', $eplug_comment_ids)) ? EPL_ADLAN_50."
" : ""; } - if ($eplug_module) { + if ($eplug_module) + { $plugin->manage_plugin_prefs('remove', 'modules', $eplug_folder); } - if ($eplug_status) { + if ($eplug_status) + { $plugin->manage_plugin_prefs('remove', 'plug_status', $eplug_folder); } - if ($eplug_latest) { + if ($eplug_latest) + { $plugin->manage_plugin_prefs('remove', 'plug_latest', $eplug_folder); } @@ -195,33 +222,41 @@ if ($action == 'uninstall') $plugin->manage_plugin_prefs('remove', 'plug_bb', $eplug_folder, $eplug_bb); } - if (is_array($eplug_user_prefs)) { + if (is_array($eplug_user_prefs)) + { if (!is_object($sql)){ $sql = new db; } $sql->db_Select("core", " e107_value", " e107_name='user_entended'"); $row = $sql->db_Fetch(); $user_entended = unserialize($row[0]); $user_entended = array_values(array_diff($user_entended, array_keys($eplug_user_prefs))); - if ($user_entended == NULL) { + if ($user_entended == NULL) + { $sql->db_Delete("core", "e107_name='user_entended'"); - } else { + } + else + { $tmp = addslashes(serialize($user_entended)); $sql->db_Update("core", "e107_value='$tmp' WHERE e107_name='user_entended' "); } - while (list($key, $e_user_pref) = each($eplug_user_prefs)) { + while (list($key, $e_user_pref) = each($eplug_user_prefs)) + { unset($user_pref[$key]); } save_prefs("user"); } - if ($eplug_menu_name) { + if ($eplug_menu_name) + { $sql->db_Delete('menus', "menu_name='$eplug_menu_name' "); } - if ($eplug_link) { + if ($eplug_link) + { $plugin->manage_link('remove', $eplug_link_url, $eplug_link_name); } - if ($eplug_userclass) { + if ($eplug_userclass) + { $plugin->manage_userclass('remove', $eplug_userclass); } @@ -232,8 +267,8 @@ if ($action == 'uninstall') $sql->db_Update('plugin', "plugin_installflag=0, plugin_version='{$eplug_version}' WHERE plugin_id='{$id}' "); if (isset($pref['plug_installed'][$plug['plugin_path']])) { - unset($pref['plug_installed'][$plug['plugin_path']]); - save_prefs(); + unset($pref['plug_installed'][$plug['plugin_path']]); + save_prefs(); } @@ -254,44 +289,60 @@ if ($action == 'uninstall') } } -if ($action == 'install') { +if ($action == 'install') +{ $plugin->install_plugin(intval($id)); $plugin ->save_addon_prefs(); } -if ($action == 'upgrade') { +if ($action == 'upgrade') +{ $plug = $plugin->getinfo($id); include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); $func = $eplug_folder.'_upgrade'; - if (function_exists($func)) { + if (function_exists($func)) + { $text .= call_user_func($func); } - if (is_array($upgrade_alter_tables)) { + if (is_array($upgrade_alter_tables)) + { $result = $plugin->manage_tables('upgrade', $upgrade_alter_tables); - if (!$result) { + if (!$result) + { $text .= EPL_ADLAN_9.'
'; - } else { + } + else + { $text .= EPL_ADLAN_7."
"; } } - if ($eplug_module) { + if ($eplug_module) + { $plugin->manage_plugin_prefs('add', 'modules', $eplug_folder); - } else { + } + else + { $plugin->manage_plugin_prefs('remove', 'modules', $eplug_folder); } - if ($eplug_status) { + if ($eplug_status) + { $plugin->manage_plugin_prefs('add', 'plug_status', $eplug_folder); - } else { + } + else + { $plugin->manage_plugin_prefs('remove', 'plug_status', $eplug_folder); } - if ($eplug_latest) { + if ($eplug_latest) + { $plugin->manage_plugin_prefs('add', 'plug_latest', $eplug_folder); - } else { + } + else + { $plugin->manage_plugin_prefs('remove', 'plug_latest', $eplug_folder); } @@ -315,57 +366,68 @@ if ($action == 'upgrade') { $plugin->manage_plugin_prefs('remove', 'plug_bb', $eplug_folder, $eplug_bb); } - if (is_array($upgrade_add_prefs)) { + if (is_array($upgrade_add_prefs)) + { $plugin->manage_prefs('add', $upgrade_add_prefs); $text .= EPL_ADLAN_8.'
'; } - if (is_array($upgrade_remove_prefs)) { + if (is_array($upgrade_remove_prefs)) + { $plugin->manage_prefs('remove', $upgrade_remove_prefs); } if (is_array($upgrade_add_array_pref)) { - foreach($upgrade_add_array_pref as $key => $val) - { - $plugin->manage_plugin_prefs('add', $key, $eplug_folder, $val); - } + foreach($upgrade_add_array_pref as $key => $val) + { + $plugin->manage_plugin_prefs('add', $key, $eplug_folder, $val); + } } if (is_array($upgrade_remove_array_pref)) { - foreach($upgrade_remove_array_pref as $key => $val) - { - $plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val); - } + foreach($upgrade_remove_array_pref as $key => $val) + { + $plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val); + } } - if (is_array($upgrade_add_user_prefs)) { + if (is_array($upgrade_add_user_prefs)) + { if (!is_object($sql)){ $sql = new db; } $sql->db_Select("core", " e107_value", " e107_name='user_entended'"); $row = $sql->db_Fetch(); $user_entended = unserialize($row[0]); - while (list($key, $e_user_pref) = each($eplug_user_prefs)) { + while (list($key, $e_user_pref) = each($eplug_user_prefs)) + { $user_entended[] = $e_user_pref; } $tmp = addslashes(serialize($user_entended)); - if ($sql->db_Select("core", " e107_value", " e107_name='user_entended'")) { + if ($sql->db_Select("core", " e107_value", " e107_name='user_entended'")) + { $sql->db_Update("core", "e107_value='$tmp' WHERE e107_name='user_entended' "); - } else { + } + else + { $sql->db_Insert("core", "'user_entended', '$tmp' "); } $text .= EPL_ADLAN_8."
"; } - if (is_array($upgrade_remove_user_prefs)) { - if (!is_object($sql)){ $sql = new db; } + if (is_array($upgrade_remove_user_prefs)) + { + if (!is_object($sql)){ $sql = new db; } $sql->db_Select("core", " e107_value", " e107_name='user_entended'"); $row = $sql->db_Fetch(); $user_entended = unserialize($row[0]); $user_entended = array_values(array_diff($user_entended, $eplug_user_prefs)); - if ($user_entended == NULL) { + if ($user_entended == NULL) + { $sql->db_Delete("core", "e107_name='user_entended'"); - } else { + } + else + { $tmp = addslashes(serialize($user_entended)); $sql->db_Update("core", "e107_value='$tmp' WHERE e107_name='user_entended' "); } @@ -374,12 +436,12 @@ if ($action == 'upgrade') { $plugin -> manage_search('upgrade', $eplug_folder); $plugin -> manage_notify('upgrade', $eplug_folder); - $eplug_addons = $plugin -> getAddons($eplug_folder); + $eplug_addons = $plugin -> getAddons($eplug_folder); $text .= (isset($eplug_upgrade_done)) ? '
'.$eplug_upgrade_done : "
".LAN_UPGRADE_SUCCESSFUL; $sql->db_Update('plugin', "plugin_version ='{$eplug_version}', plugin_addons='{$eplug_addons}' WHERE plugin_id='$id' "); $pref['plug_installed'][$plug['plugin_path']] = $eplug_version; // Update the version - save_prefs(); + save_prefs(); $ns->tablerender(EPL_ADLAN_34, $text); $plugin -> save_addon_prefs(); @@ -395,9 +457,12 @@ $plugin->update_plugins_table(); /* plugin upload form */ -if(!is_writable(e_PLUGIN)) { +if(!is_writable(e_PLUGIN)) +{ $ns->tablerender(EPL_ADLAN_40, EPL_ADLAN_44); -} else { +} +else +{ $text = "
@@ -429,102 +494,116 @@ $text .= ""; $text .= render_plugs($uninstalled); -function render_plugs($pluginList){ - global $tp, $imode; +function render_plugs($pluginList) +{ + global $tp, $imode, $plugin; - foreach($pluginList as $plug) { - //Unset any possible eplug_ variables set by last plugin.php - $defined_vars = array_keys(get_defined_vars()); - foreach($defined_vars as $varname) { - if (substr($varname, 0, 6) == 'eplug_' || substr($varname, 0, 8) == 'upgrade_') { - unset($$varname); + foreach($pluginList as $plug) + { + $_path = e_PLUGIN.$plug['plugin_path'].'/'; + $plug_vars = $plugin->parse_plugin($_path); + + if($plug_vars) + { + + if ($plug_vars['installRequired']) + { + $img = (!$plug['plugin_installflag'] ? "" : ""); + } + else + { + $img = ""; } - } - include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); + if ($plug['plugin_version'] != $plug_vars['version'] && $plug['plugin_installflag']) + { + $img = ""; + } - if ($eplug_conffile || is_array($eplug_table_names) || is_array($eplug_prefs) || is_array($eplug_user_prefs) || is_array($eplug_sc) || is_array($eplug_bb) || $eplug_module || $eplug_userclass || $eplug_status || $eplug_latest) { - $img = (!$plug['plugin_installflag'] ? "" : ""); - } else { - $img = ""; - } + $plugin_icon = $plug_vars['administration']['icon'] ? "" : E_32_CAT_PLUG; - if ($plug['plugin_version'] != $eplug_version && $plug['plugin_installflag']) { - $img = ""; - } + if ($plug_vars['configFile'] && $plug['plugin_installflag'] == true) + { + $conf_title = LAN_CONFIGURE.' '.$tp->toHtml($plug_vars['name'], "", "defs,emotes_off, no_make_clickable"); + $plugin_icon = "".$plugin_icon.''; + } - $plugin_icon = $eplug_icon ? "" : E_32_CAT_PLUG; - if ($eplug_conffile && $plug['plugin_installflag'] == TRUE) { - $conf_title = LAN_CONFIGURE.' '.$tp->toHtml($eplug_name,"","defs,emotes_off, no_make_clickable"); - $plugin_icon = "".$plugin_icon.''; - } + $text .= " + + "; - $text .= ""; - $text .= ""; + $text .=""; + $text .= ""; + } } - - -return $text; + return $text; } $text .= "
".EPL_ADLAN_23."
+ - + - "; + $text .= "
+ ".$plugin_icon." + + $img ".$tp->toHTML($plug['plugin_name'], false, "defs,emotes_off, no_make_clickable")."
".EPL_ADLAN_11." {$plug['plugin_version']} +
"; - $text .= " -
- +
- ".$plugin_icon." - - $img ".$tp->toHTML($plug['plugin_name'],FALSE,"defs,emotes_off, no_make_clickable")."
".EPL_ADLAN_11." {$plug['plugin_version']} -
"; + $text .="
+
+ + + -
".EPL_ADLAN_12.":{$plug_vars['author']} "; + if($plug_vars['authorUrl']) + { + $text .= "  [ ".EPL_WEBSITE." ] "; + } + $text .="
".EPL_ADLAN_14.": {$plug_vars['description']} "; + if ($plug_vars['readme']) + { + $text .= "[ ".$plug_vars['readme']." ]"; + } - $text .="
-
- - - + - \n"; + if ($plug_vars['compliant']) + { + $text .= "  "; + } + $text .="\n"; + $text .= "
".EPL_ADLAN_12.":$eplug_author "; - if($eplug_url){ - $text .= "  [ ".EPL_WEBSITE." ] "; - } - $text .="
".EPL_ADLAN_14.": $eplug_description "; - if ($eplug_readme) { - $text .= "[ ".$eplug_readme." ]"; - } + $text .="
".EPL_ADLAN_13.": {$plug_vars['compatibility']} "; - $text .="
".EPL_ADLAN_13.": $eplug_compatible "; - if ($eplug_compliant) { - $text .= "  "; - } - $text .="
"; - $text .= "
"; - if ($eplug_conffile || $eplug_module || is_array($eplug_table_names) || is_array($eplug_prefs) || is_array($eplug_user_prefs) || is_array($eplug_sc) || is_array($eplug_bb) || $eplug_status || $eplug_latest) { - $text .= ($plug['plugin_installflag'] ? " " : ""); - } else { - if ($eplug_menu_name) { - $text .= EPL_NOINSTALL.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; - } else { - $text .= EPL_NOINSTALL_1.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; - if($plug['plugin_installflag'] == FALSE){ - global $sql; - $sql->db_Delete('plugin', "plugin_installflag=0 AND (plugin_path='{$plug['plugin_path']}' OR plugin_path='{$plug['plugin_path']}/' ) "); + if ($plug_vars['installRequired']) + { + $text .= ($plug['plugin_installflag'] ? " " : ""); + } + else + { + if ($plug_vars['menuName']) + { + $text .= EPL_NOINSTALL.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; + } + else + { + $text .= EPL_NOINSTALL_1.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; + if($plug['plugin_installflag'] == false) + { + global $sql; + $sql->db_Delete('plugin', "plugin_installflag=0 AND (plugin_path='{$plug['plugin_path']}' OR plugin_path='{$plug['plugin_path']}/' ) "); + } } } - } - if ($plug['plugin_version'] != $eplug_version && $plug['plugin_installflag']) { - $text .= "
"; - } + if ($plug['plugin_version'] != $plug_vars['version'] && $plug['plugin_installflag']) { + $text .= "
"; + } - $text .="
-

- ".EPL_ADLAN_23."   - ".EPL_ADLAN_22."   - ".EPL_ADLAN_24."   - ".EPL_ADLAN_25."
"; +

+ ".EPL_ADLAN_23."   + ".EPL_ADLAN_22."   + ".EPL_ADLAN_24."   + ".EPL_ADLAN_25."
"; $ns->tablerender(EPL_ADLAN_16, $text); // ---------------------------------------------------------- @@ -532,16 +611,15 @@ $ns->tablerender(EPL_ADLAN_16, $text); require_once("footer.php"); exit; - function show_uninstall_confirm() { global $plugin, $tp, $id, $ns; $id = intval($id); $plug = $plugin->getinfo($id); - if ($plug['plugin_installflag'] == TRUE ) + if ($plug['plugin_installflag'] == true ) { - include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); + $plug_vars = $plugin->parse_plugin($_path); } if(is_writable(e_PLUGIN.$plug['plugin_path'])) @@ -565,36 +643,36 @@ function show_uninstall_confirm() - + - - + + - - + + - - + + - +
".EPL_ADLAN_54." ".$tp->toHtml($eplug_name,"","defs,emotes_off, no_make_clickable")."".EPL_ADLAN_54." ".$tp->toHtml($plug_vars['name'], "", "defs,emotes_off, no_make_clickable")."
".EPL_ADLAN_55."".LAN_YES."".EPL_ADLAN_55."".LAN_YES."
- ".EPL_ADLAN_57."
".EPL_ADLAN_58."
-
- - + ".EPL_ADLAN_57."
".EPL_ADLAN_58."
+
+ +
".EPL_ADLAN_59."
".EPL_ADLAN_60."
{$del_text}".EPL_ADLAN_59."
".EPL_ADLAN_60."
{$del_text}
    
"; - $ns->tablerender(EPL_ADLAN_63." ".$tp->toHtml($eplug_name,"","defs,emotes_off, no_make_clickable"), $text); + $ns->tablerender(EPL_ADLAN_63." ".$tp->toHtml($plug_vars['name'], "", "defs,emotes_off, no_make_clickable"), $text); require_once(e_ADMIN."footer.php"); exit; } -?> +?> \ No newline at end of file diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index 7eba9adc2..9feb7bcaf 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -11,8 +11,8 @@ | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/e107_handlers/plugin_class.php,v $ -| $Revision: 1.15 $ -| $Date: 2008-01-20 15:01:19 $ +| $Revision: 1.16 $ +| $Date: 2008-01-26 04:47:27 $ | $Author: mcfly_e107 $ +----------------------------------------------------------------------------+ */ @@ -875,6 +875,63 @@ class e107plugin } return 2; } + + + function parse_plugin($path) + { + if(file_exists($_path.'plugin.xml')) + { + return $this->parse_plugin_xml($path); + } + elseif(file_exists($_path.'plugin.php')) + { + return $this->parse_plugin_php($path); + } + return false; + } + + function parse_plugin_php($path) + { + include($path.'plugin.php'); + $ret = array(); + + $ret['installRequired'] = ($eplug_conffile || is_array($eplug_table_names) || is_array($eplug_prefs) || is_array($eplug_user_prefs) || is_array($eplug_sc) || is_array($eplug_bb) || $eplug_module || $eplug_userclass || $eplug_status || $eplug_latest); + + $ret['version'] = varset($eplug_version); + $ret['name'] = varset($eplug_name); + $ret['folder'] = varset($eplug_folder); + $ret['description'] = varset($eplug_description); + $ret['author'] = varset($eplug_author); + $ret['authorUrl'] = varset($eplug_url); + $ret['authorEmail'] = varset($eplug_email); + $ret['compatibility'] = varset($eplug_compatible); + $ret['readme'] = varset($eplug_readme); + $ret['compliant'] = varset($eplug_compliant); + $ret['menuName'] = varset($eplug_menu_name); + + $ret['administration']['icon'] = varset($eplug_icon); + $ret['administration']['caption'] = varset($eplug_caption); + $ret['administration']['iconSmall'] = varset($eplug_icon_small); + $ret['administration']['configFile'] = varset($eplug_conffile); + + // Set this key so we know the vars came from a plugin.php file + $ret['plugin_php'] = true; + return $ret; + } + + + function parse_plugin_xml($path) + { + global $tp; + include_lan($path.'languages/'.e_LANGUAGE.'/lan_config.php'); + include_lan($path.'languages/admin/'.e_LANGUAGE.'.php'); + require_once(e_HANDLER.'xml_class.php'); + $xml = new xmlClass; + $xml->loadXMLfile($path.'plugin.xml', true, true); + $xml->xmlFileContents = $tp->replaceConstants($xml->xmlFileContents, '', true); + return $xml->parseXml(); + } + } ?> diff --git a/e107_plugins/forum/plugin.xml b/e107_plugins/forum/plugin.xml new file mode 100755 index 000000000..f9061b5df --- /dev/null +++ b/e107_plugins/forum/plugin.xml @@ -0,0 +1,42 @@ + + + Forum + 1.2 + e107dev + http://e107.org + This plugin is a fully featured Forum system + 0.8 + true + forum + + forum_admin.php + forum/images/forums_32.png + forum/images/images/forums_16.png + Configure Forum + true + true + + + + + + + + + + + + + + + + + + + forum_sql.php + + + + + + diff --git a/e107_plugins/pm/plugin.xml b/e107_plugins/pm/plugin.xml new file mode 100755 index 000000000..d028cbdc3 --- /dev/null +++ b/e107_plugins/pm/plugin.xml @@ -0,0 +1,23 @@ + + + {ADLAN_PM} + 3.0 + McFly + mcfly@e107.org + {ADLAN_PM_57} + 0.8 + true + pm + + pm_conf.php + pm/images/pvt_message_32.png + pm/images/pvt_message_16.png + {ADLAN_PM_2} + + pm_sql.php + + + + + +