AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle 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 3 of the License, or
// (at your option) any later version.
//
// Moodle 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.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package tool_xmldb
* @copyright 2003 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Add the mandatory fields for persistent to the table.
*
* @package tool_xmldb
* @copyright 2019 Michael Aherne
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class add_persistent_mandatory extends XMLDBAction {
function init() {
parent::init();
// Get needed strings.
$this->loadStrings(array(
'addpersistent' => 'tool_xmldb',
'persistentfieldsconfirm' => 'tool_xmldb',
'persistentfieldscomplete' => 'tool_xmldb',
'persistentfieldsexist' => 'tool_xmldb',
'back' => 'core'
));
}
function getTitle() {
return $this->str['addpersistent'];
}
function invoke() {
parent::invoke();
$this->does_generate = ACTION_GENERATE_HTML;
global $CFG, $XMLDB, $OUTPUT;
$dir = required_param('dir', PARAM_PATH);
$dirpath = $CFG->dirroot . $dir;
if (empty($XMLDB->dbdirs)) {
return false;
}
if (!empty($XMLDB->editeddirs)) {
$editeddir = $XMLDB->editeddirs[$dirpath];
$structure = $editeddir->xml_file->getStructure();
}
$tableparam = required_param('table', PARAM_ALPHANUMEXT);
/** @var xmldb_table $table */
$table = $structure->getTable($tableparam);
$result = true;
// Launch postaction if exists (leave this here!)
if ($this->getPostAction() && $result) {
return $this->launch($this->getPostAction());
}
$confirm = optional_param('confirm', false, PARAM_BOOL);
$fields = ['usermodified', 'timecreated', 'timemodified'];
$existing = [];
foreach ($fields as $field) {
if ($table->getField($field)) {
$existing[] = $field;
}
}
$returnurl = new \moodle_url('/admin/tool/xmldb/index.php', [
'table' => $tableparam,
'dir' => $dir,
'action' => 'edit_table'
]);
$backbutton = html_writer::link($returnurl, '[' . $this->str['back'] . ']');
$actionbuttons = html_writer::tag('p', $backbutton, ['class' => 'centerpara buttons']);
if (!$confirm) {
if (!empty($existing)) {
$message = html_writer::span($this->str['persistentfieldsexist']);
$message .= html_writer::alist($existing);
$this->output .= $OUTPUT->notification($message);
if (count($existing) == count($fields)) {
$this->output .= $actionbuttons;
return true;
}
}
$confirmurl = new \moodle_url('/admin/tool/xmldb/index.php', [
'table' => $tableparam,
'dir' => $dir,
'action' => 'add_persistent_mandatory',
'sesskey' => sesskey(),
'confirm' => '1'
]);
$message = html_writer::span($this->str['persistentfieldsconfirm']);
$message .= html_writer::alist(array_diff($fields, $existing));
$this->output .= $OUTPUT->confirm($message, $confirmurl, $returnurl);
} else {
$fieldsadded = [];
foreach ($fields as $field) {
if (!in_array($field, $existing)) {
$fieldsadded[] = $field;
$table->add_field($field, XMLDB_TYPE_INTEGER, 10, null, XMLDB_NOTNULL, null, 0);
}
}
if (!$table->getKey('usermodified')) {
$table->add_key('usermodified', XMLDB_KEY_FOREIGN, ['usermodified'], 'user', ['id']);
}
$structure->setVersion(userdate(time(), '%Y%m%d', 99, false));
$structure->setChanged(true);
$message = html_writer::span($this->str['persistentfieldscomplete']);
$message .= html_writer::alist(array_diff($fields, $existing));
$this->output .= $OUTPUT->notification($message, 'success');
$this->output .= $actionbuttons;
}
return $result;
}
}