/**
  * Create reasonable default entries for contribution types.
  */
 private function _createDefaultContributionTypes()
 {
     $elementTable = $this->_db->getTable('Element');
     $itemTypeTable = $this->_db->getTable('ItemType');
     $textItemType = $itemTypeTable->findByName('Text');
     if ($textItemType) {
         $storyType = new ContributionType();
         $storyType->item_type_id = $textItemType->id;
         $storyType->display_name = 'Story';
         $storyType->file_permissions = 'Allowed';
         $storyType->save();
         $textElement = new ContributionTypeElement();
         $textElement->type_id = $storyType->id;
         $dcTitleElement = $elementTable->findByElementSetNameAndElementName('Dublin Core', 'Title');
         $textElement->element_id = $dcTitleElement->id;
         $textElement->prompt = 'Title';
         $textElement->order = 1;
         $textElement->long_text = false;
         $textElement->save();
         $textElement = new ContributionTypeElement();
         $textElement->type_id = $storyType->id;
         $itemTypeMetadataTextElement = $elementTable->findByElementSetNameAndElementName('Item Type Metadata', 'Text');
         $textElement->element_id = $itemTypeMetadataTextElement->id;
         $textElement->prompt = 'Story Text';
         $textElement->order = 2;
         $textElement->long_text = true;
         $textElement->save();
     }
     $imageItemType = $itemTypeTable->findByName('Still Image');
     if ($imageItemType) {
         $imageType = new ContributionType();
         $imageType->item_type_id = 6;
         $imageType->display_name = 'Image';
         $imageType->file_permissions = 'Required';
         $imageType->save();
         $descriptionElement = new ContributionTypeElement();
         $descriptionElement->type_id = $imageType->id;
         $dcDescriptionElement = $elementTable->findByElementSetNameAndElementName('Dublin Core', 'Description');
         $descriptionElement->element_id = $dcDescriptionElement->id;
         $descriptionElement->prompt = 'Image Description';
         $descriptionElement->order = 1;
         $descriptionElement->long_text = true;
         $descriptionElement->save();
     }
 }
 /**
  * Process the type element data from the type form.
  *
  * @param ArrayObject $post
  */
 public function afterSaveForm($post)
 {
     foreach ($post['Elements'] as $elementId => $elementData) {
         $element = $this->getDb()->getTable('ContributionTypeElement')->find($elementId);
         if ($elementData['delete']) {
             $element->delete();
         } else {
             $element->saveForm($elementData);
         }
     }
     foreach ($post['newElements'] as $index => $elementData) {
         // Skip totally empty elements
         if (!empty($elementData['prompt']) || !empty($elementData['element_set_id'])) {
             $element = new ContributionTypeElement();
             $element->type_id = $this->id;
             $element->order = count($post['Elements']) + $index;
             $element->saveForm($elementData);
         }
     }
 }
 private function _processForm($record)
 {
     $elementTable = $this->_helper->db->getTable('Element');
     $contributionElTable = $this->_helper->db->getTable('ContributionTypeElement');
     if ($this->getRequest()->isPost()) {
         try {
             $record->setPostData($_POST);
             if ($record->save()) {
                 if (isset($_POST['elements-to-add'])) {
                     foreach ($_POST['elements-to-add'] as $tempId => $elementInfo) {
                         if (empty($elementInfo['id'])) {
                             continue;
                         }
                         if (empty($elementInfo['prompt'])) {
                             $elementInfo['prompt'] = $elementTable->find($elementInfo['id'])->name;
                         }
                         $contributionEl = new ContributionTypeElement();
                         $contributionEl->element_id = $elementInfo['id'];
                         $contributionEl->prompt = $elementInfo['prompt'];
                         $contributionEl->order = $elementInfo['order'];
                         $contributionEl->long_text = $elementInfo['long_text'];
                         $contributionEl->type_id = $record->id;
                         $contributionEl->save();
                     }
                 }
                 $toRemove = isset($_POST['elements_to_remove']) ? explode(',', $_POST['elements_to_remove']) : array();
                 foreach ($_POST['elements'] as $id => $elementInfo) {
                     if (!in_array($id, $toRemove)) {
                         $contributionEl = $contributionElTable->find($id);
                         if (empty($elementInfo['prompt'])) {
                             $elementInfo['prompt'] = $elementTable->find($contributionEl->element_id)->name;
                         }
                         $contributionEl->prompt = $elementInfo['prompt'];
                         $contributionEl->order = $elementInfo['order'];
                         $contributionEl->long_text = $elementInfo['long_text'];
                         $contributionEl->save();
                     }
                 }
                 foreach ($toRemove as $contribElId) {
                     $contribEl = $contributionElTable->find($contribElId);
                     if ($contribEl) {
                         $contribEl->delete();
                     }
                 }
                 $this->_helper->redirector('browse');
                 return;
             }
             // Catch validation errors.
         } catch (Omeka_Validate_Exception $e) {
             $this->_helper->flashMessenger($e);
         }
     }
 }