diff --git a/qa-content/qa-admin.js b/qa-content/qa-admin.js
index 618fdccfe..4b94833aa 100644
--- a/qa-content/qa-admin.js
+++ b/qa-content/qa-admin.js
@@ -148,6 +148,13 @@ function qa_version_check(uri, version, elem, isCore)
);
}
+function qa_version_check_array(versionChecks)
+{
+ for (var i = 0; i < versionChecks.length; i++) {
+ qa_version_check(versionChecks[i].uri, versionChecks[i].version, versionChecks[i].elem, false)
+ }
+}
+
function qa_get_enabled_plugins_hashes()
{
var hashes = [];
diff --git a/qa-include/Q2A/Plugin/PluginManager.php b/qa-include/Q2A/Plugin/PluginManager.php
index ebf7ce21b..b440c9c62 100644
--- a/qa-include/Q2A/Plugin/PluginManager.php
+++ b/qa-include/Q2A/Plugin/PluginManager.php
@@ -25,6 +25,8 @@ class Q2A_Plugin_PluginManager
{
const PLUGIN_DELIMITER = ';';
const OPT_ENABLED_PLUGINS = 'enabled_plugins';
+ const OPT_LAST_UPDATE_CHECK = 'last_plugin_update_check';
+ const NUMBER_OF_DAYS_TO_CHECK_FOR_UPDATE = 14;
private $loadBeforeDbInit = array();
private $loadAfterDbInit = array();
@@ -180,4 +182,27 @@ public function cleanRemovedPlugins()
$this->setEnabledPluginsOption($finalEnabledPlugins);
}
+
+ /**
+ * @return bool
+ */
+ public function shouldCheckForUpdate()
+ {
+ $lastUpdateCheck = (int)qa_opt(self::OPT_LAST_UPDATE_CHECK);
+ $currentTime = (int)qa_opt('db_time');
+
+ return $currentTime - $lastUpdateCheck > self::NUMBER_OF_DAYS_TO_CHECK_FOR_UPDATE * 24 * 60 * 60;
+ }
+
+ /**
+ * @param int|null $time
+ */
+ public function performUpdateCheck($time = null)
+ {
+ if ($time === null) {
+ $time = time();
+ }
+
+ qa_opt(self::OPT_LAST_UPDATE_CHECK, $time);
+ }
}
diff --git a/qa-include/lang/qa-lang-admin.php b/qa-include/lang/qa-lang-admin.php
index d1ea83f4a..a8efe8092 100644
--- a/qa-include/lang/qa-lang-admin.php
+++ b/qa-include/lang/qa-lang-admin.php
@@ -273,6 +273,7 @@
'users_registered' => 'Registered users:',
'users_title' => 'Users',
'users_voted' => 'Users who voted:',
+ 'version_check' => 'Check for updates',
'version_get_x' => 'get ^',
'version_latest' => 'latest',
'version_latest_unknown' => 'latest unknown',
diff --git a/qa-include/pages/admin/admin-plugins.php b/qa-include/pages/admin/admin-plugins.php
index 6c6a44023..a63ead23f 100644
--- a/qa-include/pages/admin/admin-plugins.php
+++ b/qa-include/pages/admin/admin-plugins.php
@@ -62,7 +62,9 @@
$enabledPluginHashesArray = explode(';', $enabledPluginHashes);
$pluginDirectories = array_keys(array_intersect($pluginHashes, $enabledPluginHashesArray));
$pluginManager->setEnabledPlugins($pluginDirectories);
-
+ qa_redirect('admin/plugins');
+ } else if (qa_clicked('doversioncheck')) {
+ $pluginManager->performUpdateCheck(0);
qa_redirect('admin/plugins');
}
}
@@ -138,6 +140,9 @@
qa_sort_by($sortedPluginFiles, 'name');
+ $versionChecks = array();
+ $shouldCheckForUpdate = $pluginManager->shouldCheckForUpdate();
+
$pluginIndex = -1;
foreach ($sortedPluginFiles as $pluginDirectory => $metadata) {
$pluginIndex++;
@@ -168,14 +173,16 @@
} else
$authorhtml = '';
- if ($metaver && isset($metadata['update_uri']) && strlen($metadata['update_uri'])) {
+ if ($shouldCheckForUpdate && $metaver && isset($metadata['update_uri']) && strlen($metadata['update_uri'])) {
$elementid = 'version_check_' . md5($pluginDirectory);
- $updatehtml = '(...)';
-
- $qa_content['script_onloads'][] = array(
- "qa_version_check(" . qa_js($metadata['update_uri']) . ", " . qa_js($metadata['version'], true) . ", " . qa_js($elementid) . ", false);"
+ $versionChecks[] = array(
+ 'uri' => $metadata['update_uri'],
+ 'version' => $metadata['version'],
+ 'elem' => $elementid,
);
+
+ $updatehtml = '(...)';
}
else
$updatehtml = '';
@@ -246,6 +253,14 @@
}
}
}
+
+ if ($shouldCheckForUpdate) {
+ $pluginManager->performUpdateCheck();
+
+ $qa_content['script_onloads'][] = array(
+ sprintf('qa_version_check_array(%s);', json_encode($versionChecks)),
+ );
+ }
}
$qa_content['navigation']['sub'] = qa_admin_sub_navigation();
@@ -260,6 +275,10 @@
'tags' => 'name="dosave"',
'label' => qa_lang_html('admin/save_options_button'),
),
+ 'doversioncheck' => array(
+ 'tags' => 'name="doversioncheck"',
+ 'label' => qa_lang_html('admin/version_check'),
+ ),
),
'hidden' => array(