From c528165dfd111561118b9af1ca0a72cb6f75c1a4 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 23 Dec 2010 12:10:24 -0400 Subject: [PATCH] Added wrapper to validation message - Now only seen by users with administer site configuration permission. --- XMLDatastream.inc | 163 +++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 90 deletions(-) diff --git a/XMLDatastream.inc b/XMLDatastream.inc index aac49cc6..3998582d 100644 --- a/XMLDatastream.inc +++ b/XMLDatastream.inc @@ -6,17 +6,13 @@ abstract class XMLDatastream { static $XMLNS = 'http://www.islandora.ca'; static $errors = NULL; - protected $xml = NULL; - private $valid = NULL; - - protected $forceSchema = FALSE; // if set, the datastream will be validated against the specified schema in self::$SCHEMA_URI instead of - // reading the schema URI from the datastream. - + private $valid = NULL; + protected $forceSchema = FALSE; // if set, the datastream will be validated against the specified schema in self::$SCHEMA_URI instead of + // reading the schema URI from the datastream. public $pid; - public $dsid; + public $dsid; - /** * Parses an PID from an identifier. * @param string $identifier @@ -26,7 +22,6 @@ abstract class XMLDatastream { return substr($identifier, 0, strpos($identifier, "/")); } - /** * validPid * Validates a fedora PID based on the regexp provided in the fedora @@ -41,11 +36,11 @@ abstract class XMLDatastream { if (strlen(trim($pid)) <= 64 && preg_match('/^([A-Za-z0-9]|-|\.)+:(([A-Za-z0-9])|-|\.|~|_|(%[0-9A-F]{2}))+$/', trim($pid))) { $valid = TRUE; } - + return $valid; } - - /** + + /** * validDsid * Validates a fedora Dsid based on the the allowed XML standard NCName. * The regexp is a "regular" subset of names allowed, it excludes some extended hex characters that are @@ -60,16 +55,14 @@ abstract class XMLDatastream { if (strlen(trim($dsid)) <= 64 && preg_match('/^[a-zA-Z0-9\_\-\.]+$/', trim($dsid))) { $valid = TRUE; } - + return $valid; } - - - - /** + + /** * Parses the DSID from an identifier. * TODO: combine this method with getPidFromIdentifier? - * @param string $identifier + * @param string $identifier * @return string $dsid */ public static function getDSIDFromIdentifier($identifier) { @@ -77,7 +70,6 @@ abstract class XMLDatastream { return substr($temp, 1); } - /** * Constructs an XMLDatastream object from the XML file specified. * Returns FALSE on failure. @@ -89,7 +81,6 @@ abstract class XMLDatastream { return new self(file_get_contents($filename)); } - /** * Constructor * NOTE: Use the static constructor methods whenever possible. @@ -100,15 +91,14 @@ abstract class XMLDatastream { * @return XMLDatastream $cm */ public function __construct($xmlStr, $pid = NULL, $dsid = NULL) { - libxml_use_internal_errors(true); - $this->pid=$pid; - $this->dsid=$dsid; - - if ($xmlStr !== NULL) { - $this->xml = (is_object($xmlStr) && get_class($xmlStr) == DOMDocument)?$xmlStr : DOMDocument::loadXML($xmlStr); - } - } + libxml_use_internal_errors(true); + $this->pid = $pid; + $this->dsid = $dsid; + if ($xmlStr !== NULL) { + $this->xml = (is_object($xmlStr) && get_class($xmlStr) == DOMDocument) ? $xmlStr : DOMDocument::loadXML($xmlStr); + } + } /** * Gets the identifier for this XMLDatastream @@ -119,10 +109,9 @@ abstract class XMLDatastream { * @return string identifier */ public function getIdentifier() { - return ($this->pid != NULL && $this->dsid != NULL) ? $this->pid . '/'. $this->dsid : FALSE; + return ($this->pid != NULL && $this->dsid != NULL) ? $this->pid . '/' . $this->dsid : FALSE; } - /** * Dumps the XMLDatastream as an XML String * @@ -131,12 +120,11 @@ abstract class XMLDatastream { */ public function dumpXml() { if ($this->xml == NULL) { - $this->fetchXml(); + $this->fetchXml(); } return $this->xml->saveXml(); } - /** * Validates the XMLDatastream against the schema location * defined by the xmlns:schemaLocation attribute of the root @@ -151,84 +139,79 @@ abstract class XMLDatastream { * @return boolean $valid */ public function validate() { + global $user; if ($this->valid === NULL) { - $ret = TRUE; + $ret = TRUE; if ($this->xml == NULL) { - $this->fetchXml(); - } - // figure out if we're dealing with a new or old schema - $rootEl = $this->xml->firstChild; - if (!$rootEl->hasAttributes() || $rootEl->attributes->getNamedItem('schemaLocation') === NULL ) { + $this->fetchXml(); + } + // figure out if we're dealing with a new or old schema + $rootEl = $this->xml->firstChild; + if (!$rootEl->hasAttributes() || $rootEl->attributes->getNamedItem('schemaLocation') === NULL) { //$tmpname = substr($this->pid, strpos($this->pid, ':') + 1); $tmpname = user_password(10); $this->convertFromOldSchema(); drupal_add_js("fedora_repository_print_new_schema_$tmpname = function(tagID) { - var target = document.getElementById(tagID); - var content = target.innerHTML; - var text = 'Title' + - '' + content +''; - printerWindow = window.open('', '', 'toolbar=no,location=no,' + 'status=no,menu=no,scrollbars=yes,width=650,height=400'); - printerWindow.document.open(); -printerWindow.document.write(text); -} ", 'inline'); + var target = document.getElementById(tagID); + var content = target.innerHTML; + var text = 'Title' + + '' + content +''; + printerWindow = window.open('', '', 'toolbar=no,location=no,' + 'status=no,menu=no,scrollbars=yes,width=650,height=400'); + printerWindow.document.open(); + printerWindow.document.write(text); + }", 'inline'); - drupal_set_message('Warning: XMLDatastream performed conversion of \''. $this->getIdentifier() .'\' from old schema. Please update the datastream. The new datastream contents are here. '); - $rootEl = $this->xml->firstChild; + if (user_access('administer site configuration')) { + drupal_set_message('Warning: XMLDatastream performed conversion of \'' . $this->getIdentifier() . '\' from old schema. Please update the datastream. The new datastream contents are here. '); + } + + $rootEl = $this->xml->firstChild; } $schemaLocation = NULL; if ($this->forceSchema) { - // hack because you cant easily get the static property value from + // hack because you cant easily get the static property value from // a subclass. $vars = get_class_vars(get_class($this)); $schemaLocation = $vars['SCHEMA_URI']; - - } - elseif ($rootEl->attributes->getNamedItem('schemaLocation') !== NULL) { + } elseif ($rootEl->attributes->getNamedItem('schemaLocation') !== NULL) { //figure out where the schema is located and validate. list(, $schemaLocation) = preg_split('/\s+/', $rootEl->attributes->getNamedItem('schemaLocation')->nodeValue); - $name = $rootEl->getAttribute('name'); - if ($name !== FALSE) { - $this->name = $name; - } } - $schemaLocation = NULL; - return TRUE; + $schemaLocation = NULL; + return TRUE; if ($schemaLocation !== NULL) { if (!$this->xml->schemaValidate($schemaLocation)) { $ret = FALSE; - $errors=libxml_get_errors(); + $errors = libxml_get_errors(); foreach ($errors as $err) { - self::$errors[] = 'XML Error: Line '. $err->line .': '. $err->message; + self::$errors[] = 'XML Error: Line ' . $err->line . ': ' . $err->message; } - } - else { - $this->name=$rootEl->attributes->getNamedItem('name')->nodeValue; + } else { + $this->name = $rootEl->attributes->getNamedItem('name')->nodeValue; } - } - else { + } else { $ret = FALSE; self::$errors[] = 'Unable to load schema.'; } $this->valid = $ret; - } - + } + return $this->valid; - } - - + } + /** * Saves the current XML datastream back to fedora. The XML must validate. * * @return boolean $success - */ + */ public function saveToFedora() { module_load_include('inc', 'Fedora_Repository', 'api/fedora_item'); if ($this->validate()) { $item = new Fedora_Item($this->pid); $item->modify_datastream_by_value($this->dumpXml(), $this->dsid, $this->name, 'application/xml'); - return TRUE; + return TRUE; } return FALSE; } @@ -243,32 +226,33 @@ printerWindow.document.write(text); * @return boolean $valid */ public function purgeVersions($start_date, $end_date = NULL) { - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - $fedora_item = new Fedora_Item($this->pid); - return $fedora_item->purge_datastream( $this->dsid, $start_date, $end_date); + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + $fedora_item = new Fedora_Item($this->pid); + return $fedora_item->purge_datastream($this->dsid, $start_date, $end_date); } - + /** * Gets the history of the datastream from fedora. * Returns false on failure. * * @return string[] $ret - */ + */ public function getHistory() { - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - $fedora_item = new Fedora_Item($this->pid); - $history = $fedora_item->get_datastream_history($this->dsid); - - $ret = FALSE; - if ($history !== FALSE) { - $ret = array(); - foreach ($history as $version) { - if ($version->versionID !== NULL) $ret[] = array('versionID' => $version->versionID, 'createDate' => $version->createDate); - } + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + $fedora_item = new Fedora_Item($this->pid); + $history = $fedora_item->get_datastream_history($this->dsid); + + $ret = FALSE; + if ($history !== FALSE) { + $ret = array(); + foreach ($history as $version) { + if ($version->versionID !== NULL) + $ret[] = array('versionID' => $version->versionID, 'createDate' => $version->createDate); } - return $ret; + } + return $ret; } - + /** * Attempts to convert from the old XML schema to the new by * traversing the XML DOM and building a new DOM. When done @@ -277,5 +261,4 @@ printerWindow.document.write(text); * @return void */ abstract protected function convertFromOldSchema(); - }