예제 #1
0
 protected function getFallbackPlugin()
 {
     if (!isset($this->fallback_plugin)) {
         $this->fallback_plugin = false;
         if (($site = elgg_get_site_entity($this->site_guid)) && elgg_instanceof($site, "site", Subsite::SUBTYPE, "Subsite")) {
             if (subsite_manager_check_global_plugin_setting($this->getID(), "fallback_to_main_settings")) {
                 // ignore access for this part, as plugins are public
                 $old_ia = elgg_set_ignore_access(true);
                 // do we already know the fallback plugin
                 $fallback_plugin_guid = (int) parent::getPrivateSetting("fallback_plugin_guid");
                 if (!empty($fallback_plugin_guid)) {
                     if ($temp_plugin = get_entity($fallback_plugin_guid)) {
                         if (elgg_instanceof($temp_plugin, "object", "plugin")) {
                             $this->fallback_plugin = $temp_plugin;
                         }
                     }
                     // something is wrong with the guid, cleanup
                     if (empty($this->fallback_plugin)) {
                         parent::removePrivateSetting("fallback_plugin_guid");
                     }
                 }
                 // we haven't found a falback plugin yet (or it is invalid)
                 if (empty($this->fallback_plugin)) {
                     $options = array("type" => "object", "subtype" => "plugin", "limit" => 1, "site_guids" => array($site->getOwnerGUID()), "joins" => array("JOIN " . elgg_get_config("dbprefix") . "objects_entity oe ON e.guid = oe.guid"), "wheres" => array("(oe.title = '" . $this->getID() . "')"));
                     if ($plugins = elgg_get_entities($options)) {
                         $temp_plugin = $plugins[0];
                         $this->fallback_plugin = $temp_plugin;
                         parent::setPrivateSetting("fallback_plugin_guid", $temp_plugin->getGUID());
                     } else {
                         // we should have found a main plugin, but didn't log this
                         elgg_log("Subsite plugin(" . $this->getID() . ") with fallback didnt find main plugin", "ERROR");
                     }
                 }
                 // restore access settings
                 elgg_set_ignore_access($old_ia);
             }
         }
     }
     return $this->fallback_plugin;
 }