[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 (function () { 2 'use strict'; 3 4 /** 5 * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> 6 * @license GNU General Public License version 2 or later; see LICENSE.txt 7 */ 8 if (!Joomla) { 9 throw new Error('Joomla API was not initialised properly'); 10 } 11 12 Joomla.Update = window.Joomla.Update || { 13 stat_total: 0, 14 stat_files: 0, 15 stat_inbytes: 0, 16 stat_outbytes: 0, 17 password: null, 18 totalsize: 0, 19 ajax_url: null, 20 return_url: null, 21 cached_instance: null, 22 genericErrorMessage: function genericErrorMessage(message) { 23 var headerDiv = document.getElementById('errorDialogLabel'); 24 var messageDiv = document.getElementById('errorDialogMessage'); 25 var progressDiv = document.getElementById('joomlaupdate-progress'); 26 var errorDiv = document.getElementById('joomlaupdate-error'); 27 headerDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_HEAD_GENERIC'); 28 messageDiv.innerHTML = message; 29 30 if (message.toLowerCase() === 'invalid login') { 31 messageDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_BODY_INVALIDLOGIN'); 32 } 33 34 progressDiv.classList.add('d-none'); 35 errorDiv.classList.remove('d-none'); 36 }, 37 handleErrorResponse: function handleErrorResponse(xhr) { 38 var isForbidden = xhr.status === 403; 39 var headerDiv = document.getElementById('errorDialogLabel'); 40 var messageDiv = document.getElementById('errorDialogMessage'); 41 var progressDiv = document.getElementById('joomlaupdate-progress'); 42 var errorDiv = document.getElementById('joomlaupdate-error'); 43 44 if (isForbidden) { 45 headerDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_HEAD_FORBIDDEN'); 46 messageDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_BODY_FORBIDDEN'); 47 } else { 48 headerDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_HEAD_SERVERERROR'); 49 messageDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_ERRORMODAL_BODY_SERVERERROR'); 50 } 51 52 progressDiv.classList.add('d-none'); 53 errorDiv.classList.remove('d-none'); 54 }, 55 startExtract: function startExtract() { 56 // Reset variables 57 Joomla.Update.stat_files = 0; 58 Joomla.Update.stat_inbytes = 0; 59 Joomla.Update.stat_outbytes = 0; 60 Joomla.Update.cached_instance = null; 61 document.getElementById('extbytesin').innerText = Joomla.Update.formatBytes(Joomla.Update.stat_inbytes); 62 document.getElementById('extbytesout').innerText = Joomla.Update.formatBytes(Joomla.Update.stat_outbytes); 63 document.getElementById('extfiles').innerText = Joomla.Update.stat_files; 64 var postData = new FormData(); 65 postData.append('task', 'startExtract'); 66 postData.append('password', Joomla.Update.password); // Make the initial request to the extraction script 67 68 Joomla.request({ 69 url: Joomla.Update.ajax_url, 70 data: postData, 71 method: 'POST', 72 perform: true, 73 onSuccess: function onSuccess(rawJson) { 74 try { 75 // If we can decode the response as JSON step through the update 76 var data = JSON.parse(rawJson); 77 Joomla.Update.stepExtract(data); 78 } catch (e) { 79 // Decoding failed; display an error 80 Joomla.Update.genericErrorMessage(e.message); 81 } 82 }, 83 onError: Joomla.Update.handleErrorResponse 84 }); 85 }, 86 stepExtract: function stepExtract(data) { 87 // Did we get an error from the ZIP extraction engine? 88 if (data.status === false) { 89 Joomla.Update.genericErrorMessage(data.message); 90 return; 91 } 92 93 var progressDiv = document.getElementById('progress-bar'); 94 var titleDiv = document.getElementById('update-title'); // Add data to variables 95 96 Joomla.Update.stat_inbytes = data.bytesIn; 97 Joomla.Update.stat_percent = data.percent; 98 Joomla.Update.stat_percent = Joomla.Update.stat_percent || 100 * (Joomla.Update.stat_inbytes / Joomla.Update.totalsize); // Update GUI 99 100 Joomla.Update.stat_outbytes = data.bytesOut; 101 Joomla.Update.stat_files = data.files; 102 103 if (Joomla.Update.stat_percent < 100) { 104 progressDiv.classList.remove('bg-success'); 105 progressDiv.style.width = Joomla.Update.stat_percent + "%"; 106 progressDiv.setAttribute('aria-valuenow', Joomla.Update.stat_percent); 107 } else if (Joomla.Update.stat_percent >= 100) { 108 progressDiv.classList.add('bg-success'); 109 progressDiv.style.width = '100%'; 110 progressDiv.setAttribute('aria-valuenow', 100); 111 } 112 113 progressDiv.innerText = Joomla.Update.stat_percent.toFixed(1) + "%"; 114 document.getElementById('extbytesin').innerText = Joomla.Update.formatBytes(Joomla.Update.stat_inbytes); 115 document.getElementById('extbytesout').innerText = Joomla.Update.formatBytes(Joomla.Update.stat_outbytes); 116 document.getElementById('extfiles').innerText = Joomla.Update.stat_files; // Are we done extracting? 117 118 if (data.done) { 119 progressDiv.classList.add('bg-success'); 120 progressDiv.style.width = '100%'; 121 progressDiv.setAttribute('aria-valuenow', 100); 122 titleDiv.innerHTML = Joomla.Text._('COM_JOOMLAUPDATE_UPDATING_COMPLETE'); 123 Joomla.Update.finalizeUpdate(); 124 return; 125 } // This is required so we can get outside the scope of the previous XHR's success handler. 126 127 128 window.setTimeout(function () { 129 Joomla.Update.delayedStepExtract(data.instance); 130 }, 50); 131 }, 132 delayedStepExtract: function delayedStepExtract(instance) { 133 Joomla.Update.cached_instance = instance; 134 var postData = new FormData(); 135 postData.append('task', 'stepExtract'); 136 postData.append('password', Joomla.Update.password); 137 138 if (instance) { 139 postData.append('instance', instance); 140 } 141 142 Joomla.request({ 143 url: Joomla.Update.ajax_url, 144 data: postData, 145 method: 'POST', 146 perform: true, 147 onSuccess: function onSuccess(rawJson) { 148 try { 149 var newData = JSON.parse(rawJson); 150 Joomla.Update.stepExtract(newData); 151 } catch (e) { 152 Joomla.Update.genericErrorMessage(e.message); 153 } 154 }, 155 onError: Joomla.Update.handleErrorResponse 156 }); 157 }, 158 finalizeUpdate: function finalizeUpdate() { 159 var postData = new FormData(); 160 postData.append('task', 'finalizeUpdate'); 161 postData.append('password', Joomla.Update.password); 162 Joomla.request({ 163 url: Joomla.Update.ajax_url, 164 data: postData, 165 method: 'POST', 166 perform: true, 167 onSuccess: function onSuccess() { 168 window.location = Joomla.Update.return_url; 169 }, 170 onError: Joomla.Update.handleErrorResponse 171 }); 172 }, 173 formatBytes: function formatBytes(bytes, decimals) { 174 if (decimals === void 0) { 175 decimals = 2; 176 } 177 178 if (bytes === 0) return "0 " + Joomla.Text._('JLIB_SIZE_BYTES'); 179 var k = 1024; 180 var dm = decimals < 0 ? 0 : decimals; 181 var sizes = [Joomla.Text._('JLIB_SIZE_BYTES'), Joomla.Text._('JLIB_SIZE_KB'), Joomla.Text._('JLIB_SIZE_MB'), Joomla.Text._('JLIB_SIZE_GB'), Joomla.Text._('JLIB_SIZE_TB'), Joomla.Text._('JLIB_SIZE_PB'), Joomla.Text._('JLIB_SIZE_EB'), Joomla.Text._('JLIB_SIZE_ZB'), Joomla.Text._('JLIB_SIZE_YB')]; 182 var i = Math.floor(Math.log(bytes) / Math.log(k)); 183 return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; 184 }, 185 resumeButtonHandler: function resumeButtonHandler(e) { 186 e.preventDefault(); 187 document.getElementById('joomlaupdate-progress').classList.remove('d-none'); 188 document.getElementById('joomlaupdate-error').classList.add('d-none'); 189 190 if (Joomla.Update.cached_instance === false) { 191 Joomla.Update.startExtract(); 192 } else { 193 Joomla.Update.delayedStepExtract(Joomla.Update.cached_instance); 194 } 195 }, 196 restartButtonHandler: function restartButtonHandler(e) { 197 e.preventDefault(); 198 document.getElementById('joomlaupdate-progress').classList.remove('d-none'); 199 document.getElementById('joomlaupdate-error').classList.add('d-none'); 200 Joomla.Update.startExtract(); 201 } 202 }; // Add click handlers for the Resume and Restart Update buttons in the error pane. 203 204 var elResume = document.getElementById('joomlaupdate-resume'); 205 var elRestart = document.getElementById('joomlaupdate-restart'); 206 207 if (elResume) { 208 elResume.addEventListener('click', Joomla.Update.resumeButtonHandler); 209 } 210 211 if (elRestart) { 212 elRestart.addEventListener('click', Joomla.Update.restartButtonHandler); 213 } // Start the update 214 215 216 var JoomlaUpdateOptions = Joomla.getOptions('joomlaupdate'); 217 218 if (JoomlaUpdateOptions && Object.keys(JoomlaUpdateOptions).length) { 219 Joomla.Update.password = JoomlaUpdateOptions.password; 220 Joomla.Update.totalsize = JoomlaUpdateOptions.totalsize; 221 Joomla.Update.ajax_url = JoomlaUpdateOptions.ajax_url; 222 Joomla.Update.return_url = JoomlaUpdateOptions.return_url; 223 Joomla.Update.startExtract(); 224 } 225 226 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |