From 6ccf84d3671398d42589f6385973ef403e43681b Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Thu, 24 Jun 2021 14:05:43 +0200 Subject: [PATCH 01/12] * Mail/SMIME: fix signed calendar events not being displayed (error:importing the ical!) --- mail/inc/class.mail_ui.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mail/inc/class.mail_ui.inc.php b/mail/inc/class.mail_ui.inc.php index 7a26604673..90b9528ff7 100644 --- a/mail/inc/class.mail_ui.inc.php +++ b/mail/inc/class.mail_ui.inc.php @@ -3314,7 +3314,8 @@ $filter['before']= date("d-M-Y", $cutoffdate2); if ($calendar_part && isset($GLOBALS['egw_info']['user']['apps']['calendar'])) { $charset = $calendar_part->getContentTypeParameter('charset'); - $this->mail_bo->fetchPartContents($uid, $calendar_part); + // Do not try to fetch raw part content if it's smime signed message + if (!$smime) $this->mail_bo->fetchPartContents($uid, $calendar_part); Api\Cache::setSession('calendar', 'ical', array( 'charset' => $charset ? $charset : 'utf-8', 'attachment' => $calendar_part->getContents(), From b79cc4ff1d30e29e57b8485d07ae501d668e11a7 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Thu, 24 Jun 2021 16:17:25 +0200 Subject: [PATCH 02/12] Avoid triggering initial resize if not necessary --- api/js/jsapi/egw.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/js/jsapi/egw.js b/api/js/jsapi/egw.js index 7fa1f8be3c..b94d432a8a 100644 --- a/api/js/jsapi/egw.js +++ b/api/js/jsapi/egw.js @@ -335,6 +335,7 @@ window.app = {classes: {}}; // Don't let the window gets horizental scrollbar var scrollWidth = document.body.scrollWidth - document.body.clientWidth; + var scrollHeight = document.body.scrollHeight - w.height; if (scrollWidth > 0 && scrollWidth + egw_getWindowOuterWidth() < screen.availWidth) delta_width = -scrollWidth; if (delta_height && egw_getWindowOuterHeight() >= egw.availHeight()) @@ -342,7 +343,7 @@ window.app = {classes: {}}; delta_height = 0; } if((delta_width != 0 || delta_height != 0) && - (delta_width >2 || delta_height >2 || delta_width<-2 || delta_height < -2)) + (delta_width >2 || delta_height >2 || delta_width<-2 || delta_height < -2) && (scrollHeight>0 || scrollWidth>0)) { if (window.framework && typeof window.framework.resize_popup != 'undefined') From d76eabbfb0d3c032b6f62eecbde0ec6200d28f4d Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Fri, 25 Jun 2021 13:15:43 +0200 Subject: [PATCH 03/12] Fix et2_avatar cropper not working --- api/js/etemplate/et2_widget_image.js | 1 + api/js/etemplate/et2_widget_image.ts | 2 +- api/js/jquery/jquery.noconflict.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/api/js/etemplate/et2_widget_image.js b/api/js/etemplate/et2_widget_image.js index acce26a4d8..251023ea73 100644 --- a/api/js/etemplate/et2_widget_image.js +++ b/api/js/etemplate/et2_widget_image.js @@ -526,6 +526,7 @@ et2_avatar.LAVATAR_BG_COLORS = [ et2_avatar.LAVATAR_TEXT_COLOR = '#ffffff'; et2_avatar.LAVATAR_SIZE = 128; et2_register_widget(et2_avatar, ["avatar"]); +window['et2_avatar'] = et2_avatar; /** * Avatar readonly widget to only display user profile picture or * user letter avatar based on user's firstname lastname. diff --git a/api/js/etemplate/et2_widget_image.ts b/api/js/etemplate/et2_widget_image.ts index 8fa71a3963..9f4f0704ca 100644 --- a/api/js/etemplate/et2_widget_image.ts +++ b/api/js/etemplate/et2_widget_image.ts @@ -653,7 +653,7 @@ export class et2_avatar extends et2_image } } et2_register_widget(et2_avatar, ["avatar"]); - +window['et2_avatar'] = et2_avatar; /** * Avatar readonly widget to only display user profile picture or * user letter avatar based on user's firstname lastname. diff --git a/api/js/jquery/jquery.noconflict.js b/api/js/jquery/jquery.noconflict.js index e488aca3d9..cc7a38ab81 100644 --- a/api/js/jquery/jquery.noconflict.js +++ b/api/js/jquery/jquery.noconflict.js @@ -20,5 +20,6 @@ /api/js/jquery/splitter.js; /api/js/jquery/blueimp/js/blueimp-gallery.min.js; /api/js/Resumable/resumable.js; + /vendor/bower-asset/cropper/dist/cropper.js; */ jQuery.noConflict(); \ No newline at end of file From 4f3516f9cef68de9d2ff023df97e80d9e8d22454 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Mon, 28 Jun 2021 16:02:28 +0200 Subject: [PATCH 04/12] Fix missing action buttons in some dialogs in mobile view --- pixelegg/mobile/fw_mobile.css | 12 +++++++++--- pixelegg/mobile/fw_mobile.less | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pixelegg/mobile/fw_mobile.css b/pixelegg/mobile/fw_mobile.css index 91a2ff29c9..1144d46187 100644 --- a/pixelegg/mobile/fw_mobile.css +++ b/pixelegg/mobile/fw_mobile.css @@ -8455,7 +8455,7 @@ table.egwGridView_grid img.et2_appicon { } body .ui-dialog .ui-dialog-buttonpane { position: fixed !important; - top: 0 !important; + bottom: 0 !important; left: 0 !important; display: block !important; padding: 0 !important; @@ -8477,6 +8477,7 @@ table.egwGridView_grid img.et2_appicon { background-color: transparent !important; background-size: 24px 24px !important; border: none; + float: right !important; } body .ui-dialog .ui-dialog-buttonpane button span { padding-left: 20px; @@ -8486,8 +8487,13 @@ table.egwGridView_grid img.et2_appicon { color: white; z-index: 100; background: #0c5da5; - width: 30%; - padding-top: 10px; + width: 100%; + height: 35px; + padding: 0; + padding-left: 5px; + margin: -3px; + padding-top: 15px; + border-radius: 0; } body .ui-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close { display: none; diff --git a/pixelegg/mobile/fw_mobile.less b/pixelegg/mobile/fw_mobile.less index 00ac34fa0c..ad94c9dcc1 100644 --- a/pixelegg/mobile/fw_mobile.less +++ b/pixelegg/mobile/fw_mobile.less @@ -596,7 +596,7 @@ } .ui-dialog .ui-dialog-buttonpane { position: fixed !important; - top:0 !important; + bottom:0 !important; left:0 !important; display:block !important; padding:0 !important; @@ -609,6 +609,7 @@ button { height:35px; .white-svg; + float: right !important; span {padding-left: 20px;} } background: #0c5da5; @@ -618,8 +619,13 @@ color: white; z-index: 100; background: #0c5da5; - width: 30%; - padding-top: 10px; + width: 100%; + height: 35px; + padding: 0; + padding-left: 5px; + margin: -3px; + padding-top: 15px; + border-radius: 0; .ui-dialog-titlebar-close { display: none; } From a1559e17235cee22847e861d16d43a59056896ac Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Mon, 28 Jun 2021 16:04:01 +0200 Subject: [PATCH 05/12] Get mobile framework working with new imports --- pixelegg/js/fw_mobile.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pixelegg/js/fw_mobile.js b/pixelegg/js/fw_mobile.js index 13220f901f..2e86add77e 100644 --- a/pixelegg/js/fw_mobile.js +++ b/pixelegg/js/fw_mobile.js @@ -18,6 +18,12 @@ egw_inheritance.js; */ +import '../../api/js/framework/fw_base.js'; +import '../../api/js/framework/fw_browser.js'; +import '../../api/js/framework/fw_ui.js'; +import '../../api/js/framework/fw_classes.js'; +import '../../api/js/jsapi/egw_inheritance.js'; + /** * * @param {DOMWindow} window From 3838b6885126a1e27165c7211c418d17c0a80361 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Mon, 28 Jun 2021 16:22:15 +0200 Subject: [PATCH 06/12] Fix broken nm actions on mobile framework --- api/js/etemplate/et2_extension_nextmatch_controller.js | 4 ++-- api/js/etemplate/et2_extension_nextmatch_controller.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/js/etemplate/et2_extension_nextmatch_controller.js b/api/js/etemplate/et2_extension_nextmatch_controller.js index 489cf24f11..c8de2fd1b3 100644 --- a/api/js/etemplate/et2_extension_nextmatch_controller.js +++ b/api/js/etemplate/et2_extension_nextmatch_controller.js @@ -12,7 +12,7 @@ import { et2_dataview_row } from "./et2_dataview_view_row"; import { et2_dataview_tile } from "./et2_dataview_view_tile"; import { et2_dataview_controller } from "./et2_dataview_controller"; import { et2_dataview_column } from "./et2_dataview_model_columns"; -import { framework, egw } from "../jsapi/egw_global"; +import { egw } from "../jsapi/egw_global"; import { egw_getActionManager, egw_getObjectManager, egwActionObjectManager, egwActionObject } from "../egw_action/egw_action.js"; import { EGW_AO_FLAG_DEFAULT_FOCUS, EGW_AO_EXEC_SELECTED, EGW_AO_FLAG_IS_CONTAINER } from "../egw_action/egw_action_constants.js"; import { nm_action } from "./et2_extension_nextmatch_actions.js"; @@ -566,7 +566,7 @@ export class et2_nextmatch_controller extends et2_dataview_controller { return; // inform mobile framework about nm selections, need to update status of header objects on selection if (egwIsMobile()) - framework.nm_onselect_ctrl(this._widget, action, senders); + window.framework.nm_onselect_ctrl(this._widget, action, senders); this._widget.onselect.call(this._widget, action, senders); } /** -- Implementation of et2_IDataProvider -- **/ diff --git a/api/js/etemplate/et2_extension_nextmatch_controller.ts b/api/js/etemplate/et2_extension_nextmatch_controller.ts index 4f2552d282..9f089abeb4 100644 --- a/api/js/etemplate/et2_extension_nextmatch_controller.ts +++ b/api/js/etemplate/et2_extension_nextmatch_controller.ts @@ -755,7 +755,7 @@ export class et2_nextmatch_controller extends et2_dataview_controller implements if(!this._widget) return; // inform mobile framework about nm selections, need to update status of header objects on selection - if (egwIsMobile()) framework.nm_onselect_ctrl(this._widget, action, senders); + if (egwIsMobile()) window.framework.nm_onselect_ctrl(this._widget, action, senders); this._widget.onselect.call(this._widget, action,senders); } From bb115f4f64748f474ab8338c6366b0049c33b98c Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 29 Jun 2021 08:14:57 +0200 Subject: [PATCH 07/12] update phpMailer to 6.5.0 on Dependabot security alert --- composer.lock | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 80dba9b3e3..5b59baf1c3 100644 --- a/composer.lock +++ b/composer.lock @@ -4155,30 +4155,34 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.1.6", + "version": "v6.5.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3" + "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3", - "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c", + "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c", "shasum": "" }, "require": { "ext-ctype": "*", "ext-filter": "*", + "ext-hash": "*", "php": ">=5.5.0" }, "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.2", - "friendsofphp/php-cs-fixer": "^2.2", - "phpunit/phpunit": "^4.8 || ^5.7" + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.5.6", + "yoast/phpunit-polyfills": "^0.2.0" }, "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", @@ -4213,7 +4217,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2020-05-27T12:24:03+00:00" + "time": "2021-06-16T14:33:43+00:00" }, { "name": "phpseclib/phpseclib", From 4228a7f7a7005e55c1d29e78e0052a8e6c1e48d4 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 29 Jun 2021 09:43:00 +0200 Subject: [PATCH 08/12] Changelog for 21.1.20210629 --- api/setup/setup.inc.php | 2 +- doc/rpm-build/debian.changes | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/api/setup/setup.inc.php b/api/setup/setup.inc.php index c503a247e7..c5b86b0e12 100644 --- a/api/setup/setup.inc.php +++ b/api/setup/setup.inc.php @@ -14,7 +14,7 @@ $setup_info['api']['title'] = 'EGroupware API'; $setup_info['api']['version'] = '21.1'; $setup_info['api']['versions']['current_header'] = '1.29'; // maintenance release in sync with changelog in doc/rpm-build/debian.changes -$setup_info['api']['versions']['maintenance_release'] = '21.1.20210521'; +$setup_info['api']['versions']['maintenance_release'] = '21.1.20210629'; $setup_info['api']['enable'] = 3; $setup_info['api']['app_order'] = 1; $setup_info['api']['license'] = 'GPL'; diff --git a/doc/rpm-build/debian.changes b/doc/rpm-build/debian.changes index 848b49acf6..7b88f613d3 100644 --- a/doc/rpm-build/debian.changes +++ b/doc/rpm-build/debian.changes @@ -1,3 +1,24 @@ +egroupware-docker (21.1.20210629) hardy; urgency=low + + * Mail/Admin: fix not working mail wizard + * Mail/SMIME: fix signed calendar events not being displayed (error:importing the ical!) + * Mail/Dovecot: allow to disable caching of flags in site config to support Dovecot private seen flags on shared folders + * Api: Prevent invalid customfield names + * Api: Clear initial load URL after using it, so F5 takes you to the app's normal entry point + * InfoLog: allow to limit list to last N month in site-configuration, if ordered by last modified + * Setup: skip files backup on update even if configured + * smallPART: only show own memberships when selecting an organisation for a course + * smallPART: allow to create new courses via LTI content-selection + * smallPART: fix ACL not used for course-list and giving you a "Course not found" error trying to subscribe + * smallPART: allow to interactive choose a course and video via LTI 1.3 + * smallPART: automatic registration from Moodle 3.10+ + * smallPART: using now ceLTIc/LTI for LTI 1.3 too + * smallPART: automatic use SameSite=None cookie attribute when embedding via LTI + * smallPART: fix failed opening of courses from course-list via LTI + * smallPART: allow to configure "Moodle username" for checking or creating an EGroupware user + + -- Ralf Becker Tue, 29 Jun 2021 09:43:00 +0200 + egroupware-docker (21.1.20210521) hardy; urgency=low * final 21.1 release from 25th May incl. new login background From 5efeb9345701060c7f9f8034a7d6bace2f64bd4c Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 30 Jun 2021 16:18:45 +0200 Subject: [PATCH 09/12] Try to take only quoted_printable to decode and avoid decoding url params as quoted --- api/src/Mail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/Mail.php b/api/src/Mail.php index cc71dbb6e1..26760e663a 100644 --- a/api/src/Mail.php +++ b/api/src/Mail.php @@ -6608,7 +6608,7 @@ class Mail static function detect_qp($string) { - return preg_match('/(=[0-9][A-F])|(=[A-F][0-9])|(=[A-F][A-F])|(=[0-9][0-9])/', $string); + return preg_match('/(=[0-9][A-F])|(=[A-F][0-9])|(=[A-F][A-F])|(=[0-9][0-9])[\s|=]/', $string); } /** From e5f533cf6c257f1263ad773e9073088815e93681 Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Wed, 30 Jun 2021 17:10:35 +0200 Subject: [PATCH 10/12] Replace jQuery.base64 with native JS and remove its library --- api/js/jquery/jquery.base64.js | 142 --------------------------------- mail/js/app.js | 6 +- mail/js/preview.js | 3 +- 3 files changed, 3 insertions(+), 148 deletions(-) delete mode 100644 api/js/jquery/jquery.base64.js diff --git a/api/js/jquery/jquery.base64.js b/api/js/jquery/jquery.base64.js deleted file mode 100644 index 763b08fa41..0000000000 --- a/api/js/jquery/jquery.base64.js +++ /dev/null @@ -1,142 +0,0 @@ - - /** - * jQuery BASE64 functions - * - * - * Encodes the given data with base64. - * String $.base64Encode ( String str ) - *
- * Decodes a base64 encoded data. - * String $.base64Decode ( String str ) - *
- * - * Encodes and Decodes the given data in base64. - * This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies. - * Base64-encoded data takes about 33% more space than the original data. - * This javascript code is used to encode / decode data using base64 (this encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean). Script is fully compatible with UTF-8 encoding. You can use base64 encoded data as simple encryption mechanism. - * If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). - * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin. - * - * Example - * Code - * - * $.base64Encode("I'm Persian."); - * - * Result - * - * "SSdtIFBlcnNpYW4u" - * - * Code - * - * $.base64Decode("SSdtIFBlcnNpYW4u"); - * - * Result - * - * "I'm Persian." - * - * - * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > - * @link http://www.semnanweb.com/jquery-plugin/base64.html - * @see http://www.webtoolkit.info/ - * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] - * @param {jQuery} {base64Encode:function(input)) - * @param {jQuery} {base64Decode:function(input)) - * @return string - */ - - (function($){ - - var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - var uTF8Encode = function(string) { - string = string.replace(/\x0d\x0a/g, "\x0a"); - var output = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - output += String.fromCharCode(c); - } else if ((c > 127) && (c < 2048)) { - output += String.fromCharCode((c >> 6) | 192); - output += String.fromCharCode((c & 63) | 128); - } else { - output += String.fromCharCode((c >> 12) | 224); - output += String.fromCharCode(((c >> 6) & 63) | 128); - output += String.fromCharCode((c & 63) | 128); - } - } - return output; - }; - - var uTF8Decode = function(input) { - var string = ""; - var i = 0; - var c = c1 = c2 = 0; - while ( i < input.length ) { - c = input.charCodeAt(i); - if (c < 128) { - string += String.fromCharCode(c); - i++; - } else if ((c > 191) && (c < 224)) { - c2 = input.charCodeAt(i+1); - string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = input.charCodeAt(i+1); - c3 = input.charCodeAt(i+2); - string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - return string; - } - - $.extend({ - base64Encode: function(input) { - var output = ""; - var chr1, chr2, chr3, enc1, enc2, enc3, enc4; - var i = 0; - input = uTF8Encode(input); - while (i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - enc1 = chr1 >> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); - enc4 = chr3 & 63; - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - output = output + keyString.charAt(enc1) + keyString.charAt(enc2) + keyString.charAt(enc3) + keyString.charAt(enc4); - } - return output; - }, - base64Decode: function(input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (i < input.length) { - enc1 = keyString.indexOf(input.charAt(i++)); - enc2 = keyString.indexOf(input.charAt(i++)); - enc3 = keyString.indexOf(input.charAt(i++)); - enc4 = keyString.indexOf(input.charAt(i++)); - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - output = output + String.fromCharCode(chr1); - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } - output = uTF8Decode(output); - return output; - } - }); - })(jQuery); \ No newline at end of file diff --git a/mail/js/app.js b/mail/js/app.js index ff0faf9a70..f196c2fb5d 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -9,7 +9,6 @@ */ /*egw:uses - /api/js/jquery/jquery.base64.js; */ import {AppJS} from "../../api/js/jsapi/app_base.js"; @@ -19,7 +18,6 @@ import {et2_button} from "../../api/js/etemplate/et2_widget_button"; import {egw_getObjectManager} from '../../api/js/egw_action/egw_action.js'; import {egwIsMobile} from "../../api/js/egw_action/egw_action_common.js"; /* required dependency, commented out because no module, but egw:uses is no longer parsed -import "../../api/js/jquery/jquery.base64.js"; */ /** @@ -2186,7 +2184,7 @@ app.classes.mail = AppJS.extend( else { message = this.mail_splitRowId(_msg['msg'][0]); - if (message[3]) _foldernode = displayname = jQuery.base64Decode(message[3]); + if (message[3]) _foldernode = displayname = jQuery.atob(message[3]); } // Tell server @@ -4514,7 +4512,7 @@ app.classes.mail = AppJS.extend( { var mailbox = _senders[0].id.split('::'); var folder = mailbox[1] || 'INBOX', acc_id = mailbox[0]; - this.egw.open_link('mail.mail_acl.edit&mailbox='+ jQuery.base64Encode(folder)+'&acc_id='+acc_id, '_blank', '640x480'); + this.egw.open_link('mail.mail_acl.edit&mailbox='+ btoa(folder)+'&acc_id='+acc_id, '_blank', '640x480'); }, /** diff --git a/mail/js/preview.js b/mail/js/preview.js index 337b8827bb..2c9f0a68fd 100644 --- a/mail/js/preview.js +++ b/mail/js/preview.js @@ -9,7 +9,6 @@ */ /*egw:uses - /api/js/jquery/jquery.base64.js; */ jQuery(function() @@ -19,7 +18,7 @@ jQuery(function() // active mailto: links with mail compose if (this.href.substr(0, 7) == 'mailto:') { - top.egw.open(null, 'mail', 'add', {send_to: jQuery.base64Encode(this.href.substr(7).replace('%40', '@'))}); + top.egw.open(null, 'mail', 'add', {send_to: btoa(this.href.substr(7).replace('%40', '@'))}); return false; // cant do event.stopImediatePropagation() in on! } From da87dd19314d81bc6d53e1f7fcf2eb463b51dafa Mon Sep 17 00:00:00 2001 From: Hadi Nategh Date: Thu, 1 Jul 2021 10:14:26 +0200 Subject: [PATCH 11/12] Fix miss replaced atob from commit e5f533cf6c257f1263ad773e9073088815e93681 --- mail/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail/js/app.js b/mail/js/app.js index f196c2fb5d..180863081b 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -2184,7 +2184,7 @@ app.classes.mail = AppJS.extend( else { message = this.mail_splitRowId(_msg['msg'][0]); - if (message[3]) _foldernode = displayname = jQuery.atob(message[3]); + if (message[3]) _foldernode = displayname = atob(message[3]); } // Tell server From fd3466e33a400953653099c58131713b9a611ec0 Mon Sep 17 00:00:00 2001 From: nathangray Date: Thu, 1 Jul 2021 10:03:54 -0600 Subject: [PATCH 12/12] Api: Fix bug where StreamWrappers that mapped onto other StreamWrappers would be parsed earlier than we want, leading to the first StreamWrapper not getting used. --- api/src/Vfs/Base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/Vfs/Base.php b/api/src/Vfs/Base.php index 6cf09a96f2..73191c236c 100644 --- a/api/src/Vfs/Base.php +++ b/api/src/Vfs/Base.php @@ -314,7 +314,7 @@ class Base if($is_link && $do_symlink) { $old_url = $url; - $_url = self::symlinkCache_resolve(Vfs::parse_url($url,PHP_URL_PATH)); + $_url = self::symlinkCache_resolve($url); $url = @readlink($url) ?: ($_url != $parts['path'] ? str_replace([$parts['path'],Vfs::parse_url($old_url,PHP_URL_SCHEME)],[$_url,Vfs::parse_url(Vfs::resolve_url($_url),PHP_URL_SCHEME)],$url) : null) ?:$url; $is_link = $old_url == $url;