__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
// 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/>.
/**
* Standard Ajax wrapper for Moodle. It calls the central Ajax script,
* which can call any existing webservice using the current session.
* In addition, it can batch multiple requests and return multiple responses.
*
* @module core/ajax
* @copyright 2015 Damyon Wiese <damyon@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @since 2.9
*/
define(['jquery', 'core/config', 'core/log', 'core/url'], function($, config, Log, URL) {
/**
* A request to be performed.
*
* @typedef {object} request
* @property {string} methodname The remote method to be called
* @property {object} args The arguments to pass when fetching the remote content
*/
// Keeps track of when the user leaves the page so we know not to show an error.
var unloading = false;
/**
* Success handler. Called when the ajax call succeeds. Checks each response and
* resolves or rejects the deferred from that request.
*
* @method requestSuccess
* @private
* @param {Object[]} responses Array of responses containing error, exception and data attributes.
*/
var requestSuccess = function(responses) {
// Call each of the success handlers.
var requests = this,
exception = null,
i = 0,
request,
response,
nosessionupdate;
if (responses.error) {
// There was an error with the request as a whole.
// We need to reject each promise.
// Unfortunately this may lead to duplicate dialogues, but each Promise must be rejected.
for (; i < requests.length; i++) {
request = requests[i];
request.deferred.reject(responses);
}
return;
}
for (i = 0; i < requests.length; i++) {
request = requests[i];
response = responses[i];
// We may not have responses for all the requests.
if (typeof response !== "undefined") {
if (response.error === false) {
// Call the done handler if it was provided.
request.deferred.resolve(response.data);
} else {
exception = response.exception;
nosessionupdate = requests[i].nosessionupdate;
break;
}
} else {
// This is not an expected case.
exception = new Error('missing response');
break;
}
}
// Something failed, reject the remaining promises.
if (exception !== null) {
// Redirect to the login page.
if (exception.errorcode === "servicerequireslogin" && !nosessionupdate) {
window.location = URL.relativeUrl("/login/index.php");
} else {
requests.forEach(function(request) {
request.deferred.reject(exception);
});
}
}
};
/**
* Fail handler. Called when the ajax call fails. Rejects all deferreds.
*
* @method requestFail
* @private
* @param {jqXHR} jqXHR The ajax object.
* @param {string} textStatus The status string.
* @param {Error|Object} exception The error thrown.
*/
var requestFail = function(jqXHR, textStatus, exception) {
// Reject all the promises.
var requests = this;
var i = 0;
for (i = 0; i < requests.length; i++) {
var request = requests[i];
if (unloading) {
// No need to trigger an error because we are already navigating.
Log.error("Page unloaded.");
Log.error(exception);
} else {
request.deferred.reject(exception);
}
}
};
return /** @alias module:core/ajax */ {
// Public variables and functions.
/**
* Make a series of ajax requests and return all the responses.
*
* @method call
* @param {request[]} requests Array of requests with each containing methodname and args properties.
* done and fail callbacks can be set for each element in the array, or the
* can be attached to the promises returned by this function.
* @param {Boolean} [async=true] If false this function will not return until the promises are resolved.
* @param {Boolean} [loginrequired=true] When false this function calls an endpoint which does not use the
* session.
* Note: This may only be used with external functions which have been marked as
* `'loginrequired' => false`
* @param {Boolean} [nosessionupdate=false] If true, the timemodified for the session will not be updated.
* @param {Number} [timeout] number of milliseconds to wait for a response. Defaults to no limit.
* @param {Number} [cachekey] A cache key used to improve browser-side caching.
* Typically the same `cachekey` is used for all function calls.
* When the key changes, this causes the URL used to perform the fetch to change, which
* prevents the existing browser cache from being used.
* Note: This option is only availbale when `loginrequired` is `false`.
* See {@link https://tracker.moodle.org/browser/MDL-65794} for more information.
* @return {Promise[]} The Promises for each of the supplied requests.
* The order of the Promise matches the order of requests exactly.
*
* @example <caption>A simple example that you might find in a repository module</caption>
*
* import {call as fetchMany} from 'core/ajax';
*
* export const fetchMessages = timeSince => fetchMany([{methodname: 'core_message_get_messages', args: {timeSince}}])[0];
*
* export const fetchNotifications = timeSince => fetchMany([{
* methodname: 'core_message_get_notifications',
* args: {
* timeSince,
* }
* }])[0];
*
* export const fetchSomethingElse = (some, params, here) => fetchMany([{
* methodname: 'core_get_something_else',
* args: {
* some,
* params,
* gohere: here,
* },
* }])[0];
*
* @example <caption>An example of fetching a string using the cachekey parameter</caption>
* import {call as fetchMany} from 'core/ajax';
* import * as Notification from 'core/notification';
*
* export const performAction = (some, args) => {
* Promises.all(fetchMany([{methodname: 'core_get_string', args: {
* stringid: 'do_not_copy',
* component: 'core',
* lang: 'en',
* stringparams: [],
* }}], true, false, false, undefined, M.cfg.langrev))
* .then(([doNotCopyString]) => {
* window.console.log(doNotCopyString);
* })
* .catch(Notification.exception);
* };
*
*/
call: function(requests, async, loginrequired, nosessionupdate, timeout, cachekey) {
$(window).bind('beforeunload', function() {
unloading = true;
});
var ajaxRequestData = [],
i,
promises = [],
methodInfo = [],
requestInfo = '';
var maxUrlLength = 2000;
if (typeof loginrequired === "undefined") {
loginrequired = true;
}
if (typeof async === "undefined") {
async = true;
}
if (typeof timeout === 'undefined') {
timeout = 0;
}
if (typeof cachekey === 'undefined') {
cachekey = null;
} else {
cachekey = parseInt(cachekey);
if (cachekey <= 0) {
cachekey = null;
} else if (!cachekey) {
cachekey = null;
}
}
if (typeof nosessionupdate === "undefined") {
nosessionupdate = false;
}
for (i = 0; i < requests.length; i++) {
var request = requests[i];
ajaxRequestData.push({
index: i,
methodname: request.methodname,
args: request.args
});
request.nosessionupdate = nosessionupdate;
request.deferred = $.Deferred();
promises.push(request.deferred.promise());
// Allow setting done and fail handlers as arguments.
// This is just a shortcut for the calling code.
if (typeof request.done !== "undefined") {
request.deferred.done(request.done);
}
if (typeof request.fail !== "undefined") {
request.deferred.fail(request.fail);
}
request.index = i;
methodInfo.push(request.methodname);
}
if (methodInfo.length <= 5) {
requestInfo = methodInfo.sort().join();
} else {
requestInfo = methodInfo.length + '-method-calls';
}
ajaxRequestData = JSON.stringify(ajaxRequestData);
var settings = {
type: 'POST',
context: requests,
dataType: 'json',
processData: false,
async: async,
contentType: "application/json",
timeout: timeout
};
var script = 'service.php';
var url = config.wwwroot + '/lib/ajax/';
if (!loginrequired) {
script = 'service-nologin.php';
url += script + '?info=' + requestInfo;
if (cachekey) {
url += '&cachekey=' + cachekey;
settings.type = 'GET';
}
} else {
url += script + '?sesskey=' + config.sesskey + '&info=' + requestInfo;
}
if (nosessionupdate) {
url += '&nosessionupdate=true';
}
if (settings.type === 'POST') {
settings.data = ajaxRequestData;
} else {
var urlUseGet = url + '&args=' + encodeURIComponent(ajaxRequestData);
if (urlUseGet.length > maxUrlLength) {
settings.type = 'POST';
settings.data = ajaxRequestData;
} else {
url = urlUseGet;
}
}
// Jquery deprecated done and fail with async=false so we need to do this 2 ways.
if (async) {
$.ajax(url, settings)
.done(requestSuccess)
.fail(requestFail);
} else {
settings.success = requestSuccess;
settings.error = requestFail;
$.ajax(url, settings);
}
return promises;
}
};
});
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| bulkactions | Folder | 0777 |
|
|
| check | Folder | 0777 |
|
|
| comboboxsearch | Folder | 0777 |
|
|
| datafilter | Folder | 0777 |
|
|
| emoji | Folder | 0777 |
|
|
| local | Folder | 0777 |
|
|
| moodlenet | Folder | 0777 |
|
|
| adapter.js | File | 123.08 KB | 0777 |
|
| addblockmodal.js | File | 4.34 KB | 0777 |
|
| ajax.js | File | 11.97 KB | 0777 |
|
| aria.js | File | 1011 B | 0777 |
|
| auto_rows.js | File | 3.46 KB | 0777 |
|
| autoscroll.js | File | 6.49 KB | 0777 |
|
| backoff_timer.js | File | 4.98 KB | 0777 |
|
| chart_axis.js | File | 7.39 KB | 0777 |
|
| chart_bar.js | File | 3.08 KB | 0777 |
|
| chart_base.js | File | 11.36 KB | 0777 |
|
| chart_builder.js | File | 1.65 KB | 0777 |
|
| chart_line.js | File | 2.08 KB | 0777 |
|
| chart_output.js | File | 1.08 KB | 0777 |
|
| chart_output_base.js | File | 2.03 KB | 0777 |
|
| chart_output_chartjs.js | File | 11.5 KB | 0777 |
|
| chart_output_htmltable.js | File | 3.3 KB | 0777 |
|
| chart_pie.js | File | 3.03 KB | 0777 |
|
| chart_series.js | File | 8.35 KB | 0777 |
|
| chartjs-lazy.js | File | 497.88 KB | 0777 |
|
| chartjs.js | File | 913 B | 0777 |
|
| checkbox-toggleall.js | File | 12.78 KB | 0777 |
|
| config.js | File | 978 B | 0777 |
|
| copy_to_clipboard.js | File | 7.38 KB | 0777 |
|
| custom_interaction_events.js | File | 22.18 KB | 0777 |
|
| datafilter.js | File | 17.92 KB | 0777 |
|
| dragdrop.js | File | 12.92 KB | 0777 |
|
| drawer.js | File | 3.49 KB | 0777 |
|
| drawer_events.js | File | 967 B | 0777 |
|
| dropzone.js | File | 5.71 KB | 0777 |
|
| dynamic_tabs.js | File | 6.67 KB | 0777 |
|
| edit_switch.js | File | 3.45 KB | 0777 |
|
| event.js | File | 2.53 KB | 0777 |
|
| event_dispatcher.js | File | 2.79 KB | 0777 |
|
| fetch.js | File | 9.4 KB | 0777 |
|
| first.js | File | 1.33 KB | 0777 |
|
| form-autocomplete.js | File | 53.74 KB | 0777 |
|
| form-cohort-selector.js | File | 2.5 KB | 0777 |
|
| form-course-selector.js | File | 3.77 KB | 0777 |
|
| fragment.js | File | 5.03 KB | 0777 |
|
| fullscreen.js | File | 1.62 KB | 0777 |
|
| icon_system.js | File | 3.39 KB | 0777 |
|
| icon_system_fontawesome.js | File | 5.35 KB | 0777 |
|
| icon_system_standard.js | File | 1.96 KB | 0777 |
|
| inplace_editable.js | File | 16.82 KB | 0777 |
|
| key_codes.js | File | 1.34 KB | 0777 |
|
| loadingicon.js | File | 3.88 KB | 0777 |
|
| localstorage.js | File | 2.24 KB | 0777 |
|
| log.js | File | 1.74 KB | 0777 |
|
| loglevel.js | File | 12.38 KB | 0777 |
|
| menu_navigation.js | File | 9.2 KB | 0777 |
|
| modal.js | File | 36.33 KB | 0777 |
|
| modal_backdrop.js | File | 4.17 KB | 0777 |
|
| modal_cancel.js | File | 1.6 KB | 0777 |
|
| modal_copy_to_clipboard.js | File | 3.75 KB | 0777 |
|
| modal_delete_cancel.js | File | 2.36 KB | 0777 |
|
| modal_events.js | File | 1.28 KB | 0777 |
|
| modal_factory.js | File | 5.91 KB | 0777 |
|
| modal_registry.js | File | 2.26 KB | 0777 |
|
| modal_save_cancel.js | File | 2.34 KB | 0777 |
|
| moremenu.js | File | 10.3 KB | 0777 |
|
| mustache.js | File | 28.75 KB | 0777 |
|
| network.js | File | 9.66 KB | 0777 |
|
| normalise.js | File | 2.43 KB | 0777 |
|
| notification.js | File | 11.57 KB | 0777 |
|
| page_global.js | File | 5.38 KB | 0777 |
|
| paged_content.js | File | 2.87 KB | 0777 |
|
| paged_content_events.js | File | 1.17 KB | 0777 |
|
| paged_content_factory.js | File | 20.61 KB | 0777 |
|
| paged_content_pages.js | File | 11.75 KB | 0777 |
|
| paged_content_paging_bar.js | File | 20.36 KB | 0777 |
|
| paged_content_paging_bar_limit_selector.js | File | 2.36 KB | 0777 |
|
| paged_content_paging_dropdown.js | File | 7.36 KB | 0777 |
|
| pagehelpers.js | File | 5.38 KB | 0777 |
|
| pending.js | File | 4.46 KB | 0777 |
|
| permissionmanager.js | File | 9.77 KB | 0777 |
|
| popover_region_controller.js | File | 13.16 KB | 0777 |
|
| popper.js | File | 79.2 KB | 0777 |
|
| popper2.js | File | 61.59 KB | 0777 |
|
| prefetch.js | File | 5.82 KB | 0777 |
|
| process_monitor.js | File | 3.55 KB | 0777 |
|
| pubsub.js | File | 2.17 KB | 0777 |
|
| reactive.js | File | 1.38 KB | 0777 |
|
| scroll_manager.js | File | 5.5 KB | 0777 |
|
| sessionstorage.js | File | 2.22 KB | 0777 |
|
| showhidesettings.js | File | 11.82 KB | 0777 |
|
| showmore.js | File | 1.83 KB | 0777 |
|
| sortable_list.js | File | 29.62 KB | 0777 |
|
| sticky-footer.js | File | 3.16 KB | 0777 |
|
| storage_validation.js | File | 1.36 KB | 0777 |
|
| storagewrapper.js | File | 5.36 KB | 0777 |
|
| stored_progress.js | File | 3.15 KB | 0777 |
|
| str.js | File | 10.01 KB | 0777 |
|
| tag.js | File | 15.02 KB | 0777 |
|
| templates.js | File | 10.83 KB | 0777 |
|
| toast.js | File | 4.26 KB | 0777 |
|
| togglesensitive.js | File | 5.15 KB | 0777 |
|
| tooltip.js | File | 4.09 KB | 0777 |
|
| tree.js | File | 18.39 KB | 0777 |
|
| truncate.js | File | 6.56 KB | 0777 |
|
| url.js | File | 3.65 KB | 0777 |
|
| user_date.js | File | 9.27 KB | 0777 |
|
| userfeedback.js | File | 2.91 KB | 0777 |
|
| usermenu.js | File | 5.13 KB | 0777 |
|
| utility.js | File | 7.5 KB | 0777 |
|
| utils.js | File | 4.83 KB | 0777 |
|
| yui.js | File | 1.13 KB | 0777 |
|