| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugin; |
|
|
| use Piwik\Log; |
| use Piwik\Plugin\Manager as PluginManager; |
| use Exception; |
|
|
| |
| |
| |
| class ComponentFactory |
| { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static function factory($pluginName, $componentClassSimpleName, $componentTypeClass) |
| { |
| if (empty($pluginName) || empty($componentClassSimpleName)) { |
| Log::debug( |
| "ComponentFactory::%s: empty plugin name or component simple name requested (%s, %s)", |
| __FUNCTION__, |
| $pluginName, |
| $componentClassSimpleName |
| ); |
|
|
| return null; |
| } |
|
|
| $plugin = self::getActivatedPlugin(__FUNCTION__, $pluginName); |
| if (empty($plugin)) { |
| return null; |
| } |
|
|
| $subnamespace = $componentTypeClass::COMPONENT_SUBNAMESPACE; |
| $desiredComponentClass = 'Piwik\\Plugins\\' . $pluginName . '\\' . $subnamespace . '\\' . $componentClassSimpleName; |
|
|
| $components = $plugin->findMultipleComponents($subnamespace, $componentTypeClass); |
| foreach ($components as $class) { |
| if ($class === $desiredComponentClass) { |
| return new $class(); |
| } |
| } |
|
|
| Log::debug( |
| "ComponentFactory::%s: Could not find requested component (args = ['%s', '%s', '%s']).", |
| __FUNCTION__, |
| $pluginName, |
| $componentClassSimpleName, |
| $componentTypeClass |
| ); |
|
|
| return null; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static function getComponentIf($componentTypeClass, $pluginName, $predicate) |
| { |
| $pluginManager = PluginManager::getInstance(); |
|
|
| |
| $subnamespace = $componentTypeClass::COMPONENT_SUBNAMESPACE; |
| if (empty($pluginName)) { |
| $components = $pluginManager->findMultipleComponents($subnamespace, $componentTypeClass); |
| } else { |
| $plugin = self::getActivatedPlugin(__FUNCTION__, $pluginName); |
| if (empty($plugin)) { |
| return null; |
| } |
|
|
| $components = $plugin->findMultipleComponents($subnamespace, $componentTypeClass); |
| } |
|
|
| |
| foreach ($components as $class) { |
| $component = new $class(); |
| if ($predicate($component)) { |
| return $component; |
| } |
| } |
|
|
| Log::debug( |
| "ComponentFactory::%s: Could not find component that satisfies predicate (args = ['%s', '%s', '%s']).", |
| __FUNCTION__, |
| $componentTypeClass, |
| $pluginName, |
| get_class($predicate) |
| ); |
|
|
| return null; |
| } |
|
|
| |
| |
| |
| |
| |
| private static function getActivatedPlugin($function, $pluginName) |
| { |
| $pluginManager = PluginManager::getInstance(); |
| try { |
| if (!$pluginManager->isPluginActivated($pluginName)) { |
| Log::debug( |
| "ComponentFactory::%s: component for deactivated plugin ('%s') requested.", |
| $function, |
| $pluginName |
| ); |
|
|
| return null; |
| } |
|
|
| return $pluginManager->getLoadedPlugin($pluginName); |
| } catch (Exception $e) { |
| Log::debug($e); |
|
|
| return null; |
| } |
| } |
| } |
|
|