diff --git a/e107_admin/admin_log.php b/e107_admin/admin_log.php
index d7d5358d5..9e491dd38 100644
--- a/e107_admin/admin_log.php
+++ b/e107_admin/admin_log.php
@@ -57,8 +57,8 @@ if(is_array($pref['lan_log_list'])) //... and for any plugins which support it
$file = str_replace('--LAN--', e_LANGUAGE, $file);
// echo "orig = ".$file." ";
- e107::lan($path,'log',true);
- //include_lan(e_PLUGIN.$path.'/'.$file);
+ //e107::lan($path,'log',true);
+ include_lan(e_PLUGIN.$path.'/languages/'.$file);
}
}
diff --git a/e107_admin/db.php b/e107_admin/db.php
index 57aa83492..e0c3c9838 100644
--- a/e107_admin/db.php
+++ b/e107_admin/db.php
@@ -196,7 +196,7 @@ class system_tools
if(isset($_POST['plugin_scan']) || e_QUERY == "plugin" || isset($_POST['delplug']) || $_GET['mode']=='plugin_scan')
{
- $this->plugin_viewscan();
+ $this->plugin_viewscan('refresh');
}
if(vartrue($_POST['perform_utf8_convert']))
@@ -843,7 +843,7 @@ class system_tools
* Plugin Folder Scanner
* @return none
*/
- private function plugin_viewscan()
+ private function plugin_viewscan($mode = 'update')
{
$error_messages = array(0 => DBLAN_31, 1 => DBLAN_32, 2 => DBLAN_33, 3 => DBLAN_34);
$error_image = array("integrity_pass.png", "integrity_fail.png", "warning.png", "blank.png");
@@ -858,8 +858,8 @@ class system_tools
require_once (e_HANDLER."plugin_class.php");
$ep = new e107plugin();
- $ep->update_plugins_table(); // scan for e_xxx changes and save to plugin table.
- $ep->save_addon_prefs(); // generate global e_xxx_list prefs from plugin table.
+ $ep->update_plugins_table($mode); // scan for e_xxx changes and save to plugin table.
+ $ep->save_addon_prefs($mode); // generate global e_xxx_list prefs from plugin table.
/* we all are awaiting for PHP5 only support - method chaining...
$mes->add(DBLAN_22.' - '.DBLAN_23, E_MESSAGE_SUCCESS)
diff --git a/e107_admin/plugin.php b/e107_admin/plugin.php
index 858af48b1..3ba183c87 100644
--- a/e107_admin/plugin.php
+++ b/e107_admin/plugin.php
@@ -66,7 +66,7 @@ if(e_AJAX_REQUEST && isset($_GET['src'])) // Ajax
$dir = basename($unarc[0]['filename']);
$plugPath = preg_replace("/[^a-z0-9-\._]/", "-", strtolower($dir));
- e107::getSingleton('e107plugin')->update_plugins_table();
+ e107::getSingleton('e107plugin')->update_plugins_table('update');
e107::getDb()->db_Select_gen("SELECT plugin_id FROM #plugin WHERE plugin_path = '".$plugPath."' LIMIT 1");
$row = e107::getDb()->db_Fetch(MYSQL_ASSOC);
$status = e107::getSingleton('e107plugin')->install_plugin($row['plugin_id']);
@@ -528,7 +528,7 @@ class pluginManager{
$text .= '
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32;
}
- $plugin->save_addon_prefs();
+ $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);
@@ -651,7 +651,7 @@ class pluginManager{
}
else
{
- $plugin ->save_addon_prefs();
+ $plugin ->save_addon_prefs('update');
$admin_log->log_event('PLUGMAN_01', $this->id.':'.$eplug_folder, E_LOG_INFORMATIVE, '');
$this->show_message($text, E_MESSAGE_SUCCESS);
}
@@ -745,7 +745,7 @@ class pluginManager{
$emessage->add($text, E_MESSAGE_SUCCESS);
- $plugin->save_addon_prefs();
+ $plugin->save_addon_prefs('update');
}
@@ -773,7 +773,7 @@ class pluginManager{
function pluginCheck()
{
global $plugin;
- $plugin->update_plugins_table();
+ $plugin->update_plugins_table('update');
}
// ----------------------------------------------------------
// render plugin information ...
diff --git a/e107_admin/update_routines.php b/e107_admin/update_routines.php
index 131035e02..c0128d75c 100644
--- a/e107_admin/update_routines.php
+++ b/e107_admin/update_routines.php
@@ -1066,7 +1066,7 @@ function update_706_to_800($type='')
if ($just_check) return update_needed('Update plugin table');
require_once(e_HANDLER.'plugin_class.php');
$ep = new e107plugin;
- $ep -> update_plugins_table();
+ $ep -> update_plugins_table('update');
// $_pdateMessages[] = LAN_UPDATE_XX24;
// catch_error($sql);
}
@@ -1435,8 +1435,8 @@ function update_70x_to_706($type='')
// update new fields
require_once(e_HANDLER."plugin_class.php");
$ep = new e107plugin;
- $ep->update_plugins_table();
- $ep->save_addon_prefs();
+ $ep->update_plugins_table('update');
+ $ep->save_addon_prefs('update');
}
if (!isset($pref['displayname_maxlength']))
diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php
index 699df0527..d9ad3bd2d 100644
--- a/e107_handlers/plugin_class.php
+++ b/e107_handlers/plugin_class.php
@@ -211,10 +211,18 @@ class e107plugin
return count($needed) ? $needed : FALSE;
}
+
+
/**
* Check for new plugins, create entry in plugin table and remove deleted plugins
+ *
+ * @param string $mode = install|upgrade|refresh|uninstall - defines the intent of the call
+ *
+ * 'upgrade' and 'refresh' are very similar in intent, and often take the same actions:
+ * 'upgrade' signals a possible change to the installed list of plugins
+ * 'refresh' validates the stored data for existing plugins, recreating any that has gone missing
*/
- function update_plugins_table()
+ function update_plugins_table($mode = 'upgrade')
{
$sql = e107::getDb();
@@ -300,7 +308,10 @@ class e107plugin
$this->XmlLanguageFiles('upgrade');
}
-
+ if ($mode == 'refresh')
+ {
+ if ($this->XmlLanguageFileCheck('_log', 'lan_log_list', 'refresh', $pluginDBList[$plugin_path]['plugin_installflag'], $plugin_path)) $sp = TRUE;
+ }
// Check for missing plugin_category in plugin table.
if ($pluginDBList[$plugin_path]['plugin_category'] == '' || $pluginDBList[$plugin_path]['plugin_category'] != $plug_info['category'])
@@ -527,7 +538,7 @@ class e107plugin
}
/**
- * Field atributes ($field_attrib array) as they have to be defined in plugin.xml:
+ * Field attributes ($field_attrib array) as they have to be defined in plugin.xml:
* name - REQUIRED string
* text - (string|constant name) field label
* type - REQUIRED (constant name) see EUF_* constants in e107_user_extended class
@@ -545,6 +556,7 @@ class e107plugin
* @param string $field_name normalized field name (see self::ue_field_name())
* @param array $field_attrib
* @param string $field_source used for system user fields
+ *
* @return boolean success
*/
function manage_extended_field($action, $field_name, $field_attrib, $field_source = '')
@@ -882,7 +894,8 @@ class e107plugin
$pref[$k] = $v;
break;
- case 'update':
+ case 'update' :
+ case 'upgrade' :
case 'refresh':
// Only update if $pref doesn't exist
if (!isset($pref[$k]))
@@ -908,7 +921,8 @@ class e107plugin
switch ($action)
{
case 'add':
- case 'update':
+ case 'update' :
+ case 'upgrade' :
case 'refresh':
if (!in_array($v, $tmp))
$tmp[] = $v;
@@ -926,7 +940,8 @@ class e107plugin
case 'add':
$pref[$k][$path] = $v;
break;
- case 'update':
+ case 'update' :
+ case 'upgrade' :
case 'refresh':
if (!isset($pref[$k][$path]))
$pref[$k][$path] = $v;
@@ -1295,7 +1310,7 @@ class e107plugin
$canContinue = FALSE;
}
- // Load install longuage file and set lan_global pref.
+ // Load install language file and set lan_global pref.
$this->XmlLanguageFiles($function, $plug_vars['languageFiles'], 'pre'); // First of all, see if there's a language file specific to install
// Next most important, if installing or upgrading, check that any dependencies are met
@@ -1569,10 +1584,79 @@ class e107plugin
return $canContinue;
}
+
+
/**
- * Process XML Tag // DEPRECATED - using _install _log and _global
- * @param object $function
- * @param object $tag
+ * Look for a language file in the two acceptable places.
+ * If found, update the appropriate pref
+ *
+ * @param string $fileEnd - the suffix of the file name (e.g. '_global')
+ * @param string $prefName - the name of the pref to be updated
+ * @param string $when = install|upgrade|refresh|uninstall ('update' also supported as alias for 'upgrade')
+ * @param string $isInstalled - flag indicates whether plugin installed
+ * - if false, any preference is removed.
+ * - if TRUE, any preference is added
+ * - so set TRUE to add value to pref regardless
+ * @param string $plugin - name of plugin folder. If empty string, $this->plugFolder is used.
+ *
+ * @return boolean TRUE if pref changed
+ */
+ public function XmlLanguageFileCheck($fileEnd, $prefName, $when, $isInstalled, $plugin = '')
+ {
+ $core = e107::getConfig('core');
+
+ if (trim($plugin) == '') $plugin = $this->plugFolder;
+ if (!$isInstalled) $when = 'uninstall';
+
+ $updated = false;
+
+ $path_a = e_PLUGIN.$plugin.'/languages/English'.$fileEnd.'.php'; // always check for English so we have a fall-back
+ $path_b = e_PLUGIN.$plugin.'/languages/English/English'.$fileEnd.'.php';
+ $pathEntry = '';
+
+ if (file_exists($path_a))
+ {
+ $pathEntry = '--LAN--'.$fileEnd.'.php';
+ }
+ elseif (file_exists($path_b))
+ {
+ $pathEntry = '--LAN--/--LAN--'.$fileEnd.'.php';
+ }
+
+ $currentPref = $core->getPref($prefName.'/'.$plugin);
+ echo 'Path: '.$plugin.' Current: '.$currentPref.' New: '.$pathEntry.'
';
+ switch ($when)
+ {
+ case 'install':
+ case 'upgrade':
+ case 'update' :
+ case 'refresh':
+ if ($currentPref != $pathEntry)
+ {
+ e107::getMessage()->addDebug('Adding '.$plugin.' to '.$prefName);
+ $core->setPref($prefName.'/'.$plugin, $pathEntry);
+ $updated = true;
+ }
+ break;
+ case 'uninstall':
+ if ($currentPref)
+ {
+ e107::getMessage()->addDebug('Removing '.$plugin.' from '.$prefName);
+ $core->removePref($prefName.'/'.$plugin);
+ $updated = true;
+ }
+ break;
+ }
+ return $updated;
+ }
+
+
+
+ /**
+ * Process XML Tag // Tag is DEPRECATED - using _install _log and _global
+ * @param object $function - should $when have been used?
+ * @param object $tag (not used?)
+ * @param string $when = install|upgrade|refresh|uninstall
* @return none
*/
function XmlLanguageFiles($function, $tag='', $when = '')
@@ -2259,7 +2343,17 @@ class e107plugin
return $text;
}
- function save_addon_prefs() // scan the plugin table and create path-array-prefs for each addon.
+
+ /*
+ * scan the plugin table and create path-array-prefs for each addon.
+ *
+ * @param string $mode = install|upgrade|refresh|uninstall - defines the intent of the call
+ *
+ * 'upgrade' and 'refresh' are very similar in intent, and often take the same actions:
+ * 'upgrade' signals a possible change to the installed list of plugins - usually an upgrade
+ * 'refresh' validates the stored data for existing plugins, recreating any that has gone missing
+ */
+ function save_addon_prefs($mode = 'upgrade')
{
$sql = e107::getDb();
$core = e107::getConfig('core');
diff --git a/install_.php b/install_.php
index 8d3c580cd..5cb01289b 100644
--- a/install_.php
+++ b/install_.php
@@ -1326,7 +1326,7 @@ class e_install
//Create default plugin-table entries.
// e107::getConfig('core')->clearPrefCache();
- e107::getPlugin()->update_plugins_table();
+ e107::getPlugin()->update_plugins_table('update');
$this->logLine('Plugins table updated');
// Install Theme-required plugins
@@ -1345,7 +1345,7 @@ class e_install
}
}
- e107::getSingleton('e107plugin')->save_addon_prefs(); // save plugin addon pref-lists. eg. e_latest_list.
+ e107::getSingleton('e107plugin')->save_addon_prefs('update'); // save plugin addon pref-lists. eg. e_latest_list.
$this->logLine('Addon prefs saved');
$tm = e107::getSingleton('themeHandler');