diff --git a/admin/templates/default/config.xet b/admin/templates/default/config.xet index 108f7c23be..f9e8700138 100644 --- a/admin/templates/default/config.xet +++ b/admin/templates/default/config.xet @@ -140,15 +140,6 @@ --> - - - - diff --git a/api/js/framework/fw_ui.js b/api/js/framework/fw_ui.js index 0852b3f8ec..dd49b855ee 100644 --- a/api/js/framework/fw_ui.js +++ b/api/js/framework/fw_ui.js @@ -995,9 +995,7 @@ window.egw_fw_ui_scrollarea = function(_contDiv) // Do not scrolldown/up when we are on selectbox items // seems Firefox does not prevent the mousewheel event over // selectbox items with scrollbars - // Do not scroll on video tutorials as well - if (e.target.tagName == "OPTION" || e.target.tagName == "SELECT" || - e.target.getAttribute('class') && e.target.getAttribute('class').match(/egw_tutorial/ig)) + if (e.target.tagName == "OPTION" || e.target.tagName == "SELECT") { noscroll = true; } diff --git a/api/js/jsapi/app_base.js b/api/js/jsapi/app_base.js index b411ae8415..451ad6d0d8 100644 --- a/api/js/jsapi/app_base.js +++ b/api/js/jsapi/app_base.js @@ -568,18 +568,6 @@ export const AppJS = (function(){ "use strict"; return Class.extend( */ _init_sidebox: function(sidebox) { - // Initialize egw tutorial sidebox, but only for non-popups, as calendar edit app.js has this.et2 set to tutorial et2 object - if (!this.egw.is_popup()) - { - var egw_fw = egw_getFramework(); - var tutorial = jQuery('#egw_tutorial_'+this.appname+'_sidebox', egw_fw ? egw_fw.sidemenuDiv : document); - // _init_sidebox gets currently called multiple times, which needs to be fixed - if (tutorial.length && !this.tutorial_initialised) - { - this.egwTutorial_init(tutorial[0]); - this.tutorial_initialised = true; - } - } if(sidebox.length) { var self = this; @@ -1185,137 +1173,6 @@ export const AppJS = (function(){ "use strict"; return Class.extend( } }, - /** - * Get json data for videos from the given url - * - * @return {Promise, object} return Promise, json object as resolved result and error message in case of failure - */ - egwTutorialGetData: function(){ - var self = this; - return new Promise (function(_resolve, _reject) - { - var resolve = _resolve; - var reject = _reject; - // delay the execution and let the rendering catches up. Seems only FF problem - window.setTimeout(function(){ - self.egw.json('EGroupware\\Api\\Framework\\Tutorial::ajax_data', [self.egw.app_name()], function(_data){ - resolve(_data); - }).sendRequest(); - },0); - - }); - }, - - /** - * Create and Render etemplate2 for egroupware tutorial - * sidebox option. The .xet file is stored in api/templates/default/egw_tutorials - * - * @description tutorials json object should have the following structure: - * object: - * { - * [app name]:{ - * [language tag]:[ - * {src:"",thumbnail:"",title:"",desc:""} - * ] - * } - * } - * - * *Note: "desc" and "title" are optional attributes, which "desc" would appears as tooltip for the video. - * - * example: - * { - * "mail":{ - * "en":[ - * {src:"https://www.youtube.com/embed/mCDJndpjO40", thumbnail:"http://img.youtube.com/vi/mCDJndpjO40/0.jpg", "title":"PGP Encryption", "desc":""}, - * {src:"https://www.youtube.com/embed/mCDJndpjO", thumbnail:"http://img.youtube.com/vi/mCDJndpjO/0.jpg", "title":"Subscription", "desc":""}, - * ], - * "de":[ - * {src:"https://www.youtube.com/embed/m40", thumbnail:"http://img.youtube.com/vi/m40/0.jpg", "title":"PGP Verschlüsselung", "desc":""}, - * {src:"https://www.youtube.com/embed/mpjO", thumbnail:"http://img.youtube.com/vi/mpjO/0.jpg", "title":"Ordner Abonnieren", "desc":""}, - * ] - * } - * } - * - * @param {DOMNode} div - */ - egwTutorial_init: function(div) - { - // et2 object - var etemplate = new etemplate2 (div, false); - var template = egw.webserverUrl+'/api/templates/default/egw_tutorial.xet?1'; - - this.egwTutorialGetData().then(function(_data){ - var lang = egw.preference('lang'); - var content = {content:{list:[]}}; - if (_data && _data[egw.app_name()]) - { - if (!_data[egw.app_name()][lang]) lang = 'en'; - if (typeof _data[egw.app_name()][lang] !='undefined' - && _data[egw.app_name()][lang].length > 0) - { - for (var i=0;i < _data[egw.app_name()][lang].length;i++) - { - var tuid = egw.app_name() + '-' +lang + '-' + i; - _data[egw.app_name()][lang][i]['onclick'] = 'app.'+egw.app_name()+'.egwTutorialPopup("'+tuid+'")'; - } - content.content.list = _data[egw.app_name()][lang]; - - if (template.indexOf('.xet') >0) - { - etemplate.load ('',template , content, function(){}); - } - else - { - etemplate.load (template, '', content); - } - } - } - }, - function(_err){ - console.log(_err); - }); - }, - - /** - * Open popup to show given tutorial id - * @param {string} _tuid tutorial object id - * - tuid: appname-lang-index - */ - egwTutorialPopup: function (_tuid) - { - var url = egw.link('/index.php', 'menuaction=api.EGroupware\\Api\\Framework\\Tutorial.popup&tuid='+_tuid); - egw.open_link(url,'_blank','960x580'); - }, - - /** - * Function to set video iframe base on selected tutorial from tutorials box - * - * @param {string} _url - */ - tutorial_videoOnClick: function (_url) - { - var frame = etemplate2.getByApplication('api')[0].widgetContainer.getWidgetById('src'); - if (frame) - { - frame.set_value(_url); - } - }, - - /** - * Function calls on discard checkbox and will set - * the egw_tutorial_noautoload preference - * - * @param {type} egw - * @param {type} widget - */ - tutorial_autoloadDiscard: function (egw, widget) - { - if (widget) - { - this.egw.set_preference('common', 'egw_tutorial_noautoload', widget.get_value()); - } - }, - /** * Check if Mailvelope is available, open (or create) "egroupware" keyring and call callback with it * diff --git a/api/js/jsapi/egw.js b/api/js/jsapi/egw.js index 2cdf8e1c55..5b68a35583 100644 --- a/api/js/jsapi/egw.js +++ b/api/js/jsapi/egw.js @@ -434,37 +434,6 @@ window.app = {classes: {}}; window.scrollTo(0, 1); } try { - // Open tutorial popup with an introduction video about egroupware - if (window.framework === window.top.framework && typeof Et2Dialog != 'undefined' && - !egw.preference('egw_tutorial_noautoload', 'common') && - !parseInt(egw_script.getAttribute('data-framework-reload')) && - (!egw.config('egw_tutorial_disable', 'phpgwapi') || egw.config('egw_tutorial_disable', 'phpgwapi') == 'sidebox')) - { - // we need to wait until common translations are loaded - egw.langRequireApp(window, 'common', function () - { - var buttons = [ - {label: egw.lang("Show now"), id: "show", image: "check", default: "true"}, - {label: egw.lang("Show next login"), id: "later", image: "right"}, - {label: egw.lang("No thanks"), id: "never", image: "cancel"} - ]; - Et2Dialog.show_dialog(function (_button_id) - { - if (_button_id == "show") - { - egw.open_link(egw.link('/index.php', 'menuaction=api.EGroupware\\Api\\Framework\\Tutorial.popup&tuid=introduction-' + egw.preference('lang') + '-0-a'), '_blank', '960x580'); - } - if (_button_id != "later") - { - egw.set_preference('common', 'egw_tutorial_noautoload', true); - } - }, - egw.lang('We would like to introduce you to EGroupware by showing a short introduction video.'), - egw.lang('Introduction'), - {}, buttons, Et2Dialog.QUESTION_MESSAGE, undefined, egw(window)); - }, this); - } - // open websocket to push server for our top window if (egw === window.top.egw && egw_script.getAttribute('data-websocket-url')) { diff --git a/api/js/jsapi/egw_app.ts b/api/js/jsapi/egw_app.ts index f1d9d28692..77ad7fb8d9 100644 --- a/api/js/jsapi/egw_app.ts +++ b/api/js/jsapi/egw_app.ts @@ -120,8 +120,6 @@ export abstract class EgwApp et2_view : any; favorite_popup : JQuery | any; - tutorial_initialised : boolean; - dom_id : string; mailvelopeSyncHandlerObj : any; @@ -803,18 +801,7 @@ export abstract class EgwApp */ _init_sidebox(sidebox) { - // Initialize egw tutorial sidebox, but only for non-popups, as calendar edit app.js has this.et2 set to tutorial et2 object - if(!this.egw.is_popup()) - { - var egw_fw = egw_getFramework(); - var tutorial = jQuery('#egw_tutorial_' + this.appname + '_sidebox', egw_fw ? egw_fw.sidemenuDiv : document); - // _init_sidebox gets currently called multiple times, which needs to be fixed - if(tutorial.length && !this.tutorial_initialised) - { - this.egwTutorial_init(tutorial[0]); - this.tutorial_initialised = true; - } - } + if(sidebox.length) { var self = this; @@ -1345,142 +1332,6 @@ export abstract class EgwApp } } - /** - * Get json data for videos from the given url - * - * @return {Promise, object} return Promise, json object as resolved result and error message in case of failure - */ - egwTutorialGetData() - { - var self = this; - return new Promise(function(_resolve, _reject) - { - var resolve = _resolve; - var reject = _reject; - // delay the execution and let the rendering catches up. Seems only FF problem - window.setTimeout(function() - { - self.egw.json('EGroupware\\Api\\Framework\\Tutorial::ajax_data', [self.egw.app_name()], function(_data) - { - resolve(_data); - }).sendRequest(); - }, 0); - - }); - } - - /** - * Create and Render etemplate2 for egroupware tutorial - * sidebox option. The .xet file is stored in api/templates/default/egw_tutorials - * - * @description tutorials json object should have the following structure: - * object: - * { - * [app name]:{ - * [language tag]:[ - * {src:"",thumbnail:"",title:"",desc:""} - * ] - * } - * } - * - * *Note: "desc" and "title" are optional attributes, which "desc" would appears as tooltip for the video. - * - * example: - * { - * "mail":{ - * "en":[ - * {src:"https://www.youtube.com/embed/mCDJndpjO40", thumbnail:"http://img.youtube.com/vi/mCDJndpjO40/0.jpg", "title":"PGP Encryption", "desc":""}, - * {src:"https://www.youtube.com/embed/mCDJndpjO", thumbnail:"http://img.youtube.com/vi/mCDJndpjO/0.jpg", "title":"Subscription", "desc":""}, - * ], - * "de":[ - * {src:"https://www.youtube.com/embed/m40", thumbnail:"http://img.youtube.com/vi/m40/0.jpg", "title":"PGP Verschlüsselung", "desc":""}, - * {src:"https://www.youtube.com/embed/mpjO", thumbnail:"http://img.youtube.com/vi/mpjO/0.jpg", "title":"Ordner Abonnieren", "desc":""}, - * ] - * } - * } - * - * @param {DOMNode} div - */ - egwTutorial_init(div) - { - // et2 object - var etemplate = new etemplate2(div, ''); - var template = egw.webserverUrl + '/api/templates/default/egw_tutorial.xet?1'; - - this.egwTutorialGetData().then(function(_data) - { - var lang = egw.preference('lang'); - var content = {content: {list: []}}; - if(_data && _data[egw.app_name()]) - { - if (!_data[egw.app_name()][lang]) lang = 'en'; - if(typeof _data[egw.app_name()][lang] != 'undefined' - && _data[egw.app_name()][lang].length > 0) - { - for(var i = 0; i < _data[egw.app_name()][lang].length; i++) - { - var tuid = egw.app_name() + '-' + lang + '-' + i; - _data[egw.app_name()][lang][i]['onclick'] = 'app.' + egw.app_name() + '.egwTutorialPopup("' + tuid + '")'; - } - content.content.list = _data[egw.app_name()][lang]; - - if(template.indexOf('.xet') > 0) - { - etemplate.load('', template, content, function() {}); - } - else - { - etemplate.load(template, '', content); - } - } - } - }, - function(_err) - { - console.log(_err); - }); - } - - /** - * Open popup to show given tutorial id - * @param {string} _tuid tutorial object id - * - tuid: appname-lang-index - */ - egwTutorialPopup(_tuid) - { - var url = egw.link('/index.php', 'menuaction=api.EGroupware\\Api\\Framework\\Tutorial.popup&tuid=' + _tuid); - egw.open_link(url, '_blank', '960x580'); - } - - /** - * Function to set video iframe base on selected tutorial from tutorials box - * - * @param {string} _url - */ - tutorial_videoOnClick(_url) - { - var frame = etemplate2.getByApplication('api')[0].widgetContainer.getWidgetById('src'); - if(frame) - { - frame.set_value(_url); - } - } - - /** - * Function calls on discard checkbox and will set - * the egw_tutorial_noautoload preference - * - * @param {type} egw - * @param {type} widget - */ - tutorial_autoloadDiscard(egw, widget) - { - if(widget) - { - this.egw.set_preference('common', 'egw_tutorial_noautoload', widget.get_value()); - } - } - /** * Check if Mailvelope is available, open (or create) "egroupware" keyring and call callback with it * diff --git a/api/setup/setup.inc.php b/api/setup/setup.inc.php index 2884a1ac91..1ab198e147 100644 --- a/api/setup/setup.inc.php +++ b/api/setup/setup.inc.php @@ -62,7 +62,6 @@ $setup_info['api']['hooks']['addgroup'] = 'EGroupware\\Api\\Vfs\\Hooks::addGroup $setup_info['api']['hooks']['deletegroup'] = array('EGroupware\\Api\\Vfs\\Hooks::deleteGroup', 'EGroupware\\Api\\Mail\\Hooks::deletegroup'); $setup_info['api']['hooks']['editgroup'] = 'EGroupware\\Api\\Vfs\\Hooks::editGroup'; $setup_info['api']['hooks']['changepassword'] = 'EGroupware\\Api\\Mail\\Hooks::changepassword'; -$setup_info['api']['hooks']['sidebox_all'] = 'EGroupware\\Api\\Framework\\Tutorial::tutorial_menu'; // Hooks to delete shares when file is deleted $setup_info['api']['hooks']['vfs_unlink'] = 'EGroupware\\Api\\Vfs\\Sharing::vfsUpdate'; diff --git a/api/setup/tutorials.json b/api/setup/tutorials.json deleted file mode 100644 index 31b30b19af..0000000000 --- a/api/setup/tutorials.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "introduction":{ - "de":[ - {"src":"https://www.youtube.com/embed/0JqoFhAGLwo?rel=0&autoplay=1","title":"EGroupware Basics","thumbnail":"https://img.youtube.com/vi/0JqoFhAGLwo/0.jpg","desc":"In diesem Tutorial erklären wird grundlegende Funktionen aller EGroupware Apps."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/iPrtjeEnXeU?rel=0&autoplay=1","title":"EGroupware Basics","thumbnail":"https://img.youtube.com/vi/iPrtjeEnXeU/0.jpg","desc":"Some of EGroupwares most important basic features and functions in all apps."} - ] - }, - "addressbook":{ - "de":[ - {"src":"https://www.youtube.com/embed/0JqoFhAGLwo?rel=0&autoplay=1","title":"EGroupware Basics","thumbnail":"https://img.youtube.com/vi/0JqoFhAGLwo/0.jpg", "desc":"Die wichtigsten Basics von EGroupware und die grundlegenden Funktionen der Software."}, - {"src":"https://www.youtube.com/embed/fiPjk49HtMY?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/fiPjk49HtMY/0.jpg", "desc":"Customer Relationship Management - Hier zeigen wir, wie Kontakte und Termine von Kunden oder Partnern mit Adressbuch, Kalender und InfoLog abgebildet werden können."}, - {"src":"https://www.youtube.com/embed/e_X2InMcBao?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/e_X2InMcBao/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Apple-Geräte."}, - {"src":"https://www.youtube.com/embed/hJWQYzxC9MA?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/hJWQYzxC9MA/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Android-Geräte."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/iPrtjeEnXeU?rel=0&autoplay=1","title":"EGroupware Basics","thumbnail":"https://img.youtube.com/vi/iPrtjeEnXeU/0.jpg", "desc":"Some of EGroupwares most important basic features and functions in all apps."}, - {"src":"https://www.youtube.com/embed/HwjZFnitqRQ?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/HwjZFnitqRQ/0.jpg", "desc":"Customer Relationship Management - We show, how contacts and events of customers or partners can be edited with Addressbook, Calendar and InfoLog."}, - {"src":"https://www.youtube.com/embed/hHxjjQ_MqnY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/hHxjjQ_MqnY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Apple devices."}, - {"src":"https://www.youtube.com/embed/-NdgyI7BDpY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/-NdgyI7BDpY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Android devices."} - ] - }, - "admin":{ - "de":[ - {"src":"https://www.youtube.com/embed/a-VYyo7rQxA?rel=0&autoplay=1","title":"EGroupware Admin Basics","thumbnail":"https://img.youtube.com/vi/a-VYyo7rQxA/0.jpg", "desc":"Grundlagen der EGroupware Administration: Benutzer und Gruppen anlegen, Kategorien anlegen, Zugriffsrechte vergeben und benutzerdefinierte Felder erstellen."}, - {"src":"https://www.youtube.com/embed/vml4Ok1qdGM?rel=0&autoplay=1","title":"EGroupware Admin Mail","thumbnail":"https://img.youtube.com/vi/vml4Ok1qdGM/0.jpg", "desc":"Hier zeigen wir - für alle Admins - wichtige Einstellungen in EGroupware Mail!"}, - {"src":"https://www.youtube.com/embed/7DZKPKa_Rj0?rel=0&autoplay=1","title":"EGroupware E-Mail Account Management","thumbnail":"https://img.youtube.com/vi/7DZKPKa_Rj0/0.jpg", "desc":"In diesem Tutorial erklären wir, wie einfach Sie sich selbst einen neuen Mailaccount anlegen und wie schnell das geht."}, - {"src":"https://www.youtube.com/embed/e_X2InMcBao?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/e_X2InMcBao/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Apple-Geräte."}, - {"src":"https://www.youtube.com/embed/hJWQYzxC9MA?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/hJWQYzxC9MA/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Android-Geräte."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/W0q2HyT6tQU?rel=0&autoplay=1","title":"EGroupware Admin Basics","thumbnail":"https://img.youtube.com/vi/W0q2HyT6tQU/0.jpg", "desc":"Basics of EGroupware Administration: create users and groups, add categories, define access rights and custom fields."}, - {"src":"https://www.youtube.com/embed/8CTF7w3K8kA?rel=0&autoplay=1","title":"EGroupware Admin Mail","thumbnail":"https://img.youtube.com/vi/8CTF7w3K8kA/0.jpg", "desc":"We show, how you – as an admin – change settings for one user in Stylite Mail Hosting."}, - {"src":"https://www.youtube.com/embed/LkWOL8PkgvU?rel=0&autoplay=1","title":"EGroupware E-Mail account management","thumbnail":"https://img.youtube.com/vi/LkWOL8PkgvU/0.jpg", "desc":"In this tutorial we explain, how fast and how easy you create your own mail account."}, - {"src":"https://www.youtube.com/embed/hHxjjQ_MqnY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/hHxjjQ_MqnY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Apple devices."}, - {"src":"https://www.youtube.com/embed/-NdgyI7BDpY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/-NdgyI7BDpY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Android devices."} - ] - - }, - "filemanager":{ - "de":[ - {"src":"https://www.youtube.com/embed/scB_l7OjdJI?rel=0&autoplay=1","title":"EGroupware Dateimanager","thumbnail":"https://img.youtube.com/vi/scB_l7OjdJI/0.jpg", "desc":"In diesem Tutorial gibt es praktische Tipps und Erklärungen zur Nutzung des Dateimanagers."}, - {"src":"https://www.youtube.com/embed/A_tkKYaW_iI?rel=0&autoplay=1","title":"EGroupware 14.2 neue Features","thumbnail":"https://img.youtube.com/vi/A_tkKYaW_iI/0.jpg", "desc":"In diesem Video werden die drei wichtigsten Neuerungen der neuen EGroupware Version 14.2. beschrieben."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/lOR3vo6hMwA?rel=0&autoplay=1","title":"EGroupware File Manager","thumbnail":"https://img.youtube.com/vi/lOR3vo6hMwA/0.jpg", "desc":"We here give some useful tips concerning the usage of filemanager. We talk about handling and usability and the new sharing options that are available with version 14.2."}, - {"src":"https://www.youtube.com/embed/mCDJndpjO40?rel=0&autoplay=1","title":"EGroupware 14.2 new features","thumbnail":"https://img.youtube.com/vi/mCDJndpjO40/0.jpg", "desc":"This video shows the three main features of upcoming new EGroupware version 14.2."} - ] - }, - "home":{ - "de":[ - {"src":"https://www.youtube.com/embed/A_tkKYaW_iI?rel=0&autoplay=1","title":"EGroupware 14.2 neue Features","thumbnail":"https://img.youtube.com/vi/A_tkKYaW_iI/0.jpg", "desc":"In diesem Video werden die drei wichtigsten Neuerungen der neuen EGroupware Version 14.2. beschrieben."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/mCDJndpjO40?rel=0&autoplay=1","title":"EGroupware 14.2 new features","thumbnail":"https://img.youtube.com/vi/mCDJndpjO40/0.jpg", "desc":"This video shows the three main features of upcoming new EGroupware version 14.2."} - ] - }, - "infolog":{ - "de":[ - {"src":"https://www.youtube.com/embed/fiPjk49HtMY?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/fiPjk49HtMY/0.jpg", "desc":"Customer Relationship Management - Hier zeigen wir, wie Kontakte und Termine von Kunden oder Partnern mit Adressbuch, Kalender und InfoLog abgebildet werden können."}, - {"src":"https://www.youtube.com/embed/A_tkKYaW_iI?rel=0&autoplay=1","title":"EGroupware 14.2 neue Features","thumbnail":"https://img.youtube.com/vi/A_tkKYaW_iI/0.jpg", "desc":"In diesem Video werden die drei wichtigsten Neuerungen der neuen EGroupware Version 14.2. beschrieben."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/HwjZFnitqRQ?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/HwjZFnitqRQ/0.jpg", "desc":"Customer Relationship Management - We show, how contacts and events of customers or partners can be edited with Addressbook, Calendar and InfoLog."}, - {"src":"https://www.youtube.com/embed/mCDJndpjO40?rel=0&autoplay=1","title":"EGroupware 14.2 new features","thumbnail":"https://img.youtube.com/vi/mCDJndpjO40/0.jpg", "desc":"This video shows the three main features of upcoming new EGroupware version 14.2."} - ] - }, - "calendar":{ - "de":[ - {"src":"https://www.youtube.com/embed/fiPjk49HtMY?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/fiPjk49HtMY/0.jpg", "desc":"Customer Relationship Management - Hier zeigen wir, wie Kontakte und Termine von Kunden oder Partnern mit Adressbuch, Kalender und InfoLog abgebildet werden können."}, - {"src":"https://www.youtube.com/embed/rP_fK7Dk42s?rel=0&autoplay=1","title":"EGroupware für Universitäten und Schulen ","thumbnail":"https://img.youtube.com/vi/rP_fK7Dk42s/0.jpg", "desc":"Die EGroupware Ressourcen-Verwaltung ersetzt einzelne Listen und Aushänge und kann den Verleih von Beamern oder Laptops sowie die Nutzung von Sportplatz oder Sitzungssaal übersichtlich abbilden."}, - {"src":"https://www.youtube.com/embed/e_X2InMcBao?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/e_X2InMcBao/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Apple-Geräte."}, - {"src":"https://www.youtube.com/embed/hJWQYzxC9MA?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/hJWQYzxC9MA/0.jpg", "desc":"In diesem Video erklären wir Schritt für Schritt die Synchronisation mit Ihrem Mobilgerät - für alle Android-Geräte."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/HwjZFnitqRQ?rel=0&autoplay=1","title":"EGroupware - CRM","thumbnail":"https://img.youtube.com/vi/HwjZFnitqRQ/0.jpg", "desc":"Customer Relationship Management - We show, how contacts and events of customers or partners can be edited with Addressbook, Calendar and InfoLog."}, - {"src":"https://www.youtube.com/embed/hHxjjQ_MqnY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Apple","thumbnail":"https://img.youtube.com/vi/hHxjjQ_MqnY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Apple devices."}, - {"src":"https://www.youtube.com/embed/-NdgyI7BDpY?rel=0&autoplay=1","title":"EGroupware Synchronisation - Android","thumbnail":"https://img.youtube.com/vi/-NdgyI7BDpY/0.jpg", "desc":"We explain step by step, how to synchronise EGroupware with your smartphone or tablet - for all Android devices."} - ] - }, - "mail":{ - "de":[ - {"src":"https://www.youtube.com/embed/wUdHb6Zha60?rel=0&autoplay=1","title":"EGroupware E-Mail Basics","thumbnail":"https://img.youtube.com/vi/wUdHb6Zha60/0.jpg", "desc":"Hier zeigen wir einige praktische Funktionen der Anwendung Mail. Beipiele: Benutzung des Kontextmenüs und Anpassen des Vorschaudialogs für Emails."}, - {"src":"https://www.youtube.com/embed/7DZKPKa_Rj0?rel=0&autoplay=1","title":"EGroupware E-Mail Account Management","thumbnail":"https://img.youtube.com/vi/7DZKPKa_Rj0/0.jpg", "desc":"In diesem Tutorial erklären wir, wie einfach Sie sich selbst einen neuen Mailaccount anlegen und wie schnell das geht."}, - {"src":"https://www.youtube.com/embed/vml4Ok1qdGM?rel=0&autoplay=1","title":"EGroupware Admin Mail","thumbnail":"https://img.youtube.com/vi/vml4Ok1qdGM/0.jpg", "desc":"Hier zeigen wir - für alle Admins - wichtige Einstellungen in EGroupware Mail!"}, - {"src":"https://www.youtube.com/embed/A_tkKYaW_iI?rel=0&autoplay=1","title":"EGroupware 14.2 neue Features","thumbnail":"https://img.youtube.com/vi/A_tkKYaW_iI/0.jpg", "desc":"In diesem Video werden die drei wichtigsten Neuerungen der neuen EGroupware Version 14.2. beschrieben."} - ], - "en":[ - {"src":"https://www.youtube.com/embed/5ukeZd-kEMo?rel=0&autoplay=1","title":"EGroupware E-Mail Basics","thumbnail":"https://img.youtube.com/vi/5ukeZd-kEMo/0.jpg", "desc":"Here we show some useful features of mail application. E.g. we explain how to use context menu or how you can customize preview dialog."}, - {"src":"https://www.youtube.com/embed/LkWOL8PkgvU?rel=0&autoplay=1","title":"EGroupware E-Mail account management","thumbnail":"https://img.youtube.com/vi/LkWOL8PkgvU/0.jpg", "desc":"In this tutorial we explain, how fast and how easy you create your own mail account."}, - {"src":"https://www.youtube.com/embed/8CTF7w3K8kA?rel=0&autoplay=1","title":"EGroupware Admin Mail","thumbnail":"https://img.youtube.com/vi/8CTF7w3K8kA/0.jpg", "desc":"We show, how you – as an admin – change settings for one user in Stylite Mail Hosting."}, - {"src":"https://www.youtube.com/embed/mCDJndpjO40?rel=0&autoplay=1","title":"EGroupware 14.2 new features","thumbnail":"https://img.youtube.com/vi/mCDJndpjO40/0.jpg", "desc":"This video shows the three main features of upcoming new EGroupware version 14.2."} - ] - }, - "ressources":{ - "de":[ - {"src":"https://www.youtube.com/embed/rP_fK7Dk42s?rel=0&autoplay=1","title":"EGroupware für Universitäten und Schulen ","thumbnail":"https://img.youtube.com/vi/rP_fK7Dk42s/0.jpg", "desc":"Die EGroupware Ressourcen-Verwaltung ersetzt einzelne Listen und Aushänge und kann den Verleih von Beamern oder Laptops sowie die Nutzung von Sportplatz oder Sitzungssaal übersichtlich abbilden."} - ] - } -} \ No newline at end of file diff --git a/api/src/Config.php b/api/src/Config.php index 1593438dbf..b7809d5c6f 100755 --- a/api/src/Config.php +++ b/api/src/Config.php @@ -257,7 +257,7 @@ class Config 'site_title','login_logo_file','login_logo_url','login_logo_title','favicon_file', 'markuntranslated','link_list_thumbnail','enabled_spellcheck','debug_minify', 'call_link','call_popup','fax_email','fax_email_regexp','geolocation_url', // addressbook - 'hide_birthdays','calview_no_consolidate', 'egw_tutorial_disable','fw_mobile_app_list'), // calendar + 'hide_birthdays','calview_no_consolidate','fw_mobile_app_list'), // calendar 'projectmanager' => array('hours_per_workday', 'duration_units'), 'manual' => array('manual_remote_egw_url'), 'infolog' => array('status'), diff --git a/api/src/Framework/Tutorial.php b/api/src/Framework/Tutorial.php deleted file mode 100644 index 30e1c5994c..0000000000 --- a/api/src/Framework/Tutorial.php +++ /dev/null @@ -1,155 +0,0 @@ - - * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @version $Id$ - */ - -namespace EGroupware\Api\Framework; - -use EGroupware\Api; -use EGroupware\Api\Etemplate; - -class Tutorial -{ - /** - * Methods callable via menuaction - * - * @var array - */ - public $public_functions = array( - 'popup' => true - ); - - /** - * Popup window to display youtube video - * - * @param array $content - */ - function popup ($content=null) - { - // check and if not done register tutorial_menu hook - if (!Api\Hooks::exists('sidebox_all', 'api') || - Api\Hooks::exists('sidebox_all', 'api', true) != 'EGroupware\\Api\\Framework\\Tutorial::tutorial_menu') - { - Api\Hooks::read(true); - } - - //Allow youtube frame to pass the CSP check - Api\Header\ContentSecurityPolicy::add('frame-src', array('https://www.youtube.com')); - - $tmpl = new Etemplate('api.tutorial'); - if (!is_array($content)) - { - // Get tutorial object id - $tuid_indx = explode('-',$_GET['tuid']); - $appName = $tuid_indx[0]; - $lang = $tuid_indx[1]; - $id = $tuid_indx[2]; - } - else // set the first video of selected app - { - $appName = $content['list']['apps']; - $lang = $GLOBALS['egw_info']['user']['preferences']['common']['lang']; - $id ="0"; - } - // read tutorials json file to fetch data - $tutorials = json_decode(self::getJsonData(), true); - $apps = array('introduction' => lang('Introduction')); - foreach (array_keys($tutorials) as $app) - { - // show only apps user has access to them - if (in_array($app, array_keys($GLOBALS['egw_info']['user']['apps']))) $apps [$app] = $app; - } - $sel_options = array( - 'apps' => $apps, - ); - // Check if the user has right to see the app's tutorial - if (in_array($appName, array_keys($GLOBALS['egw_info']['user']['apps'])) || $appName === "introduction") - { - // fallback to english video - $tutorial = $tutorials[$appName][$lang][$id]? $tutorials[$appName][$lang][$id]: - $tutorials[$appName]['en'][$id]; - - $list = array( - 'apps' => $appName, - '0' => '' - ); - foreach (isset($tutorials[$appName][$lang]) ? $tutorials[$appName][$lang] : $tutorials[$appName]['en'] as $v) - { - $v ['onclick'] = 'etemplate2.getByApplication("api")[0].widgetContainer.getWidgetById("src").set_value("'.$v['src'].'")'; - array_push($list, $v); - } - $content = array ( - 'src' => $tutorial['src'], - 'title' => $tutorial['title'], - 'desc' => $tutorial['desc'], - 'list' => $list - ); - } - else - { - $content = array(); - Api\Framework::message(lang('You do not have permission to see this tutorial!')); - } - - $tmpl->exec('api.EGroupware\\Api\\Framework\\Tutorial.popup', $content, $sel_options, array(), array(), 2); - } - - /** - * Ajax function to get videos links as json - */ - public static function ajax_data() - { - $response = Api\Json\Response::get(); - $response->data(json_decode(self::getJsonData())); - } - - /** - * Function to fetch data from tutorials.json file - * - * @return string returns json string - */ - static function getJsonData() - { - if (!($json = Api\Cache::getCache(Api\Cache::TREE, __CLASS__, 'egw_tutorial_json'))) - { - $json = file_get_contents('api/setup/tutorials.json'); - // Cache the json object for two hours - Api\Cache::setCache(Api\Cache::TREE, __CLASS__, 'egw_tutorial_json', $json, 7200); - } - - return $json; - } - - /** - * Static function to build egw tutorial sidebox menu - * - */ - public static function tutorial_menu() - { - if (Api\Header\UserAgent::mobile()) return; - $tutorials = json_decode(self::getJsonData(),true); - $appname = $GLOBALS['egw_info']['flags']['currentapp']; - if (!is_array($tutorials[$appname])) return false; - if (!$GLOBALS['egw_info']['server']['egw_tutorial_disable'] - || $GLOBALS['egw_info']['server']['egw_tutorial_disable'] == 'intro') - { - $file = Array ( - array( - 'text' => '
', - 'no_lang' => true, - 'link' => false, - 'icon' => false, - ) - ); - display_sidebox($appname, lang('Video Tutorials'), $file); - } - } -} \ No newline at end of file diff --git a/api/templates/default/def_tutorials.css b/api/templates/default/def_tutorials.css deleted file mode 100644 index 42dd821ce4..0000000000 --- a/api/templates/default/def_tutorials.css +++ /dev/null @@ -1,111 +0,0 @@ -/** - * EGroupware: CSS with less preprocessor - * - * Definitions for tutorials - * - * Please do NOT change css-files directly, instead change less-files and compile them! - * - * @link http://www.egroupware.org - * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @author Hadi NAtegh - * @package phpgwapi - * @version $Id$ - */ -span.egw_tutorial_title { - color: black; - font-weight: bold; - text-align: left; - width: 99%; - background-color: #D6DEF0; - border: 1px solid #B3B3B3; - padding-top: 4px; - padding-left: 5px; - padding-bottom: 5px; - border-radius: 2px; - text-overflow: ellipsis; - white-space: nowrap; - overflow-x: hidden; -} -.egw_tutorial_thumb:hover [id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn, -.egw_tutorial_thumb:hover #home-tutorial_play.egw_tutorial_playBtn { - background-color: #FF0000; - opacity: 0.68; -} -.egw_tutorial_thumb:hover [id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn > div, -.egw_tutorial_thumb:hover #home-tutorial_play.egw_tutorial_playBtn > div { - border-left-color: white; -} -.egw_tutorial_thumb { - background-repeat: no-repeat; - background-position: -2px; - border-radius: 5px; - display: block !important; -} -[id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn, -#home-tutorial_play.egw_tutorial_playBtn { - display: block; - margin: 10%; - border: 2px solid rgba(0, 0, 0, 0.7); - -webkit-border-radius: 100%; - -moz-border-radius: 100%; - border-radius: 100%; - width: 40px; - height: 40px; - cursor: pointer; -} -[id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn > div, -#home-tutorial_play.egw_tutorial_playBtn > div { - display: block; - position: relative; - top: 10px; - left: 45%; - width: 0; - height: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-left: 10px solid rgba(0, 0, 0, 0.8); -} -[id^="egw_tutorial_"][id$="sidebox_list"] { - overflow-x: hidden; - overflow-y: auto; - max-height: 200px; -} -#list_grid_wrapper { - max-height: 200px; -} -#home-tutorial_list { - float: left; -} -#home-tutorial_list .egw_tutorial_thumb { - display: block; -} -#home-tutorial_list .th .et2_label { - font-size: 12px; - padding-left: 7px; -} -#home-tutorial_list .th #home-tutorial_apps { - margin-left: 5px; -} -#home-tutorial_list tbody td:first-child { - padding-top: 4px; -} -#home-tutorial_src { - border-left: 6px solid #E0E0E0; -} -.tutorial_popup { - background-color: white; - padding-top: 5px; - overflow-y: hidden; -} -.tutorial_videoList { - overflow-x: hidden; - overflow-y: auto; - height: 100%; - display: inline-block !important; -} -div.tutorial_iframe_wrapper { - position: absolute; - left: 225px; - right: 12px; - height: 90%; -} diff --git a/api/templates/default/def_tutorials.less b/api/templates/default/def_tutorials.less deleted file mode 100644 index bc6ccafc96..0000000000 --- a/api/templates/default/def_tutorials.less +++ /dev/null @@ -1,118 +0,0 @@ -/** - * EGroupware: CSS with less preprocessor - * - * Definitions for tutorials - * - * Please do NOT change css-files directly, instead change less-files and compile them! - * - * @link http://www.egroupware.org - * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License - * @author Hadi NAtegh - * @package phpgwapi - * @version $Id$ - */ - -span.egw_tutorial_title { - color: black; - font-weight: bold; - text-align: left; - width: 99%; - background-color: #D6DEF0; - border: 1px solid #B3B3B3; - padding-top: 4px; - padding-left: 5px; - padding-bottom: 5px; - border-radius: 2px; - text-overflow: ellipsis; - white-space: nowrap; - overflow-x: hidden; -} -.egw_tutorial_thumb:hover [id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn, -.egw_tutorial_thumb:hover #home-tutorial_play.egw_tutorial_playBtn{ - background-color: #FF0000; - opacity: 0.68; -} -.egw_tutorial_thumb:hover [id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn> div, -.egw_tutorial_thumb:hover #home-tutorial_play.egw_tutorial_playBtn> div{ - border-left-color: white; -} -.egw_tutorial_thumb { - background-repeat: no-repeat; - background-position: -2px; - border-radius: 5px; - display: block !important; -} -[id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn, -#home-tutorial_play.egw_tutorial_playBtn{ - display:block; - margin:10%; - border: 2px solid rgba(0,0,0,0.7); - -webkit-border-radius: 100%; - -moz-border-radius: 100%; - border-radius: 100%; - width: 40px; - height: 40px; - cursor: pointer; -} -[id^="egw_tutorial_"][id$="_play"].egw_tutorial_playBtn> div, -#home-tutorial_play.egw_tutorial_playBtn>div{ - display:block; - position:relative; - top: 10px; - left: 45%; - width: 0; - height: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-left: 10px solid rgba(0,0,0,0.8); -} -[id^="egw_tutorial_"][id$="sidebox_list"] { - overflow-x: hidden; - overflow-y: auto; - max-height: 200px; -} -#list_grid_wrapper { - max-height: 200px; -} - - -#home-tutorial_list { - float:left; - .egw_tutorial_thumb { - display:block; - } - .th { - .et2_label { - font-size: 12px; - padding-left: 7px; - } - #home-tutorial_apps { - margin-left: 5px; - } - } - tbody{ - td:first-child { - padding-top:4px; - } - } -} -#home-tutorial_src { - border-left: 6px solid #E0E0E0; -} -.tutorial_popup { - background-color:white; - padding-top: 5px; - overflow-y: hidden; -} -.tutorial_videoList { - overflow-x: hidden; - overflow-y: auto; - height: 100%; - display: inline-block !important; -} -div.tutorial_iframe_wrapper { - position:absolute; - left:225px; - right:12px; - height:90%; -} \ No newline at end of file diff --git a/api/templates/default/egw_tutorial.xet b/api/templates/default/egw_tutorial.xet deleted file mode 100644 index c3f445d6b8..0000000000 --- a/api/templates/default/egw_tutorial.xet +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/api/templates/default/tutorial.xet b/api/templates/default/tutorial.xet deleted file mode 100644 index c8f507eeb4..0000000000 --- a/api/templates/default/tutorial.xet +++ /dev/null @@ -1,63 +0,0 @@ - - - - -