diff options
author | Robin Appelman <icewind1991@gmail.com> | 2010-07-28 18:12:00 +0200 |
---|---|---|
committer | Robin Appelman <icewind1991@gmail.com> | 2010-07-28 18:12:00 +0200 |
commit | 98e49c7552815f41c7e13ca282eb053b544a9fed (patch) | |
tree | f90fb061c5a24a0683ca9bfcf79d7a4578d1d63c /inc | |
parent | 687cb29c7d9356811dd9d420873b375a3a03df89 (diff) | |
download | nextcloud-server-98e49c7552815f41c7e13ca282eb053b544a9fed.tar.gz nextcloud-server-98e49c7552815f41c7e13ca282eb053b544a9fed.zip |
use new plugin system for loading plugins
Diffstat (limited to 'inc')
-rw-r--r-- | inc/lib_base.php | 30 | ||||
-rw-r--r-- | inc/lib_plugin.php | 134 | ||||
-rw-r--r-- | inc/lib_user.php | 2 |
3 files changed, 136 insertions, 30 deletions
diff --git a/inc/lib_base.php b/inc/lib_base.php index aae9048f09b..521694bf53f 100644 --- a/inc/lib_base.php +++ b/inc/lib_base.php @@ -84,7 +84,9 @@ oc_require_once('lib_ocs.php'); @oc_require_once('MDB2/Schema.php'); oc_require_once('lib_connect.php'); oc_require_once('lib_remotestorage.php'); +oc_require_once('lib_plugin.php'); +OC_PLUGIN::loadPlugins(); if(!is_dir($CONFIG_DATADIRECTORY_ROOT)){ @mkdir($CONFIG_DATADIRECTORY_ROOT) or die("Can't create data directory ($CONFIG_DATADIRECTORY_ROOT), you can usually fix this by setting the owner of '$SERVERROOT' to the user that the web server uses (www-data for debian/ubuntu)"); @@ -289,34 +291,6 @@ class OC_UTIL { }else{ echo('<td><img src="'.$WEBROOT.'/img/icons/other.png" width="16" height="16"></td>'); } } - - /** - * Load the plugins - */ - public static function loadPlugins() { - global $CONFIG_LOADPLUGINS; - global $SERVERROOT; - - $CONFIG_LOADPLUGINS = 'all'; - if ( 'all' !== $CONFIG_LOADPLUGINS ) { - $plugins = explode(' ', $CONFIG_LOADPLUGINS); - } else { - $plugins = array(); - $fd = opendir($SERVERROOT . '/plugins'); - while ( false !== ($filename = readdir($fd)) ) { - if ( $filename<>'.' AND $filename<>'..' AND ('.' != substr($filename, 0, 1)) ) { - $plugins[] = $filename; - } - } - closedir($fd); - } - if ( isset($plugins[0]) ) { - foreach ( $plugins as $plugin ) { - oc_require_once('/plugins/' . $plugin . '/lib_' . $plugin . '.php'); - } - } - } - } diff --git a/inc/lib_plugin.php b/inc/lib_plugin.php new file mode 100644 index 00000000000..178179a05e0 --- /dev/null +++ b/inc/lib_plugin.php @@ -0,0 +1,134 @@ +<?php + +/** +* ownCloud +* +* @author Frank Karlitschek +* @copyright 2010 Frank Karlitschek karlitschek@kde.org +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 Lesser General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +class OC_PLUGIN{ + static private $blacklist=array(); + + /** + * load the plugin with the given id + * @param string id + * @return bool + */ + static public function load($id){ + global $SERVERROOT; + if(is_dir($SERVERROOT.'/plugins/'.$id) and is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){ + $plugin=new DOMDocument(); + $plugin->load($SERVERROOT.'/plugins/'.$id.'/plugin.xml'); + $pluginId=$plugin->getElementsByTagName('id')->item(0)->textContent; + if($pluginId==$id){//sanity check for plugins installed in the wrong folder + $childs=$plugin->documentElement->childNodes; + foreach($childs as $child){ + if($child->nodeType==XML_ELEMENT_NODE and $child->tagName=='include'){ + $file=$SERVERROOT.'/plugins/'.$id.'/'.$child->textContent; + include($file); + } + } + return true; + } + } + return false; + } + + /** + * Load all plugins that aren't blacklisted + */ + public static function loadPlugins() { + global $SERVERROOT; + $plugins = array(); + $blacklist=self::loadBlacklist(); + $fd = opendir($SERVERROOT . '/plugins'); + while ( false !== ($filename = readdir($fd)) ) { + if ( $filename<>'.' AND $filename<>'..' AND ('.' != substr($filename, 0, 1)) AND array_search($filename,$blacklist)===false) { + self::load($filename); + } + } + closedir($fd); + } + + /** + * load the blacklist from blacklist.txt + * @return array + */ + private static function loadBlacklist(){ + global $SERVERROOT; + if(count(self::$blacklist)>0){ + return self::$blacklist; + } + $blacklist=array(); + if(is_file($SERVERROOT.'/plugins/blacklist.txt')){ + $file=file_get_contents($SERVERROOT.'/plugins/blacklist.txt'); + $lines=explode("\n",$file); + foreach($lines as $line){ + $id=trim($line); + if($id!='' and is_dir($SERVERROOT.'/plugins/'.$id)){ + $blacklist[]=$id; + } + } + } + self::$blacklist=$blacklist; + return $blacklist; + } + + /** + * save a blacklist to blacklist.txt + * @param array blacklist + */ + private static function saveBlacklist($blacklist){ + global $SERVERROOT; + $file=''; + foreach($blacklist as $item){ + $file.="$item\n"; + } + self::$blacklist=$blacklist; + file_put_contents($SERVERROOT.'/plugins/blacklist.txt',$file); + } + + /** + * add a plugin to the blacklist + * @param string id + */ + public static function addToBlacklist($id){ + $blacklist=self::loadBlacklist(); + if(array_search($id,$blacklist)===false){ + $blacklist[]=$id; + self::$blacklist=$blacklist; + self::saveBlacklist($blacklist); + } + } + + /** + * remove a plugin to the blacklist + * @param string id + */ + public static function removeFromBlacklist($id){ + $blacklist=self::loadBlacklist(); + $index=array_search($id,$blacklist); + if($index!==false){ + unset($blacklist[$index]); + self::$blacklist=$blacklist; + self::saveBlacklist($blacklist); + } + } +} + +?> diff --git a/inc/lib_user.php b/inc/lib_user.php index 1d0cb86c6a7..0d9b1c5dda6 100644 --- a/inc/lib_user.php +++ b/inc/lib_user.php @@ -23,8 +23,6 @@ global $CONFIG_BACKEND; -OC_UTIL::loadPlugins(); - if ( !$CONFIG_INSTALLED ) { |