/** * Returns editable dropdown filters * * @param array $data Existing data * @param MetaDataContextInterface $context Metadata context * * @return array */ public function getEditableDropdownFilters($data = array(), MetaDataContextInterface $context = null) { if ($this->public) { return array(); } if (is_null($context)) { $context = $this->getCurrentUserContext(); } $platform = $this->platforms[0]; $files = array_map(function ($file) use($platform) { $info = pathinfo($file); return array('path' => $file, 'file' => $info['basename'], 'subPath' => $info['dirname'], 'platform' => $platform, 'params' => MetaDataFiles::getClientFileParams($file)); }, glob('custom/application/Ext/DropdownFilters/roles/*/dropdownfilters.ext.php')); $files = array_filter($files, function (array $file) use($context) { return $context->isValid($file); }); uasort($files, function ($a, $b) use($context) { return $context->compare($a, $b); }); if (!count($files)) { return array(); } $filters = array(); foreach ($files as $file) { $fileFilters = $this->readDropdownFilterFile($file['path']); foreach ($fileFilters as $fieldName => $filter) { // make sure first file wins and its metadata doesn't get overridden if (!isset($filters[$fieldName])) { $filters[$fieldName] = $this->fixDropdownFilter($filter, $fieldName); //To preserve order in JSON, we need to return the filters as tuples. $filters[$fieldName] = array_map(null, array_keys($filters[$fieldName]), $filters[$fieldName]); } } } return $filters; }