1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * @package tool_xmldb 19 * @copyright 2003 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} 20 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 21 */ 22 23 /** 24 * Add the mandatory fields for persistent to the table. 25 * 26 * @package tool_xmldb 27 * @copyright 2019 Michael Aherne 28 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 29 */ 30 class add_persistent_mandatory extends XMLDBAction { 31 32 function init() { 33 34 parent::init(); 35 36 // Get needed strings. 37 $this->loadStrings(array( 38 'addpersistent' => 'tool_xmldb', 39 'persistentfieldsconfirm' => 'tool_xmldb', 40 'persistentfieldscomplete' => 'tool_xmldb', 41 'persistentfieldsexist' => 'tool_xmldb', 42 'back' => 'core' 43 )); 44 45 } 46 47 function getTitle() { 48 return $this->str['addpersistent']; 49 } 50 51 function invoke() { 52 53 parent::invoke(); 54 55 $this->does_generate = ACTION_GENERATE_HTML; 56 57 global $CFG, $XMLDB, $OUTPUT; 58 59 $dir = required_param('dir', PARAM_PATH); 60 $dirpath = $CFG->dirroot . $dir; 61 62 if (empty($XMLDB->dbdirs)) { 63 return false; 64 } 65 66 if (!empty($XMLDB->editeddirs)) { 67 $editeddir = $XMLDB->editeddirs[$dirpath]; 68 $structure = $editeddir->xml_file->getStructure(); 69 } 70 71 $tableparam = required_param('table', PARAM_ALPHANUMEXT); 72 73 /** @var xmldb_table $table */ 74 $table = $structure->getTable($tableparam); 75 76 $result = true; 77 // Launch postaction if exists (leave this here!) 78 if ($this->getPostAction() && $result) { 79 return $this->launch($this->getPostAction()); 80 } 81 82 $confirm = optional_param('confirm', false, PARAM_BOOL); 83 84 $fields = ['usermodified', 'timecreated', 'timemodified']; 85 $existing = []; 86 foreach ($fields as $field) { 87 if ($table->getField($field)) { 88 $existing[] = $field; 89 } 90 } 91 92 $returnurl = new \moodle_url('/admin/tool/xmldb/index.php', [ 93 'table' => $tableparam, 94 'dir' => $dir, 95 'action' => 'edit_table' 96 ]); 97 98 $backbutton = html_writer::link($returnurl, '[' . $this->str['back'] . ']'); 99 $actionbuttons = html_writer::tag('p', $backbutton, ['class' => 'centerpara buttons']); 100 101 if (!$confirm) { 102 103 if (!empty($existing)) { 104 105 $message = html_writer::span($this->str['persistentfieldsexist']); 106 $message .= html_writer::alist($existing); 107 $this->output .= $OUTPUT->notification($message); 108 109 if (count($existing) == count($fields)) { 110 $this->output .= $actionbuttons; 111 return true; 112 } 113 } 114 115 $confirmurl = new \moodle_url('/admin/tool/xmldb/index.php', [ 116 'table' => $tableparam, 117 'dir' => $dir, 118 'action' => 'add_persistent_mandatory', 119 'sesskey' => sesskey(), 120 'confirm' => '1' 121 ]); 122 123 $message = html_writer::span($this->str['persistentfieldsconfirm']); 124 $message .= html_writer::alist(array_diff($fields, $existing)); 125 $this->output .= $OUTPUT->confirm($message, $confirmurl, $returnurl); 126 127 } else { 128 129 $fieldsadded = []; 130 foreach ($fields as $field) { 131 if (!in_array($field, $existing)) { 132 $fieldsadded[] = $field; 133 $table->add_field($field, XMLDB_TYPE_INTEGER, 10, null, XMLDB_NOTNULL, null, 0); 134 } 135 } 136 137 if (!$table->getKey('usermodified')) { 138 $table->add_key('usermodified', XMLDB_KEY_FOREIGN, ['usermodified'], 'user', ['id']); 139 } 140 141 $structure->setVersion(userdate(time(), '%Y%m%d', 99, false)); 142 $structure->setChanged(true); 143 144 $message = html_writer::span($this->str['persistentfieldscomplete']); 145 $message .= html_writer::alist(array_diff($fields, $existing)); 146 $this->output .= $OUTPUT->notification($message, 'success'); 147 148 $this->output .= $actionbuttons; 149 } 150 151 return $result; 152 } 153 154 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body