X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fplugin.php;h=04df51f824206a843e12257d168a249bbe3e6222;hb=8a4bec811b07a0ed9d76d0aceb03855c91a67242;hp=a5424e06ca2ca6855349302544ab64939b639576;hpb=ae3eaee6cd5f67b0260abf30c3517072e372e270;p=quix0rs-gnu-social.git diff --git a/lib/plugin.php b/lib/plugin.php index a5424e06ca..04df51f824 100644 --- a/lib/plugin.php +++ b/lib/plugin.php @@ -79,6 +79,57 @@ class Plugin return true; } + /** + * Load related modules when needed + * + * Most non-trivial plugins will require extra modules to do their work. Typically + * these include data classes, action classes, widget classes, or external libraries. + * + * This method receives a class name and loads the PHP file related to that class. By + * tradition, action classes typically have files named for the action, all lower-case. + * Data classes are in files with the data class name, initial letter capitalized. + * + * Note that this method will be called for *all* overloaded classes, not just ones + * in this plugin! So, make sure to return true by default to let other plugins, and + * the core code, get a chance. + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + public function onAutoload($cls) { + $cls = basename($cls); + $basedir = INSTALLDIR . '/local/plugins/' . mb_substr(get_called_class(), 0, -6); + if (!file_exists($basedir)) { + $basedir = INSTALLDIR . '/plugins/' . mb_substr(get_called_class(), 0, -6); + } + + $file = null; + + if (preg_match('/^(\w+)(Action|Form)$/', $cls, $type)) { + $type = array_map('strtolower', $type); + $file = "$basedir/{$type[2]}s/{$type[1]}.php"; + } + if (!file_exists($file)) { + $file = "$basedir/classes/{$cls}.php"; + + // library files can be put into subdirs ('_'->'/' conversion) + // such as LRDDMethod_WebFinger -> lib/lrddmethod/webfinger.php + if (!file_exists($file)) { + $type = strtolower($cls); + $type = str_replace('_', '/', $type); + $file = "$basedir/lib/{$type}.php"; + } + } + + if (!is_null($file) && file_exists($file)) { + require_once($file); + return false; + } + + return true; + } + /** * Checks if this plugin has localization that needs to be set up. * Gettext localizations can be called via the _m() helper function. @@ -93,6 +144,9 @@ class Plugin // @fixme this will fail for things installed in local/plugins // ... but then so will web links so far. $path = INSTALLDIR . "/plugins/$name/locale"; + if (!file_exists($path)) { + $path = INSTALLDIR . "/local/plugins/$name/locale"; + } } if (file_exists($path) && is_dir($path)) { bindtextdomain($name, $path); @@ -111,13 +165,23 @@ class Plugin $this->log(LOG_DEBUG, $msg); } - function name() + public function name() { $cls = get_class($this); return mb_substr($cls, 0, -6); } - function onPluginVersion(&$versions) + public function version() + { + return GNUSOCIAL_VERSION; + } + + protected function userAgent() { + return HTTPClient::userAgent() + . ' (' . get_class($this) . ' v' . $this->version() . ')'; + } + + function onPluginVersion(array &$versions) { $name = $this->name(); @@ -135,16 +199,14 @@ class Plugin static function staticPath($plugin, $relative) { - $isHTTPS = StatusNet::isHTTPS(); - - if ($isHTTPS) { + if (GNUsocial::useHTTPS()) { $server = common_config('plugins', 'sslserver'); } else { $server = common_config('plugins', 'server'); } if (empty($server)) { - if ($isHTTPS) { + if (GNUsocial::useHTTPS()) { $server = common_config('site', 'sslserver'); } if (empty($server)) { @@ -152,7 +214,7 @@ class Plugin } } - if ($isHTTPS) { + if (GNUsocial::useHTTPS()) { $path = common_config('plugins', 'sslpath'); } else { $path = common_config('plugins', 'path'); @@ -175,7 +237,7 @@ class Plugin $path = '/'.$path; } - $protocol = ($isHTTPS) ? 'https' : 'http'; + $protocol = GNUsocial::useHTTPS() ? 'https' : 'http'; return $protocol.'://'.$server.$path.$plugin.'/'.$relative; }