Merge branch 'MDL-79041-402-2' of https://github.com/HuongNV13/moodle into MOODLE_402_STABLE
This commit is contained in:
+1
-1
@@ -6,6 +6,6 @@ define("core/moodlenet/send_resource",["exports","core/config","core/modal_facto
|
||||
* @copyright 2023 Huong Nguyen <huongnv13@gmail.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @since 4.2
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_config=_interopRequireDefault(_config),_modal_factory=_interopRequireDefault(_modal_factory),_prefetch=_interopRequireDefault(_prefetch),Templates=_interopRequireWildcard(Templates),MoodleNetService=_interopRequireWildcard(MoodleNetService),_send_activity_modal=_interopRequireDefault(_send_activity_modal);let currentModal,siteSupportUrl,issuerId,courseId,cmId,shareFormat;const responseFromMoodleNet=function(status){let resourceUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const $modal=currentModal.getModal(),modal=$modal[0];modal.querySelector(".modal-header").classList.add("no-border"),currentModal.setBody(Templates.render("core/moodlenet/send_activity_modal_done",{success:status,sitesupporturl:siteSupportUrl})),status&&(currentModal.setFooter(Templates.render("core/moodlenet/send_activity_modal_footer_view",{resourseurl:resourceUrl})),currentModal.showFooter())},handleAuthorization=issuerId=>MoodleNetService.authorizationCheck(issuerId,courseId).then((async data=>data.status?((issuerId,cmId,shareFormat)=>{const modal=currentModal.getModal()[0];modal.querySelector(".modal-header").classList.remove("no-border"),modal.querySelector(".modal-header").classList.add("no-header-text"),currentModal.setBody(Templates.render("core/moodlenet/send_activity_modal_packaging",{})),currentModal.hideFooter(),MoodleNetService.sendActivity(issuerId,cmId,shareFormat).then((async data=>{const status=data.status,resourceUrl=data.resourceurl;return responseFromMoodleNet(status,resourceUrl)})).catch(_notification.exception)})(issuerId,cmId,shareFormat):(window.moodleNetAuthorize=(error,errorDescription)=>{""==error?handleAuthorization(issuerId):"access_denied"!==error&&(0,_notification.alert)("Authorization error","Error: "+error+"<br><br>Error description: "+errorDescription,"Cancel")},window.open(data.loginurl,"moodlenet_auth","location=0,status=0,width=".concat(550,",height=").concat(550,",scrollbars=yes"))))).catch(_notification.exception);_exports.init=()=>{_prefetch.default.prefetchTemplates(["core/moodlenet/send_activity_modal_base","core/moodlenet/send_activity_modal_packaging","core/moodlenet/send_activity_modal_done","core/moodlenet/send_activity_modal_footer_view"]),document.addEventListener("click",(e=>{const shareAction=e.target.closest('[data-action="sendtomoodlenet"]'),sendAction=e.target.closest('.moodlenet-action-buttons [data-action="share"]');if(shareAction){e.preventDefault();const type=shareAction.getAttribute("data-type"),shareType=shareAction.getAttribute("data-sharetype"),cmId=_config.default.contextInstanceId;"activity"==type&&MoodleNetService.getActivityInformation(cmId).then((async data=>data.status?(siteSupportUrl=data.supportpageurl,issuerId=data.issuerid,_modal_factory.default.create({type:_send_activity_modal.default.TYPE,large:!0,templateContext:{activitytype:data.type,activityname:data.name,sharetype:await(0,_str.get_string)("moodlenet:sharetype"+shareType,"moodle"),server:data.server}}).then((modal=>(currentModal=modal,modal.show(),modal))).catch(_notification.exception)):(0,_notification.addNotification)({message:data.warnings[0].message,type:"error"}))).catch(_notification.exception)}sendAction&&(e.preventDefault(),courseId=_config.default.courseId,cmId=_config.default.contextInstanceId,shareFormat=0,handleAuthorization(issuerId))}))}}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_config=_interopRequireDefault(_config),_modal_factory=_interopRequireDefault(_modal_factory),_prefetch=_interopRequireDefault(_prefetch),Templates=_interopRequireWildcard(Templates),MoodleNetService=_interopRequireWildcard(MoodleNetService),_send_activity_modal=_interopRequireDefault(_send_activity_modal);let currentModal,siteSupportUrl,issuerId,courseId,cmId,shareFormat;const responseFromMoodleNet=function(status){let resourceUrl=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const $modal=currentModal.getModal(),modal=$modal[0];modal.querySelector(".modal-header").classList.add("no-border"),currentModal.setBody(Templates.render("core/moodlenet/send_activity_modal_done",{success:status,sitesupporturl:siteSupportUrl})),status&&(currentModal.setFooter(Templates.render("core/moodlenet/send_activity_modal_footer_view",{resourceurl:resourceUrl})),currentModal.showFooter())},handleAuthorization=issuerId=>MoodleNetService.authorizationCheck(issuerId,courseId).then((async data=>data.status?((issuerId,cmId,shareFormat)=>{const modal=currentModal.getModal()[0];modal.querySelector(".modal-header").classList.remove("no-border"),modal.querySelector(".modal-header").classList.add("no-header-text"),currentModal.setBody(Templates.render("core/moodlenet/send_activity_modal_packaging",{})),currentModal.hideFooter(),MoodleNetService.sendActivity(issuerId,cmId,shareFormat).then((async data=>{const status=data.status,resourceUrl=data.resourceurl;return responseFromMoodleNet(status,resourceUrl)})).catch(_notification.exception)})(issuerId,cmId,shareFormat):(window.moodleNetAuthorize=(error,errorDescription)=>{""==error?handleAuthorization(issuerId):"access_denied"!==error&&(0,_notification.alert)("Authorization error","Error: "+error+"<br><br>Error description: "+errorDescription,"Cancel")},window.open(data.loginurl,"moodlenet_auth","location=0,status=0,width=".concat(550,",height=").concat(550,",scrollbars=yes"))))).catch(_notification.exception);_exports.init=()=>{_prefetch.default.prefetchTemplates(["core/moodlenet/send_activity_modal_base","core/moodlenet/send_activity_modal_packaging","core/moodlenet/send_activity_modal_done","core/moodlenet/send_activity_modal_footer_view"]),document.addEventListener("click",(e=>{const shareAction=e.target.closest('[data-action="sendtomoodlenet"]'),sendAction=e.target.closest('.moodlenet-action-buttons [data-action="share"]');if(shareAction){e.preventDefault();const type=shareAction.getAttribute("data-type"),shareType=shareAction.getAttribute("data-sharetype"),cmId=_config.default.contextInstanceId;"activity"==type&&MoodleNetService.getActivityInformation(cmId).then((async data=>data.status?(siteSupportUrl=data.supportpageurl,issuerId=data.issuerid,_modal_factory.default.create({type:_send_activity_modal.default.TYPE,large:!0,templateContext:{activitytype:data.type,activityname:data.name,sharetype:await(0,_str.get_string)("moodlenet:sharetype"+shareType,"moodle"),server:data.server}}).then((modal=>(currentModal=modal,modal.show(),modal))).catch(_notification.exception)):(0,_notification.addNotification)({message:data.warnings[0].message,type:"error"}))).catch(_notification.exception)}sendAction&&(e.preventDefault(),courseId=_config.default.courseId,cmId=_config.default.contextInstanceId,shareFormat=0,handleAuthorization(issuerId))}))}}));
|
||||
|
||||
//# sourceMappingURL=send_resource.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -80,7 +80,7 @@ const responseFromMoodleNet = (status, resourceUrl = '') => {
|
||||
|
||||
if (status) {
|
||||
currentModal.setFooter(Templates.render('core/moodlenet/send_activity_modal_footer_view', {
|
||||
resourseurl: resourceUrl,
|
||||
resourceurl: resourceUrl,
|
||||
}));
|
||||
currentModal.showFooter();
|
||||
}
|
||||
|
||||
+4
-1
@@ -141,7 +141,10 @@ class moodlenet_send_activity extends external_api {
|
||||
public static function execute_returns(): external_single_structure {
|
||||
return new external_single_structure([
|
||||
'status' => new external_value(PARAM_BOOL, 'Status: true if success'),
|
||||
'resourceurl' => new external_value(PARAM_URL, 'Resource URL from MoodleNet'),
|
||||
// We used PARAM_TEXT instead of PARAM_URL because the URL return from MoodleNet may contain some characters.
|
||||
// It does not match with PARAM_URL, but the URL still works.
|
||||
// Since we just show the response resource URL to the user for them to navigate to MoodleNet, it would be safe.
|
||||
'resourceurl' => new external_value(PARAM_TEXT, 'Resource URL from MoodleNet'),
|
||||
'warnings' => new external_warnings(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -95,7 +95,9 @@ class moodlenet_client {
|
||||
* Prepare the request data required for sharing a file to MoodleNet.
|
||||
* This creates an array in the format used by \core\httpclient options to send a multipart request.
|
||||
*
|
||||
* @param array $filedata An array of data relating to the file being shared (as prepared by ::prepare_share_contents).
|
||||
* @param string $filename Name of the file being shared.
|
||||
* @param string $mimetype Mime type of the file being shared.
|
||||
* @param StreamInterface $stream Stream of the file being shared.
|
||||
* @param string $resourcename The name of the resource being shared.
|
||||
* @param string $resourcedescription A description of the resource being shared.
|
||||
* @return array Data in the format required to send a file to MoodleNet using \core\httpclient.
|
||||
@@ -105,7 +107,7 @@ class moodlenet_client {
|
||||
string $mimetype,
|
||||
StreamInterface $stream,
|
||||
string $resourcename,
|
||||
$resourcedescription,
|
||||
string $resourcedescription,
|
||||
): array {
|
||||
return [
|
||||
'headers' => [
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
Render the footer for sharing activity
|
||||
Example context (json):
|
||||
{
|
||||
"resourseurl": "https://moodlenet.test/draft/activity.mbz"
|
||||
"resourceurl": "https://moodlenet.test/draft/activity.mbz"
|
||||
}
|
||||
}}
|
||||
<div class="moodlenet-action-buttons">
|
||||
<a class="btn btn-primary" href="{{resourseurl}}" target="_blank">
|
||||
<a class="btn btn-primary" href="{{resourceurl}}" target="_blank" rel="noopener noreferrer">
|
||||
{{#str}} moodlenet:gotomoodlenet, moodle {{/str}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -111,4 +111,61 @@ class moodlenet_send_activity_test extends externallib_advanced_testcase {
|
||||
$this->assertEquals($issuer->get('id'), $result['warnings'][0]['item']);
|
||||
$this->assertEquals(get_string('moodlenet:issuerisnotauthorized', 'moodle'), $result['warnings'][0]['message']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test execute_returns() method.
|
||||
*
|
||||
* @dataProvider return_resource_url_provider
|
||||
* @covers ::execute_returns
|
||||
*/
|
||||
public function test_moodlenet_send_activity_return_resource_url(bool $state, string $resourceurl) {
|
||||
$this->resetAfterTest();
|
||||
// Create dummy result with the resourceurl.
|
||||
$result = [
|
||||
'status' => true,
|
||||
'resourceurl' => $resourceurl,
|
||||
'warnings' => [],
|
||||
];
|
||||
if (!$state) {
|
||||
$this->expectException(\invalid_response_exception::class);
|
||||
}
|
||||
$result = external_api::clean_returnvalue(moodlenet_send_activity::execute_returns(), $result);
|
||||
if ($state) {
|
||||
$this->assertEquals($resourceurl, $result['resourceurl']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for test_moodlenet_send_activity_return_resource_url().
|
||||
*
|
||||
* @return array Test data.
|
||||
*/
|
||||
public function return_resource_url_provider(): array {
|
||||
return [
|
||||
'Success 1' => [
|
||||
true,
|
||||
'https://moodlenet.example.com/drafts/view/testactivity_backup.mbz',
|
||||
],
|
||||
'Success 2' => [
|
||||
true,
|
||||
'https://moodlenet.example.com/drafts/view/testactivity_backup with spaces.mbz',
|
||||
],
|
||||
'Success 3' => [
|
||||
true,
|
||||
'https://moodlenet.example.com/drafts/view/testactivity_backup with " character.mbz',
|
||||
],
|
||||
'Success 4' => [
|
||||
true,
|
||||
"https://moodlenet.example.com/drafts/view/testactivity_backup with ' character.mbz",
|
||||
],
|
||||
'Success 5' => [
|
||||
true,
|
||||
'https://moodlenet.example.com/drafts/view/testactivity_backup with < and > characters.mbz',
|
||||
],
|
||||
'Fail 1' => [
|
||||
false,
|
||||
'https://moodlenet.example.com/drafts/view/testactivity_backupwith<lang lang="en">a<a</lang>html.mbz',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user