/lib/xmldb/classes/XMLDBIndex.class.php
https://github.com/jarednipper/HSU-common-code · PHP · 264 lines · 154 code · 31 blank · 79 comment · 33 complexity · c46e7f3848db50819de26cdba4809780 MD5 · raw file
- <?php // $Id: XMLDBIndex.class.php,v 1.9 2007/10/10 05:25:14 nicolasconnault Exp $
- ///////////////////////////////////////////////////////////////////////////
- // //
- // NOTICE OF COPYRIGHT //
- // //
- // Moodle - Modular Object-Oriented Dynamic Learning Environment //
- // http://moodle.com //
- // //
- // Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com //
- // (C) 2001-3001 Eloy Lafuente (stronk7) http://contiento.com //
- // //
- // This program is free software; you can redistribute it and/or modify //
- // it under the terms of the GNU General Public License as published by //
- // the Free Software Foundation; either version 2 of the License, or //
- // (at your option) any later version. //
- // //
- // This program is distributed in the hope that it will be useful, //
- // but WITHOUT ANY WARRANTY; without even the implied warranty of //
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
- // GNU General Public License for more details: //
- // //
- // http://www.gnu.org/copyleft/gpl.html //
- // //
- ///////////////////////////////////////////////////////////////////////////
- /// This class represent one XMLDB Index
- class XMLDBIndex extends XMLDBObject {
- var $unique;
- var $fields;
- /**
- * Creates one new XMLDBIndex
- */
- function XMLDBIndex($name) {
- parent::XMLDBObject($name);
- $this->unique = false;
- $this->fields = array();
- }
- /**
- * Set all the attributes of one XMLDBIndex
- *
- * @param string type XMLDB_INDEX_UNIQUE, XMLDB_INDEX_NOTUNIQUE
- * @param array fields an array of fieldnames to build the index over
- */
- function setAttributes($type, $fields) {
- $this->unique = !empty($type) ? true : false;
- $this->fields = $fields;
- }
- /**
- * Get the index unique
- */
- function getUnique() {
- return $this->unique;
- }
- /**
- * Set the index unique
- */
- function setUnique($unique = true) {
- $this->unique = $unique;
- }
- /**
- * Set the index fields
- */
- function setFields($fields) {
- $this->fields = $fields;
- }
- /**
- * Get the index fields
- */
- function &getFields() {
- return $this->fields;
- }
- /**
- * Load data from XML to the index
- */
- function arr2XMLDBIndex($xmlarr) {
- $result = true;
- /// Debug the table
- /// traverse_xmlize($xmlarr); //Debug
- /// print_object ($GLOBALS['traverse_array']); //Debug
- /// $GLOBALS['traverse_array']=""; //Debug
- /// Process key attributes (name, unique, fields, comment, previous, next)
- if (isset($xmlarr['@']['NAME'])) {
- $this->name = trim($xmlarr['@']['NAME']);
- } else {
- $this->errormsg = 'Missing NAME attribute';
- $this->debug($this->errormsg);
- $result = false;
- }
- if (isset($xmlarr['@']['UNIQUE'])) {
- $unique = strtolower(trim($xmlarr['@']['UNIQUE']));
- if ($unique == 'true') {
- $this->unique = true;
- } else if ($unique == 'false') {
- $this->unique = false;
- } else {
- $this->errormsg = 'Incorrect UNIQUE attribute (true/false allowed)';
- $this->debug($this->errormsg);
- $result = false;
- }
- } else {
- $this->errormsg = 'Undefined UNIQUE attribute';
- $this->debug($this->errormsg);
- $result = false;
- }
- if (isset($xmlarr['@']['FIELDS'])) {
- $fields = strtolower(trim($xmlarr['@']['FIELDS']));
- if ($fields) {
- $fieldsarr = explode(',',$fields);
- if ($fieldsarr) {
- foreach ($fieldsarr as $key => $element) {
- $fieldsarr [$key] = trim($element);
- }
- } else {
- $this->errormsg = 'Incorrect FIELDS attribute (comma separated of fields)';
- $this->debug($this->errormsg);
- $result = false;
- }
- } else {
- $this->errormsg = 'Empty FIELDS attribute';
- $this->debug($this->errormsg);
- $result = false;
- }
- } else {
- $this->errormsg = 'Missing FIELDS attribute';
- $this->debug($this->errormsg);
- $result = false;
- }
- /// Finally, set the array of fields
- $this->fields = $fieldsarr;
- if (isset($xmlarr['@']['COMMENT'])) {
- $this->comment = trim($xmlarr['@']['COMMENT']);
- }
- if (isset($xmlarr['@']['PREVIOUS'])) {
- $this->previous = trim($xmlarr['@']['PREVIOUS']);
- }
- if (isset($xmlarr['@']['NEXT'])) {
- $this->next = trim($xmlarr['@']['NEXT']);
- }
- /// Set some attributes
- if ($result) {
- $this->loaded = true;
- }
- $this->calculateHash();
- return $result;
- }
- /**
- * This function calculate and set the hash of one XMLDBIndex
- */
- function calculateHash($recursive = false) {
- if (!$this->loaded) {
- $this->hash = NULL;
- } else {
- $key = $this->unique . implode (', ', $this->fields);
- $this->hash = md5($key);
- }
- }
- /**
- *This function will output the XML text for one index
- */
- function xmlOutput() {
- $o = '';
- $o.= ' <INDEX NAME="' . $this->name . '"';
- if ($this->unique) {
- $unique = 'true';
- } else {
- $unique = 'false';
- }
- $o.= ' UNIQUE="' . $unique . '"';
- $o.= ' FIELDS="' . implode(', ', $this->fields) . '"';
- if ($this->comment) {
- $o.= ' COMMENT="' . htmlspecialchars($this->comment) . '"';
- }
- if ($this->previous) {
- $o.= ' PREVIOUS="' . $this->previous . '"';
- }
- if ($this->next) {
- $o.= ' NEXT="' . $this->next . '"';
- }
- $o.= '/>' . "\n";
- return $o;
- }
- /**
- * This function will set all the attributes of the XMLDBIndex object
- * based on information passed in one ADOindex
- */
- function setFromADOIndex($adoindex) {
- /// Set the unique field
- $this->unique = false;
- /// Set the fields, converting all them to lowercase
- $fields = array_flip(array_change_key_case(array_flip($adoindex['columns'])));
- $this->fields = $fields;
- /// Some more fields
- $this->loaded = true;
- $this->changed = true;
- }
- /**
- * Returns the PHP code needed to define one XMLDBIndex
- */
- function getPHP() {
- $result = '';
- /// The type
- $unique = $this->getUnique();
- if (!empty($unique)) {
- $result .= 'XMLDB_INDEX_UNIQUE, ';
- } else {
- $result .= 'XMLDB_INDEX_NOTUNIQUE, ';
- }
- /// The fields
- $indexfields = $this->getFields();
- if (!empty($indexfields)) {
- $result .= 'array(' . "'". implode("', '", $indexfields) . "')";
- } else {
- $result .= 'null';
- }
- /// Return result
- return $result;
- }
- /**
- * Shows info in a readable format
- */
- function readableInfo() {
- $o = '';
- /// unique
- if ($this->unique) {
- $o .= 'unique';
- } else {
- $o .= 'not unique';
- }
- /// fields
- $o .= ' (' . implode(', ', $this->fields) . ')';
- return $o;
- }
- }
- ?>