From 6f3a655c6e30184acef907ebdc8bd8b25ba57df9 Mon Sep 17 00:00:00 2001 From: Daniel Thies Date: Sat, 20 Apr 2024 09:29:04 -0500 Subject: [PATCH] MED-100: Update from Vimeo before loading form --- source/vimeo/amd/build/file_upload.min.js | 2 +- source/vimeo/amd/build/file_upload.min.js.map | 2 +- source/vimeo/amd/src/file_upload.js | 3 --- source/vimeo/classes/external/create_token.php | 2 +- source/vimeo/classes/form/delete_resource.php | 2 +- source/vimeo/classes/form/edit_resource.php | 1 + source/vimeo/classes/manager.php | 15 ++++++++++++++- 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/source/vimeo/amd/build/file_upload.min.js b/source/vimeo/amd/build/file_upload.min.js index 7885a78..d925314 100644 --- a/source/vimeo/amd/build/file_upload.min.js +++ b/source/vimeo/amd/build/file_upload.min.js @@ -1,3 +1,3 @@ -define("mediatimesrc_vimeo/file_upload",["exports","core/ajax","core/config","core/log","core/notification"],(function(_exports,_ajax,_config,_log,_notification){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification);const upload=async resource=>{const file=document.querySelector('input[name="videofile"]').files[0],url=new URL(_config.default.wwwroot+"/admin/tool/mediatime/index.php");let offset=0;url.searchParams.set("id",resource.id);do{const request=new Request(resource.uploadurl,{body:file.slice(Number(offset)),headers:{"Tus-Resumable":"1.0.0","Upload-Offset":String(offset),"Content-Type":"application/offset+octet-stream"},method:"PATCH"}),response=await fetch(request);response.ok&&(offset=response.headers.get("Upload-Offset")),document.querySelector(".progress").style.width=offset/file.size*100+"%",_log.default.debug(offset)}while(offset{const file=document.querySelector('input[name="videofile"]').files[0],url=new URL(_config.default.wwwroot+"/admin/tool/mediatime/index.php");let offset=0;url.searchParams.set("id",resource.id);do{const request=new Request(resource.uploadurl,{body:file.slice(Number(offset)),headers:{"Tus-Resumable":"1.0.0","Upload-Offset":String(offset),"Content-Type":"application/offset+octet-stream"},method:"PATCH"}),response=await fetch(request);response.ok&&(offset=response.headers.get("Upload-Offset")),document.querySelector(".progress").style.width=offset/file.size*100+"%"}while(offset {\n const file = document.querySelector('input[name=\"videofile\"]').files[0];\n const url = new URL(Config.wwwroot + '/admin/tool/mediatime/index.php');\n let offset = 0;\n\n url.searchParams.set('id', resource.id);\n\n do {\n const request = new Request(resource.uploadurl, {\n body: file.slice(Number(offset)),\n headers: {\n 'Tus-Resumable': '1.0.0',\n 'Upload-Offset': String(offset),\n 'Content-Type': 'application/offset+octet-stream'\n },\n method: 'PATCH'\n });\n const response = await fetch(request);\n if (response.ok) {\n offset = response.headers.get('Upload-Offset');\n }\n document.querySelector('.progress').style.width = ( offset / file.size * 100) + '%';\n Log.debug(offset);\n } while (offset < file.size);\n window.location.href = url;\n};\n\nexport default {\n init: function() {\n document.body.removeEventListener('click', this.handleClick);\n document.body.addEventListener('click', this.handleClick);\n },\n\n handleClick: function(e) {\n const button = e.target.closest('button[name=\"upload\"]');\n if (button) {\n const file = document.querySelector('input[name=\"videofile\"]').files[0];\n e.preventDefault();\n Ajax.call([{\n args: {\n filesize: Number(file.size),\n description: document.querySelector('input[name=\"description\"]').value,\n name: document.querySelector('input[name=\"name\"]').value,\n tags: document.querySelector('input[name=\"tags\"]').value,\n title: document.querySelector('input[name=\"title\"]').value\n },\n contextid: 1,\n done: upload,\n fail: Notification.exception,\n methodname: 'mediatimesrc_vimeo_create_token'\n }]);\n Log.debug(file.size);\n }\n }\n};\n"],"names":["upload","async","file","document","querySelector","files","url","URL","Config","wwwroot","offset","searchParams","set","resource","id","request","Request","uploadurl","body","slice","Number","headers","String","method","response","fetch","ok","get","style","width","size","debug","window","location","href","init","removeEventListener","this","handleClick","addEventListener","e","target","closest","preventDefault","call","args","filesize","description","value","name","tags","title","contextid","done","fail","Notification","exception","methodname"],"mappings":"4eAKMA,OAASC,MAAAA,iBACLC,KAAOC,SAASC,cAAc,2BAA2BC,MAAM,GAC/DC,IAAM,IAAIC,IAAIC,gBAAOC,QAAU,uCACjCC,OAAS,EAEbJ,IAAIK,aAAaC,IAAI,KAAMC,SAASC,MAEjC,OACOC,QAAU,IAAIC,QAAQH,SAASI,UAAW,CAC5CC,KAAMhB,KAAKiB,MAAMC,OAAOV,SACxBW,QAAS,iBACY,wBACAC,OAAOZ,uBACR,mCAEpBa,OAAQ,UAENC,eAAiBC,MAAMV,SACzBS,SAASE,KACThB,OAASc,SAASH,QAAQM,IAAI,kBAElCxB,SAASC,cAAc,aAAawB,MAAMC,MAAUnB,OAASR,KAAK4B,KAAO,IAAO,iBAC5EC,MAAMrB,cACLA,OAASR,KAAK4B,MACvBE,OAAOC,SAASC,KAAO5B,kBAGZ,CACX6B,KAAM,WACFhC,SAASe,KAAKkB,oBAAoB,QAASC,KAAKC,aAChDnC,SAASe,KAAKqB,iBAAiB,QAASF,KAAKC,cAGjDA,YAAa,SAASE,MACHA,EAAEC,OAAOC,QAAQ,yBACpB,OACFxC,KAAOC,SAASC,cAAc,2BAA2BC,MAAM,GACrEmC,EAAEG,+BACGC,KAAK,CAAC,CACPC,KAAM,CACFC,SAAU1B,OAAOlB,KAAK4B,MACtBiB,YAAa5C,SAASC,cAAc,6BAA6B4C,MACjEC,KAAM9C,SAASC,cAAc,sBAAsB4C,MACnDE,KAAM/C,SAASC,cAAc,sBAAsB4C,MACnDG,MAAOhD,SAASC,cAAc,uBAAuB4C,OAEzDI,UAAW,EACXC,KAAMrD,OACNsD,KAAMC,sBAAaC,UACnBC,WAAY,kDAEZ1B,MAAM7B,KAAK4B"} \ No newline at end of file +{"version":3,"file":"file_upload.min.js","sources":["../src/file_upload.js"],"sourcesContent":["import Ajax from 'core/ajax';\nimport Config from 'core/config';\nimport Notification from 'core/notification';\n\nconst upload = async(resource) => {\n const file = document.querySelector('input[name=\"videofile\"]').files[0];\n const url = new URL(Config.wwwroot + '/admin/tool/mediatime/index.php');\n let offset = 0;\n\n url.searchParams.set('id', resource.id);\n\n do {\n const request = new Request(resource.uploadurl, {\n body: file.slice(Number(offset)),\n headers: {\n 'Tus-Resumable': '1.0.0',\n 'Upload-Offset': String(offset),\n 'Content-Type': 'application/offset+octet-stream'\n },\n method: 'PATCH'\n });\n const response = await fetch(request);\n if (response.ok) {\n offset = response.headers.get('Upload-Offset');\n }\n document.querySelector('.progress').style.width = ( offset / file.size * 100) + '%';\n } while (offset < file.size);\n window.location.href = url;\n};\n\nexport default {\n init: function() {\n document.body.removeEventListener('click', this.handleClick);\n document.body.addEventListener('click', this.handleClick);\n },\n\n handleClick: function(e) {\n const button = e.target.closest('button[name=\"upload\"]');\n if (button) {\n const file = document.querySelector('input[name=\"videofile\"]').files[0];\n e.preventDefault();\n Ajax.call([{\n args: {\n filesize: Number(file.size),\n description: document.querySelector('input[name=\"description\"]').value,\n name: document.querySelector('input[name=\"name\"]').value,\n tags: document.querySelector('input[name=\"tags\"]').value,\n title: document.querySelector('input[name=\"title\"]').value\n },\n contextid: 1,\n done: upload,\n fail: Notification.exception,\n methodname: 'mediatimesrc_vimeo_create_token'\n }]);\n }\n }\n};\n"],"names":["upload","async","file","document","querySelector","files","url","URL","Config","wwwroot","offset","searchParams","set","resource","id","request","Request","uploadurl","body","slice","Number","headers","String","method","response","fetch","ok","get","style","width","size","window","location","href","init","removeEventListener","this","handleClick","addEventListener","e","target","closest","preventDefault","call","args","filesize","description","value","name","tags","title","contextid","done","fail","Notification","exception","methodname"],"mappings":"0bAIMA,OAASC,MAAAA,iBACLC,KAAOC,SAASC,cAAc,2BAA2BC,MAAM,GAC/DC,IAAM,IAAIC,IAAIC,gBAAOC,QAAU,uCACjCC,OAAS,EAEbJ,IAAIK,aAAaC,IAAI,KAAMC,SAASC,MAEjC,OACOC,QAAU,IAAIC,QAAQH,SAASI,UAAW,CAC5CC,KAAMhB,KAAKiB,MAAMC,OAAOV,SACxBW,QAAS,iBACY,wBACAC,OAAOZ,uBACR,mCAEpBa,OAAQ,UAENC,eAAiBC,MAAMV,SACzBS,SAASE,KACThB,OAASc,SAASH,QAAQM,IAAI,kBAElCxB,SAASC,cAAc,aAAawB,MAAMC,MAAUnB,OAASR,KAAK4B,KAAO,IAAO,UAC3EpB,OAASR,KAAK4B,MACvBC,OAAOC,SAASC,KAAO3B,kBAGZ,CACX4B,KAAM,WACF/B,SAASe,KAAKiB,oBAAoB,QAASC,KAAKC,aAChDlC,SAASe,KAAKoB,iBAAiB,QAASF,KAAKC,cAGjDA,YAAa,SAASE,MACHA,EAAEC,OAAOC,QAAQ,yBACpB,OACFvC,KAAOC,SAASC,cAAc,2BAA2BC,MAAM,GACrEkC,EAAEG,+BACGC,KAAK,CAAC,CACPC,KAAM,CACFC,SAAUzB,OAAOlB,KAAK4B,MACtBgB,YAAa3C,SAASC,cAAc,6BAA6B2C,MACjEC,KAAM7C,SAASC,cAAc,sBAAsB2C,MACnDE,KAAM9C,SAASC,cAAc,sBAAsB2C,MACnDG,MAAO/C,SAASC,cAAc,uBAAuB2C,OAEzDI,UAAW,EACXC,KAAMpD,OACNqD,KAAMC,sBAAaC,UACnBC,WAAY"} \ No newline at end of file diff --git a/source/vimeo/amd/src/file_upload.js b/source/vimeo/amd/src/file_upload.js index 1842853..588010e 100644 --- a/source/vimeo/amd/src/file_upload.js +++ b/source/vimeo/amd/src/file_upload.js @@ -1,6 +1,5 @@ import Ajax from 'core/ajax'; import Config from 'core/config'; -import Log from 'core/log'; import Notification from 'core/notification'; const upload = async(resource) => { @@ -25,7 +24,6 @@ const upload = async(resource) => { offset = response.headers.get('Upload-Offset'); } document.querySelector('.progress').style.width = ( offset / file.size * 100) + '%'; - Log.debug(offset); } while (offset < file.size); window.location.href = url; }; @@ -54,7 +52,6 @@ export default { fail: Notification.exception, methodname: 'mediatimesrc_vimeo_create_token' }]); - Log.debug(file.size); } } }; diff --git a/source/vimeo/classes/external/create_token.php b/source/vimeo/classes/external/create_token.php index 23c7d87..b75f38d 100644 --- a/source/vimeo/classes/external/create_token.php +++ b/source/vimeo/classes/external/create_token.php @@ -89,7 +89,7 @@ public static function execute($description, $filesize, $name, $tags, $title): a ], ]); $updatedvideo = $api->request($video['uri'], [ - 'name' => $params['title'], + 'name' => $params['title'] ?: $params['name'], 'description' => $params['description'], ], 'PATCH')['body']; $id = $DB->insert_record('tool_mediatime', [ diff --git a/source/vimeo/classes/form/delete_resource.php b/source/vimeo/classes/form/delete_resource.php index 02b7f50..77a5dc6 100644 --- a/source/vimeo/classes/form/delete_resource.php +++ b/source/vimeo/classes/form/delete_resource.php @@ -58,7 +58,7 @@ public function definition() { ]; $mform->addGroup($action, 'vimeofileaction', get_string('vimeofileaction', 'mediatimesrc_vimeo'), [' '], false); $mform->setType('action', PARAM_INT); - $mform->setDefault('action', 2); + $mform->setDefault('action', 1); $mform->addHelpButton('vimeofileaction', 'vimeofileaction', 'mediatimesrc_vimeo'); $this->add_action_buttons(true, get_string('delete')); diff --git a/source/vimeo/classes/form/edit_resource.php b/source/vimeo/classes/form/edit_resource.php index 61f4296..1b2c29c 100644 --- a/source/vimeo/classes/form/edit_resource.php +++ b/source/vimeo/classes/form/edit_resource.php @@ -53,6 +53,7 @@ public function definition() { $mform->addElement('text', 'name', get_string('resourcename', 'tool_mediatime')); $mform->setType('name', PARAM_TEXT); $mform->addHelpButton('name', 'resourcename', 'tool_mediatime'); + $mform->addRule('name', get_string('required'), 'required', null, 'client'); $mform->addElement('text', 'title', get_string('title', 'tool_mediatime')); $mform->setType('title', PARAM_TEXT); diff --git a/source/vimeo/classes/manager.php b/source/vimeo/classes/manager.php index a82add3..ffc5033 100644 --- a/source/vimeo/classes/manager.php +++ b/source/vimeo/classes/manager.php @@ -99,7 +99,17 @@ public function __construct($record = null) { $this->content->tags = core_tag_tag::get_item_tags_array('tool_mediatime', 'tool_mediatime', $edit); - $data += ['name' => $this->record->name, 'title' => $this->content->name] + (array)$this->content; + // Check for updated values at Vimeo. + if (!$this->form->is_submitted()) { + $video = $this->api->request($this->content->uri)['body']; + $data = [ + 'description' => $video['description'], + 'title' => $video['name'], + 'name' => $this->record->name, + ] + $data; + } else { + $data += ['name' => $this->record->name, 'title' => $this->content->name] + (array)$this->content; + } } $this->form->set_data($data); if ($this->form->is_cancelled()) { @@ -123,6 +133,9 @@ public function __construct($record = null) { foreach ($fs->get_area_files(context_user::instance($USER->id)->id, 'user', 'draft', $data->videofile) as $file) { if (!$file->is_directory()) { $data->edit = $DB->insert_record('tool_mediatime', $data); + if (empty($data->title)) { + $data->title = $data->name; + } file_save_draft_area_files( $data->videofile,