summaryrefslogtreecommitdiff
path: root/plugindata.php
diff options
context:
space:
mode:
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();