1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-26 01:11:28 +02:00

More work on plugin.xml support

This commit is contained in:
mcfly
2008-01-27 01:34:59 +00:00
parent c0c2be8a40
commit 467f1d4be5
4 changed files with 189 additions and 37 deletions

View File

@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org). | GNU General Public License (http://gnu.org).
| |
| $Source: /cvs_backup/e107_0.8/e107_admin/plugin.php,v $ | $Source: /cvs_backup/e107_0.8/e107_admin/plugin.php,v $
| $Revision: 1.9 $ | $Revision: 1.10 $
| $Date: 2008-01-26 05:19:58 $ | $Date: 2008-01-27 01:34:59 $
| $Author: mcfly_e107 $ | $Author: mcfly_e107 $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -501,8 +501,11 @@ function render_plugs($pluginList)
foreach($pluginList as $plug) foreach($pluginList as $plug)
{ {
$_path = e_PLUGIN.$plug['plugin_path'].'/'; $_path = e_PLUGIN.$plug['plugin_path'].'/';
$plug_vars = $plugin->parse_plugin($_path); $plug_vars = false;
if($plugin->parse_plugin($_path))
{
$plug_vars = $plugin->plug_vars;
}
if($plug_vars) if($plug_vars)
{ {
@@ -616,10 +619,14 @@ function show_uninstall_confirm()
global $plugin, $tp, $id, $ns; global $plugin, $tp, $id, $ns;
$id = intval($id); $id = intval($id);
$plug = $plugin->getinfo($id); $plug = $plugin->getinfo($id);
$_path = e_PLUGIN.$plug['plugin_path'];
if ($plug['plugin_installflag'] == true ) if ($plug['plugin_installflag'] == true )
{ {
$plug_vars = $plugin->parse_plugin($_path); if($plugin->parse_plugin($_path))
{
$plug_vars = $plugin->plug_vars;
}
} }
if(is_writable(e_PLUGIN.$plug['plugin_path'])) if(is_writable(e_PLUGIN.$plug['plugin_path']))

View File

@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org). | GNU General Public License (http://gnu.org).
| |
| $Source: /cvs_backup/e107_0.8/e107_handlers/plugin_class.php,v $ | $Source: /cvs_backup/e107_0.8/e107_handlers/plugin_class.php,v $
| $Revision: 1.17 $ | $Revision: 1.18 $
| $Date: 2008-01-26 05:19:59 $ | $Date: 2008-01-27 01:34:59 $
| $Author: mcfly_e107 $ | $Author: mcfly_e107 $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -66,6 +66,8 @@ class e107plugin
'plugin_addons' // List of any extras associated with plugin - bbcodes, e_XXX files... 'plugin_addons' // List of any extras associated with plugin - bbcodes, e_XXX files...
); );
var $plug_vars;
/** /**
* Returns an array containing details of all plugins in the plugin table - should normally use e107plugin::update_plugins_table() first to * Returns an array containing details of all plugins in the plugin table - should normally use e107plugin::update_plugins_table() first to
* make sure the table is up to date. (Primarily called from plugin manager to get lists of installed and uninstalled plugins. * make sure the table is up to date. (Primarily called from plugin manager to get lists of installed and uninstalled plugins.
@@ -280,9 +282,22 @@ class e107plugin
} }
} }
function manage_link($action, $link_url, $link_name,$link_class=0) function manage_link($action, $link_url, $link_name, $link_class=0)
{ {
global $sql, $tp; global $sql, $tp;
if(!ctype_digit($link_class))
{
$link_class = strtolower($link_class);
$plug_perm['everyone'] = e_UC_PUBLIC;
$plug_perm['guest'] = e_UC_GUEST;
$plug_perm['member'] = e_UC_MEMBER;
$plug_perm['mainadmin'] = e_UC_MAINADMIN;
$plug_perm['admin'] = e_UC_ADMIN;
$plug_perm['nobody'] = e_UC_NOBODY;
$link_class = ($plug_perm[$link_class]) ? $plug_perm[$link_class] : e_UC_PUBLIC;
}
$link_url = $tp -> toDB($link_url, true); $link_url = $tp -> toDB($link_url, true);
$link_name = $tp -> toDB($link_name, true); $link_name = $tp -> toDB($link_name, true);
$path = str_replace("../", "", $link_url); // This should clean up 'non-standard' links $path = str_replace("../", "", $link_url); // This should clean up 'non-standard' links
@@ -563,21 +578,156 @@ class e107plugin
$sql -> db_Update("core", "e107_value='".$s_prefs."' WHERE e107_name='notify_prefs'"); $sql -> db_Update("core", "e107_value='".$s_prefs."' WHERE e107_name='notify_prefs'");
} }
function install_plugin_xml($path) function manage_plugin_xml($path, $function='')
{ {
$plug_vars = $this->parse_plugin_xml($path); //Will just install using plugin.php file for now.
//Still working on this, let's install via plugin.php still
return $this->install_plugin_php($path); return $this->install_plugin_php($path);
//New code to install using plugin.xml below.
if(!file_exists($path.'plugin.xml') || $function == '')
{
return false;
}
$error = array();
if($this->parse_plugin_xml($path))
{
$plug_vars = $this->plug_vars;
}
else
{
return false;
}
//tables
if(($function == 'install' || $function == 'uninstall') || isset($plug_vars['sqlFile']))
{
if($sql_data = file_get_contents($path.$plug_vars['sqlFile']))
{
preg_match_all("/create(.*?)myisam.*?;/si", $sql_data, $result );
foreach ($result[0] as $sql_table)
{
if($function == 'uninstall')
{
preg_match("/CREATE TABLE(.*?)\(/si", $sql_table, $match);
$tablename = trim($match[1]);
echo "Removing table $tablename <br />";
// $this->manage_tables('remove', array($tablename));
}
if($function == 'install')
{
$sql_table = preg_replace("/create table\s+/si", "CREATE TABLE #", $sql_table);
echo "Adding table: <pre>{$sql_table}</pre><br />";
// $this->manage_tables('add', array($sql_table));
}
}
}
}
//main menu items
if(isset($plug_vars['menuLink']))
{
//Ensure it is an array for use with foreach()
if(!is_array($plug_vars['menuLink']))
{
$plug_vars['menuLink'] = array($plug_vars['menuLink']);
}
foreach($plug_vars['menuLink'] as $link)
{
$attrib = $link['@attributes'];
switch($function)
{
case 'upgrade':
case 'install':
// Add any active link
if(!isset($attrib['active']) || $attrib['active'] == 'true')
{
$perm = (isset($attrib['perm']) ? $attrib['perm'] : 0);
echo "Adding link {$attrib['name']} with url [{$attrib['url']}] and perm {$perm} <br />";
// manage_link('add', $attrib['url'], $attrib['name'], $perm);
}
//remove inactive links on upgrade
if($function == 'upgrade' && isset($attrib['active']) && $attrib['active'] == 'false')
{
echo "Removing link {$attrib['name']} with url [{$attrib['url']}] <br />";
// manage_link('remove', $attrib['url'], $attrib['name']);
}
break;
case 'uninstall':
//remove all links
echo "Removing link {$attrib['name']} with url [{$attrib['url']}] <br />";
// manage_link('remove', $attrib['url'], $attrib['name']);
break;
}
}
}
//main pref items
if(isset($plug_vars['mainPrefs']))
{
if(isset($plug_vars['mainPrefs']['pref']))
{
if(!is_array($plug_vars['mainPrefs']['pref']))
{
$pref_list = array($plug_vars['mainPrefs']['pref']);
}
else
{
$pref_list = $plug_vars['mainPrefs']['pref'];
}
$list = array();
foreach($pref_list as $pref)
{
$attrib = $pref['@attributes'];
$list['all'][$attrib['name']] = $attrib['value'];
if(!isset($attrib['active']) || $attrib['active'] == 'true')
{
$list['active'][$attrib['name']] = $attrib['value'];
}
if(isset($attrib['active']) && $attrib['active'] == 'false')
{
$list['inactive'][$attrib['name']] = $attrib['value'];
}
}
switch($function)
{
case 'install':
case 'upgrade':
if(!isset($attrib['active']) || $attrib['active'] == true)
{
echo "Adding prefs ".print_a($list['active'], true)."<br />";
// manage_prefs('add', $list['active']);
}
//If upgrading, removing any inactive pref
if($function == 'upgrade')
{
echo "Removing prefs ".print_a($list['inactive'], true)."<br />";
// manage_prefs('remove', $list['inactive']);
}
break;
//If uninstalling, remove all prefs (active or inactive)
case 'uninstall':
echo "Removing prefs ".print_a($list['all'], true)."<br />";
// manage_prefs('remove', $list['all']);
break;
}
}
}
} }
function install_plugin_php($path) function install_plugin_php($path)
{ {
global $sql;
$plug = array(); $plug = array();
$plug['plug_action'] = 'install'; $plug['plug_action'] = 'install';
// $plug_vars = $this->parse_plugin_php($path); // $plug_vars = $this->parse_plugin_php($path);
include_once($path.'plugin.php'); include_once($path.'plugin.php');
$func = $eplug_folder.'_install'; $func = $eplug_folder.'_install';
@@ -650,15 +800,8 @@ class e107plugin
if ($eplug_link === TRUE && $eplug_link_url != '' && $eplug_link_name != '') if ($eplug_link === TRUE && $eplug_link_url != '' && $eplug_link_name != '')
{ {
$plug_perm['everyone'] = e_UC_PUBLIC; $linkperm = (isset($eplug_link_perms) ? $eplug_link_perms : e_UC_PUBLIC);
$plug_perm['guest'] = e_UC_GUEST; $this->manage_link('add', $eplug_link_url, $eplug_link_name, $linkperm);
$plug_perm['member'] = e_UC_MEMBER;
$plug_perm['mainadmin'] = e_UC_MAINADMIN;
$plug_perm['admin'] = e_UC_ADMIN;
$plug_perm['nobody'] = e_UC_NOBODY;
$eplug_link_perms = strtolower($eplug_link_perms);
$linkperm = ($plug_perm[$eplug_link_perms]) ? $plug_perm[$eplug_link_perms] : e_UC_PUBLIC;
$this->manage_link('add', $eplug_link_url, $eplug_link_name,$linkperm);
} }
if ($eplug_userclass) if ($eplug_userclass)
@@ -702,14 +845,14 @@ class e107plugin
if ($plug['plugin_installflag'] == FALSE) if ($plug['plugin_installflag'] == FALSE)
{ {
$_path = e_PLUGIN.$plug['plugin_path'].'/'; $_path = e_PLUGIN.$plug['plugin_path'].'/';
if(file_exists($path.'plugin.php')) if(file_exists($_path.'plugin.xml'))
{
$text = $this->manage_plugin_xml($_path, 'install');
}
elseif(file_exists($_path.'plugin.php'))
{ {
$text = $this->install_plugin_php($_path); $text = $this->install_plugin_php($_path);
} }
elseif(file_exists($path.'plugin.xml'))
{
$text = $this->install_plugin_xml($_path);
}
} }
else else
{ {
@@ -905,11 +1048,11 @@ class e107plugin
function parse_plugin($path) function parse_plugin($path)
{ {
if(file_exists($_path.'plugin.xml')) if(file_exists($path.'plugin.xml'))
{ {
return $this->parse_plugin_xml($path); return $this->parse_plugin_xml($path);
} }
elseif(file_exists($_path.'plugin.php')) elseif(file_exists($path.'plugin.php'))
{ {
return $this->parse_plugin_php($path); return $this->parse_plugin_php($path);
} }
@@ -942,10 +1085,10 @@ class e107plugin
// Set this key so we know the vars came from a plugin.php file // Set this key so we know the vars came from a plugin.php file
$ret['plugin_php'] = true; $ret['plugin_php'] = true;
return $ret; $this->plug_vars = $ret;
return true;
} }
function parse_plugin_xml($path) function parse_plugin_xml($path)
{ {
global $tp; global $tp;
@@ -955,9 +1098,10 @@ class e107plugin
$xml = new xmlClass; $xml = new xmlClass;
$xml->loadXMLfile($path.'plugin.xml', true, true); $xml->loadXMLfile($path.'plugin.xml', true, true);
$xml->xmlFileContents = $tp->replaceConstants($xml->xmlFileContents, '', true); $xml->xmlFileContents = $tp->replaceConstants($xml->xmlFileContents, '', true);
return $xml->parseXml(); $this->plug_vars = $xml->parseXml();
return true;
} }
} }
?> ?>

View File

@@ -1,4 +1,4 @@
CREATE TABLE forum ( CREATE TABLE forum (
forum_id int(10) unsigned NOT NULL auto_increment, forum_id int(10) unsigned NOT NULL auto_increment,
forum_name varchar(250) NOT NULL default '', forum_name varchar(250) NOT NULL default '',
forum_description text NOT NULL, forum_description text NOT NULL,
@@ -14,7 +14,7 @@ CREATE TABLE forum (
forum_order int(10) unsigned NOT NULL default '0', forum_order int(10) unsigned NOT NULL default '0',
forum_postclass tinyint(3) unsigned NOT NULL default '0', forum_postclass tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (forum_id) PRIMARY KEY (forum_id)
) TYPE=MyISAM AUTO_INCREMENT=1 ) TYPE=MyISAM;
CREATE TABLE forum_t ( CREATE TABLE forum_t (
thread_id int(10) unsigned NOT NULL auto_increment, thread_id int(10) unsigned NOT NULL auto_increment,
@@ -35,5 +35,5 @@ CREATE TABLE forum_t (
KEY thread_parent (thread_parent), KEY thread_parent (thread_parent),
KEY thread_datestamp (thread_datestamp), KEY thread_datestamp (thread_datestamp),
KEY thread_forum_id (thread_forum_id) KEY thread_forum_id (thread_forum_id)
) TYPE=MyISAM AUTO_INCREMENT=1; ) TYPE=MyISAM;

View File

@@ -16,7 +16,8 @@
<latest>true</latest> <latest>true</latest>
<status>true</status> <status>true</status>
</administration> </administration>
<menuLink name="Forum" value="forum/forum.php" perm='everyone'/> <menuLink name="Forum" url="forum/forum.php" perm='everyone'/>
<menuLink name="Forum1" url="forum/forum1.php" perm='everyone' active='false'/>
<mainPrefs> <mainPrefs>
<pref name="forum_show_topics" value="1" /> <pref name="forum_show_topics" value="1" />
<pref name="forum_postfix" value="[more...]" /> <pref name="forum_postfix" value="[more...]" />