/** * Set PUT data to an item type. * * @param ItemType $data * @param mixed $data */ public function setPutData(Omeka_Record_AbstractRecord $record, $data) { if (isset($data->name)) { $record->name = $data->name; } if (isset($data->description)) { $record->description = $data->description; } if (isset($data->elements) && is_array($data->elements)) { $db = get_db(); // Delete the existing item type elements. $sql = "DELETE FROM {$db->ItemTypesElements} WHERE item_type_id = ?"; $db->query($sql, $record->id); // Insert new item type elements. $elementTable = $db->getTable('Element'); $i = 1; foreach ($data->elements as $element) { if (!is_object($element) || !isset($element->id)) { continue; } // Ignore if the element does not exist. if (!$elementTable->exists($element->id)) { continue; } $itemTypesElement = new ItemTypesElements(); $itemTypesElement->item_type_id = $record->id; $itemTypesElement->element_id = $element->id; $itemTypesElement->order = $i; $itemTypesElement->save(); $i++; } } }
/** * Add a new element to the item type, giving the Element by its ID. * * @param int ID of the Element. */ public function addElementById($elementId) { if (!$this->hasElement($elementId)) { // Once we have a persistent Element record, build the join record. $iteJoin = new ItemTypesElements(); $iteJoin->element_id = $elementId; $iteJoin->item_type_id = $this->id; // 'order' should be last by default. $table = $this->getDb()->getTable('ItemTypesElements'); $select = $table->getSelectForCount()->where('item_types_elements.item_type_id = ?'); $iteJoin->order = (int) $table->fetchOne($select, array($this->id)) + 1; $iteJoin->save(); } }