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');
     }
 }