diff options
Diffstat (limited to 'plugindata.php')
-rw-r--r-- | plugindata.php | 99 |
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(); |