예제 #1
0
 /**
  * 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;
 }