xmldbindex.class.php

来自「很棒的在线教学系统」· PHP 代码 · 共 265 行

PHP
265
字号
<?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 Indexclass 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;    }}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?