diff --git a/include/admin/overview.inc.php b/include/admin/overview.inc.php
index a7524d1f..9a29ba3d 100644
--- a/include/admin/overview.inc.php
+++ b/include/admin/overview.inc.php
@@ -56,6 +56,11 @@ if (is_array($output)) {
} else {
$data['updateButton'] = $output;
}
+if (serendipity_plugin_api::hook_event('backend_plugins_upgradecount', $output)) {
+ $data['pluginUpdates'] = $output;
+} else {
+ $data['pluginUpdates'] = '';
+}
$cjoin = ($serendipity['serendipityUserlevel'] == USERLEVEL_EDITOR) ? "
LEFT JOIN {$serendipity['dbPrefix']}authors a ON (e.authorid = a.authorid)
diff --git a/plugins/serendipity_event_spartacus/ChangeLog b/plugins/serendipity_event_spartacus/ChangeLog
index 9db414d9..f36c3e8d 100644
--- a/plugins/serendipity_event_spartacus/ChangeLog
+++ b/plugins/serendipity_event_spartacus/ChangeLog
@@ -1,3 +1,11 @@
+2.38:
+-------
+ * Add function to count upgradeable plugins.
+ * Add upgrade notifier to plugin upgrade button.
+ * Add 'backend_plugins_upgradecount' hook and
+ language constants for a dashboard upgrade
+ notification.
+
2.37.6:
-------
* Fix wrong caching of plugin lists regardless of type.
diff --git a/plugins/serendipity_event_spartacus/UTF-8/lang_de.inc.php b/plugins/serendipity_event_spartacus/UTF-8/lang_de.inc.php
index 44b86b08..f84c5c68 100644
--- a/plugins/serendipity_event_spartacus/UTF-8/lang_de.inc.php
+++ b/plugins/serendipity_event_spartacus/UTF-8/lang_de.inc.php
@@ -28,6 +28,9 @@
@define('PLUGIN_EVENT_SPARTACUS_CHECK_EVENT', 'Updates (Ereignis-Plugins)');
@define('PLUGIN_EVENT_SPARTACUS_CHECK_HINT', 'Sie können mehrere Plugins auf einmal installieren indem sie diesen Link in einem neuen Tab öffnen (mittlerer Mausbutton)');
+@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATE', 'Ein Plugin kann aktualisiert werden.');
+@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATES', '%u Plugins können aktualisiert werden.');
+
@define('PLUGIN_EVENT_SPARTACUS_REPOSITORY_ERROR', '
(Der Mirror-Speicherort antwortet mit Fehler %s.)
');
@define('PLUGIN_EVENT_SPARTACUS_HEALTHCHECK', '
Die Daten des Spartacus-Speicherorts konnte nicht empfangen werden. Prüfe Verfügbarkeit der Quelle...
'); @define('PLUGIN_EVENT_SPARTACUS_HEALTHERROR', 'Die Prüfung der Verfügbarkeit einer Spartacus-Quelle konnte nicht durchgeführt werden (HTTP-Code %s). Bitte probieren Sie es später wieder.
'); diff --git a/plugins/serendipity_event_spartacus/lang_de.inc.php b/plugins/serendipity_event_spartacus/lang_de.inc.php index e8c18dda..ede62153 100644 --- a/plugins/serendipity_event_spartacus/lang_de.inc.php +++ b/plugins/serendipity_event_spartacus/lang_de.inc.php @@ -28,6 +28,9 @@ @define('PLUGIN_EVENT_SPARTACUS_CHECK_EVENT', 'Updates (Ereignis-Plugins)'); @define('PLUGIN_EVENT_SPARTACUS_CHECK_HINT', 'Sie können mehrere Plugins auf einmal installieren indem sie diesen Link in einem neuen Tab öffnen (mittlerer Mausbutton)'); +@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATE', 'Ein Plugin kann aktualisiert werden.'); +@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATES', '%u Plugins können aktualisiert werden.'); + @define('PLUGIN_EVENT_SPARTACUS_REPOSITORY_ERROR', 'Die Daten des Spartacus-Speicherorts konnte nicht empfangen werden. Prüfe Verfügbarkeit der Quelle...
'); @define('PLUGIN_EVENT_SPARTACUS_HEALTHERROR', 'Die Prüfung der Verfügbarkeit einer Spartacus-Quelle konnte nicht durchgeführt werden (HTTP-Code %s). Bitte probieren Sie es später wieder.
'); diff --git a/plugins/serendipity_event_spartacus/lang_en.inc.php b/plugins/serendipity_event_spartacus/lang_en.inc.php index fadd4873..edcf2501 100644 --- a/plugins/serendipity_event_spartacus/lang_en.inc.php +++ b/plugins/serendipity_event_spartacus/lang_en.inc.php @@ -35,6 +35,9 @@ @define('PLUGIN_EVENT_SPARTACUS_CHECK_EVENT', 'Update event plugins'); @define('PLUGIN_EVENT_SPARTACUS_CHECK_HINT', 'You can upgrade multiple plugins at once by opening the update-link in a new tab (middle mouse button)'); +@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATE', 'A plugin can be updated.'); +@define('PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATES', '%u plugins can be updated.'); + @define('PLUGIN_EVENT_SPARTACUS_TRYCURL', 'Trying to use cURL library as fallback...'); @define('PLUGIN_EVENT_SPARTACUS_CURLFAIL', 'cURL library returned a failure, too.'); @define('PLUGIN_EVENT_SPARTACUS_HEALTFIREWALLED', 'It was not possible to download the required files from the Spartacus repository, but the health of our repository was retrievable. This means your provider uses a content-based firewall and does not allow to fetch PHP code over the web by using mod_security or other reverse proxies. You either need to ask your provider to turn this off, or you cannot use the Spartacus plugin and need to download files manually.'); diff --git a/plugins/serendipity_event_spartacus/serendipity_event_spartacus.php b/plugins/serendipity_event_spartacus/serendipity_event_spartacus.php index ae3b14d8..f7c55806 100644 --- a/plugins/serendipity_event_spartacus/serendipity_event_spartacus.php +++ b/plugins/serendipity_event_spartacus/serendipity_event_spartacus.php @@ -27,7 +27,7 @@ class serendipity_event_spartacus extends serendipity_event $propbag->add('description', PLUGIN_EVENT_SPARTACUS_DESC); $propbag->add('stackable', false); $propbag->add('author', 'Garvin Hicking'); - $propbag->add('version', '2.37.6'); + $propbag->add('version', '2.38'); $propbag->add('requirements', array( 'serendipity' => '1.6', )); @@ -40,6 +40,8 @@ class serendipity_event_spartacus extends serendipity_event 'backend_pluginlisting_header' => true, + 'backend_plugins_upgradecount' => true, + 'external_plugin' => true, 'backend_directory_create' => true, @@ -1132,6 +1134,58 @@ class serendipity_event_spartacus extends serendipity_event } } + function count_plugin_upgrades() + { + // get a list of all installable sidebar and event plugins + $foreignPlugins = $sidebarPlugins = $eventPlugins = array(); + $sidebarPlugins = $this->buildList($this->fetchOnline('sidebar'), 'sidebar'); + $eventPlugins = $this->buildList($this->fetchOnline('event'), 'event'); + $foreignPlugins = array_merge($sidebarPlugins, $eventPlugins); + + // get currently installed plugin versions + $currentVersions = []; + $plugins = serendipity_plugin_api::get_installed_plugins(); + $classes = serendipity_plugin_api::enum_plugins(); + foreach ($classes as $class_data) { + $plugin =& serendipity_plugin_api::load_plugin($class_data['name']); + if (is_object($plugin)) { + // Object is returned when a plugin could not be cached. + $bag = new serendipity_property_bag; + $plugin->introspect($bag); + $pluginname = get_object_vars($plugin)['act_pluginPath']; + $version = $bag->get('version'); + } elseif (is_array($plugin)) { + // Array is returned if a plugin could be fetched from info cache + $pluginname = $plugin['class_name']; + $version = $plugin['version']; + } else { + # + } + $currentVersions[$pluginname] = $version; + } + + // count upgradable plugins + $upgradeCount = 0; + foreach ($foreignPlugins as $foreignPlugin) { + // plugin installed? + if (isset($currentVersions[$foreignPlugin['class_name']])) { + $currentVersion = $currentVersions[$foreignPlugin['class_name']]; + // get current version on Spartacus + if (isset($foreignPlugin['upgrade_version']) && $foreignPlugin['upgrade_version']) { + $upgradeVersion = $foreignPlugin['upgrade_version']; + } else { + $upgradeVersion = $foreignPlugin['version']; + } + // compare versions and increase counter + if (version_compare($currentVersion, $upgradeVersion, '<')) { + $upgradeCount++; + } + } + } + return $upgradeCount++; + } + + function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; @@ -1269,14 +1323,34 @@ class serendipity_event_spartacus extends serendipity_event if (version_compare($serendipity['version'], '2.1-alpha3', '<')) { echo ' '. PLUGIN_EVENT_SPARTACUS_CHECK_SIDEBAR .''; echo ' '. PLUGIN_EVENT_SPARTACUS_CHECK_EVENT .' '; - } else { - echo ' '. PLUGIN_EVENT_SPARTACUS_CHECK .''; + $upgradeCount = $this->count_plugin_upgrades(); + $upgradeBadge = ''; + if ($upgradeCount > 0) { + $upgradeBadge = sprintf(' (%u)', $upgradeCount); + } + echo ' '. PLUGIN_EVENT_SPARTACUS_CHECK . $upgradeBadge .''; } echo ''; } break; + case 'backend_plugins_upgradecount': + if (serendipity_db_bool($this->get_config('enable_plugins'))) { + $upgradeCount = $this->count_plugin_upgrades(); + if ($upgradeCount > 0) { + if ($upgradeCount > 1) { + $eventData = sprintf(PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATES, $upgradeCount); + } else { + $eventData = PLUGIN_EVENT_SPARTACUS_DASHBOARD_UPDATE; + } + $eventData .= ' '. PLUGIN_EVENT_SPARTACUS_CHECK .''; + return true; + } + } + return false; + break; + case 'backend_templates_fetchlist': if (serendipity_db_bool($this->get_config('enable_themes'))) { $eventData = $this->buildTemplateList($this->fetchOnline('template', true), 'template'); diff --git a/templates/2k11/admin/overview.inc.tpl b/templates/2k11/admin/overview.inc.tpl index 292a274e..8c89b979 100644 --- a/templates/2k11/admin/overview.inc.tpl +++ b/templates/2k11/admin/overview.inc.tpl @@ -37,6 +37,15 @@ {/if} {/if} + {if $pluginUpdates} +