From 87c4f0ff9ca4e62164b216eb08ab64a92a845b8c Mon Sep 17 00:00:00 2001 From: nathangray Date: Tue, 16 Jul 2019 13:44:20 -0600 Subject: [PATCH] Filemanager - Add some actions for merge-print shares into email templates --- api/src/Vfs/Sharing.php | 51 +++++++++++++++++++ .../inc/class.filemanager_merge.inc.php | 5 ++ filemanager/inc/class.filemanager_ui.inc.php | 37 +++++--------- filemanager/js/app.js | 13 ----- 4 files changed, 68 insertions(+), 38 deletions(-) diff --git a/api/src/Vfs/Sharing.php b/api/src/Vfs/Sharing.php index 6e323669ac..0f7ff96a4a 100644 --- a/api/src/Vfs/Sharing.php +++ b/api/src/Vfs/Sharing.php @@ -429,6 +429,57 @@ class Sharing extends \EGroupware\Api\Sharing Vfs::$is_root = false; } + /** + * Get actions for sharing an entry from filemanager + * + * @param string $appname + * @param int $group Current menu group + */ + public static function get_actions($appname, $group = 6) + { + $actions = parent::get_actions('filemanager', $group); + + // This one makes no sense for filemanager + unset($actions['share']['children']['shareFiles']); + + // Move these around to mesh nicely if collabora is available + $actions['share']['children']['shareReadonlyLink']['group'] = 2; + $actions['share']['children']['shareReadonlyLink']['order'] = 22; + $actions['share']['children']['shareWritable']['group'] = 3; + + // Add in merge to document + if (class_exists($appname.'_merge')) + { + $documents = call_user_func(array($appname.'_merge', 'document_action'), + $GLOBALS['egw_info']['user']['preferences'][$appname]['document_dir'], + 2, 'Insert in document', 'shareDocument_' + ); + $documents['order'] = 25; + + // Mail only + if ($documents['children']['message/rfc822']) + { + // Just email already filtered out + $documents['children'] = $documents['children']['message/rfc822']['children']; + } + foreach($documents['children'] as $key => &$document) + { + if(strpos($document['target'],'compose_') === FALSE) + { + unset($documents['children'][$key]); + continue; + } + + $document['allowOnMultiple'] = true; + $document['onExecute'] = "javaScript:app.$appname.share_merge"; + } + $documents['enabled'] = $documents['enabled'] && (boolean)$documents['children'] && !!($GLOBALS['egw_info']['user']['apps']['stylite']); + $actions['share']['children']['shareDocuments'] = $documents; + } + + return $actions; + } + /** * Generate link from share or share-token * diff --git a/filemanager/inc/class.filemanager_merge.inc.php b/filemanager/inc/class.filemanager_merge.inc.php index 8dd3f071f8..f984ce9f3c 100644 --- a/filemanager/inc/class.filemanager_merge.inc.php +++ b/filemanager/inc/class.filemanager_merge.inc.php @@ -238,6 +238,11 @@ class filemanager_merge extends Api\Storage\Merge { return $session; } + else if (($session = \EGroupware\Api\Cache::getSession(Api\Sharing::class, "$app::$id")) && + substr($session['share_path'], -strlen($path)) === $path) + { + return $session; + } // Need to create the share here. // No way to know here if it should be writable, or who it's going to $mode = /* ? ? Sharing::WRITABLE :*/ Api\Sharing::READONLY; diff --git a/filemanager/inc/class.filemanager_ui.inc.php b/filemanager/inc/class.filemanager_ui.inc.php index 811cccb37f..d8aa76e617 100644 --- a/filemanager/inc/class.filemanager_ui.inc.php +++ b/filemanager/inc/class.filemanager_ui.inc.php @@ -176,29 +176,6 @@ class filemanager_ui 'onExecute' => Api\Header\UserAgent::mobile()?'javaScript:app.filemanager.viewEntry':'javaScript:app.filemanager.editprefs', 'mobileViewTemplate' => 'file?'.filemtime(Api\Etemplate\Widget\Template::rel2path('/filemanager/templates/mobile/file.xet')) ), - 'share' => array( - 'caption' => lang('Share files'), - 'icon' => 'filemanager/mail_post_to', - 'group' => $group, - 'children' => array( - 'shareReadonlyLink' => array( - 'caption' => lang('Readonly Share link'), - 'group' => 1, - 'icon' => 'share', - 'allowOnMultiple' => false, - 'order' => 11, - 'onExecute' => 'javaScript:app.filemanager.share_link' - ), - 'shareWritableLink' => array( - 'caption' => lang('Writable Share link'), - 'group' => 1, - 'icon' => 'share', - 'allowOnMultiple' => false, - 'enableClass' => 'isDir', - 'order' => 11, - 'onExecute' => 'javaScript:app.filemanager.share_link' - )), - ), 'saveas' => array( 'caption' => lang('Save as'), 'group' => $group, @@ -238,6 +215,7 @@ class filemanager_ui 'order' => 10, 'onExecute' => 'javaScript:app.filemanager.copy_link' ), + 'share' => EGroupware\Api\Vfs\Sharing::get_actions('filemanager', ++$group)['share'], 'documents' => filemanager_merge::document_action( $GLOBALS['egw_info']['user']['preferences']['filemanager']['document_dir'], ++$group, 'Insert in document', 'document_', @@ -287,17 +265,26 @@ class filemanager_ui ); if (isset($GLOBALS['egw_info']['user']['apps']['mail'])) { + $actions['share']['children']['share_mail'] = array( + 'caption' => lang('Mail'), + 'icon' => 'mail', + 'group' => 1, + 'order' => 0, + 'allowOnMultiple' => false, + ); foreach(Vfs\Sharing::$modes as $mode => $data) { - $actions['share']['children']['mail_'.$mode] = array( + $actions['share']['children']['share_mail']['children']['mail_'.$mode] = array( 'caption' => $data['label'], 'hint' => $data['title'], + 'icon' => $mode == Vfs\Sharing::ATTACH ? + 'mail/attach' : 'api/link', 'group' => 2, 'onExecute' => 'javaScript:app.filemanager.mail', ); if ($mode == Vfs\Sharing::ATTACH || $mode == Vfs\Sharing::LINK) { - $actions['share']['children']['mail_'.$mode]['disableClass'] = 'isDir'; + $actions['share']['children']['share_mail']['children']['mail_'.$mode]['disableClass'] = 'isDir'; } } } diff --git a/filemanager/js/app.js b/filemanager/js/app.js index a9fa702024..14de6b12e2 100644 --- a/filemanager/js/app.js +++ b/filemanager/js/app.js @@ -1174,19 +1174,6 @@ app.classes.filemanager = AppJS.extend( } }, - /** - * create a share-link for the given file or directory - * @param {object} _action egw actions - * @param {object} _senders selected nm row - * @returns {Boolean} returns false if not successful - */ - share_link: function(_action, _senders){ - var path = this.id2path(_senders[0].id); - egw.json('filemanager_ui::ajax_action', [_action.id, path], - this._share_link_callback, this, true, this).sendRequest(); - return true; - }, - /** * Share-link callback * @param {object} _data