first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-09-30 18:11:26 -04:00
commit e592ca6823
27270 changed files with 5002257 additions and 0 deletions
@@ -0,0 +1,10 @@
/**
* Potential user selector module.
*
* @module enrol_manual/form-potential-user-selector
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define("enrol_manual/form-potential-user-selector",["jquery","core/ajax","core/templates","core/str"],(function($,Ajax,Templates,Str){return{processResults:function(selector,results){var users=[];return $.isArray(results)?($.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users):results},transport:function(selector,query,success,failure){var courseid=$(selector).attr("courseid"),userfields=$(selector).attr("userfields").split(",");void 0===courseid&&(courseid="1");var enrolid=$(selector).attr("enrolid");void 0===enrolid&&(enrolid="");var perpage=parseInt($(selector).attr("perpage"));isNaN(perpage)&&(perpage=100),Ajax.call([{methodname:"core_enrol_get_potential_users",args:{courseid:courseid,enrolid:enrolid,search:query,searchanywhere:!0,page:0,perpage:perpage+1}}])[0].then((function(results){var promises=[],i=0;if(results.length<=perpage){const profileRegex=/^profile_field_(.*)$/;return $.each(results,(function(index,user){var ctx=user,identity=[];$.each(userfields,(function(i,k){const result=profileRegex.exec(k);result?user.customfields&&user.customfields.forEach((function(customfield){customfield.shortname===result[1]&&(ctx.hasidentity=!0,identity.push(customfield.value))})):void 0!==user[k]&&""!==user[k]&&(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(", "),promises.push(Templates.render("enrol_manual/form-user-selector-suggestion",ctx))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))}return Str.get_string("toomanyuserstoshow","core",">"+perpage).then((function(toomanyuserstoshow){success(toomanyuserstoshow)}))})).fail(failure)}}}));
//# sourceMappingURL=form-potential-user-selector.min.js.map
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
define("enrol_manual/quickenrolment",["exports","core_table/dynamic","core/str","core/toast","core/config","core/fragment","core/modal_events","core/notification","jquery","core/pending","core/prefetch","core/modal_save_cancel"],(function(_exports,DynamicTable,Str,Toast,_config,_fragment,_modal_events,_notification,_jquery,_pending,_prefetch,_modal_save_cancel){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&&cache.set(obj,newObj),newObj}
/**
* Quick enrolment AMD module.
*
* @module enrol_manual/quickenrolment
* @copyright 2016 Damyon Wiese <damyon@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Str=_interopRequireWildcard(Str),Toast=_interopRequireWildcard(Toast),_config=_interopRequireDefault(_config),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending),_prefetch=_interopRequireDefault(_prefetch),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel);const Selectors_cohortSelector="#id_cohortlist",Selectors_triggerButtons=".enrolusersbutton.enrol_manual_plugin [type='submit']",Selectors_unwantedHiddenFields="input[value='_qf__force_multiselect_submission']",Selectors_buttonWrapper='[data-region="wrapper"]',getBodyForContext=contextId=>_fragment.default.loadFragment("enrol_manual","enrol_users_form",contextId,{}),registerEventListeners=contextId=>{document.addEventListener("click",(e=>{if(e.target.closest(Selectors_triggerButtons))return e.preventDefault(),void showModal((element=>{const wrapper=element.closest(Selectors_buttonWrapper);return DynamicTable.getTableFromId(wrapper.dataset.tableUniqueid)})(e.target),contextId)}))},showModal=(dynamicTable,contextId)=>{const pendingPromise=new _pending.default("enrol_manual/quickenrolment:showModal");return _modal_save_cancel.default.create({large:!0,title:Str.get_string("enrolusers","enrol_manual"),body:getBodyForContext(contextId),buttons:{save:Str.get_string("enrolusers","enrol_manual")},show:!0}).then((modal=>(modal.getRoot().on(_modal_events.default.save,(e=>{e.preventDefault(),modal.getRoot().find("form").submit()})),modal.getRoot().on("submit","form",(e=>{e.preventDefault(),submitFormAjax(dynamicTable,modal)})),modal.getRoot().on(_modal_events.default.hidden,(()=>{modal.destroy()})),modal))).then((modal=>Promise.all([modal,modal.getBodyPromise()]))).then((_ref=>{let[modal,body]=_ref;return body.get(0).querySelector(Selectors_cohortSelector)?modal.setSaveButtonText(Str.get_string("enroluserscohorts","enrol_manual")).then((()=>modal)):modal})).then((modal=>(pendingPromise.resolve(),modal))).catch(_notification.default.exception)},submitFormAjax=(dynamicTable,modal)=>{const form=modal.getRoot().find("form");form.get(0).querySelectorAll(Selectors_unwantedHiddenFields).forEach((hiddenField=>hiddenField.remove())),modal.hide(),modal.destroy(),_jquery.default.ajax("".concat(_config.default.wwwroot,"/enrol/manual/ajax.php?").concat(form.serialize()),{type:"GET",processData:!1,contentType:"application/json"}).then((response=>{if(response.error)throw new Error(response.error);return response.count})).then((count=>Promise.all([Str.get_string("totalenrolledusers","enrol",count),DynamicTable.refreshTableContent(dynamicTable)]))).then((_ref2=>{let[notificationBody]=_ref2;return notificationBody})).then((notificationBody=>Toast.add(notificationBody))).catch((error=>{_notification.default.addNotification({message:error.message,type:"error"})}))};_exports.init=_ref3=>{let{contextid:contextid}=_ref3;registerEventListeners(contextid),_prefetch.default.prefetchStrings("enrol_manual",["enrolusers","enroluserscohorts"]),_prefetch.default.prefetchString("enrol","totalenrolledusers")}}));
//# sourceMappingURL=quickenrolment.min.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,128 @@
// 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/>.
/**
* Potential user selector module.
*
* @module enrol_manual/form-potential-user-selector
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/ajax', 'core/templates', 'core/str'], function($, Ajax, Templates, Str) {
return /** @alias module:enrol_manual/form-potential-user-selector */ {
processResults: function(selector, results) {
var users = [];
if ($.isArray(results)) {
$.each(results, function(index, user) {
users.push({
value: user.id,
label: user._label
});
});
return users;
} else {
return results;
}
},
transport: function(selector, query, success, failure) {
var promise;
var courseid = $(selector).attr('courseid');
var userfields = $(selector).attr('userfields').split(',');
if (typeof courseid === "undefined") {
courseid = '1';
}
var enrolid = $(selector).attr('enrolid');
if (typeof enrolid === "undefined") {
enrolid = '';
}
var perpage = parseInt($(selector).attr('perpage'));
if (isNaN(perpage)) {
perpage = 100;
}
promise = Ajax.call([{
methodname: 'core_enrol_get_potential_users',
args: {
courseid: courseid,
enrolid: enrolid,
search: query,
searchanywhere: true,
page: 0,
perpage: perpage + 1
}
}]);
promise[0].then(function(results) {
var promises = [],
i = 0;
if (results.length <= perpage) {
// Render the label.
const profileRegex = /^profile_field_(.*)$/;
$.each(results, function(index, user) {
var ctx = user,
identity = [];
$.each(userfields, function(i, k) {
const result = profileRegex.exec(k);
if (result) {
if (user.customfields) {
user.customfields.forEach(function(customfield) {
if (customfield.shortname === result[1]) {
ctx.hasidentity = true;
identity.push(customfield.value);
}
});
}
} else {
if (typeof user[k] !== 'undefined' && user[k] !== '') {
ctx.hasidentity = true;
identity.push(user[k]);
}
}
});
ctx.identity = identity.join(', ');
promises.push(Templates.render('enrol_manual/form-user-selector-suggestion', ctx));
});
// Apply the label to the results.
return $.when.apply($.when, promises).then(function() {
var args = arguments;
$.each(results, function(index, user) {
user._label = args[i];
i++;
});
success(results);
return;
});
} else {
return Str.get_string('toomanyuserstoshow', 'core', '>' + perpage).then(function(toomanyuserstoshow) {
success(toomanyuserstoshow);
return;
});
}
}).fail(failure);
}
};
});
+200
View File
@@ -0,0 +1,200 @@
// 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/>.
/**
* Quick enrolment AMD module.
*
* @module enrol_manual/quickenrolment
* @copyright 2016 Damyon Wiese <damyon@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import * as DynamicTable from 'core_table/dynamic';
import * as Str from 'core/str';
import * as Toast from 'core/toast';
import Config from 'core/config';
import Fragment from 'core/fragment';
import ModalEvents from 'core/modal_events';
import Notification from 'core/notification';
import jQuery from 'jquery';
import Pending from 'core/pending';
import Prefetch from 'core/prefetch';
import ModalSaveCancel from 'core/modal_save_cancel';
const Selectors = {
cohortSelector: "#id_cohortlist",
triggerButtons: ".enrolusersbutton.enrol_manual_plugin [type='submit']",
unwantedHiddenFields: "input[value='_qf__force_multiselect_submission']",
buttonWrapper: '[data-region="wrapper"]',
};
/**
* Get the content of the body for the specified context.
*
* @param {Number} contextId
* @returns {Promise}
*/
const getBodyForContext = contextId => {
return Fragment.loadFragment('enrol_manual', 'enrol_users_form', contextId, {});
};
/**
* Get the dynamic table for the button.
*
* @param {HTMLElement} element
* @returns {HTMLElement}
*/
const getDynamicTableForElement = element => {
const wrapper = element.closest(Selectors.buttonWrapper);
return DynamicTable.getTableFromId(wrapper.dataset.tableUniqueid);
};
/**
* Register the event listeners for this contextid.
*
* @param {Number} contextId
*/
const registerEventListeners = contextId => {
document.addEventListener('click', e => {
if (e.target.closest(Selectors.triggerButtons)) {
e.preventDefault();
showModal(getDynamicTableForElement(e.target), contextId);
return;
}
});
};
/**
* Display the modal for this contextId.
*
* @param {HTMLElement} dynamicTable The table to beb refreshed when changes are made
* @param {Number} contextId
* @returns {Promise}
*/
const showModal = (dynamicTable, contextId) => {
const pendingPromise = new Pending('enrol_manual/quickenrolment:showModal');
return ModalSaveCancel.create({
large: true,
title: Str.get_string('enrolusers', 'enrol_manual'),
body: getBodyForContext(contextId),
buttons: {
save: Str.get_string('enrolusers', 'enrol_manual'),
},
show: true,
})
.then(modal => {
modal.getRoot().on(ModalEvents.save, e => {
// Trigger a form submission, so that any mform elements can do final tricks before the form submission
// is processed.
// The actual submit even tis captured in the next handler.
e.preventDefault();
modal.getRoot().find('form').submit();
});
modal.getRoot().on('submit', 'form', e => {
e.preventDefault();
submitFormAjax(dynamicTable, modal);
});
modal.getRoot().on(ModalEvents.hidden, () => {
modal.destroy();
});
return modal;
})
.then(modal => Promise.all([modal, modal.getBodyPromise()]))
.then(([modal, body]) => {
if (body.get(0).querySelector(Selectors.cohortSelector)) {
return modal.setSaveButtonText(Str.get_string('enroluserscohorts', 'enrol_manual')).then(() => modal);
}
return modal;
})
.then(modal => {
pendingPromise.resolve();
return modal;
})
.catch(Notification.exception);
};
/**
* Submit the form via ajax.
*
* @param {HTMLElement} dynamicTable
* @param {Object} modal
*/
const submitFormAjax = (dynamicTable, modal) => {
// Note: We use a jQuery object here so that we can use its serialize functionality.
const form = modal.getRoot().find('form');
// Before send the data through AJAX, we need to parse and remove some unwanted hidden fields.
// This hidden fields are added automatically by mforms and when it reaches the AJAX we get an error.
form.get(0).querySelectorAll(Selectors.unwantedHiddenFields).forEach(hiddenField => hiddenField.remove());
modal.hide();
modal.destroy();
jQuery.ajax(
`${Config.wwwroot}/enrol/manual/ajax.php?${form.serialize()}`,
{
type: 'GET',
processData: false,
contentType: "application/json",
}
)
.then(response => {
if (response.error) {
throw new Error(response.error);
}
return response.count;
})
.then(count => {
return Promise.all([
Str.get_string('totalenrolledusers', 'enrol', count),
DynamicTable.refreshTableContent(dynamicTable),
]);
})
.then(([notificationBody]) => notificationBody)
.then(notificationBody => Toast.add(notificationBody))
.catch(error => {
Notification.addNotification({
message: error.message,
type: 'error',
});
});
};
/**
* Set up quick enrolment for the manual enrolment plugin.
*
* @param {Number} contextid The context id to setup for
*/
export const init = ({contextid}) => {
registerEventListeners(contextid);
Prefetch.prefetchStrings('enrol_manual', [
'enrolusers',
'enroluserscohorts',
]);
Prefetch.prefetchString('enrol', 'totalenrolledusers');
};