2006-12-02 04:36:16 +00:00
< ? php
/*
+ ----------------------------------------------------------------------------+
| e107 website system
|
| <EFBFBD> Steve Dunstan 2001 - 2002
| http :// e107 . org
| jalist @ e107 . org
|
| Released under the terms and conditions of the
| GNU General Public License ( http :// gnu . org ) .
|
| $Source : / cvs_backup / e107_0 . 8 / e107_handlers / plugin_class . php , v $
2008-03-11 01:47:05 +00:00
| $Revision : 1.35 $
| $Date : 2008 - 03 - 11 01 : 47 : 02 $
2008-02-08 20:05:43 +00:00
| $Author : mcfly_e107 $
2006-12-02 04:36:16 +00:00
+----------------------------------------------------------------------------+
*/
if ( ! defined ( 'e107_INIT' )) { exit ; }
class e107plugin
{
2008-01-27 11:02:34 +00:00
var $plugin_addons = array ( " e_rss " , " e_notify " , " e_linkgen " , " e_list " , " e_bb " , " e_meta " , " e_emailprint " , " e_frontpage " , " e_latest " , " e_status " , " e_search " , " e_sc " , " e_module " , " e_comment " , " e_sql " , " e_userprofile " , " e_header " );
2006-12-02 04:36:16 +00:00
2007-02-01 22:00:41 +00:00
// List of all plugin variables which need to be checked - install required if one or more set and non-empty
var $all_eplug_install_variables = array (
2008-01-20 15:01:19 +00:00
'eplug_link_url' ,
'eplug_link' ,
'eplug_prefs' ,
'eplug_array_pref' , // missing previously
'eplug_table_names' ,
'eplug_sc' ,
'eplug_userclass' ,
'eplug_module' ,
'eplug_bb' ,
'eplug_latest' ,
2008-02-02 22:04:18 +00:00
'eplug_status' ,
'eplug_comment_ids' ,
'eplug_conffile' ,
'eplug_menu_name'
2007-02-01 22:00:41 +00:00
);
// List of all plugin variables involved in an update (not used ATM, but worth 'documenting')
var $all_eplug_update_variables = array (
2008-01-20 15:01:19 +00:00
'upgrade_alter_tables' ,
'upgrade_add_eplug_sc' ,
'upgrade_remove_eplug_sc' ,
'upgrade_add_eplug_bb' ,
'upgrade_remove_eplug_bb' ,
'upgrade_add_prefs' ,
'upgrade_remove_prefs' ,
'upgrade_add_array_pref' ,
'upgrade_remove_array_pref'
2007-02-01 22:00:41 +00:00
);
2008-01-20 15:01:19 +00:00
2007-06-05 19:51:36 +00:00
// List of all 'editable' DB fields ('plugin_id' is an arbitrary reference which is never edited)
var $all_editable_db_fields = array (
2008-01-20 15:01:19 +00:00
'plugin_name' , // Name of the plugin - language dependent
'plugin_version' , // Version - arbitrary text field
'plugin_path' , // Name of the directory off e_PLUGIN - unique
'plugin_installflag' , // '0' = not installed, '1' = installed
'plugin_addons' // List of any extras associated with plugin - bbcodes, e_XXX files...
2007-06-05 19:51:36 +00:00
);
2008-01-20 15:01:19 +00:00
2008-01-27 01:34:59 +00:00
var $plug_vars ;
2008-02-02 03:23:47 +00:00
var $current_plug ;
2008-01-28 02:49:50 +00:00
var $parsed_plugin ;
2008-02-02 22:04:18 +00:00
2008-01-28 02:49:50 +00:00
function e107plugin ()
{
2008-02-01 14:11:27 +00:00
$parsed_plugin = array ();
2008-01-28 02:49:50 +00:00
}
2008-02-01 14:11:27 +00:00
2006-12-02 04:36:16 +00:00
/**
2008-01-20 15:01:19 +00:00
* 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 .
* @ return array plugin details
*/
2006-12-02 04:36:16 +00:00
function getall ( $flag )
{
2008-01-20 15:01:19 +00:00
2006-12-02 04:36:16 +00:00
global $sql ;
2008-01-20 15:01:19 +00:00
if ( $sql -> db_Select ( " plugin " , " * " , " plugin_installflag = " . ( int ) $flag . " ORDER BY plugin_path ASC " ))
2006-12-02 04:36:16 +00:00
{
$ret = $sql -> db_getList ();
2008-01-20 15:01:19 +00:00
return $ret ;
}
return false ;
2006-12-02 04:36:16 +00:00
}
2007-02-01 22:00:41 +00:00
2006-12-02 04:36:16 +00:00
/**
2008-01-20 15:01:19 +00:00
* Check for new plugins , create entry in plugin table and remove deleted plugins
*/
function update_plugins_table ()
2007-02-01 22:00:41 +00:00
{
2007-05-07 13:38:34 +00:00
global $sql , $sql2 , $mySQLprefix , $menu_pref , $tp , $pref ;
2006-12-02 04:36:16 +00:00
require_once ( e_HANDLER . 'file_class.php' );
$fl = new e_file ;
2008-02-13 00:46:05 +00:00
$pluginList = $fl -> get_files ( e_PLUGIN , " ^plugin \ .(php|xml) $ " , " standard " , 1 );
2007-05-07 13:38:34 +00:00
$sp = FALSE ;
2006-12-02 04:36:16 +00:00
2008-01-20 15:01:19 +00:00
// Read all the plugin DB info into an array to save lots of accesses
2007-06-05 19:51:36 +00:00
$pluginDBList = array ();
if ( $sql -> db_Select ( 'plugin' , " * " ))
{
2008-02-13 00:46:05 +00:00
while ( $row = $sql -> db_Fetch ( MYSQL_ASSOC ))
2008-01-20 15:01:19 +00:00
{
$pluginDBList [ $row [ 'plugin_path' ]] = $row ;
$pluginDBList [ $row [ 'plugin_path' ]][ 'status' ] = 'read' ;
// echo "Found plugin: ".$row['plugin_path']." in DB<br />";
}
2007-06-05 19:51:36 +00:00
}
2006-12-02 04:36:16 +00:00
foreach ( $pluginList as $p )
{
2008-02-13 00:46:05 +00:00
$plug [ 'plug_action' ] = 'scan' ; // Make sure plugin.php knows what we're up to
if ( ! $this -> parse_plugin ( $p [ 'path' ]))
2008-01-20 15:01:19 +00:00
{
2008-02-13 00:46:05 +00:00
//parsing of plugin.php/plugin.xml failed.
break ;
2008-01-20 15:01:19 +00:00
}
2008-02-13 00:46:05 +00:00
$plug_info = $this -> plug_vars ;
2008-01-20 15:01:19 +00:00
$plugin_path = substr ( str_replace ( e_PLUGIN , " " , $p [ 'path' ]), 0 , - 1 );
// scan for addons.
$eplug_addons = $this -> getAddons ( $plugin_path ); // Returns comma-separated list
// $eplug_addons = $this->getAddons($plugin_path,'check'); // Checks opening/closing tags on addon files
2008-03-11 01:47:05 +00:00
//Ensure the plugin path lives in the same folder as is configured in the plugin.php/plugin.xml
if ( $plugin_path == $plug_info [ 'folder' ])
2008-01-20 15:01:19 +00:00
{
2008-02-13 00:46:05 +00:00
if ( array_key_exists ( $plugin_path , $pluginDBList ))
2008-01-20 15:01:19 +00:00
{ // Update the addons needed by the plugin
$pluginDBList [ $plugin_path ][ 'status' ] = 'exists' ;
// If plugin not installed, and version number of files changed, update version as well
2008-02-13 00:46:05 +00:00
if (( $pluginDBList [ $plugin_path ][ 'plugin_installflag' ] == 0 ) && ( $pluginDBList [ $plugin_path ][ 'plugin_version' ] != $plug_info [ 'version' ]))
2008-01-20 15:01:19 +00:00
{ // Update stored version
2008-02-13 00:46:05 +00:00
$pluginDBList [ $plugin_path ][ 'plugin_version' ] = $plug_info [ 'version' ];
2008-01-20 15:01:19 +00:00
$pluginDBList [ $plugin_path ][ 'status' ] = 'update' ;
}
if ( $pluginDBList [ $plugin_path ][ 'plugin_addons' ] != $eplug_addons )
{ // Update stored addons list
$pluginDBList [ $plugin_path ][ 'plugin_addons' ] = $eplug_addons ;
$pluginDBList [ $plugin_path ][ 'status' ] = 'update' ;
}
if ( $pluginDBList [ $plugin_path ][ 'plugin_installflag' ] == 0 )
{ // Plugin not installed - make sure $pref not set
if ( isset ( $pref [ 'plug_installed' ][ $plugin_path ]))
{
unset ( $pref [ 'plug_installed' ][ $plugin_path ]);
// echo "Remove: ".$plugin_path."->".$ep_row['plugin_version']."<br />";
$sp = TRUE ;
}
}
else
{ // Plugin installed - make sure $pref is set
if ( ! isset ( $pref [ 'plug_installed' ][ $plugin_path ]) || ( $pref [ 'plug_installed' ][ $plugin_path ] != $pluginDBList [ $plugin_path ][ 'plugin_version' ]))
{ // Update prefs array of installed plugins
$pref [ 'plug_installed' ][ $plugin_path ] = $pluginDBList [ $plugin_path ][ 'plugin_version' ];
// echo "Add: ".$plugin_path."->".$ep_row['plugin_version']."<br />";
$sp = TRUE ;
}
}
2007-06-05 19:51:36 +00:00
}
2008-01-20 15:01:19 +00:00
else
{ // New plugin - not in table yet, so add it. If no install needed, mark it as 'installed'
2008-02-13 00:46:05 +00:00
if ( $plug_info [ 'name' ])
2008-01-20 15:01:19 +00:00
{
2008-02-13 00:46:05 +00:00
// Can just add to DB - shouldn't matter that its not in our current table
2008-01-20 15:01:19 +00:00
// echo "Trying to insert: ".$eplug_folder."<br />";
2008-02-13 00:46:05 +00:00
$_installed = ( $plug_info [ 'installRequired' ] == 'true' || $plug_info [ 'installRequired' ] == 1 ? 0 : 1 );
$sql -> db_Insert ( " plugin " , " 0, ' " . $tp -> toDB ( $plug_info [ 'name' ], true ) . " ', ' " . $tp -> toDB ( $plug_info [ 'version' ], true ) . " ', ' " . $tp -> toDB ( $plugin_path , true ) . " ', { $_installed } , ' { $eplug_addons } ' " );
2008-01-20 15:01:19 +00:00
}
2007-06-05 19:51:36 +00:00
}
2007-02-01 22:00:41 +00:00
}
2007-06-05 19:51:36 +00:00
else
2008-01-20 15:01:19 +00:00
{ // May be useful that we ignore what will usually be copies/backups of plugins - but don't normally say anything
// echo "Plugin copied to wrong directory. Is in: {$plugin_path} Should be: {$eplug_folder}<br /><br />";
2007-02-01 22:00:41 +00:00
}
2006-12-02 04:36:16 +00:00
}
2007-06-05 19:51:36 +00:00
// Now scan the table, updating the DB where needed
foreach ( $pluginDBList as $plug_path => $plug_info )
{
2008-01-20 15:01:19 +00:00
if ( $plug_info [ 'status' ] == 'read' )
{ // In table, not on server - delete it
$sql -> db_Delete ( 'plugin' , " `plugin_id`= { $plug_info [ 'plugin_id' ] } " );
// echo "Deleted: ".$plug_path."<br />";
}
if ( $plug_info [ 'status' ] == 'update' )
2007-06-05 19:51:36 +00:00
{
2008-01-20 15:01:19 +00:00
$temp = array ();
foreach ( $this -> all_editable_db_fields as $p_f )
{
$temp [] = " ` { $p_f } ` = ' { $plug_info [ $p_f ] } ' " ;
}
$sql -> db_Update ( 'plugin' , implode ( " , " , $temp ) . " WHERE `plugin_id`= { $plug_info [ 'plugin_id' ] } " );
// echo "Updated: ".$plug_path."<br />";
2007-06-05 19:51:36 +00:00
}
2006-12-02 04:36:16 +00:00
}
2008-02-13 00:46:05 +00:00
if ( $sp ) { save_prefs (); }
2006-12-02 04:36:16 +00:00
}
2007-05-07 13:38:34 +00:00
2006-12-02 04:36:16 +00:00
/**
2008-01-20 15:01:19 +00:00
* Returns deatils of a plugin from the plugin table from it ' s ID
*
* @ param int $id
* @ return array plugin info
*/
2008-01-28 02:49:50 +00:00
function getinfo ( $id , $force = false )
{
2008-02-01 14:11:27 +00:00
global $sql ;
static $getinfo_results ;
2008-01-28 02:49:50 +00:00
if ( ! is_array ( $getinfo_results )) { $getinfo_results = array (); }
2008-02-01 14:11:27 +00:00
2008-01-28 02:49:50 +00:00
$id = ( int ) $id ;
2008-02-01 11:52:27 +00:00
if ( ! isset ( $getinfo_results [ $id ]) || $force == true )
2008-01-28 02:49:50 +00:00
{
if ( $sql -> db_Select ( 'plugin' , '*' , " plugin_id = " . $id ))
{
2008-02-01 14:11:27 +00:00
$getinfo_results [ $id ] = $sql -> db_Fetch ();
2008-01-28 02:49:50 +00:00
}
else
{
return false ;
}
2006-12-02 04:36:16 +00:00
}
2008-01-28 02:49:50 +00:00
return $getinfo_results [ $id ];
2006-12-02 04:36:16 +00:00
}
2008-01-20 15:01:19 +00:00
function manage_userclass ( $action , $class_name , $class_description )
{
2006-12-02 04:36:16 +00:00
global $sql , $tp ;
$class_name = $tp -> toDB ( $class_name , true );
$class_description = $tp -> toDB ( $class_description , true );
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
{
2006-12-02 04:36:16 +00:00
$i = 1 ;
2008-01-20 15:01:19 +00:00
while ( $sql -> db_Select ( 'userclass_classes' , '*' , " userclass_id= { $i } " ) && $i < e_UC_READONLY )
{
2006-12-02 04:36:16 +00:00
$i ++ ;
}
2008-01-20 15:01:19 +00:00
if ( $i < e_UC_READONLY )
{
2006-12-02 04:36:16 +00:00
return $sql -> db_Insert ( 'userclass_classes' , " { $i } ,' " . strip_tags ( strtoupper ( $class_name )) . " ', ' { $class_description } ' , " . e_UC_PUBLIC );
2008-01-20 15:01:19 +00:00
}
else
{
2006-12-02 04:36:16 +00:00
return FALSE ;
}
}
2008-01-20 15:01:19 +00:00
if ( $action == 'remove' )
{
if ( $sql -> db_Select ( 'userclass_classes' , 'userclass_id' , " userclass_name = ' { $class_name } ' " ))
{
2006-12-02 04:36:16 +00:00
$row = $sql -> db_Fetch ();
$class_id = $row [ 'userclass_id' ];
2008-01-20 15:01:19 +00:00
if ( $sql -> db_Delete ( 'userclass_classes' , " userclass_id = { $class_id } " ))
{
if ( $sql -> db_Select ( 'user' , 'user_id, user_class' , " user_class REGEXP('^ { $class_id } \ .') OR user_class REGEXP(' \ . { $class_id } \ .') OR user_class REGEXP(' \ . { $class_id } $ ') " ))
{
2006-12-02 04:36:16 +00:00
$sql2 = new db ;
2008-01-20 15:01:19 +00:00
while ( $row = $sql -> db_Fetch ())
{
2006-12-02 04:36:16 +00:00
$classes = explode ( " . " , $row [ 'user_class' ]);
unset ( $classes [ $class_id ]);
2008-01-20 15:01:19 +00:00
foreach ( $classes as $k => $v )
{
if ( $v = '' )
{
2006-12-02 04:36:16 +00:00
unset ( $classes [ $k ]);
}
}
$newclass = '.' . implode ( '.' , $classes ) . '.' ;
2008-01-20 15:01:19 +00:00
$sql2 -> db_Update ( 'user' , " user_class = ' { $newclass } ' WHERE user_id = { $row [ 'user_id' ] } " );
2006-12-02 04:36:16 +00:00
}
}
}
}
}
}
2008-01-27 01:34:59 +00:00
function manage_link ( $action , $link_url , $link_name , $link_class = 0 )
2008-01-20 15:01:19 +00:00
{
2006-12-02 04:36:16 +00:00
global $sql , $tp ;
2008-01-27 01:34:59 +00:00
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 ;
}
2006-12-02 04:36:16 +00:00
$link_url = $tp -> toDB ( $link_url , true );
$link_name = $tp -> toDB ( $link_name , true );
2007-06-06 19:25:26 +00:00
$path = str_replace ( " ../ " , " " , $link_url ); // This should clean up 'non-standard' links
$path = $tp -> createConstants ( $path ); // Add in standard {e_XXXX} directory constants if we can
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
2007-05-30 20:35:44 +00:00
{
2006-12-02 04:36:16 +00:00
$link_t = $sql -> db_Count ( 'links' );
2008-01-20 15:01:19 +00:00
if ( ! $sql -> db_Count ( 'links' , '(*)' , " WHERE link_url = ' { $path } ' OR link_name = ' { $link_name } ' " ))
2007-09-28 20:00:37 +00:00
{
2008-01-20 15:01:19 +00:00
return $sql -> db_Insert ( 'links' , " 0, ' { $link_name } ', ' { $path } ', '', '', '1', ' " . ( $link_t + 1 ) . " ', '0', '0', ' { $link_class } ' " );
}
else
2007-09-28 20:00:37 +00:00
{
2008-01-20 15:01:19 +00:00
return FALSE ;
2006-12-02 04:36:16 +00:00
}
}
2008-01-20 15:01:19 +00:00
if ( $action == 'remove' )
2007-05-30 20:35:44 +00:00
{ // Look up by URL if we can - should be more reliable. Otherwise try looking up by name (as previously)
2008-01-20 15:01:19 +00:00
if (( $path && $sql -> db_Select ( 'links' , 'link_id,link_order' , " link_url = ' { $path } ' " )) ||
$sql -> db_Select ( 'links' , 'link_id,link_order' , " link_name = ' { $link_name } ' " ))
{
$row = $sql -> db_Fetch ();
$sql -> db_Update ( 'links' , " link_order = link_order - 1 WHERE link_order > { $row [ 'link_order' ] } " );
return $sql -> db_Delete ( 'links' , " link_id = { $row [ 'link_id' ] } " );
}
2006-12-02 04:36:16 +00:00
}
}
2008-01-20 15:01:19 +00:00
function manage_prefs ( $action , $var )
{
2006-12-02 04:36:16 +00:00
global $pref ;
2008-01-20 15:01:19 +00:00
if ( is_array ( $var ))
{
switch ( $action )
{
case 'add' :
foreach ( $var as $k => $v )
{
$pref [ $k ] = $v ;
2007-09-16 17:13:51 +00:00
}
2008-01-20 15:01:19 +00:00
break ;
case 'update' :
foreach ( $var as $k => $v )
{ // Only update if $pref doesn't exist
if ( ! isset ( $pref [ $k ])) $pref [ $k ] = $v ;
}
break ;
case 'remove' :
foreach ( $var as $k => $v )
{
if ( is_numeric ( $k ))
{ // Sometimes arrays specified with value being the name of the key to delete
unset ( $pref [ $var [ $k ]]);
}
else
{ // This is how the array should be specified - key is the name of the pref
unset ( $pref [ $k ]);
}
}
break ;
}
save_prefs ();
2006-12-02 04:36:16 +00:00
}
}
2008-02-02 22:04:18 +00:00
function manage_comments ( $action , $comment_id )
2008-01-20 15:01:19 +00:00
{
2006-12-02 04:36:16 +00:00
global $sql , $tp ;
2008-02-02 22:04:18 +00:00
$tmp = array ();
2008-01-20 15:01:19 +00:00
if ( $action == 'remove' )
{
foreach ( $comment_id as $com )
{
$tmp [] = " comment_type=' " . $tp -> toDB ( $com , true ) . " ' " ;
2006-12-02 04:36:16 +00:00
}
$qry = implode ( " OR " , $tmp );
2008-02-02 22:04:18 +00:00
echo $qry . " <br /> " ;
return $sql -> db_Delete ( 'comments' , $qry );
2008-01-20 15:01:19 +00:00
}
2006-12-02 04:36:16 +00:00
}
2008-01-20 15:01:19 +00:00
function manage_tables ( $action , $var )
{
2006-12-02 04:36:16 +00:00
global $sql ;
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
{
if ( is_array ( $var ))
{
foreach ( $var as $tab )
{
if ( ! $sql -> db_Query ( $tab ))
{
2006-12-02 04:36:16 +00:00
return FALSE ;
}
}
return TRUE ;
}
return TRUE ;
}
2008-01-20 15:01:19 +00:00
if ( $action == 'upgrade' )
{
if ( is_array ( $var ))
{
foreach ( $var as $tab )
{
if ( ! $sql -> db_Query_all ( $tab ))
{
2006-12-02 04:36:16 +00:00
return FALSE ;
}
}
return TRUE ;
}
return TRUE ;
}
2008-01-20 15:01:19 +00:00
if ( $action == 'remove' )
{
if ( is_array ( $var ))
{
foreach ( $var as $tab )
{
2006-12-02 04:36:16 +00:00
$qry = 'DROP TABLE ' . MPREFIX . $tab ;
2008-01-20 15:01:19 +00:00
if ( ! $sql -> db_Query_all ( $qry ))
{
2006-12-02 04:36:16 +00:00
return $tab ;
}
}
return TRUE ;
}
return TRUE ;
}
}
2008-01-20 15:01:19 +00:00
function manage_plugin_prefs ( $action , $prefname , $plugin_folder , $varArray = '' )
2007-06-05 19:51:36 +00:00
{ // These prefs are 'cumulative' - several plugins may contribute an array element
2006-12-02 04:36:16 +00:00
global $pref ;
2008-01-20 15:01:19 +00:00
if ( $prefname == 'plug_sc' || $prefname == 'plug_bb' )
2007-06-05 19:51:36 +00:00
{ // Special cases - shortcodes and bbcodes - each plugin may contribute several elements
2008-01-20 15:01:19 +00:00
foreach ( $varArray as $code )
{
2006-12-02 04:36:16 +00:00
$prefvals [] = " $code : $plugin_folder " ;
}
2008-01-20 15:01:19 +00:00
}
else
{
2007-02-01 22:00:41 +00:00
$prefvals [] = $varArray ;
2008-01-20 15:01:19 +00:00
// $prefvals[] = $plugin_folder;
2006-12-02 04:36:16 +00:00
}
$curvals = explode ( ',' , $pref [ $prefname ]);
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
2007-02-01 22:00:41 +00:00
{
2006-12-02 04:36:16 +00:00
$newvals = array_merge ( $curvals , $prefvals );
}
2008-01-20 15:01:19 +00:00
if ( $action == 'remove' )
2007-02-01 22:00:41 +00:00
{
2008-01-20 15:01:19 +00:00
foreach ( $prefvals as $v )
2007-02-01 22:00:41 +00:00
{
2008-01-20 15:01:19 +00:00
if (( $i = array_search ( $v , $curvals )) !== FALSE )
{
unset ( $curvals [ $i ]);
}
2006-12-02 04:36:16 +00:00
}
2008-01-20 15:01:19 +00:00
$newvals = $curvals ;
2006-12-02 04:36:16 +00:00
}
$newvals = array_unique ( $newvals );
2007-02-01 22:00:41 +00:00
$pref [ $prefname ] = implode ( ',' , $newvals );
2006-12-02 04:36:16 +00:00
if ( substr ( $pref [ $prefname ], 0 , 1 ) == " , " )
{
2008-01-20 15:01:19 +00:00
$pref [ $prefname ] = substr ( $pref [ $prefname ], 1 );
2006-12-02 04:36:16 +00:00
}
save_prefs ();
}
2008-01-20 15:01:19 +00:00
function manage_search ( $action , $eplug_folder )
{
2006-12-02 04:36:16 +00:00
global $sql , $sysprefs ;
$search_prefs = $sysprefs -> getArray ( 'search_prefs' );
$default = file_exists ( e_PLUGIN . $eplug_folder . '/e_search.php' ) ? TRUE : FALSE ;
$comments = file_exists ( e_PLUGIN . $eplug_folder . '/search/search_comments.php' ) ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
{
2006-12-02 04:36:16 +00:00
$install_default = $default ? TRUE : FALSE ;
$install_comments = $comments ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
}
else if ( $action == 'remove' )
{
2006-12-02 04:36:16 +00:00
$uninstall_default = isset ( $search_prefs [ 'plug_handlers' ][ $eplug_folder ]) ? TRUE : FALSE ;
$uninstall_comments = isset ( $search_prefs [ 'comments_handlers' ][ $eplug_folder ]) ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
}
else if ( $action == 'upgrade' )
{
if ( isset ( $search_prefs [ 'plug_handlers' ][ $eplug_folder ]))
{
2006-12-02 04:36:16 +00:00
$uninstall_default = $default ? FALSE : TRUE ;
2008-01-20 15:01:19 +00:00
}
else
{
2006-12-02 04:36:16 +00:00
$install_default = $default ? TRUE : FALSE ;
}
2008-01-20 15:01:19 +00:00
if ( isset ( $search_prefs [ 'comments_handlers' ][ $eplug_folder ]))
{
2006-12-02 04:36:16 +00:00
$uninstall_comments = $comments ? FALSE : TRUE ;
2008-01-20 15:01:19 +00:00
}
else
{
2006-12-02 04:36:16 +00:00
$install_comments = $comments ? TRUE : FALSE ;
}
}
2008-01-20 15:01:19 +00:00
if ( $install_default )
{
2006-12-02 04:36:16 +00:00
$search_prefs [ 'plug_handlers' ][ $eplug_folder ] = array ( 'class' => 0 , 'pre_title' => 1 , 'pre_title_alt' => '' , 'chars' => 150 , 'results' => 10 );
2008-01-20 15:01:19 +00:00
}
else if ( $uninstall_default )
{
2006-12-02 04:36:16 +00:00
unset ( $search_prefs [ 'plug_handlers' ][ $eplug_folder ]);
}
2008-01-20 15:01:19 +00:00
if ( $install_comments )
{
2006-12-02 04:36:16 +00:00
require_once ( e_PLUGIN . $eplug_folder . '/search/search_comments.php' );
$search_prefs [ 'comments_handlers' ][ $eplug_folder ] = array ( 'id' => $comments_type_id , 'class' => 0 , 'dir' => $eplug_folder );
2008-01-20 15:01:19 +00:00
}
else if ( $uninstall_comments )
{
2006-12-02 04:36:16 +00:00
unset ( $search_prefs [ 'comments_handlers' ][ $eplug_folder ]);
}
$tmp = addslashes ( serialize ( $search_prefs ));
$sql -> db_Update ( " core " , " e107_value = ' { $tmp } ' WHERE e107_name = 'search_prefs' " );
}
2008-01-20 15:01:19 +00:00
function manage_notify ( $action , $eplug_folder )
{
2006-12-02 04:36:16 +00:00
global $sql , $sysprefs , $eArrayStorage , $tp ;
$notify_prefs = $sysprefs -> get ( 'notify_prefs' );
$notify_prefs = $eArrayStorage -> ReadArray ( $notify_prefs );
$e_notify = file_exists ( e_PLUGIN . $eplug_folder . '/e_notify.php' ) ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
if ( $action == 'add' )
{
2006-12-02 04:36:16 +00:00
$install_notify = $e_notify ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
}
else if ( $action == 'remove' )
{
2006-12-02 04:36:16 +00:00
$uninstall_notify = isset ( $notify_prefs [ 'plugins' ][ $eplug_folder ]) ? TRUE : FALSE ;
2008-01-20 15:01:19 +00:00
}
else if ( $action == 'upgrade' )
{
if ( isset ( $notify_prefs [ 'plugins' ][ $eplug_folder ]))
{
2006-12-02 04:36:16 +00:00
$uninstall_notify = $e_notify ? FALSE : TRUE ;
2008-01-20 15:01:19 +00:00
}
else
{
2006-12-02 04:36:16 +00:00
$install_notify = $e_notify ? TRUE : FALSE ;
}
}
2008-01-20 15:01:19 +00:00
if ( $install_notify )
{
2006-12-02 04:36:16 +00:00
$notify_prefs [ 'plugins' ][ $eplug_folder ] = TRUE ;
require_once ( e_PLUGIN . $eplug_folder . '/e_notify.php' );
2008-01-20 15:01:19 +00:00
foreach ( $config_events as $event_id => $event_text )
{
2006-12-02 04:36:16 +00:00
$notify_prefs [ 'event' ][ $event_id ] = array ( 'type' => 'off' , 'class' => '254' , 'email' => '' );
}
2008-01-20 15:01:19 +00:00
}
else if ( $uninstall_notify )
{
2006-12-02 04:36:16 +00:00
unset ( $notify_prefs [ 'plugins' ][ $eplug_folder ]);
require_once ( e_PLUGIN . $eplug_folder . '/e_notify.php' );
2008-01-20 15:01:19 +00:00
foreach ( $config_events as $event_id => $event_text )
{
2006-12-02 04:36:16 +00:00
unset ( $notify_prefs [ 'event' ][ $event_id ]);
}
}
$s_prefs = $tp -> toDB ( $notify_prefs );
2008-01-26 05:19:59 +00:00
$s_prefs = $eArrayStorage -> WriteArray ( $s_prefs );
2006-12-02 04:36:16 +00:00
$sql -> db_Update ( " core " , " e107_value=' " . $s_prefs . " ' WHERE e107_name='notify_prefs' " );
}
2008-01-28 02:49:50 +00:00
function manage_plugin_xml ( $id , $function = '' )
2007-05-30 20:35:44 +00:00
{
2008-02-01 14:11:27 +00:00
global $sql ;
2008-01-28 02:49:50 +00:00
$id = ( int ) $id ;
$plug = $this -> getinfo ( $id );
2008-02-02 03:23:47 +00:00
$this -> current_plug = $plug ;
2008-02-02 22:04:18 +00:00
$txt = '' ;
2008-02-01 14:11:27 +00:00
$path = e_PLUGIN . $plug [ 'plugin_path' ] . '/' ;
2008-02-13 02:58:58 +00:00
$_folder = strtolower ( preg_replace ( " #![a-zA-Z0-9]# " , '' , $plug [ 'plugin_path' ]));
2008-02-02 03:23:47 +00:00
//We'll just install using plugin.php file for now.
2008-02-02 22:04:18 +00:00
//return $this->install_plugin_php($path);
2008-02-02 03:23:47 +00:00
//New code to install using plugin.xml below.
2008-02-01 14:11:27 +00:00
$addons = explode ( ',' , $plug [ 'plugin_addons' ]);
$sql_list = array ();
foreach ( $addons as $addon )
{
if ( substr ( $addon , - 4 ) == '_sql' )
{
$sql_list [] = $addon . '.php' ;
}
}
2008-01-28 02:49:50 +00:00
2008-01-27 01:34:59 +00:00
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 ;
}
2008-02-01 14:11:27 +00:00
2008-02-02 00:48:58 +00:00
// Let's call any custom pre functions defined in <management> section
2008-02-02 22:04:18 +00:00
$txt .= $this -> execute_function ( $path , $function , 'pre' );
2008-02-02 00:48:58 +00:00
2008-02-01 14:11:27 +00:00
// tables
// This will load each _sql.php file found in the plugin directory and parse it.
if (( $function == 'install' || $function == 'uninstall' ) && count ( $sql_list ))
2008-01-27 01:34:59 +00:00
{
2008-02-01 14:11:27 +00:00
foreach ( $sql_list as $sql_file )
2008-01-27 01:34:59 +00:00
{
2008-02-01 14:11:27 +00:00
if ( $sql_data = file_get_contents ( $path . $sql_file ))
2008-01-27 01:34:59 +00:00
{
2008-02-01 14:11:27 +00:00
preg_match_all ( " /create(.*?)myisam.*?;/si " , $sql_data , $result );
foreach ( $result [ 0 ] as $sql_table )
2008-01-27 01:34:59 +00:00
{
2008-02-02 22:04:18 +00:00
preg_match ( " /CREATE TABLE(.*?) \ (/si " , $sql_table , $match );
$tablename = trim ( $match [ 1 ]);
if ( $function == 'uninstall' && isset ( $_POST [ 'delete_tables' ]) && $_POST [ 'delete_tables' ])
2008-02-01 14:11:27 +00:00
{
2008-02-02 22:04:18 +00:00
$txt .= " Removing table $tablename <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_tables ( 'remove' , array ( $tablename ));
2008-02-01 14:11:27 +00:00
}
if ( $function == 'install' )
{
2008-02-02 22:04:18 +00:00
$sql_table = preg_replace ( " /create table \ s+/si " , " CREATE TABLE " . MPREFIX , $sql_table );
$txt .= " Adding table: { $tablename } ... " ;
$result = $this -> manage_tables ( 'add' , array ( $sql_table ));
$txt .= ( $result ? " Success " : " Failed! " ) . " <br /> " ;
2008-02-01 14:11:27 +00:00
}
2008-01-27 01:34:59 +00:00
}
}
}
}
2008-02-01 14:11:27 +00:00
2008-01-27 01:34:59 +00:00
//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' :
2008-02-01 14:11:27 +00:00
// Add any active link
if ( ! isset ( $attrib [ 'active' ]) || $attrib [ 'active' ] == 'true' )
{
$perm = ( isset ( $attrib [ 'perm' ]) ? $attrib [ 'perm' ] : 0 );
2008-02-02 22:04:18 +00:00
$txt .= " Adding link { $attrib [ 'name' ] } with url [ { $attrib [ 'url' ] } ] and perm { $perm } <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_link ( 'add' , $attrib [ 'url' ], $attrib [ 'name' ], $perm );
2008-02-01 14:11:27 +00:00
}
//remove inactive links on upgrade
if ( $function == 'upgrade' && isset ( $attrib [ 'active' ]) && $attrib [ 'active' ] == 'false' )
{
2008-02-02 22:04:18 +00:00
$txt .= " Removing link { $attrib [ 'name' ] } with url [ { $attrib [ 'url' ] } ] <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_link ( 'remove' , $attrib [ 'url' ], $attrib [ 'name' ]);
2008-02-01 14:11:27 +00:00
}
break ;
2008-01-27 01:34:59 +00:00
case 'uninstall' :
2008-02-01 14:11:27 +00:00
//remove all links
2008-02-02 22:04:18 +00:00
$txt .= " Removing link { $attrib [ 'name' ] } with url [ { $attrib [ 'url' ] } ] <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_link ( 'remove' , $attrib [ 'url' ], $attrib [ 'name' ]);
2008-02-01 14:11:27 +00:00
break ;
2008-01-27 01:34:59 +00:00
}
}
}
2008-02-01 14:11:27 +00:00
2008-01-27 01:34:59 +00:00
//main pref items
if ( isset ( $plug_vars [ 'mainPrefs' ]))
{
if ( isset ( $plug_vars [ 'mainPrefs' ][ 'pref' ]))
{
2008-02-01 18:09:02 +00:00
$list = $this -> parse_prefs ( $plug_vars [ 'mainPrefs' ][ 'pref' ]);
2008-01-27 01:34:59 +00:00
switch ( $function )
{
case 'install' :
case 'upgrade' :
2008-02-01 14:11:27 +00:00
if ( is_array ( $list [ 'active' ]))
{
2008-02-02 22:04:18 +00:00
$txt .= " Adding prefs " . print_a ( $list [ 'active' ], true ) . " <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_prefs ( 'add' , $list [ 'active' ]);
2008-02-01 14:11:27 +00:00
}
//If upgrading, removing any inactive pref
if ( $function == 'upgrade' && is_array ( $list [ 'inactive' ]))
{
2008-02-02 22:04:18 +00:00
$txt .= " Removing prefs " . print_a ( $list [ 'inactive' ], true ) . " <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_prefs ( 'remove' , $list [ 'inactive' ]);
2008-02-01 14:11:27 +00:00
}
break ;
2008-01-27 01:34:59 +00:00
//If uninstalling, remove all prefs (active or inactive)
case 'uninstall' :
2008-02-01 14:11:27 +00:00
if ( is_array ( $list [ 'all' ]))
{
2008-02-02 22:04:18 +00:00
$txt .= " Removing prefs " . print_a ( $list [ 'all' ], true ) . " <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_prefs ( 'remove' , $list [ 'all' ]);
2008-02-01 14:11:27 +00:00
}
break ;
2008-01-27 01:34:59 +00:00
}
}
}
2008-02-01 14:11:27 +00:00
2008-01-27 05:16:03 +00:00
//Userclasses
//$this->manage_userclass('add', $eplug_userclass, $eplug_userclass_description);
2008-02-02 22:04:18 +00:00
if ( isset ( $plug_vars [ 'userclass' ]))
2008-01-27 05:16:03 +00:00
{
2008-02-02 22:04:18 +00:00
$uclass_list = ( isset ( $plug_vars [ 'userclass' ][ 0 ]) ? $plug_vars [ 'userclass' ] : array ( $plug_vars [ 'userclass' ]));
foreach ( $uclass_list as $uclass )
2008-01-27 05:16:03 +00:00
{
2008-02-02 22:04:18 +00:00
$attrib = $uclass [ '@attributes' ];
switch ( $function )
2008-01-27 05:16:03 +00:00
{
2008-02-02 22:04:18 +00:00
case 'install' :
case 'upgrade' :
// Add all active userclasses
if ( ! isset ( $attrib [ 'active' ]) || $attrib [ 'active' ] == 'true' )
2008-01-27 05:16:03 +00:00
{
2008-02-02 22:04:18 +00:00
$txt .= " Adding userclass " . $attrib [ 'name' ] . " <br /> " ;
$this -> manage_userclass ( 'add' , $attrib [ 'name' ], $attrib [ 'description' ]);
}
2008-02-01 14:11:27 +00:00
2008-02-02 22:04:18 +00:00
//If upgrading, removing any inactive userclass
if ( $function == 'upgrade' && isset ( $attrib [ 'active' ]) && $attrib [ 'active' ] == 'false' )
{
$txt .= " Removing userclass " . $attrib [ 'name' ] . " <br /> " ;
2008-02-02 03:23:47 +00:00
$this -> manage_userclass ( 'remove' , $attrib [ 'name' ], $attrib [ 'description' ]);
2008-01-27 05:16:03 +00:00
}
2008-02-02 22:04:18 +00:00
break ;
//If uninstalling, remove all userclasses (active or inactive)
case 'uninstall' :
$txt .= " Removing userclass " . $attrib [ 'name' ] . " <br /> " ;
$this -> manage_userclass ( 'remove' , $attrib [ 'name' ], $attrib [ 'description' ]);
break ;
2008-01-27 05:16:03 +00:00
}
}
}
2008-02-02 22:04:18 +00:00
//If and commentIDs are configured, we need to remove all comments on uninstall
if ( $function == 'uninstall' && isset ( $plug_vars [ 'commentID' ]))
{
$commentArray = ( is_array ( $plug_vars [ 'commentID' ]) ? $plug_vars [ 'commentID' ] : array ( $plug_vars [ 'commentID' ]));
$txt .= " Removing all plugin comments: ( " . implode ( ', ' , $commentArray ) . " )<br /> " ;
$this -> manage_comments ( 'remove' , $commentArray );
}
2008-02-01 14:11:27 +00:00
2008-02-02 22:04:18 +00:00
$this -> manage_search ( $function , $plug_vars [ 'folder' ]);
$this -> manage_notify ( $function , $plug_vars [ 'folder' ]);
2008-02-01 18:09:02 +00:00
2008-02-02 00:48:58 +00:00
// Let's call any custom post functions defined in <management> section
2008-02-02 22:04:18 +00:00
$txt .= $this -> execute_function ( $path , $function , 'post' );
2008-01-28 02:49:50 +00:00
2008-02-02 03:23:47 +00:00
2008-02-17 03:42:33 +00:00
$eplug_addons = $this -> getAddons ( $plug [ 'plugin_path' ]);
2008-02-08 20:05:43 +00:00
if ( $function == 'install' || $function == 'upgrade' )
2008-01-28 02:49:50 +00:00
{
$sql -> db_Update ( 'plugin' , " plugin_installflag = 1, plugin_addons = ' { $eplug_addons } ', plugin_version = ' { $plug_vars [ 'version' ] } ' WHERE plugin_id = " . $id );
$pref [ 'plug_installed' ][ $plug [ 'plugin_path' ]] = $plug_vars [ 'version' ];
save_prefs ();
}
2008-02-17 03:42:33 +00:00
if ( $function == 'uninstall' )
{
$sql -> db_Update ( 'plugin' , " plugin_installflag = 0, plugin_addons = ' { $eplug_addons } ', plugin_version = ' { $plug_vars [ 'version' ] } ' WHERE plugin_id = " . $id );
}
2008-01-28 02:49:50 +00:00
if ( $function == 'install' )
{
2008-02-02 22:04:18 +00:00
$txt .= LAN_INSTALL_SUCCESSFUL . " <br /> " ;
2008-01-28 02:49:50 +00:00
if ( isset ( $plug_vars [ 'installDone' ]))
{
2008-02-02 22:04:18 +00:00
$txt .= $plug_vars [ 'installDone' ];
2008-01-28 02:49:50 +00:00
}
}
2008-02-02 22:04:18 +00:00
return $txt ;
2008-02-02 00:48:58 +00:00
}
2006-12-02 04:36:16 +00:00
2008-02-02 00:48:58 +00:00
function execute_function ( $path = '' , $what = '' , $when = '' )
{
if ( $what == '' || $when == '' ) { return true ; }
if ( ! isset ( $this -> plug_vars [ 'management' ][ $what ])) { return true ; }
$vars = $this -> plug_vars [ 'management' ][ $what ];
if ( ! is_array ( $vars )) { $vars = array ( $vars ); }
foreach ( $vars as $var )
{
$attrib = $var [ '@attributes' ];
if ( isset ( $attrib [ 'when' ]) && $attrib [ 'when' ] == $when )
{
if ( is_readable ( $path . $attrib [ 'file' ]))
{
include_once ( $path . $attrib [ 'file' ]);
if ( $attrib [ 'type' ] == 'fileFunction' )
{
2008-02-02 03:23:47 +00:00
$result = call_user_func ( $attrib [ 'function' ], $this );
2008-02-02 00:48:58 +00:00
return $result ;
}
elseif ( $attrib [ 'type' ] == 'classFunction' )
{
$_tmp = new $attrib [ 'class' ];
2008-02-02 03:23:47 +00:00
$result = call_user_func ( array ( $_tmp , $attrib [ 'function' ]), $this );
2008-02-02 00:48:58 +00:00
return $result ;
}
}
}
}
2008-02-01 14:11:27 +00:00
}
2008-01-26 05:19:59 +00:00
2008-02-01 18:09:02 +00:00
function parse_prefs ( $pref_array )
{
$ret = array ();
if ( ! isset ( $pref_array [ 0 ]))
{
$pref_array = array ( $pref_array );
}
foreach ( $pref_array as $k => $p )
{
$attrib = $p [ '@attributes' ];
if ( isset ( $attrib [ 'type' ]) && $attrib [ 'type' ] == 'array' )
{
$name = $attrib [ 'name' ];
$tmp = $this -> parse_prefs ( $pref_array [ $k ][ 'key' ]);
$ret [ 'all' ][ $name ] = $tmp [ 'all' ];
$ret [ 'active' ][ $name ] = $tmp [ 'active' ];
$ret [ 'inactive' ][ $name ] = $tmp [ 'inactive' ];
}
else
{
$ret [ 'all' ][ $attrib [ 'name' ]] = $attrib [ 'value' ];
if ( ! isset ( $attrib [ 'active' ]) || $attrib [ 'active' ] == 'true' )
{
$ret [ 'active' ][ $attrib [ 'name' ]] = $attrib [ 'value' ];
}
else
{
$ret [ 'inactive' ][ $attrib [ 'name' ]] = $attrib [ 'value' ];
}
}
}
return $ret ;
}
2008-01-28 02:49:50 +00:00
function install_plugin_php ( $id )
2008-01-26 05:19:59 +00:00
{
2008-01-27 01:34:59 +00:00
global $sql ;
2008-02-01 14:11:27 +00:00
2008-01-28 02:49:50 +00:00
$plug = $this -> getinfo ( $id );
2008-02-01 14:11:27 +00:00
$_path = e_PLUGIN . $plug [ 'plugin_path' ] . '/' ;
2008-01-28 02:49:50 +00:00
2007-05-07 13:38:34 +00:00
$plug [ 'plug_action' ] = 'install' ;
2006-12-02 04:36:16 +00:00
2008-02-01 14:11:27 +00:00
// $plug_vars = $this->parse_plugin_php($path);
2008-01-26 05:19:59 +00:00
include_once ( $path . 'plugin.php' );
$func = $eplug_folder . '_install' ;
if ( function_exists ( $func ))
2008-01-20 15:01:19 +00:00
{
2008-01-26 05:19:59 +00:00
$text .= call_user_func ( $func );
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( is_array ( $eplug_tables ))
{
$result = $this -> manage_tables ( 'add' , $eplug_tables );
if ( $result === TRUE )
2008-01-20 15:01:19 +00:00
{
2008-01-26 05:19:59 +00:00
$text .= EPL_ADLAN_19 . '<br />' ;
//success
2006-12-02 04:36:16 +00:00
}
2008-01-26 05:19:59 +00:00
else
2008-01-20 15:01:19 +00:00
{
2008-01-26 05:19:59 +00:00
$text .= EPL_ADLAN_18 . '<br />' ;
//fail
2006-12-02 04:36:16 +00:00
}
2008-01-26 05:19:59 +00:00
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( is_array ( $eplug_prefs ))
{
$this -> manage_prefs ( 'add' , $eplug_prefs );
$text .= EPL_ADLAN_8 . '<br />' ;
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( is_array ( $eplug_array_pref ))
{
foreach ( $eplug_array_pref as $key => $val )
2008-01-20 15:01:19 +00:00
{
2008-01-26 05:19:59 +00:00
$this -> manage_plugin_prefs ( 'add' , $key , $eplug_folder , $val );
2006-12-02 04:36:16 +00:00
}
2008-01-26 05:19:59 +00:00
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( is_array ( $eplug_sc ))
{
$this -> manage_plugin_prefs ( 'add' , 'plug_sc' , $eplug_folder , $eplug_sc );
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( is_array ( $eplug_bb ))
{
$this -> manage_plugin_prefs ( 'add' , 'plug_bb' , $eplug_folder , $eplug_bb );
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( $eplug_link === TRUE && $eplug_link_url != '' && $eplug_link_name != '' )
{
2008-01-27 01:34:59 +00:00
$linkperm = ( isset ( $eplug_link_perms ) ? $eplug_link_perms : e_UC_PUBLIC );
$this -> manage_link ( 'add' , $eplug_link_url , $eplug_link_name , $linkperm );
2008-01-26 05:19:59 +00:00
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( $eplug_userclass )
{
$this -> manage_userclass ( 'add' , $eplug_userclass , $eplug_userclass_description );
}
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
$this -> manage_search ( 'add' , $eplug_folder );
$this -> manage_notify ( 'add' , $eplug_folder );
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
$eplug_addons = $this -> getAddons ( $eplug_folder );
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
$sql -> db_Update ( 'plugin' , " plugin_installflag = 1, plugin_addons = ' { $eplug_addons } ' WHERE plugin_id = " . ( int ) $id );
$pref [ 'plug_installed' ][ $plugin_path ] = $plug [ 'plugin_version' ];
save_prefs ();
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
if ( $rssmess )
{
$text .= $rssmess ;
}
$text .= ( isset ( $eplug_done ) ? " <br /> { $eplug_done } " : " <br /> " . LAN_INSTALL_SUCCESSFUL );
2006-12-02 04:36:16 +00:00
2008-01-26 05:19:59 +00:00
return $text ;
}
2008-01-20 15:01:19 +00:00
2008-01-26 05:19:59 +00:00
/**
* Installs a plugin by ID
*
* @ param int $id
*/
function install_plugin ( $id )
{
global $sql , $ns , $sysprefs , $mySQLprefix , $tp ;
// install plugin ...
2008-01-28 02:49:50 +00:00
$id = ( int ) $id ;
2008-01-26 05:19:59 +00:00
$plug = $this -> getinfo ( $id );
$plug [ 'plug_action' ] = 'install' ;
2008-02-01 14:11:27 +00:00
2008-01-26 05:19:59 +00:00
if ( $plug [ 'plugin_installflag' ] == FALSE )
{
$_path = e_PLUGIN . $plug [ 'plugin_path' ] . '/' ;
2008-01-27 01:34:59 +00:00
if ( file_exists ( $_path . 'plugin.xml' ))
2008-01-26 05:19:59 +00:00
{
2008-02-01 14:11:27 +00:00
$text = $this -> manage_plugin_xml ( $id , 'install' );
2008-01-26 05:19:59 +00:00
}
2008-01-27 01:34:59 +00:00
elseif ( file_exists ( $_path . 'plugin.php' ))
2008-01-26 05:19:59 +00:00
{
2008-01-28 02:49:50 +00:00
$text = $this -> install_plugin_php ( $id );
2008-01-20 15:01:19 +00:00
}
}
else
{
2006-12-02 04:36:16 +00:00
$text = EPL_ADLAN_21 ;
}
2008-02-02 22:04:18 +00:00
return $text ;
2006-12-02 04:36:16 +00:00
}
2008-01-20 15:01:19 +00:00
function save_addon_prefs ()
{ // scan the plugin table and create path-array-prefs for each addon.
2006-12-02 04:36:16 +00:00
global $sql , $pref ;
2008-01-20 15:01:19 +00:00
// $query = "SELECT * FROM #plugin WHERE plugin_installflag = 1 AND plugin_addons !='' ORDER BY plugin_path ASC";
$query = " SELECT * FROM #plugin WHERE plugin_addons !='' ORDER BY plugin_path ASC " ;
2006-12-02 04:36:16 +00:00
2008-01-20 15:01:19 +00:00
// clear all addon prefs before re-creation.
2006-12-02 04:36:16 +00:00
unset ( $pref [ 'shortcode_list' ], $pref [ 'bbcode_list' ], $pref [ 'e_sql_list' ]);
2008-01-20 15:01:19 +00:00
foreach ( $this -> plugin_addons as $plg )
2006-12-02 04:36:16 +00:00
{
2008-01-20 15:01:19 +00:00
unset ( $pref [ $plg . " _list " ]);
2006-12-02 04:36:16 +00:00
}
if ( $sql -> db_Select_gen ( $query ))
{
while ( $row = $sql -> db_Fetch ())
{
2008-01-20 15:01:19 +00:00
$is_installed = ( $row [ 'plugin_installflag' ] == 1 );
$tmp = explode ( " , " , $row [ 'plugin_addons' ]);
2006-12-02 04:36:16 +00:00
$path = $row [ 'plugin_path' ];
2008-01-20 15:01:19 +00:00
if ( $is_installed )
2006-12-02 04:36:16 +00:00
{
2008-02-01 18:09:02 +00:00
foreach ( $tmp as $val )
2006-12-02 04:36:16 +00:00
{
2008-02-01 18:09:02 +00:00
if ( strpos ( $val , 'e_' ) === 0 )
2008-01-20 15:01:19 +00:00
{
$pref [ $val . " _list " ][ $path ] = $path ;
}
2006-12-02 04:36:16 +00:00
}
}
2008-01-20 15:01:19 +00:00
// search for .bb and .sc files.
2006-12-02 04:36:16 +00:00
$sc_array = array ();
$bb_array = array ();
$sql_array = array ();
2008-01-20 15:01:19 +00:00
foreach ( $tmp as $adds )
2006-12-02 04:36:16 +00:00
{
2008-01-20 15:01:19 +00:00
if ( substr ( $adds , - 3 ) == " .sc " )
2006-12-02 04:36:16 +00:00
{
$sc_name = substr ( $adds , 0 , - 3 ); // remove the .sc
2007-07-18 20:46:42 +00:00
if ( $is_installed )
{
2008-01-20 15:01:19 +00:00
$sc_array [ $sc_name ] = " 0 " ; // default userclass = e_UC_PUBLIC
2007-07-18 20:46:42 +00:00
}
else
{
2008-01-20 15:01:19 +00:00
$sc_array [ $sc_name ] = e_UC_NOBODY ; // register shortcode, but disable it
2007-07-18 20:46:42 +00:00
}
2006-12-02 04:36:16 +00:00
}
2007-07-18 20:46:42 +00:00
if ( $is_installed && ( substr ( $adds , - 3 ) == " .bb " ))
2006-12-02 04:36:16 +00:00
{
$bb_name = substr ( $adds , 0 , - 3 ); // remove the .bb
2008-01-20 15:01:19 +00:00
$bb_array [ $bb_name ] = " 0 " ; // default userclass.
2006-12-02 04:36:16 +00:00
}
2007-07-18 20:46:42 +00:00
if ( $is_installed && ( substr ( $adds , - 4 ) == " _sql " ))
2006-12-02 04:36:16 +00:00
{
$pref [ 'e_sql_list' ][ $path ] = $adds ;
}
}
2008-01-20 15:01:19 +00:00
// Build Bbcode list (will be empty if plugin not installed)
if ( count ( $bb_array ) > 0 )
2006-12-02 04:36:16 +00:00
{
ksort ( $bb_array );
2008-01-20 15:01:19 +00:00
$pref [ 'bbcode_list' ][ $path ] = $bb_array ;
2006-12-02 04:36:16 +00:00
}
else
{
2008-01-20 15:01:19 +00:00
if ( isset ( $pref [ 'bbcode_list' ][ $path ])) unset ( $pref [ 'bbcode_list' ][ $path ]);
2006-12-02 04:36:16 +00:00
}
2008-01-20 15:01:19 +00:00
// Build shortcode list - do if uninstalled as well
2007-05-07 13:38:34 +00:00
if ( count ( $sc_array ) > 0 )
{
2008-01-20 15:01:19 +00:00
ksort ( $sc_array );
$pref [ 'shortcode_list' ][ $path ] = $sc_array ;
}
2006-12-02 04:36:16 +00:00
else
{
2008-01-20 15:01:19 +00:00
if ( isset ( $pref [ 'shortcode_list' ][ $path ])) unset ( $pref [ 'shortcode_list' ][ $path ]);
2006-12-02 04:36:16 +00:00
}
}
}
2008-01-20 15:01:19 +00:00
save_prefs ();
2006-12-02 04:36:16 +00:00
return ;
}
2008-01-20 15:01:19 +00:00
// return a list of available plugin addons for the specified plugin. e_xxx etc.
2007-02-11 20:16:25 +00:00
// $debug = TRUE - prints diagnostics
// $debug = 'check' - checks each file found for php tags - prints 'pass' or 'fail'
2008-01-20 15:01:19 +00:00
function getAddons ( $plugin_path , $debug = FALSE )
2007-02-11 20:16:25 +00:00
{
2008-01-20 15:01:19 +00:00
global $fl ;
2006-12-02 04:36:16 +00:00
if ( ! is_object ( $fl )){
require_once ( e_HANDLER . 'file_class.php' );
2008-01-20 15:01:19 +00:00
$fl = new e_file ;
}
$p_addons = array ();
$addonlist = $fl -> get_files ( e_PLUGIN . $plugin_path , " ^e_.* \ .php $ " , " standard " , 1 );
// print_a($addonlist);
foreach ( $addonlist as $f )
{
if ( preg_match ( " #^(e_.*) \ .php $ # " , $f [ 'fname' ], $matches ))
{
$addon = $matches [ 1 ];
if ( is_readable ( e_PLUGIN . $plugin_path . " / " . $f [ 'fname' ]))
{
if ( $debug === 'check' )
{
$passfail = '' ;
$file_text = file_get_contents ( e_PLUGIN . $plugin_path . " / " . $f [ 'fname' ]);
if (( substr ( $file_text , 0 , 5 ) != '<' . '?php' ) || ( substr ( $file_text , - 2 , 2 ) != '?>' ))
{
$passfail = '<b>fail</b>' ;
}
else
{
$passfail = 'pass' ;
}
echo $plugin_path . " / " . $addon . " .php - " . $passfail . " <br /> " ;
}
$p_addons [] = $addon ;
}
}
2006-12-02 04:36:16 +00:00
}
// Grab List of Shortcodes & BBcodes
$shortcodeList = $fl -> get_files ( e_PLUGIN . $plugin_path , " .sc $ " , " standard " , 1 );
$bbcodeList = $fl -> get_files ( e_PLUGIN . $plugin_path , " .bb $ " , " standard " , 1 );
2008-01-20 15:01:19 +00:00
$sqlList = $fl -> get_files ( e_PLUGIN . $plugin_path , " _sql.php $ " , " standard " , 1 );
2006-12-02 04:36:16 +00:00
// Search Shortcodes
foreach ( $shortcodeList as $sc )
{
if ( is_readable ( e_PLUGIN . $plugin_path . " / " . $sc [ 'fname' ]))
{
$p_addons [] = $sc [ 'fname' ];
}
}
2008-01-20 15:01:19 +00:00
// Search Bbcodes.
foreach ( $bbcodeList as $bb )
2006-12-02 04:36:16 +00:00
{
if ( is_readable ( e_PLUGIN . $plugin_path . " / " . $bb [ 'fname' ]))
{
$p_addons [] = $bb [ 'fname' ];
}
}
2008-01-20 15:01:19 +00:00
// Search _sql files.
foreach ( $sqlList as $esql )
2006-12-02 04:36:16 +00:00
{
if ( is_readable ( e_PLUGIN . $plugin_path . " / " . $esql [ 'fname' ]))
{
$p_addons [] = str_replace ( " .php " , " " , $esql [ 'fname' ]);
}
}
2008-01-20 15:01:19 +00:00
if ( $debug == true )
2006-12-02 04:36:16 +00:00
{
echo $plugin_path . " = " . implode ( " , " , $p_addons ) . " <br /> " ;
}
return implode ( " , " , $p_addons );
}
2007-02-14 21:17:42 +00:00
function checkAddon ( $plugin_path , $e_xxx )
{ // Return 0 = OK, 1 = Fail, 2 = inaccessible
2008-01-20 15:01:19 +00:00
if ( is_readable ( e_PLUGIN . $plugin_path . " / " . $e_xxx . " .php " ))
{
$file_text = file_get_contents ( e_PLUGIN . $plugin_path . " / " . $e_xxx . " .php " );
if (( substr ( $file_text , 0 , 5 ) != '<' . '?php' ) || ( substr ( $file_text , - 2 , 2 ) != '?>' )) return 1 ;
return 0 ;
2007-02-14 21:17:42 +00:00
}
2008-01-20 15:01:19 +00:00
return 2 ;
2007-02-14 21:17:42 +00:00
}
2008-01-26 05:19:59 +00:00
2008-01-26 04:47:27 +00:00
2008-01-28 02:49:50 +00:00
function parse_plugin ( $path , $force = false )
2008-01-26 04:47:27 +00:00
{
2008-01-28 02:49:50 +00:00
if ( isset ( $this -> parsed_plugin [ $path ]) && $force != true )
{
$this -> plug_vars = $this -> parsed_plugin [ $path ];
return true ;
}
2008-01-27 01:34:59 +00:00
if ( file_exists ( $path . 'plugin.xml' ))
2008-01-26 04:47:27 +00:00
{
2008-01-28 02:49:50 +00:00
$ret = $this -> parse_plugin_xml ( $path );
2008-01-26 04:47:27 +00:00
}
2008-01-27 01:34:59 +00:00
elseif ( file_exists ( $path . 'plugin.php' ))
2008-01-26 04:47:27 +00:00
{
2008-01-28 02:49:50 +00:00
$ret = $this -> parse_plugin_php ( $path );
2008-01-26 04:47:27 +00:00
}
2008-01-28 02:49:50 +00:00
if ( $ret == true )
{
$this -> parsed_plugin [ $path ] = $this -> plug_vars ;
}
return $ret ;
2008-01-26 04:47:27 +00:00
}
function parse_plugin_php ( $path )
{
include ( $path . 'plugin.php' );
$ret = array ();
2008-02-02 22:04:18 +00:00
$ret [ 'installRequired' ] = ( $eplug_conffile || is_array ( $eplug_table_names ) || is_array ( $eplug_prefs ) || is_array ( $eplug_sc ) || is_array ( $eplug_bb ) || $eplug_module || $eplug_userclass || $eplug_status || $eplug_latest );
2008-01-26 04:47:27 +00:00
$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 );
2008-01-26 05:19:59 +00:00
2008-01-26 04:47:27 +00:00
// Set this key so we know the vars came from a plugin.php file
$ret [ 'plugin_php' ] = true ;
2008-01-27 01:34:59 +00:00
$this -> plug_vars = $ret ;
return true ;
2008-01-26 04:47:27 +00:00
}
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 ;
2008-02-01 14:11:27 +00:00
$this -> plug_vars = $xml -> loadXMLfile ( $path . 'plugin.xml' , true , true );
2008-02-01 18:09:02 +00:00
// print_a($this->plug_vars);
2008-02-01 14:11:27 +00:00
// $xml->loadXMLfile($path.'plugin.xml', true, true);
// $xml->xmlFileContents = $tp->replaceConstants($xml->xmlFileContents, '', true);
// $this->plug_vars = $xml->parseXml();
2008-01-27 01:34:59 +00:00
return true ;
2008-01-26 04:47:27 +00:00
}
2006-12-02 04:36:16 +00:00
}
2008-01-27 01:34:59 +00:00
?>