diff --git a/admin/lang/egw_de.lang b/admin/lang/egw_de.lang index aff0e0ecf7..40d428c91b 100644 --- a/admin/lang/egw_de.lang +++ b/admin/lang/egw_de.lang @@ -215,8 +215,8 @@ check items to %1 to %2 for %3 admin de Durch Abhaken %3 in %2 %1 children admin de Kinder clear cache and register hooks admin de Cache löschen und Hooks registrieren clear credentials admin de Anmeldeinformationen löschen +clear mail credentials admin de E-Mail-Anmeldeinformationen löschen clear security tokens admin de Sicherheits-Tokens löschen -clear mail credentials admin de Mail-Anmeldeinformationen löschen click to select a color admin de Anklicken um eine Farbe auszuwählen color admin de Farbe comma-separated ip addresses white-listed from above blocking (:optional number of attempts) admin de Komma getrennte Liste von IP Adressen die nicht blockiert werden (:optional Anzahl Fehlversuche) @@ -682,7 +682,7 @@ only below displayed information is directly submitted to %s. admin de Nur die u operating system admin de Betriebssystem order admin de Reihenfolge organisation admin de Organisation -other security configuration admin de Andere sicherheitsrelevanten Konfigurationen +other security configuration admin de Andere sicherheitsrelevante Konfigurationen outbound admin de ausgehend own categories admin de eigene Kategorien own install id admin de Eigene Install ID diff --git a/api/js/etemplate/et2_widget_toolbar.ts b/api/js/etemplate/et2_widget_toolbar.ts index f80c32db39..e0cedc3031 100644 --- a/api/js/etemplate/et2_widget_toolbar.ts +++ b/api/js/etemplate/et2_widget_toolbar.ts @@ -44,6 +44,12 @@ export class et2_toolbar extends et2_DOMWidget implements et2_IInput "type": "boolean", "default": true, "description": "Define whether the actions with children should be shown as dropdown or flat list" + }, + "list_header": { + "name": "list header style", + "type": "string", + "default": "more", + "description": "Define a style for list header (more ...), which can get short 3dots with no caption or bigger button with caption more ..." } }; @@ -218,7 +224,8 @@ export class et2_toolbar extends et2_DOMWidget implements et2_IInput this.actionbox.empty(); this.actionlist.empty(); let admin_setting = this.options.is_admin ? '': ''; - this.actionbox.append(''+egw.lang('more')+' ...'+admin_setting+''); + const header_list = this.options.header_list == 'more'?true:false; + this.actionbox.append(''+(header_list?egw.lang('more')+' ...':'')+admin_setting+''); this.actionbox.append('
'); let that = this; if (this.options.is_admin) @@ -472,15 +479,19 @@ export class et2_toolbar extends et2_DOMWidget implements et2_IInput heightStyle:"fill", collapsible: true, active:'none', + animate: 10, activate: function (event, ui) { - var menubox = event.target; + var menubox = jQuery(event.target); if (ui.oldHeader.length == 0) { jQuery('html').on('click.outsideOfMenu', function (event){ - jQuery(menubox).accordion( "option", "active", 2); + if (menubox.accordion('instance')) + { + menubox.accordion( "option", "active", 2); + } jQuery(this).unbind(event); // Remove the focus class, user clicked elsewhere - jQuery(menubox).children().removeClass('ui-state-focus'); + menubox.children().removeClass('ui-state-focus'); }); } }, diff --git a/api/src/Session.php b/api/src/Session.php index 1fae673db4..4e5be655bc 100644 --- a/api/src/Session.php +++ b/api/src/Session.php @@ -1995,27 +1995,6 @@ class Session } } - /** - * Create a hash from user and pw - * - * Can be used to check setup config user/password inside egroupware: - * - * if (Api\Session::user_pw_hash($user,$pw) === $GLOBALS['egw_info']['server']['config_hash']) - * - * @param string $user username - * @param string $password password or md5 hash of password if $allow_password_md5 - * @param boolean $allow_password_md5 =false can password alread be an md5 hash - * @return string - */ - static function user_pw_hash($user,$password,$allow_password_md5=false) - { - $password_md5 = $allow_password_md5 && preg_match('/^[a-f0-9]{32}$/',$password) ? $password : md5($password); - - $hash = sha1(strtolower($user).$password_md5); - - return $hash; - } - /** * Initialise the used session handler * diff --git a/api/src/Storage/History.php b/api/src/Storage/History.php index 3e6d778efb..fe32484ea2 100644 --- a/api/src/Storage/History.php +++ b/api/src/Storage/History.php @@ -308,7 +308,7 @@ class History $_query[] = array( 'table' => Api\Vfs\Sqlfs\StreamWrapper::TABLE, 'cols' => array('fs_id', 'fs_dir', "'filemanager'", 'COALESCE(fs_modifier,fs_creator)', "'~file~'", - 'fs_name', 'fs_modified', 'fs_mime', '"" AS share_email'), + 'fs_name', 'fs_modified', 'fs_mime', "'' AS share_email"), 'where' => array('fs_dir' => $file['ino']) ); } @@ -316,7 +316,8 @@ class History foreach($GLOBALS['egw']->db->union( $_query, __LINE__, __FILE__, - ' ORDER BY ' . ($query['order'] ? $query['order'] : 'history_timestamp') . ' ' . ($query['sort'] ? $query['sort'] : 'DESC'), + preg_match('/^(([a-z0-9_]+) (ASC|DESC),?)+$/', $query['order'].' '.($query['sort'] ?: 'DESC')) ? + ' ORDER BY ' . $query['order'] . ' ' . ($query['sort'] ?: 'DESC') : ' ORDER BY history_timestamp DESC,history_id ASC', $query['start'], $query['num_rows'] ) as $row) diff --git a/api/src/Storage/Merge.php b/api/src/Storage/Merge.php index 8734fa1c32..b7bd67868a 100644 --- a/api/src/Storage/Merge.php +++ b/api/src/Storage/Merge.php @@ -2416,7 +2416,7 @@ abstract class Merge } else { - \Egroupware\Api\Egw::redirect_link(Vfs::download_url($target)); + \Egroupware\Api\Egw::redirect_link(Vfs::download_url($target, true)); } } @@ -2472,8 +2472,8 @@ abstract class Merge return $ui->get_all_ids(); } - // Try cache - if( method_exists($ui_class, 'get_rows')) + // Try cache, preferring get_rrows over get_rows + if (method_exists($ui_class, $get_rows='get_rrows') || method_exists($ui_class, $get_rows='get_rows')) { foreach($locations as $location) { @@ -2486,7 +2486,7 @@ abstract class Merge $rows = $readonlys = array(); @set_time_limit(0); // switch off the execution time limit, as it's for big selections to small $session['num_rows'] = -1; // all - $ui->get_rows($session, $rows, $readonlys); + $ui->$get_rows($session, $rows, $readonlys); foreach($rows as $row_number => $row) { if(!is_numeric($row_number)) continue; diff --git a/api/src/Vfs/Base.php b/api/src/Vfs/Base.php index 24895b0c77..40708dcfc7 100644 --- a/api/src/Vfs/Base.php +++ b/api/src/Vfs/Base.php @@ -83,9 +83,14 @@ class Base */ static function mount($url = null, $path = null, $check_url = null, $persistent_mount = true, $clear_fstab = false) { - if(is_null($check_url)) + if ($check_url === true || !isset($check_url) && strpos($url, '$') === false) { - $check_url = strpos($url, '$') === false; + $check_url = strtr($url, [ + 'user' => $GLOBALS['egw_info']['user']['account_lid'], + 'pass' => urlencode($GLOBALS['egw_info']['user']['passwd']), + 'host' => $GLOBALS['egw_info']['user']['domain'], + 'home' => str_replace(array('\\\\', '\\'), array('', '/'), $GLOBALS['egw_info']['user']['homedirectory']), + ]); } if(!isset($GLOBALS['egw_info']['server']['vfs_fstab'])) // happens eg. in setup @@ -134,7 +139,7 @@ class Base } self::load_wrapper(Vfs::parse_url($url, PHP_URL_SCHEME)); - if($check_url && (!file_exists($url) || opendir($url) === false)) + if ($check_url && (!file_exists($check_url) || opendir($check_url) === false)) { if(self::LOG_LEVEL > 0) { diff --git a/api/src/loader.php b/api/src/loader.php index 881e595e7d..da84d77aae 100644 --- a/api/src/loader.php +++ b/api/src/loader.php @@ -112,15 +112,9 @@ $GLOBALS['egw_info']['server'] += $GLOBALS['egw_domain'][$GLOBALS['egw_info']['u // the egw-object instanciates all sub-classes (eg. $GLOBALS['egw']->db) and the egw_info array $GLOBALS['egw'] = new Egw(array_keys($GLOBALS['egw_domain'])); -// store domain config user&pw as a hash (originals get unset) -$GLOBALS['egw_info']['server']['config_hash'] = Session::user_pw_hash($GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['config_user'], - $GLOBALS['egw_domain'][$GLOBALS['egw_info']['user']['domain']]['config_passwd'],true); - if ($GLOBALS['egw_info']['flags']['currentapp'] != 'login' && !$GLOBALS['egw_info']['server']['show_domain_selectbox']) { unset($GLOBALS['egw_domain']); // we kill this for security reasons - unset($GLOBALS['egw_info']['server']['header_admin_user']); - unset($GLOBALS['egw_info']['server']['header_admin_password']); } // saving the the egw_info array and the egw-object in the session diff --git a/api/templates/default/etemplate2.css b/api/templates/default/etemplate2.css index 870c02ab0b..2530ce881f 100644 --- a/api/templates/default/etemplate2.css +++ b/api/templates/default/etemplate2.css @@ -2295,6 +2295,26 @@ div.ui-dialog div.ui-dialog-content > div { margin: 0 !important; padding: 0 !important; } +div.et2_toolbar.ui-widget-header {background: none;} + +div.et2_toolbar_more h.ui-accordion-header.header_list-short span.ui-accordion-header-icon.ui-icon.ui-icon-triangle-1-e { + background-image: url(../../../pixelegg/images/dots.svg); + background-size: 16px; + height: 24px; + width: 20px; + margin-top: 0px; +} + +div.et2_toolbar_more h.ui-accordion-header.header_list-short { + padding: 0px !important; + width: 40px; + height: 24px; + margin-top: 0px; +} +.et2_toolbar_more .ui-accordion-header-active.header_list-short.ui-state-active span.ui-accordion-header-icon { + background-position: bottom !important; + margin-top: 2px; +} .et2_toolbar .et2_toolbar_more h .toolbar-admin-pref { background-image: url(../../../pixelegg/images/setup.svg); background-repeat: no-repeat; diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index f1be16ba8f..a8ebca2cca 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -369,6 +369,7 @@ monthly calendar de Monatlich monthly (by date) calendar de Monatlich (nach Datum) monthly (by day) calendar de Monatlich (nach Wochentag) monthview calendar de Monatsansicht +multiple participants calendar de Mehrere Teilnehmer multiple week view calendar de Mehrwochenansicht name of current user, all other contact fields are valid too calendar de Name des aktuellen Benutzers, alle anderen Kontakt Felder sind weiterhin gültig name of the day of the week (ex: monday) calendar de Name des Wochentags (z.B. Montag) @@ -451,6 +452,7 @@ prevent deleting of entries admin de Das Löschen von Einträgen verhindern previous calendar de vorherig private and global public calendar de Privat und Global öffentlich private and group public calendar de Privat und Gruppen öffentlich +private event calendar de Privater Termin private only calendar de nur private quantity calendar de Anzahl quick add calendar de schnelles Hinzufügen @@ -547,6 +549,7 @@ show this month calendar de Diesen Monat anzeigen show this week calendar de Diese Woche anzeigen show year and age calendar de Zeige Jahr und Alter single event calendar de Einzelner Termin +single participant calendar de Einzelner Teilnehmer specify where url of the day links to calendar de Gegen Sie an, wohin die URL des Tages linken soll start calendar de Start start date/time calendar de Startdatum/ -zeit diff --git a/composer.json b/composer.json index fe7bf8388c..0d58292407 100644 --- a/composer.json +++ b/composer.json @@ -93,7 +93,7 @@ "egroupware/status": "self.version", "egroupware/swoolepush": "self.version", "egroupware/tracker": "self.version", - "egroupware/webdav": "dev-master", + "egroupware/webdav": "^v0.3.1", "egroupware/z-push-dev": "^2.5", "giggsey/libphonenumber-for-php": "^8.12", "npm-asset/as-jqplot": "1.0.*", diff --git a/composer.lock b/composer.lock index e3ab293e45..4bd908134f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "248556c07e4f1fd832c970489cdc9a5a", + "content-hash": "75e07178544cf7f50260755a37724799", "packages": [ { "name": "adldap2/adldap2", @@ -207,7 +207,7 @@ "version": "v2.3.4", "source": { "type": "git", - "url": "https://github.com/fengyuanchen/cropper.git", + "url": "git@github.com:fengyuanchen/cropper.git", "reference": "30c58b29ee21010e17e58ebab165fbd84285c685" }, "dist": { @@ -215,9 +215,48 @@ "url": "https://api.github.com/repos/fengyuanchen/cropper/zipball/30c58b29ee21010e17e58ebab165fbd84285c685", "reference": "30c58b29ee21010e17e58ebab165fbd84285c685" }, - "type": "bower-asset", + "type": "bower-asset-library", + "extra": { + "bower-asset-main": [ + "dist/cropper.js", + "dist/cropper.css" + ], + "bower-asset-ignore": [ + "**/.*", + "node_modules", + "bower_components", + "tests", + "test", + "examples", + "assets", + "demo", + "docs", + "gulpfile.js", + "CONTRIBUTING.md", + "ISSUE_TEMPLATE.md" + ] + }, "license": [ "MIT" + ], + "description": "A simple jQuery image cropping plugin.", + "keywords": [ + "crop", + "cropper", + "cropping", + "css", + "development", + "front-end", + "html", + "image", + "javascript", + "jquery", + "move", + "plugin", + "rotate", + "scale", + "web", + "zoom" ] }, { @@ -225,7 +264,7 @@ "version": "v2.9.0", "source": { "type": "git", - "url": "https://github.com/rtfpessoa/diff2html.git", + "url": "git@github.com:rtfpessoa/diff2html.git", "reference": "4c15a9ca93e50c78f8d02e37273076994888d499" }, "dist": { @@ -233,14 +272,14 @@ "url": "https://api.github.com/repos/rtfpessoa/diff2html/zipball/4c15a9ca93e50c78f8d02e37273076994888d499", "reference": "4c15a9ca93e50c78f8d02e37273076994888d499" }, - "type": "bower-asset" + "type": "bower-asset-library" }, { "name": "bower-asset/fastclick", "version": "v1.0.6", "source": { "type": "git", - "url": "https://github.com/ftlabs/fastclick.git", + "url": "git@github.com:ftlabs/fastclick.git", "reference": "9977a916739360ad4ffd7aa19b0016bf375e934b" }, "dist": { @@ -248,7 +287,18 @@ "url": "https://api.github.com/repos/ftlabs/fastclick/zipball/9977a916739360ad4ffd7aa19b0016bf375e934b", "reference": "9977a916739360ad4ffd7aa19b0016bf375e934b" }, - "type": "bower-asset" + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "lib/fastclick.js", + "bower-asset-ignore": [ + "**/.*", + "component.json", + "package.json", + "Makefile", + "tests", + "examples" + ] + } }, { "name": "bower-asset/jquery", @@ -263,9 +313,21 @@ "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/5e89585e0121e72ff47de177c5ef604f3089a53d", "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d" }, - "type": "bower-asset", + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "dist/jquery.js", + "bower-asset-ignore": [ + "package.json" + ] + }, "license": [ "MIT" + ], + "keywords": [ + "browser", + "javascript", + "jquery", + "library" ] }, { @@ -273,7 +335,7 @@ "version": "1.6.19", "source": { "type": "git", - "url": "https://github.com/mattbryson/TouchSwipe-Jquery-Plugin.git", + "url": "git@github.com:mattbryson/TouchSwipe-Jquery-Plugin.git", "reference": "f0d71bf645779358e1458e212102c5d59b7702ec" }, "dist": { @@ -281,7 +343,10 @@ "url": "https://api.github.com/repos/mattbryson/TouchSwipe-Jquery-Plugin/zipball/f0d71bf645779358e1458e212102c5d59b7702ec", "reference": "f0d71bf645779358e1458e212102c5d59b7702ec" }, - "type": "bower-asset" + "type": "bower-asset-library", + "extra": { + "bower-asset-main": "./jquery.touchSwipe.js" + } }, { "name": "celtic/lti", @@ -994,12 +1059,12 @@ { "name": "Chuck Hagenbuch", "email": "chuck@horde.org", - "role": "Lead" + "role": "lead" }, { "name": "Jan Schneider", "email": "jan@horde.org", - "role": "Lead" + "role": "lead" }, { "name": "Michael J Rubinsky", @@ -1113,7 +1178,7 @@ ], "description": "Compiled version of magicsuggest customized for EGroupware project.", "homepage": "https://github.com/EGroupware/magicsuggest", - "time": "2018-06-21T13:36:37+00:00" + "time": "2018-06-21T10:14:03+00:00" }, { "name": "egroupware/news_admin", @@ -1494,16 +1559,16 @@ }, { "name": "egroupware/webdav", - "version": "dev-master", + "version": "v0.3.1", "source": { "type": "git", "url": "https://github.com/EGroupware/WebDAV.git", - "reference": "889da78b6489965df8a379ccdc25853fe74da199" + "reference": "554b8ed3fb3bc98427f0c1edbba7f9bab9894d4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/EGroupware/WebDAV/zipball/889da78b6489965df8a379ccdc25853fe74da199", - "reference": "889da78b6489965df8a379ccdc25853fe74da199", + "url": "https://api.github.com/repos/EGroupware/WebDAV/zipball/554b8ed3fb3bc98427f0c1edbba7f9bab9894d4c", + "reference": "554b8ed3fb3bc98427f0c1edbba7f9bab9894d4c", "shasum": "" }, "require": { @@ -1542,7 +1607,7 @@ "stream", "wrapper" ], - "time": "2020-09-23T16:16:07+00:00" + "time": "2021-09-10T11:59:20+00:00" }, { "name": "egroupware/z-push-dev", @@ -2069,16 +2134,6 @@ "JWS", "jwt" ], - "funding": [ - { - "url": "https://github.com/lcobucci", - "type": "github" - }, - { - "url": "https://www.patreon.com/lcobucci", - "type": "patreon" - } - ], "time": "2021-02-16T09:40:01+00:00" }, { @@ -2337,36 +2392,112 @@ "version": "1.0.8", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/as-jqplot/-/as-jqplot-1.0.8.tgz" + "url": "https://registry.npmjs.org/as-jqplot/-/as-jqplot-1.0.8.tgz", + "shasum": "97061e0f32167597b87c98dfd42c93f10a2fb249" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-main": "index.js", + "npm-asset-directories": [], + "npm-asset-scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + } }, - "type": "npm-asset", "license": [ "ISC" - ] + ], + "authors": [ + "" + ], + "description": "AS jqPlot Shim" }, { "name": "npm-asset/dhtmlx-gantt", "version": "6.2.7", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/dhtmlx-gantt/-/dhtmlx-gantt-6.2.7.tgz" + "url": "https://registry.npmjs.org/dhtmlx-gantt/-/dhtmlx-gantt-6.2.7.tgz", + "shasum": "86689f36c1f10e2bfaa5126445b4c560d82b4587" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/DHTMLX/gantt/issues" + }, + "npm-asset-main": "codebase/dhtmlxgantt.js", + "npm-asset-directories": [], + "npm-asset-repository": { + "type": "git", + "url": "git+https://github.com/DHTMLX/gantt.git" + } }, - "type": "npm-asset", "license": [ "GPL-2.0" - ] + ], + "authors": [ + { + "name": "DHTMLX" + } + ], + "description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.", + "homepage": "https://github.com/DHTMLX/gantt#readme", + "keywords": [ + "browser", + "calendar", + "chart", + "dhtmlx", + "dhtmlxgantt", + "gantt", + "gantt chart", + "scheduler", + "timeline" + ], + "time": "2019-10-11T10:48:39+00:00" }, { "name": "npm-asset/gridster", "version": "0.5.6", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/gridster/-/gridster-0.5.6.tgz" + "url": "https://registry.npmjs.org/gridster/-/gridster-0.5.6.tgz", + "shasum": "4024713aabd559093a72e9b713f1e41f9bded76f" }, "require": { "npm-asset/jquery": "2.0.3" }, - "type": "npm-asset" + "require-dev": { + "npm-asset/bower": "~0.9.2", + "npm-asset/grunt": "~0.4.1", + "npm-asset/grunt-bump": "0.0.11", + "npm-asset/grunt-contrib-concat": "~0.1.3", + "npm-asset/grunt-contrib-cssmin": "~0.5.0", + "npm-asset/grunt-contrib-jshint": "~0.3.0", + "npm-asset/grunt-contrib-uglify": "~0.2.0", + "npm-asset/grunt-contrib-watch": "~0.3.1", + "npm-asset/grunt-contrib-yuidoc": "~0.4.0", + "npm-asset/grunt-conventional-changelog": "~1.0.0", + "npm-asset/qunitjs": "~1.11.0" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/ducksboard/gridster.js/issues" + }, + "npm-asset-directories": [], + "npm-asset-repository": { + "type": "git", + "url": "git://github.com/ducksboard/gridster.js.git" + }, + "npm-asset-scripts": [] + }, + "authors": [ + { + "name": "ducksboard", + "email": "hackers@ducksboard.com" + } + ], + "description": "a drag-and-drop multi-column jQuery grid plugin", + "homepage": "http://gridster.net/" }, { "name": "npm-asset/jquery", @@ -2381,7 +2512,36 @@ "url": "https://api.github.com/repos/jquery/jquery/zipball/f852e631ba85af7da4ad7594785e122504e7b233", "reference": "f852e631ba85af7da4ad7594785e122504e7b233" }, - "type": "npm-asset" + "require-dev": { + "npm-asset/archiver": "~0.4.2", + "npm-asset/grunt": "0.4.1", + "npm-asset/grunt-compare-size": "~0.4.0", + "npm-asset/grunt-contrib-jshint": "0.3.0", + "npm-asset/grunt-contrib-uglify": "0.2.0", + "npm-asset/grunt-contrib-watch": "0.3.1", + "npm-asset/grunt-git-authors": "1.2.0", + "npm-asset/grunt-update-submodules": "0.2.0", + "npm-asset/gzip-js": "0.3.1", + "npm-asset/testswarm": "~1.1.0" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "http://bugs.jquery.com" + }, + "npm-asset-repository": { + "type": "git", + "url": "https://github.com/jquery/jquery.git" + } + }, + "authors": [ + { + "name": "jQuery Foundation and other contributors", + "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt" + } + ], + "description": "JavaScript library for DOM operations", + "homepage": "http://jquery.com" }, { "name": "oomphinc/composer-installers-extender", @@ -3976,12 +4136,6 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "funding": [ - { - "url": "https://github.com/Synchro", - "type": "github" - } - ], "time": "2021-06-16T14:33:43+00:00" }, { @@ -4073,20 +4227,6 @@ "x.509", "x509" ], - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], "time": "2021-04-06T13:56:45+00:00" }, { @@ -4506,16 +4646,16 @@ }, { "name": "psr/log", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -4539,7 +4679,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -4549,7 +4689,7 @@ "psr", "psr-3" ], - "time": "2020-03-23T09:12:05+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "robrichards/xmlseclibs", @@ -6367,20 +6507,6 @@ "caching", "psr6" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-03-16T09:10:13+00:00" }, { @@ -6443,20 +6569,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-03-23T23:28:01+00:00" }, { @@ -6521,20 +6633,6 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:54:36+00:00" }, { @@ -6607,20 +6705,6 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-03-26T09:23:24+00:00" }, { @@ -6678,20 +6762,6 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-10T07:47:39+00:00" }, { @@ -6765,20 +6835,6 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T10:09:30+00:00" }, { @@ -6836,39 +6892,26 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T09:56:45+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.13", + "version": "v4.4.30", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030" + "reference": "2fe81680070043c4c80e7cedceb797e34f377bac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3e8ea5ccddd00556b86d69d42f99f1061a704030", - "reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2fe81680070043c4c80e7cedceb797e34f377bac", + "reference": "2fe81680070043c4c80e7cedceb797e34f377bac", "shasum": "" }, "require": { "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<3.4" @@ -6878,9 +6921,10 @@ "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^3.4|^4.0|^5.0", "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", "symfony/expression-language": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/service-contracts": "^1.1|^2", @@ -6891,11 +6935,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -6918,7 +6957,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "funding": [ { @@ -6934,7 +6973,7 @@ "type": "tidelift" } ], - "time": "2020-08-13T14:18:44+00:00" + "time": "2021-08-04T20:31:23+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -6996,20 +7035,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-06T13:19:58+00:00" }, { @@ -7060,20 +7085,6 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:54:36+00:00" }, { @@ -7118,20 +7129,6 @@ ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-02-15T18:55:04+00:00" }, { @@ -7258,20 +7255,6 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-12-11T16:32:02+00:00" }, { @@ -7327,20 +7310,6 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T07:39:58+00:00" }, { @@ -7432,20 +7401,6 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-02T08:09:29+00:00" }, { @@ -7508,20 +7463,6 @@ "mime", "mime-type" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T09:56:45+00:00" }, { @@ -7584,20 +7525,6 @@ "polyfill", "portable" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-01-07T16:49:33+00:00" }, { @@ -7669,20 +7596,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-04T06:02:08+00:00" }, { @@ -7750,20 +7663,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -7827,20 +7726,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -7960,20 +7845,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -8033,20 +7904,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -8109,20 +7966,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -8189,20 +8032,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-14T12:35:20+00:00" }, { @@ -8331,20 +8160,6 @@ "uri", "url" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T11:41:10+00:00" }, { @@ -8480,20 +8295,6 @@ "debug", "dump" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T07:31:35+00:00" }, { @@ -8550,20 +8351,6 @@ "instantiate", "serialize" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2021-01-27T10:01:46+00:00" }, { @@ -8623,20 +8410,6 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T11:41:10+00:00" }, { @@ -8974,74 +8747,8 @@ "constructor", "instantiate" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], "time": "2020-11-10T18:47:58+00:00" }, - { - "name": "grale/webdav", - "version": "v0.2.1", - "source": { - "type": "git", - "url": "https://github.com/gletournel/WebDAV.git", - "reference": "c4d592e90f68806e491544d780fb44c78e3961cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/gletournel/WebDAV/zipball/c4d592e90f68806e491544d780fb44c78e3961cb", - "reference": "c4d592e90f68806e491544d780fb44c78e3961cb", - "shasum": "" - }, - "require": { - "guzzle/http": "~3.0", - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~3.7.0" - }, - "suggest": { - "monolog/monolog": "Adds support for logging HTTP requests and responses", - "symfony/finder": "Allows you to more easily filter the files that the stream wrapper returns" - }, - "type": "library", - "autoload": { - "psr-0": { - "Grale\\WebDav": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Geoffroy Letournel", - "email": "geoffroy.letournel@gmail.com" - } - ], - "description": "A simple PHP WebDAV client and stream wrapper", - "homepage": "https://github.com/gletournel/WebDAV", - "keywords": [ - "WebDAV", - "php", - "stream", - "wrapper" - ], - "time": "2017-09-26T13:31:13+00:00" - }, { "name": "guzzlehttp/guzzle", "version": "6.5.2", @@ -9277,12 +8984,6 @@ "object", "object graph" ], - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], "time": "2020-11-13T09:40:50+00:00" }, { @@ -9715,12 +9416,6 @@ "testing", "xunit" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2021-03-28T07:26:59+00:00" }, { @@ -9771,12 +9466,6 @@ "filesystem", "iterator" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T05:57:25+00:00" }, { @@ -9830,12 +9519,6 @@ "keywords": [ "process" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T05:58:55+00:00" }, { @@ -9885,12 +9568,6 @@ "keywords": [ "template" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T05:33:50+00:00" }, { @@ -9940,12 +9617,6 @@ "keywords": [ "timer" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:16:10+00:00" }, { @@ -10035,16 +9706,6 @@ "testing", "xunit" ], - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-02T03:54:37+00:00" }, { @@ -10131,12 +9792,6 @@ ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T06:08:49+00:00" }, { @@ -10183,12 +9838,6 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:08:54+00:00" }, { @@ -10234,12 +9883,6 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T05:30:19+00:00" }, { @@ -10304,12 +9947,6 @@ "compare", "equality" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T15:49:45+00:00" }, { @@ -10357,12 +9994,6 @@ ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T15:52:27+00:00" }, { @@ -10419,12 +10050,6 @@ "unidiff", "unified diff" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:10:38+00:00" }, { @@ -10478,12 +10103,6 @@ "environment", "hhvm" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T05:52:38+00:00" }, { @@ -10551,12 +10170,6 @@ "export", "exporter" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T05:24:23+00:00" }, { @@ -10611,12 +10224,6 @@ "keywords": [ "global state" ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T15:55:19+00:00" }, { @@ -10664,12 +10271,6 @@ ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-11-28T06:42:11+00:00" }, { @@ -10717,12 +10318,6 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:12:34+00:00" }, { @@ -10768,12 +10363,6 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:14:26+00:00" }, { @@ -10827,12 +10416,6 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:17:30+00:00" }, { @@ -10878,12 +10461,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -10930,12 +10508,6 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-10-26T13:18:59+00:00" }, { @@ -10979,12 +10551,6 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "time": "2020-09-28T06:39:44+00:00" }, { @@ -11025,12 +10591,6 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], "time": "2020-07-12T23:59:07+00:00" }, { @@ -11094,8 +10654,7 @@ "egroupware/smallpart": 20, "egroupware/status": 20, "egroupware/swoolepush": 20, - "egroupware/tracker": 20, - "egroupware/webdav": 20 + "egroupware/tracker": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/filemanager/cli.php b/filemanager/cli.php index 3819b78de4..e0db48ca3b 100755 --- a/filemanager/cli.php +++ b/filemanager/cli.php @@ -484,11 +484,6 @@ function load_wrapper($url) { switch($scheme) { - case 'webdav': - case 'webdavs': - require_once('HTTP/WebDAV/Client.php'); - break; - default: if (!isset($GLOBALS['egw']) && !in_array($scheme,array('smb','imap')) && ($user = parse_url($url,PHP_URL_USER)) && ($pass = parse_url($url,PHP_URL_PASS))) diff --git a/filemanager/inc/class.filemanager_admin.inc.php b/filemanager/inc/class.filemanager_admin.inc.php index 690845225d..83732c62c4 100644 --- a/filemanager/inc/class.filemanager_admin.inc.php +++ b/filemanager/inc/class.filemanager_admin.inc.php @@ -32,7 +32,7 @@ class filemanager_admin extends filemanager_ui ); /** - * Autheticated user is setup config user + * Authenticated user is setup config user * * @var boolean */ @@ -82,146 +82,180 @@ class filemanager_admin extends filemanager_ui { if (is_array($content)) { - //_debug_array($content); - if ($content['sudo']) + try { - $msg = $this->sudo($content['user'],$content['password'],self::$is_setup) ? - lang('Root access granted.') : lang('Wrong username or password!'); - $msg_type = Vfs::$is_root ? 'success' : 'error'; - } - elseif ($content['etemplates'] && $GLOBALS['egw_info']['user']['apps']['admin']) - { - $path = '/etemplates'; - $url = 'stylite.merge://default/etemplates?merge=.&lang=0&level=1&extension=xet&url=egw'; - $backup = Vfs::$is_root; - Vfs::$is_root = true; - Vfs::mkdir($path); - Vfs::chgrp($path, 'Admins'); - Vfs::chmod($path, 075); - $msg = Vfs::mount($url, $path) ? - lang('Successful mounted %1 on %2.',$url,$path) : lang('Error mounting %1 on %2!',$url,$path); - Vfs::$is_root = $backup; - } - elseif (Vfs::$is_root) - { - if ($content['logout']) + if ($content['sudo']) { - $msg = $this->sudo('','',self::$is_setup) ? 'Logout failed!' : lang('Root access stopped.'); - $msg_type = !Vfs::$is_root ? 'success' : 'error'; + $this->sudo($content['user'], $content['password'], $msg, true, self::$is_setup); + $msg_type = Vfs::$is_root ? 'success' : 'error'; } - if ($content['mounts']['disable'] || self::$is_setup && $content['mounts']['umount']) + elseif ($content['etemplates'] && $GLOBALS['egw_info']['user']['apps']['admin']) { - if (($unmount = $content['mounts']['umount'])) - { - $path = @key($content['mounts']['umount']); - } - else - { - $path = @key($content['mounts']['disable']); - } - if (!in_array($path, self::$protected_path) && $path != '/') - { - $msg = Vfs::umount($path) ? - lang('%1 successful unmounted.',$path) : lang('Error unmounting %1!',$path); - } - else // re-mount / with sqlFS, to disable versioning - { - $msg = Vfs::mount($url=Vfs\Sqlfs\StreamWrapper::SCHEME.'://default'.$path,$path) ? - lang('Successful mounted %1 on %2.',$url,$path) : lang('Error mounting %1 on %2!',$url,$path); - } - } - if (($path = $content['mounts']['path']) && - ($content['mounts']['enable'] || self::$is_setup && $content['mounts']['mount'])) - { - $url = str_replace('$path',$path,$content['mounts']['url']); - if (empty($url) && $this->versioning) $url = Versioning\StreamWrapper::PREFIX.$path; - - if ($content['mounts']['enable'] && !$this->versioning) - { - $msg = lang('Versioning requires Stylite EGroupware Enterprise Line (EPL)!'); - $msg_type = 'info'; - } - elseif (!Vfs::file_exists($path) || !Vfs::is_dir($path)) - { - $msg = lang('Path %1 not found or not a directory!',$path); - $msg_type = 'error'; - } - // dont allow to change mount of /apps or /templates (eg. switching on versioning) - elseif (in_array($path, self::$protected_path)) - { - $msg = lang('Permission denied!'); - $msg_type = 'error'; - } - else - { - $msg = Vfs::mount($url,$path) ? - lang('Successful mounted %1 on %2.',$url,$path) : lang('Error mounting %1 on %2!',$url,$path); - } - } - if ($content['allow_delete_versions'] != $GLOBALS['egw_info']['server']['allow_delete_versions']) - { - Api\Config::save_value('allow_delete_versions', $content['allow_delete_versions'], 'phpgwapi'); - $GLOBALS['egw_info']['server']['allow_delete_versions'] = $content['allow_delete_versions']; - $msg = lang('Configuration changed.'); - } - } - // delete old versions and deleted files - if ($content['delete-versions']) - { - if (!Versioning\StreamWrapper::check_delete_version(null)) - { - $msg = lang('Permission denied')."\n\n".lang('You are NOT allowed to finally delete older versions and deleted files!'); - $msg_type = 'error'; - } - else - { - // we need to be root to delete files independent of permissions and ownership + $path = '/etemplates'; + $url = 'stylite.merge://default/etemplates?merge=.&lang=0&level=1&extension=xet&url=egw'; + $backup = Vfs::$is_root; Vfs::$is_root = true; - if (!Vfs::file_exists($content['versionedpath']) || !Vfs::is_dir($content['versionedpath'])) + Vfs::mkdir($path); + Vfs::chgrp($path, 'Admins'); + Vfs::chmod($path, 075); + $msg = Vfs::mount($url, $path) ? + lang('Successful mounted %1 on %2.', $url, $path) : lang('Error mounting %1 on %2!', $url, $path); + Vfs::$is_root = $backup; + } + elseif (Vfs::$is_root) + { + if ($content['logout']) { - $msg = lang('Directory "%1" NOT found!', $content['versionedpath']); - $msg_type = 'error'; + $this->sudo('', '', $msg); + $msg_type = 'success'; } - else + if ($content['mounts']['disable'] || Vfs::$is_root && $content['mounts']['umount']) { - @set_time_limit(0); - $starttime = microtime(true); - $deleted = $errors = 0; - - // shortcut to efficently delete every old version and deleted file - if ($content['versionedpath'] == '/') + if (!empty($content['mounts']['umount'])) { - $deleted = Versioning\StreamWrapper::purge_all_versioning($content['mtime']); + $path = @key($content['mounts']['umount']); } else { - Vfs::find($content['versionedpath'], array( - 'show-deleted' => true, - 'hidden' => true, - 'depth' => true, - 'path_preg' => '#/\.(attic|versions)/#', - )+(!(int)$content['mtime'] ? array() : array( - 'mtime' => ($content['mtime']<0?'-':'+').(int)$content['mtime'], - )), function($path) use (&$deleted, &$errors) - { - if (($is_dir = Vfs::is_dir($path)) && Vfs::rmdir($path) || - !$is_dir && Vfs::unlink($path)) - { - ++$deleted; - } - else - { - ++$errors; - } - }); + $path = @key($content['mounts']['disable']); + } + // set umounted url for a (changed) remount + $mounts = Vfs::mount(); + $content['mounts']['path'] = $path; + $content['mounts']['url'] = Vfs::parse_url($mounts[$path]); + if (!empty($content['mounts']['url']['query'])) + { + $content['mounts']['url']['path'] .= '?'.$content['mounts']['url']['query']; + } + if (!in_array($path, self::$protected_path) && $path != '/') + { + $msg = Vfs::umount($path) ? + lang('%1 successful unmounted.', $path) : lang('Error unmounting %1!', $path); + } + else // re-mount / with sqlFS, to disable versioning + { + $msg = Vfs::mount($url = Vfs\Sqlfs\StreamWrapper::SCHEME . '://default' . $path, $path) ? + lang('Successful mounted %1 on %2.', $url, $path) : lang('Error mounting %1 on %2!', $url, $path); } - $time = number_format(microtime(true)-$starttime, 1); - $msg = ($errors ? lang('%1 errors deleting!', $errors)."\n\n" : ''). - lang('%1 files or directories deleted in %2 seconds.', $deleted, $time); - $msg_type = $errors ? 'error' : 'info'; } - Vfs::$is_root = false; + if (($path = $content['mounts']['path']) && + ($content['mounts']['enable'] || Vfs::$is_root && $content['mounts']['mount'])) + { + if (empty($content['mounts']['url']['path']) && $this->versioning) + { + $content['mounts']['url'] = [ + 'scheme' => Versioning\StreamWrapper::SCHEME, + 'path' => $path, + ]; + } + if (empty($content['mounts']['url']['scheme']) || $content['mounts']['url']['scheme'] === 'filesystem' && !self::$is_setup) + { + throw new Api\Exception\NoPermission(); + } + $url = $content['mounts']['url']['scheme'] . '://'; + if (in_array($content['mounts']['url']['scheme'], ['smb', 'webdavs', 'vfs'])) + { + if (empty(trim($content['mounts']['url']['user']))) + { + throw new Api\Exception\WrongUserinput(lang('SMB, WebDAVs and VFS require a username!')); + } + $url .= $content['mounts']['url']['user'] === '$user' ? '$user' : urlencode(trim($content['mounts']['url']['user'])); + if (!empty($content['mounts']['url']['pass'])) + { + $url .= ':' . ($content['mounts']['url']['pass'] === '$pass' ? '$pass' : urlencode(trim($content['mounts']['url']['pass']))); + } + $url .= '@'; + } + $url .= $content['mounts']['url']['host'] ?: 'default'; + $url .= $content['mounts']['url']['path'] ?: $path; + + if (($content['mounts']['enable'] || substr($content['mounts']['url']['scheme'], 0, 8) === 'stylite.') && !$this->versioning) + { + throw new Api\Exception\WrongUserinput(lang('Versioning requires EGroupware EPL')); + } + elseif (!Vfs::file_exists(Vfs::decodePath($path)) || Vfs::file_exists($path) && !Vfs::is_dir($path)) + { + throw new Api\Exception\WrongUserinput(lang('Path %1 not found or not a directory!', $path)); + } + // don't allow changing mount of /apps or /templates (eg. switching on versioning) + elseif (in_array($path, self::$protected_path)) + { + throw new Api\Exception\NoPermission(); + } + else + { + $msg = Vfs::mount($url, $path, true) ? + lang('Successful mounted %1 on %2.', $url, $path) : lang('Error mounting %1 on %2!', $url, $path); + } + } + if ($content['allow_delete_versions'] != $GLOBALS['egw_info']['server']['allow_delete_versions']) + { + Api\Config::save_value('allow_delete_versions', $content['allow_delete_versions'], 'phpgwapi'); + $GLOBALS['egw_info']['server']['allow_delete_versions'] = $content['allow_delete_versions']; + $msg = lang('Configuration changed.'); + } } + // delete old versions and deleted files + if ($content['delete-versions']) + { + if (!Versioning\StreamWrapper::check_delete_version(null)) + { + $msg = lang('Permission denied') . "\n\n" . lang('You are NOT allowed to finally delete older versions and deleted files!'); + $msg_type = 'error'; + } + else + { + // we need to be root to delete files independent of permissions and ownership + Vfs::$is_root = true; + if (!Vfs::file_exists($content['versionedpath']) || !Vfs::is_dir($content['versionedpath'])) + { + $msg = lang('Directory "%1" NOT found!', $content['versionedpath']); + $msg_type = 'error'; + } + else + { + @set_time_limit(0); + $starttime = microtime(true); + $deleted = $errors = 0; + + // shortcut to efficently delete every old version and deleted file + if ($content['versionedpath'] == '/') + { + $deleted = Versioning\StreamWrapper::purge_all_versioning($content['mtime']); + } + else + { + Vfs::find($content['versionedpath'], array( + 'show-deleted' => true, + 'hidden' => true, + 'depth' => true, + 'path_preg' => '#/\.(attic|versions)/#', + ) + (!(int)$content['mtime'] ? array() : array( + 'mtime' => ($content['mtime'] < 0 ? '-' : '+') . (int)$content['mtime'], + )), function ($path) use (&$deleted, &$errors) { + if (($is_dir = Vfs::is_dir($path)) && Vfs::rmdir($path) || + !$is_dir && Vfs::unlink($path)) + { + ++$deleted; + } + else + { + ++$errors; + } + }); + } + $time = number_format(microtime(true) - $starttime, 1); + $msg = ($errors ? lang('%1 errors deleting!', $errors) . "\n\n" : '') . + lang('%1 files or directories deleted in %2 seconds.', $deleted, $time); + $msg_type = $errors ? 'error' : 'info'; + } + Vfs::$is_root = false; + } + } + } + catch (\Exception $e) { + $msg = $e->getMessage(); + $msg_type = 'error'; } } else @@ -230,10 +264,11 @@ class filemanager_admin extends filemanager_ui $content['versionedpath'] = '/'; $content['mtime'] = 100; } - if (true) $content = array( + $content = [ 'versionedpath' => $content['versionedpath'], 'mtime' => $content['mtime'], - ); + 'mounts' => $content['mounts'], + ]; if ($this->versioning) { // statistical information @@ -256,12 +291,12 @@ class filemanager_admin extends filemanager_ui Framework::message($msg, $msg_type); $n = 2; - $content['mounts'] = array(); + $content['mounts']['at'] = '@'; foreach(Vfs::mount() as $path => $url) { $content['mounts'][$n++] = array( 'path' => $path, - 'url' => $url, + 'url' => preg_replace('#://([^:@/]+):((?!\$pass)[^@/]+)@#', '://$1:****@', $url), ); $readonlys["disable[$path]"] = !$this->versioning || !Vfs::$is_root || Vfs::parse_url($url,PHP_URL_SCHEME) != $this->versioning; @@ -274,6 +309,23 @@ class filemanager_admin extends filemanager_ui 'admins' => lang('Administrators'), 'everyone' => lang('Everyone'), ); + $sel_options['scheme'] = [ + "webdavs" => "WebDAVs", + "smb" => "SMB", + "filesystem" => "Filesystem", + "sqlfs" => "SQLfs", + "links" => "Links", + "stylite.versioning" => "Versioning", + "stylite.links" => "Links+Versioning", + "vfs" => "VFS", + ]; + foreach($sel_options['scheme'] as $scheme => $label) + { + if (!Vfs::load_wrapper($scheme) || !self::$is_setup && $scheme === 'filesystem') + { + unset($sel_options['scheme'][$scheme]); + } + } // show [Mount /etemplates] button for admin, if not already mounted and available $readonlys['etemplates'] = !class_exists('\EGroupware\Stylite\Vfs\Merge\StreamWrapper') || ($fs_tab=Vfs::mount($url)) && isset($fs_tab['/etemplates']) || diff --git a/filemanager/inc/class.filemanager_hooks.inc.php b/filemanager/inc/class.filemanager_hooks.inc.php index fe242a15e1..35d15b0767 100644 --- a/filemanager/inc/class.filemanager_hooks.inc.php +++ b/filemanager/inc/class.filemanager_hooks.inc.php @@ -6,7 +6,6 @@ * @author Ralf Becker * @package filemanager * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @version $Id$ */ use EGroupware\Api; @@ -98,7 +97,7 @@ class filemanager_hooks //'Site Configuration' => Egw::link('/index.php','menuaction=admin.admin_config.index&appname='.self::$appname.'&ajax=true'), 'Custom fields' => Egw::link('/index.php','menuaction=admin.admin_customfields.index&appname='.self::$appname.'&ajax=true'), 'Check virtual filesystem' => Egw::link('/index.php','menuaction=filemanager.filemanager_admin.fsck'), - 'VFS mounts and versioning' => Egw::link('/index.php', 'menuaction=filemanager.filemanager_admin.index'), + 'VFS mounts and versioning' => Egw::link('/index.php', 'menuaction=filemanager.filemanager_admin.index&ajax=true'), ); if ($location == 'admin') { diff --git a/filemanager/inc/class.filemanager_ui.inc.php b/filemanager/inc/class.filemanager_ui.inc.php index 5d34dcf6fe..9e55df5cea 100644 --- a/filemanager/inc/class.filemanager_ui.inc.php +++ b/filemanager/inc/class.filemanager_ui.inc.php @@ -444,31 +444,48 @@ class filemanager_ui /** * Make the current user (vfs) root * - * The user/pw is either the setup config user or a specially configured vfs_root user + * The user/pw is either the "root_" prefixed setup config user or a specially configured vfs_root user * * @param string $user setup config user to become root or '' to log off as root * @param string $password setup config password to become root + * @param string &$msg on return error or success message + * @param bool $allow_setup =false true: allow "root_" prefixed setup-config user/pw * @param boolean &$is_setup=null on return true if authenticated user is setup config user, false otherwise * @return boolean true is root user given, false otherwise (including logout / empty $user) */ - protected function sudo($user='',$password=null,&$is_setup=null) + protected function sudo($user='', $password='', string &$msg=null, bool $allow_setup=false, &$is_setup=null) { + $is_root = $is_setup = false; + $msg = null; + if (!$user) { - $is_root = $is_setup = false; + $msg = lang('Root access stopped.'); } + // config user & password + elseif ($allow_setup && substr($user, 0, 5) === 'root_') + { + if (!($msg = setup::checkip())) + { + $is_root = $is_setup = setup::check_auth(substr($user, 5), $password, $GLOBALS['egw_info']['server']['header_admin_user'], + $GLOBALS['egw_info']['server']['header_admin_password']); + } + } + // or vfs root user from setup >> configuration else { - // config user & password - $is_setup = Api\Session::user_pw_hash($user,$password) === $GLOBALS['egw_info']['server']['config_hash']; - // or vfs root user from setup >> configuration - $is_root = $is_setup || $GLOBALS['egw_info']['server']['vfs_root_user'] && + $is_root = $GLOBALS['egw_info']['server']['vfs_root_user'] && in_array($user,preg_split('/, */',$GLOBALS['egw_info']['server']['vfs_root_user'])) && $GLOBALS['egw']->auth->authenticate($user, $password, 'text'); } - //error_log(__METHOD__."('$user','$password',$is_setup) user_pw_hash(...)='".Api\Session::user_pw_hash($user,$password)."', config_hash='{$GLOBALS['egw_info']['server']['config_hash']}' --> returning ".array2string($is_root)); + if (empty($msg)) + { + $msg = $is_root ? lang('Root access granted.') : lang('Wrong username or password!'); + } + //error_log(__METHOD__."('$user', '$password', $is_setup, '$msg') --> returning ".array2string($is_root)); Api\Cache::setSession('filemanager', 'is_setup',$is_setup); Api\Cache::setSession('filemanager', 'is_root',Vfs::$is_root = $is_root); + return Vfs::$is_root; } @@ -1187,9 +1204,7 @@ class filemanager_ui // need to check 'setup' button (submit button in sudo popup), as some browsers (eg. chrome) also fill the hidden field if ($button == 'sudo' && Vfs::$is_root || $button == 'setup' && $content['sudo']['user']) { - $msg = $this->sudo($button == 'setup' ? $content['sudo']['user'] : '',$content['sudo']['passwd']) ? - lang('Root access granted.') : ($button == 'setup' && $content['sudo']['user'] ? - lang('Wrong username or password!') : lang('Root access stopped.')); + $this->sudo($button === 'setup' ? $content['sudo']['user'] : '', $content['sudo']['passwd'], $msg); unset($content['sudo']); $content['is_owner'] = Vfs::has_owner_rights($path); } diff --git a/filemanager/js/app.ts b/filemanager/js/app.ts index a2b03dc018..da2f8e33dd 100644 --- a/filemanager/js/app.ts +++ b/filemanager/js/app.ts @@ -20,6 +20,8 @@ import {et2_button} from "../../api/js/etemplate/et2_widget_button"; import {et2_nextmatch_controller} from "../../api/js/etemplate/et2_extension_nextmatch_controller"; import {egw, egw_get_file_editor_prefered_mimes} from "../../api/js/jsapi/egw_global"; import {et2_createWidget} from "../../api/js/etemplate/et2_core_widget"; +import {et2_selectbox} from "../../api/js/etemplate/et2_widget_selectbox"; +import {et2_textbox} from "../../api/js/etemplate/et2_widget_textbox"; /** * UI for filemanager @@ -88,6 +90,12 @@ export class filemanagerAPP extends EgwApp // call parent super.et2_ready(et2, name); + if (name === 'filemanager.admin') + { + this.changeMountScheme(); + return; + } + let path_widget = this.et2.getWidgetById('path'); if(path_widget) // do NOT set not found path-widgets, as uploads works on first one only! { @@ -1413,5 +1421,25 @@ export class filemanagerAPP extends EgwApp } return true; } + + /** + * Mount scheme change --> enable/disable user, pass and host + */ + changeMountScheme() + { + const grid = this.et2.getWidgetById('mounts'); + const scheme = (grid.getWidgetById('url[scheme]'))?.get_value(); + + ['url[user]', 'url[pass]', 'url[host]', 'colon', 'at'].forEach((name) => { + (grid.getWidgetById(name))?.set_disabled(scheme !== 'webdavs' && scheme !== 'smb'); + }); + if (scheme === 'vfs') + { + ['url[user]', 'at'].forEach((name) => { + (grid.getWidgetById(name))?.set_disabled(false); + }); + + } + } } app.classes.filemanager = filemanagerAPP; diff --git a/filemanager/lang/egw_de.lang b/filemanager/lang/egw_de.lang index c3a43e5f72..432ab89d95 100644 --- a/filemanager/lang/egw_de.lang +++ b/filemanager/lang/egw_de.lang @@ -159,6 +159,7 @@ files from links filemanager de Zeige Dateien aus verknüpften Einträgen files from subdirectories filemanager de Dateien aus Unterverzeichnissen files in this directory filemanager de Dateien in diesem Verzeichnis filesystem check reported no problems. filemanager de Überprüfung des Dateisystems ergab keine Probleme +filesystem: mount directory (inside /var/lib/egroupware!) from host filesystem filemanager de Dateisystem: mounted Verzeichnisse (innerhalb von /var/lib/egroupware) vom Dateisystem des Hosts finally delete filemanager de Endgültig löschen finally delete all older versions and deleted files under given directory.\n\nthis can not be undone! filemanager de Ältere Versionen und gelöschte Dateien unter dem angegebenen Verzeichnis endgültig löschen.\n\nDas kann NICHT rückgängig gemacht werden! finally delete this version filemanager de Diese Version endgültig löschen @@ -175,6 +176,7 @@ go to your home directory filemanager de Zu Ihrem Heimverzeichnis wechseln go up filemanager de in das übergeordnete Verzeichnis wechseln hidden upload filemanager de Hochladen nicht einsehbar hidden uploads filemanager de Hochladen nicht einsehbar +hostname/ip for webdav and smb filemanager de Hostname/IP für WebDAV und SMB id filemanager de ID if you specify a directory (full vfs path) here, %1 displays an action for each document. that action allows to download the specified document with the %1 data inserted. filemanager de Wenn Sie hier ein Verzeichnis angeben (vollständiger Pfad des virtuellen Dateisystems), zeigt %1 einen Befehl für jedes Dokument an. Dieser Befehl erlaubt es, das Dokument mit %1 Daten eingefügt herunterzuladen. if you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. that icon allows to download the specified document with the data inserted. filemanager de Wenn Sie hier ein Dokument angeben (vollständiger Pfad des virtuellen Dateisystems), zeigt %1 ein zusätzliches Dokumentsymbol für jeden Eintrag an. Dieses Symbol erlaubt es, das Dokument mit eingefügten Daten herunterzuladen. @@ -211,14 +213,15 @@ no access filemanager de Kein Zugriff no files in this directory. filemanager de Keine Dateien in diesem Verzeichnis no preview available filemanager de Keine Vorschau verfügbar no version history for this file/directory filemanager de Keine Versionshistorie für diese Datei oder dieses Verzeichnis -notebookbar filemanager de In Registern noone filemanager de Niemand +notebookbar filemanager de In Registern older versions or deleted files filemanager de Ältere Versionen oder gelöschte Dateien only owner can rename or delete the content filemanager de Nur der Besitzer kann den Inhalt umbenennen oder löschen open filemanager de Öffnen open documents with collabora, if permissions are given filemanager de Dokument mit Collabora Online öffnen, falls Rechte vorhanden sind open odt documents with collabeditor filemanager de odt Dokumente mit CollabEditor öffnen operation filemanager de Vorgang +password for webdav and smb, use $pass for password of logged in user filemanager de Passwort für WebDAV und SMB, benutzer $pass für das Passwort des angemeldeten Benutzers paste link filemanager de Als Verknüpfung einfügen path %1 not found or not a directory! filemanager de Pfad %1 nicht gefunden oder kein Verzeichnis! percentage filemanager de Prozentual @@ -231,6 +234,8 @@ preview %1 filemanager de Vorschau %1 preview of %1 filemanager de Vorschau von %1 projectmanager filemanager de Projektmanager properties saved. filemanager de Eigenschaften gespeichert +protocol to use filemanager de Zu benutzendes Protokoll +protocols filemanager de Protokolle quick jump to filemanager de Springe zu read & write access filemanager de Lese- und Schreibzugriff read access only filemanager de Nur Lesezugriff @@ -272,6 +277,8 @@ show link "your home directory" in side box menu? filemanager de Möchten Sie de show link "your home directory*" in side box menu?* filemanager de Möchten Sie den Verknüpfung "Ihr Home Verzeichnis" innerhalb des Seitenmenüs angezeigt bekommen? show link to filemanagers basedirectory (/) in side box menu? filemanager de Zeige die Verknüpfung zum Basisverzeichnis (/) des Dateimanagers im Seitenmenü? size filemanager de Größe +smb, webdavs and vfs require a username! filemanager de SMB, WebDAVs und VFS benötigen einen Benutzernamen! +smb: mount samba of windows fileserver shares filemanager de SMB: mounten von Freigaben eines Samba oder Windows Dateiservern some functionalities require superuser permissions, please login here as filemanager superuser - allowed users are defined in setup. filemanager de Einige Funktionalitäten benötigen Superuser-Rechte. Bitte loggen sie sich hier als Dateimanager Superuser ein (Zulässige Benutzer werden im Setup festgelegt). sqlfs statistics filemanager de sqlFS Statistik start search filemanager de Suche starten @@ -302,11 +309,14 @@ upload files filemanager de Dateien hochladen use this tag for addresslabels. put the content, you want to repeat, between two tags. filemanager de Benutzen Sie dieses Symbol für Adressetiketten. Stellen Sie den Inhalt der wiederholt werden soll zwischen 2 Symbole. used space filemanager de Benutzter Platz user color indicator filemanager de Benutzer-Farbe +username for webdav and smb, use $user for name of logged in user filemanager de Benutzername für WebDAV und SMB, benutzer $user für den Benutzername des angemeldeten Benutzers users and groups filemanager de Benutzer und Gruppen versioning filemanager de Versionierung +versioning requires egroupware epl filemanager de Versionierung benötigt EGroupware EPL vfs mounts and versioning common de VFS einhängen und versionieren view link filemanager de Zeige Link webdav link copied into clipboard filemanager de WebDAV-Link in die Zwischenablage kopiert +webdavs: mount egroupware or *cloud shares filemanager de WebDAVs: mounten von EGroupware oder *Cloud Freigaben who should be allowed to finally delete deleted files or old versions of a file: filemanager de Wer soll gelöschte Dateien oder ältere Versionen endgültig löschen dürfen: writable share link filemanager de Beschreibbare Freigabe-Link wrong username or password! filemanager de Falscher Benutzername oder Passwort! diff --git a/filemanager/lang/egw_en.lang b/filemanager/lang/egw_en.lang index f7f1631124..97833eaef5 100644 --- a/filemanager/lang/egw_en.lang +++ b/filemanager/lang/egw_en.lang @@ -159,6 +159,7 @@ files from links filemanager en Files from links files from subdirectories filemanager en Files from sub directories files in this directory filemanager en Files in this directory filesystem check reported no problems. filemanager en Filesystem check reported no problems. +filesystem: mount directory (inside /var/lib/egroupware!) from host filesystem filemanager en Filesystem: mount directory (inside /var/lib/egroupware!) from host filesystem finally delete filemanager en Finally delete finally delete all older versions and deleted files under given directory.\n\nthis can not be undone! filemanager en Finally delete all older versions and deleted files under given directory.\n\nThis can NOT be undone! finally delete this version filemanager en Finally delete this version @@ -175,6 +176,7 @@ go to your home directory filemanager en Go to your home directory go up filemanager en Go up hidden upload filemanager en Hidden upload hidden uploads filemanager en Hidden uploads +hostname/ip for webdav and smb filemanager en Hostname/IP for WebDAV and SMB id filemanager en ID if you specify a directory (full vfs path) here, %1 displays an action for each document. that action allows to download the specified document with the %1 data inserted. filemanager en If you specify a directory (full vfs path) here, %1 displays an action for each document. That action allows to download the specified document with the %1 data inserted. if you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. that icon allows to download the specified document with the data inserted. filemanager en If you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. That icon allows to download the specified document with the data inserted. @@ -219,6 +221,7 @@ open filemanager en Open open documents with collabora, if permissions are given filemanager en open documents with Collabora, if permissions are given open odt documents with collabeditor filemanager en open odt documents with CollabEditor operation filemanager en Operation +password for webdav and smb, use $pass for password of logged in user filemanager en Password for WebDAV and SMB, use $pass for password of logged in user paste link filemanager en Paste Link path %1 not found or not a directory! filemanager en Path %1 not found or not a directory! percentage filemanager en Percentage @@ -231,6 +234,8 @@ preview %1 filemanager en Preview %1 preview of %1 filemanager en Preview of %1 projectmanager filemanager en Project Manager properties saved. filemanager en Properties saved. +protocol to use filemanager en Protocol to use +protocols filemanager en Protocols quick jump to filemanager en Quick jump to read & write access filemanager en Read & write access read access only filemanager en Read access only @@ -261,8 +266,8 @@ select file(s) from vfs common en Select file(s) from VFS setting for document merge saved. filemanager en Setting for document merge saved. share files filemanager en Share files share link copied into clipboard filemanager en Share link copied into clipboard -shared files filemanager en Shared files share mounted at %1.
please close this tab. filemanager en Share mounted at %1.
Please close this tab. +shared files filemanager en Shared files shared with filemanager en Shared with show filemanager en Show show hidden files filemanager en Show hidden files @@ -273,6 +278,8 @@ show link "your home directory" in side box menu? filemanager en Show link "Your show link "your home directory*" in side box menu?* filemanager en Show link "Your home directory*" in side box menu?* show link to filemanagers basedirectory (/) in side box menu? filemanager en Show link to File Manager's base directory (/) in side menu? size filemanager en Size +smb, webdavs and vfs require a username! filemanager en SMB, WebDAVs and VFS require a username! +smb: mount samba of windows fileserver shares filemanager en SMB: mount Samba of Windows fileserver shares some functionalities require superuser permissions, please login here as filemanager superuser - allowed users are defined in setup. filemanager en Some functionalities require superuser permissions, please login here as filemanager superuser - allowed users are defined in setup. sqlfs statistics filemanager en sqlFS Statistics start search filemanager en Start search @@ -303,11 +310,14 @@ upload files filemanager en Upload files use this tag for addresslabels. put the content, you want to repeat, between two tags. filemanager en Use this tag for addresslabels. Put the content, you want to repeat, between two tags. used space filemanager en Used space user color indicator filemanager en User color indicator +username for webdav and smb, use $user for name of logged in user filemanager en Username for WebDAV and SMB, use $user for name of logged in user users and groups filemanager en Users and groups versioning filemanager en Versioning +versioning requires egroupware epl filemanager en Versioning requires EGroupware EPL vfs mounts and versioning common en VFS mounts and versioning view link filemanager en View link webdav link copied into clipboard filemanager en WebDAV link copied into clipboard +webdavs: mount egroupware or *cloud shares filemanager en WebDAVs: mount EGroupware or *Cloud shares who should be allowed to finally delete deleted files or old versions of a file: filemanager en Who should be allowed to finally delete deleted files or old versions of a file: writable share link filemanager en Writable Share link wrong username or password! filemanager en Wrong username or password! diff --git a/filemanager/templates/default/admin.xet b/filemanager/templates/default/admin.xet index e0f21d22d7..b7757c9f86 100644 --- a/filemanager/templates/default/admin.xet +++ b/filemanager/templates/default/admin.xet @@ -1,6 +1,5 @@ -