/** * Load plugin with all it's dependencies * * @param string $packageName * @param string $pluginName * @param Config $customConfig * @param boolean $loadAgain * @param boolean $overrideObjects */ public function usePlugin($packageName, $pluginName = null, Config $customConfig = null, $loadAgain = false, $overrideObjects = false, $forceLoaderIncludes = false) { if ($pluginName === null) { $pluginName = $packageName; } $this->checkPluginExistance($packageName, $pluginName); if (!isset($this->loadedPackages[$packageName])) { $this->loadedPackages[$packageName] = array(); } if (!$loadAgain and $this->isPluginLoaded($packageName, $pluginName)) { return; } $backtrace = debug_backtrace(); $callingClassName = null; if (isset($backtrace[1]['class'])) { $callingClassName = $backtrace[1]['class']; } $callingFunctionName = $backtrace[1]['function']; $myClassName = get_class($this); $forceLoaderIncludesAuto = false; if ($myClassName != $callingClassName or !in_array($callingFunctionName, array("load", "addPackage", "resolveDependencies"))) { ConfigManager::refreshPluginCache($packageName, $pluginName); $this->buildAllowanceTables(array($packageName => array($pluginName))); $forceLoaderIncludesAuto = true; } $forceLoaderIncludes = $forceLoaderIncludes || $forceLoaderIncludesAuto; if ($customConfig !== null) { if (!isset($this->customConfigs->{$packageName})) { $this->customConfigs->{$packageName} = new Config(); } $this->customConfigs->{$packageName}->{$pluginName} = $customConfig; } $loader = $this->getPluginLoader($packageName, $pluginName); $deps = $loader->getDependencies(); $this->resolveDependencies($deps, $forceLoaderIncludes); $loader->load($overrideObjects, $forceLoaderIncludes); array_push($this->loadedPackages[$packageName], $pluginName); }