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; }