summaryrefslogtreecommitdiff
path: root/plugindata.php
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2010-11-21 00:37:54 -0500
committerLuke Shumaker <LukeShu@sbcglobal.net>2010-11-21 00:37:54 -0500
commitd6877baca9b8c56ce3e1565791fa260cdc983d95 (patch)
tree8107511c9c449680af10b00cf5cbd845e3f63717 /plugindata.php
parent3a336843e1cdd340dd3630747b3e6265b6effa39 (diff)
Load data for all plugins on plugin management page.
include.php: file to include to make creation of entry points easy index.php: move most of this file into include.php (and include it) plugindata.php: a separate entry point using include.php; load ALL plugins found, and write data gathered to plugindata.out.php .gitignore: add plugindata.out.php actions/pluginsadminpanel.php: * use plugindata.out.php's common_plugindata() instead of StatusNet::getPlugins() * give a button linking to plugindata.php, to refresh plugin data lib/pluginlist.php: * use plugindata.out.php's common_plugindata() instead of thowing the 'PluginVersion' event to currently enabled plugins * for the enable/disable forms: was: if (!$disabled) now: if ($enabled && (!$disabled)) lib/statusnet.php: move the list of filenames for a plugin into it's own public static function; this is used by plugindata.php
Diffstat (limited to 'plugindata.php')
-rw-r--r--plugindata.php99
1 files changed, 99 insertions, 0 deletions
diff --git a/plugindata.php b/plugindata.php
new file mode 100644
index 000000000..58c5bacda
--- /dev/null
+++ b/plugindata.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010 Free Software Foundation, Inc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category StatusNet
+ * @package StatusNet
+ * @author Luke Shumaker <lukeshu@sbcglobal.net>
+ * @copyright 2010 Free Software Foundation, Inc http://www.fsf.org
+ *
+ * @license GNU Affero General Public License http://www.gnu.org/licenses/
+ */
+
+require('include.php');
+
+function main() {
+ // Check permissions
+
+ if (!common_logged_in()) {
+ // TRANS: Client error message thrown when trying to load plugin data while not logged in.
+ echo(_('Not logged in.')."\n");
+ return false;
+ }
+ $user = common_current_user();
+ assert(!empty($user));
+ if (!$user->hasRight(Right::CONFIGURESITE)) {
+ // TRANS: Client error message thrown when a user tries to load plugin data but has no access rights.
+ echo(_('You cannot make changes to this site.')."\n");
+ return false;
+ }
+
+ // Do stuff
+
+ $possibleFiles = StatusNet::pluginFiles('*');
+ foreach ($possibleFiles as $pattern) {
+ $regex = '/'.str_replace('/','\/',str_replace('*','(.*)',$pattern)).'/';
+ $matches = glob($pattern);
+ foreach ($matches as $file) {
+ $name = preg_replace($regex,'\1',$file);
+ loadPlugin($name,$file,$data);
+ }
+ }
+ $redirect = isset($_SERVER['HTTP_REFERER']);
+
+ $fileName = 'plugindata.out.php';
+ $fh = fopen($fileName, 'w');
+ if (!$fh) {
+ $redirect = false;
+ // TRANS: Client error message thrown when plugindata.out.php can't be opened
+ echo(_("ERROR: cannot open 'plugindata.out.php' for writing.")."\n");
+ }
+ fwrite($fh, "<?php\n".
+ "function common_plugindata() {\n".
+ " return ".var_export($data,true).";\n".
+ "}\n"
+ );
+ fclose($fh);
+ if ($redirect) {
+ header('Location: '.$_SERVER['HTTP_REFERER']);
+ } else {
+ header('Content-type: text/plain');
+ // TRANS: Plain text divider between mesages and plugin data.
+ echo("\n"._('---- Raw Plugin Data ----')."\n\n");
+ var_export($data);
+ }
+}
+
+function loadPlugin($pluginName,$file,&$data) {
+ if (!class_exists($pluginName.'Plugin')) {
+ if (@file_exists($file)) {
+ include_once($file);
+ }
+ }
+ if (class_exists($pluginName.'Plugin')) {
+ $className = $pluginName.'Plugin';
+ $obj = new $className;
+
+ $newData = array();
+ $obj->onPluginVersion($newData);
+ foreach ($newData as $pluginInfo) {
+ $data[$pluginName] = $pluginInfo;
+ }
+ }
+}
+
+main();