diff --git a/admin/inc/class.admin_ui.inc.php b/admin/inc/class.admin_ui.inc.php index 52a1cbc0ec..81536a9ff6 100644 --- a/admin/inc/class.admin_ui.inc.php +++ b/admin/inc/class.admin_ui.inc.php @@ -488,7 +488,15 @@ class admin_ui admin_ui::$hook_data[$appname] = $file2 ? $file2 : $file; //error_log(__METHOD__."(".array2string(func_get_args()).")"); } - return array_merge($GLOBALS['egw']->hooks->process('admin', array('admin')), self::$hook_data); + self::$hook_data = array_merge($GLOBALS['egw']->hooks->process('admin', array('admin')), self::$hook_data); + + // sort apps alphabetic by their title / translation of app-name + uksort(self::$hook_data, function($a, $b) + { + return strcasecmp(lang($a), lang($b)); + }); + + return self::$hook_data; } /** diff --git a/admin/js/app.js b/admin/js/app.js index 0d6f17f268..8b300e099d 100644 --- a/admin/js/app.js +++ b/admin/js/app.js @@ -118,6 +118,12 @@ app.classes.admin = AppJS.extend( this.egw.message(this.egw.lang('Please submit (or postpone) statistic first'), 'info'); return; // do not allow to leave statistics submit } + // url outside EGroupware eg. eSyncPro linking to wikipedia + if (_url && _url.indexOf(this.egw.webserverUrl) == -1) + { + window.open(_url, '_blank'); + return; + } if (_url) { this.iframe.set_src(_url);