From 70cb78b2b18ad9ec9222e7ae7713144563319a4d Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 27 Jun 2016 17:03:57 +0200 Subject: [PATCH 01/22] adding link to stable 16.1 branch --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b1f8c17360..bb2de61718 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,16 @@ | Branch | Status | Composer | | ------ | ------ | -------- | | master | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=master)](https://travis-ci.org/EGroupware/egroupware) | [![Dependency Status](https://www.versioneye.com/user/projects/57527deb7757a00041b3a25e/badge.svg?style=flat)](https://www.versioneye.com/user/projects/57527deb7757a00041b3a25e) | +| 16.1 | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=16.1)](https://travis-ci.org/EGroupware/egroupware) | [![Dependency Status](https://www.versioneye.com/user/projects/57527e0c7757a0003bd4aecb/badge.svg?style=flat)](https://www.versioneye.com/user/projects/57527deb7757a00041b3a25e) | | 14.2 | [![Build Status](https://travis-ci.org/EGroupware/egroupware.svg?branch=14.2)](https://travis-ci.org/EGroupware/egroupware) | [![Dependency Status](https://www.versioneye.com/user/projects/57527e0c7757a0003bd4aecb/badge.svg?style=flat)](https://www.versioneye.com/user/projects/57527e0c7757a0003bd4aecb) | ### Default and prefered installation method for EGroupware is via your package manager: https://software.opensuse.org/download.html?project=server%3AeGroupWare&package=egroupware-epl ### Installing EGroupware 16.1 from github: +[switch to 16.1 branch](https://github.com/EGroupware/egroupware/tree/16.1) and follow instructions there + +### Installing EGroupware development version: * cd /path/to/your/docroot * git clone https://github.com/EGroupware/egroupware.git # or git@github.com:EGroupware/egroupware.git for ssh * cd egroupware @@ -22,4 +26,3 @@ * npm install -g grunt-cli # installs grunt command globally, if you have not already done so * npm install # installs required npm/grunt modules into node_modules/ dir * # run grunt manually after every update, or better uncomment grunt steps in .mrconfig - From 29d34bcc6c60249c60e356bfefe377dd3c3b0041 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 27 Jun 2016 18:34:26 +0200 Subject: [PATCH 02/22] fix PHP Fatal in 16.1 minimal install caused by usage of old categories:: constants --- admin/inc/class.admin_categories.inc.php | 8 ++++---- infolog/inc/class.infolog_groupdav.inc.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/admin/inc/class.admin_categories.inc.php b/admin/inc/class.admin_categories.inc.php index e3fd84e80c..c0fc5f0bfe 100644 --- a/admin/inc/class.admin_categories.inc.php +++ b/admin/inc/class.admin_categories.inc.php @@ -95,7 +95,7 @@ class admin_categories public function edit(array $content=null,$msg='') { // read the session, as the global_cats param is stored with it. - $appname = $content['appname'] ? $content['appname'] : ($_GET['appname']?$_GET['appname']:categories::GLOBAL_APPNAME); + $appname = $content['appname'] ? $content['appname'] : ($_GET['appname']?$_GET['appname']:Api\Categories::GLOBAL_APPNAME); $session = Api\Cache::getSession(__CLASS__.$appname,'nm'); unset($session); if (!isset($content)) @@ -395,7 +395,7 @@ class admin_categories foreach($rows as $key => &$row) { $row['owner'] = explode(',',$row['owner']); - if(($owner && !in_array($owner, $row['owner'])) || ((string)$query['filter'] === (string)categories::GLOBAL_ACCOUNT && $row['owner'][0] > 0)) + if(($owner && !in_array($owner, $row['owner'])) || ((string)$query['filter'] === (string)Api\Categories::GLOBAL_ACCOUNT && $row['owner'][0] > 0)) { unset($rows[$key]); $count--; @@ -499,7 +499,7 @@ class admin_categories 'row_id' => 'id', 'dataStorePrefix' => 'categories' // Avoid conflict with user list when in admin ); - $content['nm']['filter'] = $this->appname == 'admin'?categories::GLOBAL_ACCOUNT:$GLOBALS['egw_info']['user']['account_id']; + $content['nm']['filter'] = $this->appname == 'admin'?Api\Categories::GLOBAL_ACCOUNT:$GLOBALS['egw_info']['user']['account_id']; } else { @@ -620,7 +620,7 @@ class admin_categories )); } - protected function get_actions($appname=categories::GLOBAL_APPNAME) { + protected function get_actions($appname=Api\Categories::GLOBAL_APPNAME) { $actions = array( 'open' => array( // does edit if allowed, otherwise view diff --git a/infolog/inc/class.infolog_groupdav.inc.php b/infolog/inc/class.infolog_groupdav.inc.php index f8a83415ba..ccb1d9f8eb 100644 --- a/infolog/inc/class.infolog_groupdav.inc.php +++ b/infolog/inc/class.infolog_groupdav.inc.php @@ -636,7 +636,7 @@ class infolog_groupdav extends Api\CalDAV\Handler // make sure category is global, as otherwise it will not be transmitted to other users if (!Api\Categories::is_global($task['info_cat'])) { - $cat_obj = new Api\Categories(categories::GLOBAL_ACCOUNT, 'infolog'); + $cat_obj = new Api\Categories(Api\Categories::GLOBAL_ACCOUNT, 'infolog'); $cat = Api\Categories::read($task['info_cat']); $cat['owner'] = Api\Categories::GLOBAL_ACCOUNT; $cat['access'] = 'public'; From 41b5de825d12c546bc88cae27e9a3cdcf00ff5a2 Mon Sep 17 00:00:00 2001 From: nathangray Date: Mon, 27 Jun 2016 10:52:57 -0600 Subject: [PATCH 03/22] Hide iframe scrollbars too when seamless is on, hides scrollbars in Admin - Global categories --- api/js/etemplate/et2_widget_iframe.js | 1 + 1 file changed, 1 insertion(+) diff --git a/api/js/etemplate/et2_widget_iframe.js b/api/js/etemplate/et2_widget_iframe.js index 40766e7920..a6a2bcb1be 100644 --- a/api/js/etemplate/et2_widget_iframe.js +++ b/api/js/etemplate/et2_widget_iframe.js @@ -92,6 +92,7 @@ var et2_iframe = (function(){ "use strict"; return et2_valueWidget.extend( set_seamless: function(_seamless) { this.options.seamless = _seamless; this.htmlNode.attr("seamless", _seamless); + this.htmlNode.attr("scrolling", _seamless ? 'no' : 'auto'); }, set_value: function(_value) { From 45fc5b036dc3efc4f03b0f1c753e7f316c7774d3 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 27 Jun 2016 18:50:52 +0200 Subject: [PATCH 04/22] * Mobile: fix error popup when changing application on mobile device in minimal 16.1 install --- pixelegg/js/fw_mobile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixelegg/js/fw_mobile.js b/pixelegg/js/fw_mobile.js index ad6177985e..f0ab4d32fe 100644 --- a/pixelegg/js/fw_mobile.js +++ b/pixelegg/js/fw_mobile.js @@ -610,7 +610,7 @@ { this.serializedTabState = serialized; - egw.jsonq("home.jdots_framework.ajax_tab_changed_state", [data]); + egw.jsonq("EGroupware\\Api\\Framework\\Ajax::ajax_tab_changed_state", [data]); } }, From f4dc9ebc3be2aac10c4e352513370ffcae9391e9 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 27 Jun 2016 20:26:48 +0200 Subject: [PATCH 05/22] * MySQL/Ubuntu 16.04: switch off sql_mode ONLY_FULL_GROUP_BY enabled in MySQL 5.7+ --- api/src/Db.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/src/Db.php b/api/src/Db.php index 86a62b1ec9..d7a19e9e56 100644 --- a/api/src/Db.php +++ b/api/src/Db.php @@ -524,6 +524,12 @@ class Db { $this->ServerInfo = $this->Link_ID->ServerInfo(); $this->set_capabilities($Type,$this->ServerInfo['version']); + + // switch off MySQL 5.7+ ONLY_FULL_GROUP_BY sql_mode + if (substr($this->Type, 0, 5) == 'mysql' && $this->ServerInfo['version'] > 5.7 && $this->ServerInfo['version'] < 10.0) + { + $this->query("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))", __LINE__, __FILE__); + } } if (!$Ok) { From 27cfc4d2e06ec43c05e5a9a74e639b84271281bf Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 27 Jun 2016 20:40:24 +0200 Subject: [PATCH 06/22] fix not detected modules since use of EGW_REPO_BASE --- doc/rpm-build/checkout-build-archives.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/rpm-build/checkout-build-archives.php b/doc/rpm-build/checkout-build-archives.php index af5c577478..d3670057c6 100755 --- a/doc/rpm-build/checkout-build-archives.php +++ b/doc/rpm-build/checkout-build-archives.php @@ -259,7 +259,7 @@ function get_modules_per_repo() $matches = null; if (isset($baseurl)) { - $line = str_replace("\$(git config --get remote.origin.url|sed 's|/egroupware.git||')", $baseurl, $line); + $line = str_replace("\${EGW_REPO_BASE:-\$(git config --get remote.origin.url|sed 's|/egroupware.git||')}", $baseurl, $line); } if ($line && $line[0] == '[' && preg_match('/^\[([^]]*)\]/', $line, $matches)) { From 6efd436a752c28c4d071da5cfd906abd2402f9d9 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 28 Jun 2016 13:43:11 +0200 Subject: [PATCH 07/22] need to switch ONLY_FULL_GROUP_BY of for MySQL >= 5.7 --- api/src/Db.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/Db.php b/api/src/Db.php index d7a19e9e56..9eab22ccc3 100644 --- a/api/src/Db.php +++ b/api/src/Db.php @@ -526,7 +526,7 @@ class Db $this->set_capabilities($Type,$this->ServerInfo['version']); // switch off MySQL 5.7+ ONLY_FULL_GROUP_BY sql_mode - if (substr($this->Type, 0, 5) == 'mysql' && $this->ServerInfo['version'] > 5.7 && $this->ServerInfo['version'] < 10.0) + if (substr($this->Type, 0, 5) == 'mysql' && $this->ServerInfo['version'] >= 5.7 && $this->ServerInfo['version'] < 10.0) { $this->query("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))", __LINE__, __FILE__); } From fc746c1bd75618359203a8742a055a85eb800ebc Mon Sep 17 00:00:00 2001 From: nathangray Date: Tue, 28 Jun 2016 08:47:43 -0600 Subject: [PATCH 08/22] Fix missing hour & minute sliders in date picker --- pixelegg/css/mobile.css | 4 ++-- pixelegg/css/pixelegg.css | 4 ++-- pixelegg/less/jquery-ui.less | 4 ++-- pixelegg/mobile/fw_mobile.css | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pixelegg/css/mobile.css b/pixelegg/css/mobile.css index aaa604aa2b..8aad5b1192 100644 --- a/pixelegg/css/mobile.css +++ b/pixelegg/css/mobile.css @@ -1436,10 +1436,10 @@ div#ui-datepicker-div { .ui-datepicker div.ui-timepicker-div dt.ui_tpicker_minute_label { font-size: 0.9em; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider span.ui-slider-handle { background-color: #0C5DA5; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider span.ui-slider-handle { background-color: #0C5DA5; } .ui-datepicker div.ui-datepicker-buttonpane { diff --git a/pixelegg/css/pixelegg.css b/pixelegg/css/pixelegg.css index f3f3d8999c..9d22095b44 100644 --- a/pixelegg/css/pixelegg.css +++ b/pixelegg/css/pixelegg.css @@ -1425,10 +1425,10 @@ div#ui-datepicker-div { .ui-datepicker div.ui-timepicker-div dt.ui_tpicker_minute_label { font-size: 0.9em; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider span.ui-slider-handle { background-color: #0C5DA5; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider span.ui-slider-handle { background-color: #0C5DA5; } .ui-datepicker div.ui-datepicker-buttonpane { diff --git a/pixelegg/less/jquery-ui.less b/pixelegg/less/jquery-ui.less index a91087a890..ceb6557194 100755 --- a/pixelegg/less/jquery-ui.less +++ b/pixelegg/less/jquery-ui.less @@ -349,10 +349,10 @@ span.ui-icon-search { // Schieberegler div.ui_tpicker_hour_slider { - a.ui-slider-handle {background-color: @egw_color_2_a;} + span.ui-slider-handle {background-color: @egw_color_2_a;} } div.ui_tpicker_minute_slider { - a.ui-slider-handle {background-color: @egw_color_2_a;} + span.ui-slider-handle {background-color: @egw_color_2_a;} } } diff --git a/pixelegg/mobile/fw_mobile.css b/pixelegg/mobile/fw_mobile.css index a19e192715..49399a099f 100644 --- a/pixelegg/mobile/fw_mobile.css +++ b/pixelegg/mobile/fw_mobile.css @@ -1447,10 +1447,10 @@ div#ui-datepicker-div { .ui-datepicker div.ui-timepicker-div dt.ui_tpicker_minute_label { font-size: 0.9em; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_hour_slider span.ui-slider-handle { background-color: #0C5DA5; } -.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider a.ui-slider-handle { +.ui-datepicker div.ui-timepicker-div div.ui_tpicker_minute_slider span.ui-slider-handle { background-color: #0C5DA5; } .ui-datepicker div.ui-datepicker-buttonpane { From 1325740df143bbcb32cc13458416843e09dad892 Mon Sep 17 00:00:00 2001 From: nathangray Date: Tue, 28 Jun 2016 08:58:19 -0600 Subject: [PATCH 09/22] Add tooltip explaining private flag in calendar edit dialog --- calendar/lang/egw_de.lang | 1 + calendar/lang/egw_en.lang | 1 + calendar/templates/default/edit.xet | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/calendar/lang/egw_de.lang b/calendar/lang/egw_de.lang index ba46fea30f..5b840f2ff9 100644 --- a/calendar/lang/egw_de.lang +++ b/calendar/lang/egw_de.lang @@ -317,6 +317,7 @@ location, start- and endtimes, ... calendar de Ort, Start- und Endzeiten mail all participants calendar de Mail an alle Teilnehmer make freebusy information available to not loged in persons? calendar de Die freien/nicht verfügbaren Zeiten für nicht angemeldete Personen sichtbar machen? manage mapping calendar de Feldzuordnungen verwalten +mark event as private to hide title and description calendar de Kennzeichnet Termin als privat und unterdrückt Sichtbarkeit von Titel und Beschreibung max. number of entries to show (leave empty for no restriction) calendar de Max. Anzahl von Einträgen die angezeigt werden sollen (Kein Eintrag = Keine Beschränkung) maximum available quantity of %1 exceeded! calendar de Maximale Anzahl von %1 erreicht! meeting canceled calendar de Termin abgesagt diff --git a/calendar/lang/egw_en.lang b/calendar/lang/egw_en.lang index 6819ac5bc6..13d7f77f8a 100644 --- a/calendar/lang/egw_en.lang +++ b/calendar/lang/egw_en.lang @@ -317,6 +317,7 @@ location, start- and endtimes, ... calendar en Location, start and end times, .. mail all participants calendar en Mail all participants make freebusy information available to not loged in persons? calendar en Make Free/Busy information available to not logged in persons manage mapping calendar en Manage mapping +mark event as private to hide title and description calendar en Mark event as private to hide title and description max. number of entries to show (leave empty for no restriction) calendar en Max. number of entries to show. Leave empty for no restriction. maximum available quantity of %1 exceeded! calendar en Maximum available quantity of %1 exceeded! meeting canceled calendar en Meeting canceled diff --git a/calendar/templates/default/edit.xet b/calendar/templates/default/edit.xet index acffc86ea5..aacacb693f 100644 --- a/calendar/templates/default/edit.xet +++ b/calendar/templates/default/edit.xet @@ -210,15 +210,15 @@ - +