function processView() { $fields = $GLOBALS['system']->getDBObjectData('custom_field', array(), 'OR', 'rank'); foreach ($fields as $id => $details) { $x = new Custom_field($id); if (!$x->acquireLock()) { $this->fields = NULL; add_message("Somebody else is currently editing the custom fields. Please try again later", 'error'); return; } $this->fields[$id] = $x; } $i = 0; $ranks = array_flip(array_get($_REQUEST, 'index', array())); while (array_key_exists('fields_' . $i . '_id', $_REQUEST)) { $prefix = 'fields_' . $i . '_'; if (empty($_REQUEST[$prefix . 'id'])) { if (!empty($_REQUEST[$prefix . 'name'])) { // new field $field = new Custom_Field(); $field->processForm($prefix); $field->setValue('rank', $ranks[$i]); $field->create(); $field->acquireLock(); $this->fields[$field->id] = $field; } } else { $fieldID = $_REQUEST[$prefix . 'id']; // existing field if (!empty($_REQUEST[$prefix . 'delete'])) { $this->fields[$fieldID]->delete(); unset($this->fields[$fieldID]); } else { $this->fields[$fieldID]->processForm($prefix); $this->fields[$fieldID]->setValue('rank', $ranks[$i]); $this->fields[$fieldID]->save(); } } $i++; } uasort($this->fields, create_function('$x,$y', 'return (int)$x->getValue("rank") > (int)$y->getValue("rank");')); if ($i > 0) { add_message("Custom fields updated", 'success'); } }