/** * Instantiates a plugin class * * @access public * @param string The ID of the plugin to load * @param int The owner of the plugin (can be autodetected) * @param string The path to a plugin (can be autodetected) * @param string The filename of a plugin (can be autodetected) * @return */ function &load_plugin($instance_id, $authorid = null, $pluginPath = '', $pluginFile = null) { global $serendipity; if ($pluginFile === null) { $class_name = ''; // $serendipity['debug']['pluginload'][] = "Init probe for plugin $instance_id, $class_name, $pluginPath"; $pluginFile = serendipity_plugin_api::probePlugin($instance_id, $class_name, $pluginPath); } else { $is_internal = false; // $serendipity['debug']['pluginload'][] = "getClassByInstanceID $instance_id, $is_internal"; $class_name = serendipity_plugin_api::getClassByInstanceID($instance_id, $is_internal); } if (!class_exists($class_name) && !empty($pluginFile)) { // $serendipity['debug']['pluginload'][] = "Classname does not exist. Including $pluginFile."; include $pluginFile; } if (!class_exists($class_name)) { $serendipity['debug']['pluginload'][] = "Classname {$class_name} still does not exist. Aborting."; return false; } // $serendipity['debug']['pluginload'][] = "Returning new $class_name($instance_id)"; $p = new $class_name($instance_id); if (!is_null($authorid)) { $p->serendipity_owner = $authorid; } else { $sql = "SELECT authorid from {$serendipity['dbPrefix']}plugins WHERE name = '" . $instance_id . "'"; $owner = serendipity_db_query($sql, true); if (is_array($owner) && isset($owner[0])) { $p->serendipity_owner = $owner[0]; } } $p->pluginPath = $p->act_pluginPath = $pluginPath; if (empty($p->act_pluginPath)) { $p->act_pluginPath = $class_name; } $p->pluginFile = $pluginFile; return $p; }