diff --git a/WebRoot/img/mail-recall/ImgMessageRecallClassic.png b/WebRoot/img/mail-recall/ImgMessageRecallClassic.png new file mode 100644 index 0000000000..a321042b46 Binary files /dev/null and b/WebRoot/img/mail-recall/ImgMessageRecallClassic.png differ diff --git a/WebRoot/js/zimbraMail/share/controller/ZmListController.js b/WebRoot/js/zimbraMail/share/controller/ZmListController.js index 0f3b250ff2..11b5e3ad08 100644 --- a/WebRoot/js/zimbraMail/share/controller/ZmListController.js +++ b/WebRoot/js/zimbraMail/share/controller/ZmListController.js @@ -578,6 +578,18 @@ function() { return folder.nId == ZmFolder.ID_OUTBOX; }; +/** + * returns true if the search folder is sent + */ +ZmListController.prototype.isSentFolder = +function() { + var folder = this._getSearchFolder(); + if (!folder) { + return false; + } + return folder.nId == ZmFolder.ID_SENT; +}; + /** * returns true if the search folder is sync failures */ diff --git a/WebRoot/js/zimbraMail/share/model/ZmSearch.js b/WebRoot/js/zimbraMail/share/model/ZmSearch.js index 3f679035a0..8001188dcc 100644 --- a/WebRoot/js/zimbraMail/share/model/ZmSearch.js +++ b/WebRoot/js/zimbraMail/share/model/ZmSearch.js @@ -421,7 +421,7 @@ function(params) { if (this.types.contains(ZmItem.MSG) || this.types.contains(ZmItem.CONV)) { // special handling for showing participants ("To" instead of "From") var folder = this.folderId && appCtxt.getById(this.folderId); - request.recip = (folder && folder.isOutbound()) ? "2" : "0"; + request.recip = (folder && folder.isOutbound()) ? (this.types.contains(ZmItem.MSG) ? "3" : "2") : "0"; } if (this.types.contains(ZmItem.CONV)) { diff --git a/WebRoot/js/zimbraMail/share/model/ZmSetting.js b/WebRoot/js/zimbraMail/share/model/ZmSetting.js index 62a68079f0..cd75d9da55 100644 --- a/WebRoot/js/zimbraMail/share/model/ZmSetting.js +++ b/WebRoot/js/zimbraMail/share/model/ZmSetting.js @@ -267,7 +267,10 @@ ZmSetting.MAIL_UPSELL_ENABLED = "MAIL_UPSELL_ENABLED"; ZmSetting.SOCIAL_EXTERNAL_ENABLED = "SOCIAL_EXTERNAL_ENABLED"; ZmSetting.SOCIAL_EXTERNAL_URL = "SOCIAL_EXTERNAL_URL"; ZmSetting.VOICE_UPSELL_ENABLED = "VOICE_UPSELL_ENABLED"; -ZmSetting.SHARING_ENABLED = "SHARING_ENABLED"; +ZmSetting.SHARING_ENABLED = "SHARING_ENABLED"; + +ZmSetting.MAIL_RECALL_ENABLED = "MAIL_RECALL_ENABLED"; +ZmSetting.MAIL_RECALL_TIME = "MAIL_RECALL_TIME"; //user selected font ZmSetting.FONT_CLASSIC = "classic"; diff --git a/WebRoot/js/zimbraMail/share/model/ZmSettings.js b/WebRoot/js/zimbraMail/share/model/ZmSettings.js index c2a39d13de..9c046743ab 100644 --- a/WebRoot/js/zimbraMail/share/model/ZmSettings.js +++ b/WebRoot/js/zimbraMail/share/model/ZmSettings.js @@ -992,6 +992,8 @@ function() { this.registerSetting("PASSWORD_RECOVERY_CODE_VALIDITY", {name:"zimbraRecoveryAccountCodeValidity", type:ZmSetting.T_COS, dataType:ZmSetting.D_STRING}); this.registerSetting("PASSWORD_RECOVERY_SUSPENSION_TIME", {name:"zimbraFeatureResetPasswordSuspensionTime", type:ZmSetting.T_COS, dataType:ZmSetting.D_STRING}); this.registerSetting("SHARED_FOLDER_MOBILE_SYNC_ENABLED", {name:"zimbraFeatureSharedFolderMobileSyncEnabled", type:ZmSetting.T_COS, dataType:ZmSetting.D_BOOLEAN}); + this.registerSetting("MAIL_RECALL_ENABLED", {name:"zimbraFeatureMailRecallEnabled", type: ZmSetting.T_COS, dataType: ZmSetting.D_BOOLEAN, defaultValue:false}); + this.registerSetting("MAIL_RECALL_TIME", {name:"zimbraFeatureMailRecallTime", type:ZmSetting.T_COS, dataType:ZmSetting.D_INT, defaultValue:30}); // user metadata (included with COS since the user can't change them) this.registerSetting("LICENSE_STATUS", {type:ZmSetting.T_COS, defaultValue:ZmSetting.LICENSE_GOOD}); diff --git a/WebRoot/js/zimbraMail/share/view/ZmActionMenu.js b/WebRoot/js/zimbraMail/share/view/ZmActionMenu.js index 35b9e4efc3..1d53f73c5b 100644 --- a/WebRoot/js/zimbraMail/share/view/ZmActionMenu.js +++ b/WebRoot/js/zimbraMail/share/view/ZmActionMenu.js @@ -100,8 +100,8 @@ function(id, params, elementId) { }; ZmActionMenu.prototype.addOp = -function(id) { - ZmOperation.addOperation(this, id, this._menuItems); +function(id, index) { + ZmOperation.addOperation(this, id, this._menuItems, index); }; ZmActionMenu.prototype.removeOp =