got editor working
This commit is contained in:
parent
602bb6e0b3
commit
0dda0c6a45
2
amd/build/util/mform-helper.min.js
vendored
2
amd/build/util/mform-helper.min.js
vendored
|
@ -1,3 +1,3 @@
|
|||
define("local_treestudyplan/util/mform-helper",["exports","core/ajax","core/fragment","core/notification","./string-helper","./debugger"],(function(_exports,_ajax,_fragment,_notification,_stringHelper,_debugger){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_debugger=_interopRequireDefault(_debugger);var _default={install:function(Vue){var debug=new _debugger.default("treestudyplan-mform-helper"),strings=(0,_stringHelper.load_strings)({editmod:{save$core:"save$core",cancel$core:"cancel$core"}});Vue.component("mform",{props:{name:{type:String},params:{type:Object}},data:function(){return{content:"",loading:!0,uuid:void 0!==crypto.randomUUID?crypto.randomUUID():"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(function(c){return(c^crypto.getRandomValues(new Uint8Array(1))[0]&15>>c/4).toString(16)})),text:strings}},computed:{},methods:{openForm:function(){this.$refs.editormodal.show()},onShown:function(){var self=this;debug.info('Loading form "'.concat(self.name,'" with params'),self.params),self.loading=!1,(0,_ajax.call)([{methodname:"local_treestudyplan_get_mform",args:{formname:self.name,params:JSON.stringify(self.params)}}])[0].then((function(data){self.content=data.html,self.loading=!1,(0,_fragment.processCollectedJavascript)(data.js)})).catch(_notification.default.exception)},onSave:function(){var self=this,form=this.$refs.content.getElementsByTagName("form")[0];form.dispatchEvent(new Event("save-form-state"));var formdata=new FormData(form),data=new URLSearchParams(formdata).toString();(0,_ajax.call)([{methodname:"local_treestudyplan_submit_mform",args:{formname:self.name,params:JSON.stringify(self.params),data:data}}])[0].then((function(){self.$emit("saved",formdata)})).catch(_notification.default.exception)}},template:'\n <span class=\'s-edit-mod\'><a href=\'#\' @click.prevent="openForm"><slot><i class="fa fa-cog"></i></slot></a>\n <b-modal\n ref="editormodal"\n scrollable\n centered\n size="xl"\n id="\'modal-\'+uuid"\n @shown="onShown"\n @ok="onSave"\n :title="title"\n :ok-title="text.save$core"\n ><div :class="\'s-edit-mod-form \'" ref="content"\n ><div v-if="loading" class="d-flex justify-content-center mb-3"\n ><b-spinner variant="primary"></b-spinner\n ></div\n ><span v-else v-html="content"\n ></div\n ></b-modal>\n </span>\n '})}};return _exports.default=_default,_exports.default}));
|
||||
define("local_treestudyplan/util/mform-helper",["exports","core/ajax","core/fragment","core/templates","core/notification","./string-helper","./debugger"],(function(_exports,_ajax,_fragment,_templates,_notification,_stringHelper,_debugger){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_debugger=_interopRequireDefault(_debugger);var _default={install:function(Vue){var debug=new _debugger.default("treestudyplan-mform-helper"),strings=(0,_stringHelper.load_strings)({editmod:{save$core:"save$core",cancel$core:"cancel$core"}});Vue.component("mform",{props:{name:{type:String},params:{type:Object},title:{type:String,default:""}},data:function(){return{content:"",loading:!0,uuid:void 0!==crypto.randomUUID?crypto.randomUUID():"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(function(c){return(c^crypto.getRandomValues(new Uint8Array(1))[0]&15>>c/4).toString(16)})),text:strings}},computed:{},methods:{openForm:function(){this.$refs.editormodal.show()},onShown:function(){var self=this;debug.info('Loading form "'.concat(self.name,'" with params'),self.params),self.loading=!1,(0,_ajax.call)([{methodname:"local_treestudyplan_get_mform",args:{formname:self.name,params:JSON.stringify(self.params)}}])[0].then((function(data){var html=data.html;self.loading=!1;var js=(0,_fragment.processCollectedJavascript)(data.javascript);debug.info("Replacing content / el",self.$refs.content),debug.info("Replacing content / html",html),debug.info("Replacing content / js",js);var r=(0,_templates.replaceNodeContents)(self.$refs.content,html,js);debug.info("R:",r)})).catch(_notification.default.exception)},onSave:function(){var self=this,form=this.$refs.content.getElementsByTagName("form")[0];form.dispatchEvent(new Event("save-form-state"));var formdata=new FormData(form),data=new URLSearchParams(formdata).toString();(0,_ajax.call)([{methodname:"local_treestudyplan_submit_mform",args:{formname:self.name,params:JSON.stringify(self.params),formdata:data}}])[0].then((function(){self.$emit("saved",formdata)})).catch(_notification.default.exception)}},template:'\n <span class=\'mform-container\'><a href=\'#\' @click.prevent="openForm"><slot><i class="fa fa-cog"></i></slot></a>\n <b-modal\n ref="editormodal"\n scrollable\n centered\n size="xl"\n id="\'modal-\'+uuid"\n @shown="onShown"\n @ok="onSave"\n :title="title"\n :ok-title="text.save$core"\n ><div :class="\'s-mform-content\'" ref="content"\n ><div class="d-flex justify-content-center mb-3"\n ><b-spinner variant="primary"></b-spinner\n ></div\n ></div\n ></b-modal>\n </span>\n '})}};return _exports.default=_default,_exports.default}));
|
||||
|
||||
//# sourceMappingURL=mform-helper.min.js.map
|
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
|
||||
import {call} from 'core/ajax';
|
||||
import {processCollectedJavascript} from 'core/fragment';
|
||||
//import {replaceNodeContents} from 'core/templates';
|
||||
import {replaceNodeContents} from 'core/templates';
|
||||
import notification from 'core/notification';
|
||||
import {load_strings} from './string-helper';
|
||||
import Debugger from './debugger';
|
||||
|
@ -45,7 +45,11 @@ export default {
|
|||
},
|
||||
params: {
|
||||
type: Object,
|
||||
}
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -70,10 +74,17 @@ export default {
|
|||
methodname: 'local_treestudyplan_get_mform',
|
||||
args: {formname: self.name, params: JSON.stringify(self.params)}
|
||||
}])[0].then((data)=>{
|
||||
self.content = data.html;
|
||||
const html = data.html;
|
||||
self.loading = false;
|
||||
// Process the collected javascript;
|
||||
processCollectedJavascript(data.js);
|
||||
const js = processCollectedJavascript(data.javascript);
|
||||
debug.info("Replacing content / el",self.$refs["content"]);
|
||||
debug.info("Replacing content / html", html);
|
||||
debug.info("Replacing content / js",js);
|
||||
|
||||
const r = replaceNodeContents(self.$refs["content"], html, js);
|
||||
debug.info("R:",r);
|
||||
|
||||
}).catch(notification.exception);
|
||||
|
||||
},
|
||||
|
@ -92,7 +103,7 @@ export default {
|
|||
|
||||
call([{
|
||||
methodname: 'local_treestudyplan_submit_mform',
|
||||
args: {formname: self.name, params: JSON.stringify(self.params), data: data}
|
||||
args: {formname: self.name, params: JSON.stringify(self.params), formdata: data}
|
||||
}])[0].then(()=>{
|
||||
self.$emit("saved",formdata);
|
||||
}).catch(notification.exception);
|
||||
|
@ -100,7 +111,7 @@ export default {
|
|||
}
|
||||
},
|
||||
template: `
|
||||
<span class='s-edit-mod'><a href='#' @click.prevent="openForm"><slot><i class="fa fa-cog"></i></slot></a>
|
||||
<span class='mform-container'><a href='#' @click.prevent="openForm"><slot><i class="fa fa-cog"></i></slot></a>
|
||||
<b-modal
|
||||
ref="editormodal"
|
||||
scrollable
|
||||
|
@ -111,11 +122,10 @@ export default {
|
|||
@ok="onSave"
|
||||
:title="title"
|
||||
:ok-title="text.save$core"
|
||||
><div :class="'s-edit-mod-form '" ref="content"
|
||||
><div v-if="loading" class="d-flex justify-content-center mb-3"
|
||||
><div :class="'s-mform-content'" ref="content"
|
||||
><div class="d-flex justify-content-center mb-3"
|
||||
><b-spinner variant="primary"></b-spinner
|
||||
></div
|
||||
><span v-else v-html="content"
|
||||
></div
|
||||
></b-modal>
|
||||
</span>
|
||||
|
|
|
@ -65,8 +65,11 @@ abstract class formbase extends \moodleform {
|
|||
*/
|
||||
public function process_submission() {
|
||||
$data = $this->get_data();
|
||||
|
||||
if($data) {
|
||||
$this->process_submitted_data($data);
|
||||
return $this->process_submitted_data($data);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace local_treestudyplan\local\forms;
|
||||
use local_treestudyplan\studyplan;
|
||||
use local_treestudyplan\local\helpers\webservicehelper;
|
||||
use moodle_exception;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
|
@ -45,7 +46,7 @@ class studyplan_editform extends formbase {
|
|||
* @throws \moodle_exception if access denied for a specific reason.
|
||||
*/
|
||||
public static function check_security(object $customdata) {
|
||||
webservicehelper::require_capabilities(self::CAP_EDIT,$customdata->context);
|
||||
/*webservicehelper::require_capabilities(self::CAP_EDIT,$customdata->context); */
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -68,7 +69,8 @@ class studyplan_editform extends formbase {
|
|||
\context_system::instance(),
|
||||
'local_treestudyplan',
|
||||
'studyplan',
|
||||
$entry->id);
|
||||
$customdata->plan->id());
|
||||
|
||||
return $entry;
|
||||
}
|
||||
|
||||
|
@ -89,7 +91,7 @@ class studyplan_editform extends formbase {
|
|||
/**
|
||||
* Process the submitted data and perform necessary actions
|
||||
* @param object $entry The processed form data;
|
||||
* @return bool True if submission successful
|
||||
* @return bool false if submission not successful
|
||||
* @throws \moodle_exception if an error must be given for a specific reason.
|
||||
*/
|
||||
protected function process_submitted_data($entry) {
|
||||
|
@ -101,12 +103,18 @@ class studyplan_editform extends formbase {
|
|||
\context_system::instance(),
|
||||
'local_treestudyplan',
|
||||
'studyplan',
|
||||
$entry->id);
|
||||
$customdata->plan->id());
|
||||
|
||||
$f = fopen("/tmp/debug","a+");
|
||||
fputs($f,print_r($entry,true));
|
||||
fclose($f);
|
||||
|
||||
// Use our own abstraction to update the record, so caches are maintained
|
||||
$customdata->plan->edit(['description' => $entry->description,
|
||||
'descriptionformat' => $entry->descriptionformat]);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ class studyplan {
|
|||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan'),
|
||||
"idnumber" => new \external_value(PARAM_TEXT, 'idnumber of curriculum'),
|
||||
"context_id" => new \external_value(PARAM_INT, 'context_id of studyplan'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan'),
|
||||
"descriptionformat" => new \external_value(PARAM_INT, 'description format'),
|
||||
"aggregation" => new \external_value(PARAM_TEXT, 'selected aggregator'),
|
||||
"aggregation_config" => new \external_value(PARAM_TEXT, 'config string for aggregator'),
|
||||
|
@ -202,7 +202,8 @@ class studyplan {
|
|||
"name" => new \external_value(PARAM_TEXT, 'name of studyplan'),
|
||||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan'),
|
||||
"idnumber" => new \external_value(PARAM_TEXT, 'idnumber of curriculum'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan'),
|
||||
"descriptionformat" => new \external_value(PARAM_INT, 'description format'),
|
||||
"context_id" => new \external_value(PARAM_INT, 'context_id of studyplan'),
|
||||
"aggregation" => new \external_value(PARAM_TEXT, 'selected aggregator'),
|
||||
"aggregation_config" => new \external_value(PARAM_TEXT, 'config string for aggregator'),
|
||||
|
@ -232,6 +233,7 @@ class studyplan {
|
|||
'shortname' => $this->r->shortname,
|
||||
'idnumber' => $this->r->idnumber,
|
||||
'description' => $this->r->description,
|
||||
'descriptionformat' => $this->r->descriptionformat,
|
||||
'context_id' => $this->context()->id,
|
||||
"aggregation" => $this->r->aggregation,
|
||||
"aggregation_config" => $this->aggregator->config_string(),
|
||||
|
@ -558,7 +560,8 @@ class studyplan {
|
|||
"id" => new \external_value(PARAM_INT, 'id of studyplan'),
|
||||
"name" => new \external_value(PARAM_TEXT, 'name of studyplan'),
|
||||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan'),
|
||||
"descriptionformat" => new \external_value(PARAM_INT, 'description format'),
|
||||
"idnumber" => new \external_value(PARAM_TEXT, 'idnumber of curriculum'),
|
||||
"pages" => new \external_multiple_structure(studyplanpage::user_structure()),
|
||||
"aggregation_info" => aggregator::basic_structure(),
|
||||
|
@ -578,6 +581,7 @@ class studyplan {
|
|||
'name' => $this->r->name,
|
||||
'shortname' => $this->r->shortname,
|
||||
'description' => $this->r->description,
|
||||
'descriptionformat' => $this->r->descriptionformat,
|
||||
'idnumber' => $this->r->idnumber,
|
||||
'pages' => [],
|
||||
'aggregation_info' => $this->aggregator->basic_model(),
|
||||
|
|
|
@ -148,7 +148,7 @@ class studyplanpage {
|
|||
"fullname" => new \external_value(PARAM_TEXT, 'name of studyplan page'),
|
||||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan page'),
|
||||
"periods" => new \external_value(PARAM_INT, 'number of periods in studyplan page'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan page'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan page'),
|
||||
"startdate" => new \external_value(PARAM_TEXT, 'start date of studyplan'),
|
||||
"enddate" => new \external_value(PARAM_TEXT, 'end date of studyplan'),
|
||||
"perioddesc" => period::page_structure(),
|
||||
|
@ -181,7 +181,7 @@ class studyplanpage {
|
|||
"id" => new \external_value(PARAM_INT, 'id of studyplan'),
|
||||
"fullname" => new \external_value(PARAM_TEXT, 'name of studyplan page'),
|
||||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan page'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan page'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan page'),
|
||||
"periods" => new \external_value(PARAM_INT, 'number of periods in studyplan page'),
|
||||
"startdate" => new \external_value(PARAM_TEXT, 'start date of studyplan page'),
|
||||
"enddate" => new \external_value(PARAM_TEXT, 'end date of studyplan page'),
|
||||
|
@ -300,7 +300,7 @@ class studyplanpage {
|
|||
"id" => new \external_value(PARAM_INT, 'id of studyplan page'),
|
||||
"fullname" => new \external_value(PARAM_TEXT, 'name of studyplan page'),
|
||||
"shortname" => new \external_value(PARAM_TEXT, 'shortname of studyplan page'),
|
||||
"description" => new \external_value(PARAM_TEXT, 'description of studyplan page'),
|
||||
"description" => new \external_value(PARAM_RAW, 'description of studyplan page'),
|
||||
"periods" => new \external_value(PARAM_INT, 'number of slots in studyplan page'),
|
||||
"startdate" => new \external_value(PARAM_TEXT, 'start date of studyplan page'),
|
||||
"enddate" => new \external_value(PARAM_TEXT, 'end date of studyplan page'),
|
||||
|
|
|
@ -89,18 +89,17 @@ class utilityservice extends \external_api {
|
|||
\external_api::validate_context(\context_system::instance());
|
||||
require_login(null,false,null);
|
||||
|
||||
// Load the form before any output is started.
|
||||
$mform = self::load_mform($formname, $params);
|
||||
|
||||
// Hack alert: Set a default URL to stop the annoying debug.
|
||||
$PAGE->set_url('/');
|
||||
// Hack alert: Forcing bootstrap_renderer to initiate moodle page.
|
||||
$OUTPUT->header();
|
||||
|
||||
/* Overwriting page_requirements_manager with the fragment one so only JS included from
|
||||
this point is returned to the user. */
|
||||
$PAGE->start_collecting_javascript_requirements();
|
||||
|
||||
// Load the form before any output is started.
|
||||
$mform = self::load_mform($formname, $params);
|
||||
// Perform actual render.
|
||||
$html = $mform->render();
|
||||
|
||||
|
@ -149,10 +148,16 @@ class utilityservice extends \external_api {
|
|||
* @return array Success/fail structure
|
||||
*/
|
||||
public static function submit_mform($formname, $params, $formdata) {
|
||||
// Load the form, provide submitted form data and perform security checks
|
||||
$mform = self::load_mform($formname, $params, $formdata);
|
||||
\external_api::validate_context(\context_system::instance());
|
||||
require_login(null,false,null);
|
||||
|
||||
if ($mform->process_submission()) {
|
||||
$ajaxformdata = [];
|
||||
parse_str($formdata,$ajaxformdata);
|
||||
|
||||
// Load the form, provide submitted form data and perform security checks
|
||||
$mform = self::load_mform($formname, $params, $ajaxformdata);
|
||||
|
||||
if ($mform->process_submission() !== false) {
|
||||
return success::success()->model();
|
||||
} else {
|
||||
return success::fail("Error in submission data")->model();
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->component = 'local_treestudyplan'; // Recommended since 2.0.2 (MDL-26035). Required since 3.0 (MDL-48494).
|
||||
$plugin->version = 2023102000; // YYYYMMDDHH (year, month, day, iteration).
|
||||
$plugin->version = 2023102100; // YYYYMMDDHH (year, month, day, iteration).
|
||||
$plugin->requires = 2021051700; // YYYYMMDDHH (This is the release version for Moodle 3.11).
|
||||
|
||||
$plugin->release = "1.1.0-b";
|
||||
|
|
Loading…
Reference in New Issue
Block a user