Esempio n. 1
0
 /**
  * Process the ListView to set the fields correctly
  *
  * @param array $fieldMap
  * @param $current_fields
  * @param ListLayoutMetaDataParser $listParser
  */
 private function processList(array $fieldMap, $current_fields, ListLayoutMetaDataParser $listParser)
 {
     if (!$listParser instanceof SidecarListLayoutMetaDataParser) {
         return false;
     }
     $handleSave = false;
     $saveFields = array();
     // process the fields
     foreach ($current_fields as $panel_id => $panel) {
         if (is_array($panel['fields'])) {
             foreach ($panel['fields'] as $field) {
                 $name = $field['name'];
                 $addField = true;
                 $additionalDefs = $field;
                 if (isset($fieldMap[$name])) {
                     if ($fieldMap[$name] === true) {
                         // nothing to do, field is present
                     } elseif ($fieldMap[$name] !== false) {
                         // we have the field, so get it's defs
                         $defs = $this->bean->getFieldDefinition($fieldMap[$name]);
                         if ($defs) {
                             // set the name variable to the new field name.
                             $name = $fieldMap[$name];
                             // reset the additionDefs since we have a new field
                             $additionalDefs = array();
                         } else {
                             // we didn't find any defs for the new field, so error on caution and remove the old one
                             $addField = false;
                         }
                         $handleSave = true;
                     } else {
                         // instead of a name being passed in, false was, so we should remove that field.
                         $addField = false;
                         $handleSave = true;
                     }
                     unset($fieldMap[$name]);
                 }
                 if ($addField) {
                     $saveFields[] = array($name, $additionalDefs);
                 }
             }
         }
     }
     // make sure that the field map is empty, if it's not process any remaining fields
     if (!empty($fieldMap)) {
         foreach ($fieldMap as $field => $trigger) {
             if ($trigger === true) {
                 $defs = $this->bean->getFieldDefinition($field);
                 if ($defs) {
                     $saveFields[] = array($field, array());
                     $handleSave = true;
                 }
             }
         }
     }
     if ($handleSave) {
         // make sure the list is reset
         $listParser->resetPanelFields();
         foreach ($saveFields as $params) {
             $listParser->addField($params[0], $params[1]);
         }
         $listParser->handleSave(false);
     }
 }