mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-18577 drop enums support - step2: enums out from editor, dbmanager and all upgrade scripts.
This commit is contained in:
parent
3ece3e4273
commit
2a88f626f7
32 changed files with 348 additions and 677 deletions
|
@ -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>';
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue