Example #1
0
 /**
  * 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;
 }