MDL-18577 drop enums support - step2: enums out from editor, dbmanager and all upgrade scripts.

This commit is contained in:
stronk7 2009-05-01 01:19:16 +00:00
parent 3ece3e4273
commit 2a88f626f7
32 changed files with 348 additions and 677 deletions

View file

@ -155,16 +155,6 @@ class edit_field extends XMLDBAction {
$sequenceoptions = array (0 => $this->str['no'], 1 => 'auto-numbered');
$o.= ' <tr valign="top"><td><label for="menusequence" accesskey="s">Sequence:</label></td>';
$o.= ' <td colspan="2">' . choose_from_menu($sequenceoptions, 'sequence', $field->getSequence(), '', '', '', true) . '</td></tr>';
/// xmldb_field Enum and enumvalues
$enumoptions = array (0 => $this->str['no'], 1 => $this->str['yes']);
$o.= ' <tr valign="top"><td><label for="menuenum" accesskey="s">Enum:</label></td>';
$o.= ' <td>' . choose_from_menu($enumoptions, 'enum', $field->getEnum(), '', '', '', true) . '</td>';
if (is_array($field->getEnumValues())) {
$enumvalues = implode(', ', $field->getEnumValues());
} else {
$enumvalues = '';
}
$o.= ' <td><textarea name="enumvalues" rows="3" cols="70" id="enumvalues">' . s($enumvalues) . '</textarea></td></tr>';
/// xmldb_field Default
$o.= ' <tr valign="top"><td><label for="default" accesskey="d">Default:</label></td>';
$o.= ' <td colspan="2"><input type="text" name="default" size="30" maxlength="80" id="default" value="' . s($field->getDefault()) . '" /></td></tr>';

View file

@ -7,7 +7,7 @@
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.com //
// //
// Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.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 //
@ -34,19 +34,16 @@
/// Get the required fields
var typeField = document.getElementById('menutype');
var sequenceField = document.getElementById('menusequence');
var enumField = document.getElementById('menuenum');
/// Register the rest of events
if (typeField.addEventListener) {
/// Standard
typeField.addEventListener('change', transformForm, false);
sequenceField.addEventListener('change', transformForm, false);
enumField.addEventListener('change', transformForm, false);
} else {
/// IE 5.5
typeField.attachEvent('onchange', transformForm);
sequenceField.attachEvent('onchange', transformForm);
enumField.attachEvent('onchange', transformForm);
}
}
@ -62,8 +59,6 @@ function transformForm(event) {
var unsignedField = document.getElementById('menuunsigned');
var notnullField = document.getElementById('menunotnull');
var sequenceField = document.getElementById('menusequence');
var enumField = document.getElementById('menuenum');
var enumvaluesField = document.getElementById('enumvalues');
var defaultField = document.getElementById('default');
var lengthTip = document.getElementById('lengthtip');
@ -74,16 +69,8 @@ function transformForm(event) {
unsignedField.disabled = false;
notnullField.disabled = false;
sequenceField.disabled = false;
enumField.disabled = false;
enumvaluesField.disabled = false;
defaultField.disabled = false;
/// Based on enum, disable some items
if (enumField.value == '0') {
enumvaluesField.disabled = true;
enumvaluesField.value = '';
};
/// Based on sequence, disable some items
if (sequenceField.value == '1') {
unsignedField.disabled = true;
@ -92,10 +79,6 @@ function transformForm(event) {
notnullField.value = '1';
defaultField.disabled = true;
defaultField.value = '';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
}
@ -106,26 +89,14 @@ function transformForm(event) {
decimalsTip.innerHTML = '';
decimalsField.disabled = true;
decimalsField.value = '';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
break;
case '2': // XMLDB_TYPE_NUMBER
lengthTip.innerHTML = ' 1...20';
decimalsTip.innerHTML = ' 0...length or empty';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
break;
case '3': // XMLDB_TYPE_FLOAT
lengthTip.innerHTML = ' 1...20 or empty';
decimalsTip.innerHTML = ' 0...length or empty';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
break;
case '4': // XMLDB_TYPE_CHAR
lengthTip.innerHTML = ' 1...255';
@ -158,10 +129,6 @@ function transformForm(event) {
unsignedField.value = '0';
sequenceField.disabled = true;
sequenceField.value = '0';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
defaultField.disabled = true;
defaultField.value = '';
break;
@ -176,10 +143,6 @@ function transformForm(event) {
unsignedField.value = '0';
sequenceField.disabled = true;
sequenceField.value = '0';
enumField.disabled = true;
enumField.value = '0';
enumvaluesField.disabled = true;
enumvaluesField.value = '';
defaultField.disabled = true;
defaultField.value = '';
break;

View file

@ -49,8 +49,6 @@ class edit_field_save extends XMLDBAction {
'binaryincorrectlength' => 'xmldb',
'numberincorrectdecimals' => 'xmldb',
'floatincorrectdecimals' => 'xmldb',
'enumvaluesincorrect' => 'xmldb',
'wronglengthforenum' => 'xmldb',
'defaultincorrect' => 'xmldb',
'administration' => ''
));
@ -96,9 +94,6 @@ class edit_field_save extends XMLDBAction {
$unsigned = optional_param('unsigned', false, PARAM_BOOL);
$notnull = optional_param('notnull', false, PARAM_BOOL);
$sequence = optional_param('sequence', false, PARAM_BOOL);
$enum = optional_param('enum', false, PARAM_BOOL);
$enumvalues = optional_param('enumvalues', 0, PARAM_CLEAN);
$enumvalues = trim($enumvalues);
$default = optional_param('default', NULL, PARAM_PATH);
$default = trim($default);
@ -114,21 +109,14 @@ class edit_field_save extends XMLDBAction {
if ($sequence) {
$unsigned = true;
$notnull = true;
$enum = false;
$default = NULL;
}
if ($type != XMLDB_TYPE_NUMBER && $type != XMLDB_TYPE_FLOAT) {
$decimals = NULL;
}
if ($type != XMLDB_TYPE_CHAR && $type != XMLDB_TYPE_TEXT) {
$enum = false;
}
if ($type == XMLDB_TYPE_BINARY) {
$default = NULL;
}
if (!$enum) {
$enumvalues = NULL;
}
if ($default === '') {
$default = NULL;
}
@ -232,43 +220,6 @@ class edit_field_save extends XMLDBAction {
$errors[] = $this->str['binaryincorrectlength'];
}
}
/// Enum checks
if ($enum) {
$enumerr = false;
$enumarr = explode(',',$enumvalues);
$maxlength = 0;
if ($enumarr) {
foreach ($enumarr as $key => $enumelement) {
/// Clear some spaces
$enumarr[$key] = trim($enumelement);
$enumelement = trim($enumelement);
/// Calculate needed length
$le = strlen(str_replace("'", '', $enumelement));
if ($le > $maxlength) {
$maxlength = $le;
}
/// Skip if under error
if ($enumerr) {
continue;
}
/// Look for quoted strings
if (substr($enumelement, 0, 1) != "'" ||
substr($enumelement, -1, 1) != "'") {
$enumerr = true;
}
}
} else {
$enumerr = true;
}
if ($enumerr) {
$errors[] = $this->str['enumvaluesincorrect'];
} else {
$enumvalues = $enumarr;
}
if ($length < $maxlength) {
$errors[] = $this->str['wronglengthforenum'];
}
}
if (!empty($errors)) {
$tempfield = new xmldb_field($name);
@ -278,8 +229,6 @@ class edit_field_save extends XMLDBAction {
$tempfield->setUnsigned($unsigned);
$tempfield->setNotNull($notnull);
$tempfield->setSequence($sequence);
$tempfield->setEnum($enum);
$tempfield->setEnumValues($enumvalues);
$tempfield->setDefault($default);
/// Prepare the output
$site = get_site();
@ -323,8 +272,6 @@ class edit_field_save extends XMLDBAction {
$field->setUnsigned($unsigned);
$field->setNotNull($notnull);
$field->setSequence($sequence);
$field->setEnum($enum);
$field->setEnumValues($enumvalues);
$field->setDefault($default);
/// If the hash has changed from the old one, change the version

View file

@ -124,8 +124,8 @@ class view_table_php extends XMLDBAction {
$optionspacer . 'change_field_precision',
$optionspacer . 'change_field_unsigned',
$optionspacer . 'change_field_notnull',
$optionspacer . 'change_field_enum',
$optionspacer . 'change_field_default',
$optionspacer . 'drop_enum_from_field', /// TODO: Moodle 2.1 - Drop drop_enum_from_field
'Keys',
$optionspacer . 'add_key',
$optionspacer . 'drop_key',
@ -229,9 +229,9 @@ class view_table_php extends XMLDBAction {
$o.= $this->str['mustselectonefield'];
}
break;
case 'change_field_enum':
case 'drop_enum_from_field': /// TODO: Moodle 2.1 - Drop drop_enum_from_field
if ($fieldkeyindexinitial == 'f') { //Only if we have got one field
$o.= s($this->change_field_enum_php($structure, $tableparam, $fieldkeyindexparam));
$o.= s($this->drop_enum_from_field_php($structure, $tableparam, $fieldkeyindexparam));
} else {
$o.= $this->str['mustselectonefield'];
}
@ -648,14 +648,19 @@ class view_table_php extends XMLDBAction {
/**
* This function will generate all the PHP code needed to
* change the enum values (check constraint) of one field
* drop the enum values (check constraint) of one field
* using XMLDB objects and functions
*
* Note this function is here as part of the process of
* dropping enums completely from Moodle 2.0: MDL-18577
* and will be out in Moodle 2.1
* TODO: Moodle 2.1 - Drop drop_enum_from_field_php
*
* @param xmldb_structure structure object containing all the info
* @param string table table name
* @param string field field name to change its enum
*/
function change_field_enum_php($structure, $table, $field) {
function drop_enum_from_field_php($structure, $table, $field) {
$result = '';
/// Validate if we can do it
@ -669,22 +674,19 @@ class view_table_php extends XMLDBAction {
return false;
}
/// Calculate the enum tip text
$enum = $field->getEnum() ? implode(', ', $field->getEnumValues()) : 'none';
/// Add the standard PHP header
$result .= XMLDB_PHP_HEADER;
/// Add contents
$result .= XMLDB_LINEFEED;
$result .= ' /// Changing list of values (enum) of field ' . $field->getName() . ' on table ' . $table->getName() . ' to ' . $enum . XMLDB_LINEFEED;
$result .= ' /// Drop list of values (enum) from field ' . $field->getName() . ' on table ' . $table->getName() . XMLDB_LINEFEED;
$result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED;
$result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED;
/// Launch the proper DDL
$result .= XMLDB_LINEFEED;
$result .= ' /// Launch change of list of values for field ' . $field->getName() . XMLDB_LINEFEED;
$result .= ' $dbman->change_field_enum($table, $field);' . XMLDB_LINEFEED;
$result .= ' /// Launch drop of list of values from field ' . $field->getName() . XMLDB_LINEFEED;
$result .= ' $dbman->drop_enum_from_field($table, $field);' . XMLDB_LINEFEED;
/// Add the proper upgrade_xxxx_savepoint call
$result .= $this->upgrade_savepoint_php ($structure);