/** * Get external plugin * * @param Model $model Model using this behavior * @param array $pluginKey Plugin key * @return array Plugins data * @throws InternalErrorException */ public function getExternalPlugins(Model $model, $pluginKey = null) { static $plugins = null; if (!$plugins) { $composers = $model->getComposer(); $index = 0; $packageKeys = array('packages', 'packages-dev'); foreach ($packageKeys as $key) { foreach ($composers[$key] as $package) { if (preg_match('#^netcommons/#', $package['name'])) { continue; } $plugins[$index]['Plugin']['key'] = Security::hash($package['name'], 'md5'); $plugins[$index]['Plugin']['namespace'] = $package['name']; if (isset($package['extra']['installer-name'])) { $plugins[$index]['Plugin']['name'] = $package['extra']['installer-name']; } else { $plugins[$index]['Plugin']['name'] = $package['name']; } $plugins[$index]['composer'] = $package; $index++; } } $plugins = Hash::sort($plugins, '{n}.Plugin.name'); } if (!$pluginKey) { return $plugins; } $plugin = Hash::extract($plugins, '{n}.Plugin[key=' . $pluginKey . ']'); $ret[0]['Plugin'] = $plugin[0]; $composer = Hash::extract($plugins, '{n}.composer[name=' . $ret[0]['Plugin']['namespace'] . ']'); $ret[0]['composer'] = $composer[0]; return $ret; }