xmldbtable.class.php

来自「很棒的在线教学系统」· PHP 代码 · 共 1,081 行 · 第 1/3 页

PHP
1,081
字号
<?php // $Id: XMLDBTable.class.php,v 1.22 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 tableclass XMLDBTable extends XMLDBObject {    var $fields;    var $keys;    var $indexes;    /**     * Creates one new XMLDBTable     */    function XMLDBTable($name) {        parent::XMLDBObject($name);        $this->fields = array();        $this->keys = array();        $this->indexes = array();    }    /**     * Add one field to the table, allowing to specify the desired  order     * If it's not specified, then the field is added at the end     */    function addField(&$field, $after=NULL) {    /// Calculate the previous and next fields        $prevfield = NULL;        $nextfield = NULL;        if (!$after) {            $allfields =& $this->getFields();            if (!empty($allfields)) {                end($allfields);                $prevfield =& $allfields[key($allfields)];            }        } else {            $prevfield =& $this->getField($after);        }        if ($prevfield && $prevfield->getNext()) {            $nextfield =& $this->getField($prevfield->getNext());        }    /// Set current field previous and next attributes        if ($prevfield) {            $field->setPrevious($prevfield->getName());            $prevfield->setNext($field->getName());        }        if ($nextfield) {            $field->setNext($nextfield->getName());            $nextfield->setPrevious($field->getName());        }    /// Some more attributes        $field->setLoaded(true);        $field->setChanged(true);    /// Add the new field        $this->fields[] = $field;    /// Reorder the field        $this->orderFields($this->fields);    /// Recalculate the hash        $this->calculateHash(true);    /// We have one new field, so the table has changed        $this->setChanged(true);        return $field;    }    /**     * Add one key to the table, allowing to specify the desired  order     * If it's not specified, then the key is added at the end     */    function addKey(&$key, $after=NULL) {    /// Calculate the previous and next keys        $prevkey = NULL;        $nextkey = NULL;        if (!$after) {            $allkeys =& $this->getKeys();            if (!empty($allkeys)) {                end($allkeys);                $prevkey =& $allkeys[key($allkeys)];            }        } else {            $prevkey =& $this->getKey($after);        }        if ($prevkey && $prevkey->getNext()) {            $nextkey =& $this->getKey($prevkey->getNext());        }    /// Set current key previous and next attributes        if ($prevkey) {            $key->setPrevious($prevkey->getName());            $prevkey->setNext($key->getName());        }        if ($nextkey) {            $key->setNext($nextkey->getName());            $nextkey->setPrevious($key->getName());        }    /// Some more attributes        $key->setLoaded(true);        $key->setChanged(true);    /// Add the new key        $this->keys[] = $key;    /// Reorder the keys        $this->orderKeys($this->keys);    /// Recalculate the hash        $this->calculateHash(true);    /// We have one new field, so the table has changed        $this->setChanged(true);    }    /**     * Add one index to the table, allowing to specify the desired  order     * If it's not specified, then the index is added at the end     */    function addIndex(&$index, $after=NULL) {    /// Calculate the previous and next indexes        $previndex = NULL;        $nextindex = NULL;        if (!$after) {            $allindexes =& $this->getIndexes();            if (!empty($allindexes)) {                end($allindexes);                $previndex =& $allindexes[key($allindexes)];            }        } else {            $previndex =& $this->getIndex($after);        }        if ($previndex && $previndex->getNext()) {            $nextindex =& $this->getIndex($previndex->getNext());        }    /// Set current index previous and next attributes        if ($previndex) {            $index->setPrevious($previndex->getName());            $previndex->setNext($index->getName());        }        if ($nextindex) {            $index->setNext($nextindex->getName());            $nextindex->setPrevious($index->getName());        }    /// Some more attributes        $index->setLoaded(true);        $index->setChanged(true);    /// Add the new index        $this->indexes[] = $index;    /// Reorder the indexes        $this->orderIndexes($this->indexes);    /// Recalculate the hash        $this->calculateHash(true);    /// We have one new index, so the table has changed        $this->setChanged(true);    }    /**     * This function will return the array of fields in the table     */    function &getFields() {        return $this->fields;    }    /**     * This function will return the array of keys in the table     */    function &getKeys() {        return $this->keys;    }    /**     * This function will return the array of indexes in the table     */    function &getIndexes() {        return $this->indexes;    }    /**     * Returns one XMLDBField     */    function &getField($fieldname) {        $i = $this->findFieldInArray($fieldname);        if ($i !== NULL) {            return $this->fields[$i];        }        $null = NULL;        return $null;    }    /**     * Returns the position of one field in the array.     */    function &findFieldInArray($fieldname) {        foreach ($this->fields as $i => $field) {            if ($fieldname == $field->getName()) {                return $i;            }        }        $null = NULL;        return $null;    }    /**     * This function will reorder the array of fields     */    function orderFields() {        $result = $this->orderElements($this->fields);        if ($result) {            $this->setFields($result);            return true;        } else {            return false;        }    }    /**     * Returns one XMLDBKey     */    function &getKey($keyname) {        $i = $this->findKeyInArray($keyname);        if ($i !== NULL) {            return $this->keys[$i];        }        $null = NULL;        return $null;    }    /**     * Returns the position of one key in the array.     */    function &findKeyInArray($keyname) {        foreach ($this->keys as $i => $key) {            if ($keyname == $key->getName()) {                return $i;            }        }        $null = NULL;        return $null;    }    /**     * This function will reorder the array of keys     */    function orderKeys() {        $result = $this->orderElements($this->keys);        if ($result) {            $this->setKeys($result);            return true;        } else {            return false;        }    }    /**     * Returns one XMLDBIndex     */    function &getIndex($indexname) {        $i = $this->findIndexInArray($indexname);        if ($i !== NULL) {            return $this->indexes[$i];        }        $null = NULL;        return $null;    }    /**     * Returns the position of one index in the array.     */    function &findIndexInArray($indexname) {        foreach ($this->indexes as $i => $index) {            if ($indexname == $index->getName()) {                return $i;            }        }        $null = NULL;        return $null;    }    /**     * This function will reorder the array of indexes     */    function orderIndexes() {        $result = $this->orderElements($this->indexes);        if ($result) {            $this->setIndexes($result);            return true;        } else {            return false;        }    }    /**     * This function will set the array of fields in the table     */    function setFields($fields) {        $this->fields = $fields;    }    /**     * This function will set the array of keys in the table     */    function setKeys($keys) {        $this->keys = $keys;    }    /**     * This function will set the array of indexes in the table     */    function setIndexes($indexes) {        $this->indexes = $indexes;    }    /**     * Delete one field from the table     */    function deleteField($fieldname) {        $field =& $this->getField($fieldname);        if ($field) {            $i = $this->findFieldInArray($fieldname);            $prevfield = NULL;            $nextfield = NULL;        /// Look for prev and next field            $prevfield =& $this->getField($field->getPrevious());            $nextfield =& $this->getField($field->getNext());        /// Change their previous and next attributes            if ($prevfield) {                $prevfield->setNext($field->getNext());            }            if ($nextfield) {                $nextfield->setPrevious($field->getPrevious());            }        /// Delete the field            unset($this->fields[$i]);        /// Reorder the whole structure

⌨️ 快捷键说明

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