/** * @return array */ private function getOptions() { if (!count($this->options)) { $this->options = ComposerService::getOptions($this->getComposer()); } return $this->options; }
/** * @param BaseEvent $event */ private static function baseEventDispatcher(BaseEvent $event) { static $_scripts = array(); if ($event instanceof PackageEvent) { $event = new AliasPackageEvent($event); } if ($event instanceof AliasPackageEvent) { $operation = $event->getAliasOf()->getOperation(); if ($operation instanceof UpdateOperation) { $package = $operation->getTargetPackage(); } else { $package = $operation->getPackage(); } $options = ComposerService::getOptions($event->getComposer()); if ($package->getType() != $options['type']) { //return; } $extra = $package->getExtra(); $delayedEvents = array('post-package-install', 'post-package-update'); if (is_array($extra) && isset($extra[$options['type']])) { $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir'); $extraScripts = static::combineScripts($extra, $options['type'], $vendorDir . DIRECTORY_SEPARATOR . $package->getName()); if (count($extraScripts)) { if (isset($extraScripts[$event->getName()])) { $scripts = $extraScripts[$event->getName()]; foreach ($scripts as $script) { if (in_array($event->getName(), $delayedEvents)) { $_scripts[$event->getName()][] = array('script' => $script, 'event' => $event); } elseif (is_callable($script)) { $className = substr($script, 0, strpos($script, '::')); $methodName = substr($script, strpos($script, '::') + 2); $className::$methodName($event); } } } } } } elseif (in_array($event->getName(), array('post-install-cmd', 'post-update-cmd'))) { foreach ($_scripts as $eventName => $scripts) { foreach ($scripts as $data) { if (is_callable($data['script'])) { $className = substr($data['script'], 0, strpos($data['script'], '::')); $methodName = substr($data['script'], strpos($data['script'], '::') + 2); $className::$methodName($data['event']); } } } } }