Browse Source

Added support for changing islandora_form_builder form elements.

pull/105/head
Nigel Banks 14 years ago
parent
commit
6f1786f53d
  1. 132
      ContentModel.inc

132
ContentModel.inc

@ -11,6 +11,7 @@ class ContentModel extends XMLDatastream {
private $mimes = NULL;
public $pid_namespace;
public $name;
private $xpath;
/**
* Gets the default DSID to use for ContentModel datastreams.
@ -223,8 +224,9 @@ class ContentModel extends XMLDatastream {
public function __construct($xmlStr, $pid = NULL, $dsid = NULL, $pid_namespace = NULL, $name = NULL) {
parent::__construct($xmlStr, $pid, $dsid);
$this->pid_namespace = $pid_namespace;
$this->name = ($name == NULL)?'Islandora Content Model':$name;
$this->xpath = new DOMXPath($this->xml);
$this->xpath->registerNamespace('cm', 'http://www.islandora.ca');
}
/**
@ -2023,9 +2025,7 @@ class ContentModel extends XMLDatastream {
if (!$this->validate()) {
return FALSE;
}
$xpath = new DOMXPath($this->xml);
$xpath->registerNamespace('cm', 'http://www.islandora.ca');
$result = $xpath->query('//cm:forms/cm:form/@name'); // Select the name attribute of all forms.
$result = $this->xpath->query('//cm:forms/cm:form/@name'); // Select the name attribute of all forms.
for($i = 0; $i < $result->length; $i++) {
$attribute = $result->item($i);
$name = $attribute->value;
@ -2033,4 +2033,128 @@ class ContentModel extends XMLDatastream {
}
return $names;
}
/**
* Removes the named form.
*
* @param string $name
* Name of the form to remove.
*
* @return boolean
* TRUE on success, FALSE otherwise.
*/
public function removeForm($name) {
$result = $this->xpath->query("//cm:form[@name='$name']");
if ($result->length == 1) {
$form = $result->item(0);
$form->parentNode->removeChild($form);
return TRUE;
}
return FALSE;
}
/**
* Adds the named form.
*
* @param string $name
* Name of the form to add.
*
* @return boolean
* TRUE on success, FALSE otherwise.
*/
public function addForm($name) {
$result = $this->xpath->query("//cm:form[@name='$name']");
if ($result->length != 0) {
return FALSE; // Already Exists.
}
$result = $this->xpath->query("//cm:forms");
if ($result->length == 0) { // Forms doesn't exist
$forms = $this->xml->createElement('forms');
$form = $this->xml->createElement('form');
$form->setAttribute('name', $name);
$forms->appendChild($form);
$result = $this->xpath->query("//cm:content_model");
$result->item(0)->appendChild($forms);
return TRUE;
}
else { // Forms exists just create form.
$form = $this->xml->createElement($name);
$form->setAttribute('name', $name);
$result->item(0)->appendChild($form);
return TRUE;
}
}
/**
*
* @param <type> $element_definition
* @param <type> $parent_element
* @return <type>
*/
public function addElementToForm($element, $parent_element) {
$element = $this->xml->importNode($element, TRUE);
$parent_element->appendChild($element);
return TRUE;
}
/**
*
* @param <type> $element_definition
* @param <type> $parent_element
*/
public function editFormElement($new_element, $edit_element) {
$new_element = $this->xml->importNode($new_element, TRUE);
$this->insertElementInPlace($new_element, $edit_element);
$edit_element->parentNode->removeChild($edit_element);
return TRUE;
}
/**
*
* @param <type> $new_element
* @param <type> $element
*/
private function insertElementInPlace($new_element, $element) {
$next = $element->nextSibling;
if ($next) {
$element->parentNode->insertBefore($new_element, $next);
}
else {
$element->parentNode->appendChild($new_element);
}
}
/**
*
* @param <type> $form_element
* @return <type>
*/
public function incFormElement($form_element) {
$prev = $form_element;
$name = $prev->getAttribute('name');
while ($prev = $prev->previousSibling) {
if (get_class($prev) == 'DOMElement') {
$form_element->parentNode->insertBefore($form_element, $prev);
break;
}
}
return TRUE;
}
/**
*
* @param <type> $form_element
* @return <type>
*/
public function decFormElement($form_element) {
$next = $form_element;
while ($next = $next->nextSibling) {
if (get_class($next) == 'DOMElement') {
$this->insertElementInPlace($form_element, $next);
break;
}
}
return TRUE;
}
}

Loading…
Cancel
Save