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