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 + -
显示快捷键?