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