Monotone-Parent: 0d7ec7c80044ea713be016f5438ae7893c4ef140
Monotone-Revision: 65abf28d09d0ab2a977e4b818473c959e2670132 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-10-17T21:03:39 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
eab8fb4f40
commit
901304d722
11
ChangeLog
11
ChangeLog
|
@ -1,5 +1,16 @@
|
|||
2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
|
||||
([SOGoMailAccount -sentFolderNameInContext:])
|
||||
([SOGoMailAccount -trashFolderNameInContext:]): modified to take
|
||||
the user settings into account.
|
||||
|
||||
* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
|
||||
([UIxMailFolderActions -setAsSentFolderAction])
|
||||
([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
|
||||
that change the purpose of the active folder to "Sent", "Drafts"
|
||||
or "Trash".
|
||||
|
||||
* UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
|
||||
returns the subject as quoted-printable.
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
#import <NGExtensions/NSNull+misc.h>
|
||||
#import <NGImap4/NGImap4Connection.h>
|
||||
|
||||
#import <SoObjects/SOGo/SOGoUser.h>
|
||||
|
||||
#import "SOGoMailFolder.h"
|
||||
#import "SOGoMailManager.h"
|
||||
#import "SOGoDraftsFolder.h"
|
||||
|
@ -333,10 +335,32 @@ static BOOL useAltNamespace = NO;
|
|||
return [NSString stringWithFormat: @"folder%@", inboxFolderName];
|
||||
}
|
||||
|
||||
- (NSString *) _userFolderNameWithPurpose: (NSString *) purpose
|
||||
{
|
||||
NSUserDefaults *ud;
|
||||
NSMutableDictionary *mailSettings;
|
||||
NSString *folderName;
|
||||
|
||||
folderName = nil;
|
||||
ud = [[context activeUser] userSettings];
|
||||
mailSettings = [ud objectForKey: @"Mail"];
|
||||
if (mailSettings)
|
||||
folderName
|
||||
= [mailSettings objectForKey: [NSString stringWithFormat: @"%@Folder",
|
||||
purpose]];
|
||||
|
||||
return folderName;
|
||||
}
|
||||
|
||||
- (NSString *) draftsFolderNameInContext: (id) _ctx
|
||||
{
|
||||
/* SOGo managed folder */
|
||||
return [NSString stringWithFormat: @"folder%@", draftsFolderName];
|
||||
NSString *folderName;
|
||||
|
||||
folderName = [self _userFolderNameWithPurpose: @"Drafts"];
|
||||
if (!folderName)
|
||||
folderName = draftsFolderName;
|
||||
|
||||
return [NSString stringWithFormat: @"folder%@", folderName];
|
||||
}
|
||||
|
||||
- (NSString *) sieveFolderNameInContext: (id) _ctx
|
||||
|
@ -346,12 +370,24 @@ static BOOL useAltNamespace = NO;
|
|||
|
||||
- (NSString *) sentFolderNameInContext: (id)_ctx
|
||||
{
|
||||
return [NSString stringWithFormat: @"folder%@", sentFolderName];
|
||||
NSString *folderName;
|
||||
|
||||
folderName = [self _userFolderNameWithPurpose: @"Sent"];
|
||||
if (!folderName)
|
||||
folderName = sentFolderName;
|
||||
|
||||
return [NSString stringWithFormat: @"folder%@", folderName];
|
||||
}
|
||||
|
||||
- (NSString *) trashFolderNameInContext: (id)_ctx
|
||||
{
|
||||
return [NSString stringWithFormat: @"folder%@", trashFolderName];
|
||||
NSString *folderName;
|
||||
|
||||
folderName = [self _userFolderNameWithPurpose: @"Trash"];
|
||||
if (!folderName)
|
||||
folderName = trashFolderName;
|
||||
|
||||
return [NSString stringWithFormat: @"folder%@", folderName];
|
||||
}
|
||||
|
||||
- (SOGoMailFolder *) inboxFolderInContext: (id) _ctx
|
||||
|
|
|
@ -139,9 +139,64 @@
|
|||
|
||||
"MoveTo" = "Move …";
|
||||
|
||||
"error_missingsubject" = "Missing Subject";
|
||||
"error_missingrecipients" = "Missing Recipients";
|
||||
"error_validationfailed" = "Validation failed";
|
||||
/* Address Popup menu */
|
||||
"Add to Address Book..." = "Add to Address Book...";
|
||||
"Compose Mail To" = "Compose Mail To";
|
||||
"Create Filter From Message..." = "Create Filter From Message...";
|
||||
|
||||
/* Mailbox popup menus */
|
||||
"Open in New Mail Window" = "Open in New Mail Window";
|
||||
"Copy Folder Location" = "Copy Folder Location";
|
||||
"Subscribe..." = "Subscribe...";
|
||||
"Mark Folder Read..." = "Mark Folder Read...";
|
||||
"New Folder..." = "New Folder...";
|
||||
"Compact This Folder" = "Compact This Folder";
|
||||
"Search Messages..." = "Search Messages...";
|
||||
"Sharing..." = "Sharing...";
|
||||
"New Subfolder..." = "New Subfolder...";
|
||||
"Rename Folder..." = "Rename Folder...";
|
||||
"Delete Folder" = "Delete Folder";
|
||||
"Use This Folder For" = "Use This Folder For";
|
||||
"Get Messages for Account" = "Get Messages for Account";
|
||||
|
||||
/* Use This Folder menu */
|
||||
"Sent Messages" = "Sent Messages";
|
||||
"Drafts" = "Drafts";
|
||||
"Deleted Messages" = "Deleted Messages";
|
||||
|
||||
/* Message list popup menu */
|
||||
"Open Message In New Window" = "Open Message In New Window";
|
||||
"Reply to Sender Only" = "Reply to Sender Only";
|
||||
"Reply to All" = "Reply to All";
|
||||
"Forward" = "Forward";
|
||||
"Edit As New..." = "Edit As New...";
|
||||
"Move To" = "Move To";
|
||||
"Copy To" = "Copy To";
|
||||
"Label" = "Label";
|
||||
"Mark" = "Mark";
|
||||
"Save As..." = "Save As...";
|
||||
"Print Preview" = "Print Preview";
|
||||
"View Message Source" = "View Message Source";
|
||||
"Print..." = "Print...";
|
||||
"Delete Message" = "Delete Message";
|
||||
|
||||
/* Label popup menu */
|
||||
"None" = "None";
|
||||
"Important" = "Important";
|
||||
"Work" = "Work";
|
||||
"Personal" = "Personal";
|
||||
"To Do" = "To Do";
|
||||
"Later" = "Later";
|
||||
|
||||
/* Mark popup menu */
|
||||
"As Read" = "As Read";
|
||||
"Thread As Read" = "Thread As Read";
|
||||
"As Read By Date..." = "As Read By Date...";
|
||||
"All Read" = "All Read";
|
||||
"Flag" = "Flag";
|
||||
"As Junk" = "As Junk";
|
||||
"As Not Junk" = "As Not Junk";
|
||||
"Run Junk Mail Controls" = "Run Junk Mail Controls";
|
||||
|
||||
/* Folder operations */
|
||||
"Name :" = "Name :";
|
||||
|
@ -156,3 +211,6 @@
|
|||
"Please select a message." = "Please select a message.";
|
||||
"Please select a message to print." = "Please select a message to print.";
|
||||
"Please select only one message to print." = "Please select only one message to print.";
|
||||
|
||||
"You need to choose a non-virtual folder!" = "You need to choose a non-virtual folder!";
|
||||
"You need to choose a root subfolder!" = "You need to choose a root subfolder!";
|
||||
|
|
|
@ -157,8 +157,14 @@
|
|||
"New Subfolder..." = "Nouveau sous-dossier...";
|
||||
"Rename Folder..." = "Renommer le dossier...";
|
||||
"Delete Folder" = "Supprimer le dossier...";
|
||||
"Use This Folder For" = "Utiliser ce dossier pour";
|
||||
"Get Messages for Account" = "Relever les messages de ce compte";
|
||||
|
||||
/* Use This Folder menu */
|
||||
"Sent Messages" = "les message envoyés";
|
||||
"Drafts" = "les brouillons";
|
||||
"Deleted Messages" = "les message effacés";
|
||||
|
||||
/* Message list popup menu */
|
||||
"Open Message In New Window" = "Ouvrir dans une nouvelle fenétre";
|
||||
"Reply to Sender Only" = "Répondre à l'expéditeur";
|
||||
|
@ -206,3 +212,6 @@
|
|||
"Please select a message." = "Veuillez sélectionner un message.";
|
||||
"Please select a message to print." = "Veuillez sélectionner un message à imprimer.";
|
||||
"Please select only one message to print." = "Veuillez ne sélectionner qu'un seul message à imprimer.";
|
||||
|
||||
"You need to choose a non-virtual folder!" = "Vous devez choisir un dossier non-virtuel.";
|
||||
"You need to choose a root subfolder!" = "Vous devez choisir un sous-dossier de la racine.";
|
||||
|
|
|
@ -140,8 +140,14 @@
|
|||
"New Subfolder..." = "Neuer Unterordner...";
|
||||
"Rename Folder..." = "Umbenennen...";
|
||||
"Delete Folder" = "Löschen";
|
||||
"Use This Folder For" = "Use This Folder For";
|
||||
"Get Messages for Account" = "Neue Nachrichten empfangen";
|
||||
|
||||
/* Use This Folder menu */
|
||||
"Sent Messages" = "Sent Messages";
|
||||
"Drafts" = "Drafts";
|
||||
"Deleted Messages" = "Deleted Messages";
|
||||
|
||||
/* Message list popup menu */
|
||||
"Open Message In New Window" = "In neuem Fenster õffnen";
|
||||
"Reply to Sender Only" = "Antworten nur an Absender";
|
||||
|
@ -189,3 +195,6 @@
|
|||
"Please select a message." = "Sie müssen eine Nachricht auswählen.";
|
||||
"Please select a message to print." = "Sie müssen eine Nachricht zum Drucken auswählen.";
|
||||
"Please select only one message to print." = "Bitte wählen Sie nur eine Nachricht zum Drucken aus.";
|
||||
|
||||
"You need to choose a non-virtual folder!" = "You need to choose a non-virtual folder!";
|
||||
"You need to choose a root subfolder!" = "You need to choose a root subfolder!";
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSEnumerator.h>
|
||||
#import <Foundation/NSURL.h>
|
||||
#import <Foundation/NSUserDefaults.h>
|
||||
|
||||
#import <NGObjWeb/WOContext.h>
|
||||
#import <NGObjWeb/WOContext+SoObjects.h>
|
||||
#import <NGObjWeb/WOResponse.h>
|
||||
#import <NGObjWeb/WORequest.h>
|
||||
#import <NGImap4/NGImap4Connection.h>
|
||||
|
@ -35,6 +37,7 @@
|
|||
#import <SoObjects/Mailer/SOGoTrashFolder.h>
|
||||
#import <SoObjects/Mailer/SOGoMailAccount.h>
|
||||
#import <SoObjects/SOGo/NSObject+Utilities.h>
|
||||
#import <SoObjects/SOGo/SOGoUser.h>
|
||||
|
||||
#import <UI/Common/WODirectAction+SOGo.h>
|
||||
|
||||
|
@ -172,6 +175,55 @@
|
|||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) _setFolderPurpose: (NSString *) purpose
|
||||
{
|
||||
SOGoMailFolder *co;
|
||||
WOResponse *response;
|
||||
NSUserDefaults *ud;
|
||||
NSMutableDictionary *mailSettings;
|
||||
|
||||
co = [self clientObject];
|
||||
if ([NSStringFromClass ([co class]) isEqualToString: @"SOGoMailFolder"])
|
||||
{
|
||||
ud = [[context activeUser] userSettings];
|
||||
mailSettings = [ud objectForKey: @"Mail"];
|
||||
if (!mailSettings)
|
||||
{
|
||||
mailSettings = [NSMutableDictionary new];
|
||||
[mailSettings autorelease];
|
||||
}
|
||||
[ud setObject: mailSettings forKey: @"Mail"];
|
||||
[mailSettings setObject: [co relativeImap4Name]
|
||||
forKey: [NSString stringWithFormat: @"%@Folder",
|
||||
purpose]];
|
||||
[ud synchronize];
|
||||
response = [self responseWith204];
|
||||
}
|
||||
else
|
||||
{
|
||||
response = [self responseWithStatus: 500];
|
||||
[response
|
||||
appendContentString: @"Unable to change the purpose of this folder."];
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
- (WOResponse *) setAsDraftsFolderAction
|
||||
{
|
||||
return [self _setFolderPurpose: @"Drafts"];
|
||||
}
|
||||
|
||||
- (WOResponse *) setAsSentFolderAction
|
||||
{
|
||||
return [self _setFolderPurpose: @"Sent"];
|
||||
}
|
||||
|
||||
- (WOResponse *) setAsTrashFolderAction
|
||||
{
|
||||
return [self _setFolderPurpose: @"Trash"];
|
||||
}
|
||||
|
||||
- (WOResponse *) expungeAction
|
||||
{
|
||||
NSException *error;
|
||||
|
|
|
@ -140,6 +140,21 @@
|
|||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "deleteFolder";
|
||||
};
|
||||
setAsDraftsFolder = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "setAsDraftsFolder";
|
||||
};
|
||||
setAsSentFolder = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "setAsSentFolder";
|
||||
};
|
||||
setAsTrashFolder = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "setAsTrashFolder";
|
||||
};
|
||||
userRights = {
|
||||
protectedBy = "ReadAcls";
|
||||
pageName = "UIxMailUserRightsEditor";
|
||||
|
|
|
@ -66,11 +66,20 @@
|
|||
<li><var:string label:value="Rename Folder..." /></li>
|
||||
<li><var:string label:value="Compact This Folder" /></li>
|
||||
<li><var:string label:value="Delete Folder" /></li>
|
||||
<li><var:string label:value="Use This Folder For" /></li>
|
||||
<li><!-- separator --></li>
|
||||
<li><var:string label:value="Search Messages..." /></li>
|
||||
<li><var:string label:value="Sharing..." /></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="menu" id="folderTypeMenu">
|
||||
<ul>
|
||||
<li><var:string label:value="Sent Messages" /></li>
|
||||
<li><var:string label:value="Drafts" /></li>
|
||||
<li><var:string label:value="Deleted Messages" /></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="menu" id="addressMenu">
|
||||
<ul>
|
||||
|
|
|
@ -196,31 +196,6 @@ function ml_lowlight(sender) {
|
|||
}
|
||||
|
||||
|
||||
/* folder operations */
|
||||
|
||||
function ctxFolderAdd(sender) {
|
||||
var folderName;
|
||||
|
||||
folderName = prompt("Foldername: ");
|
||||
if (folderName == undefined)
|
||||
return false;
|
||||
if (folderName == "")
|
||||
return false;
|
||||
|
||||
// TODO: should use a form-POST or AJAX
|
||||
window.location.href = "createFolder?name=" + escape(folderName);
|
||||
return false;
|
||||
}
|
||||
|
||||
function ctxFolderDelete(sender) {
|
||||
if (!confirm("Delete current folder?"))
|
||||
return false;
|
||||
|
||||
// TODO: should use a form-POST or AJAX
|
||||
window.location.href = "deleteFolder";
|
||||
return false;
|
||||
}
|
||||
|
||||
/* bulk delete of messages */
|
||||
|
||||
function uixDeleteSelectedMessages(sender) {
|
||||
|
@ -1135,8 +1110,10 @@ function updateMailboxTreeInPage() {
|
|||
var tree = $("mailboxTree");
|
||||
var nodes = document.getElementsByClassName("node", tree);
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
Event.observe(nodes[i], "click", onMailboxTreeItemClick.bindAsEventListener(nodes[i]));
|
||||
Event.observe(nodes[i], "contextmenu", onFolderMenuClick.bindAsEventListener(nodes[i]));
|
||||
Event.observe(nodes[i], "click",
|
||||
onMailboxTreeItemClick.bindAsEventListener(nodes[i]));
|
||||
Event.observe(nodes[i], "contextmenu",
|
||||
onFolderMenuClick.bindAsEventListener(nodes[i]));
|
||||
if (!inboxFound
|
||||
&& nodes[i].parentNode.getAttribute("datatype") == "inbox") {
|
||||
openInbox(nodes[i]);
|
||||
|
@ -1164,6 +1141,7 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
|||
menuDIV.setAttribute("id", prefix + "Submenu");
|
||||
var menu = document.createElement("ul");
|
||||
menuDIV.appendChild(menu);
|
||||
document.body.appendChild(menuDIV);
|
||||
|
||||
var callbacks = new Array();
|
||||
if (mailbox.type != "account") {
|
||||
|
@ -1183,11 +1161,8 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
|||
menu.appendChild(newNode);
|
||||
if (child.children.length > 0) {
|
||||
var newPrefix = prefix + submenuCount;
|
||||
var newSubmenu = generateMenuForMailbox(child,
|
||||
newPrefix,
|
||||
callback);
|
||||
document.body.appendChild(newSubmenu);
|
||||
callbacks.push(newPrefix + "Submenu");
|
||||
var newSubmenuId = generateMenuForMailbox(child, newPrefix, callback);
|
||||
callbacks.push(newSubmenuId);
|
||||
submenuCount++;
|
||||
}
|
||||
else {
|
||||
|
@ -1197,7 +1172,7 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
|
|||
}
|
||||
initMenu(menuDIV, callbacks);
|
||||
|
||||
return menuDIV;
|
||||
return menuDIV.getAttribute("id");
|
||||
}
|
||||
|
||||
function updateMailboxMenus() {
|
||||
|
@ -1224,10 +1199,9 @@ function updateMailboxMenus() {
|
|||
var menuEntry = mailboxMenuNode("account", mailAccounts[i]);
|
||||
menu.appendChild(menuEntry);
|
||||
var mailbox = accounts[mailAccounts[i]];
|
||||
var newSubmenu = generateMenuForMailbox(mailbox,
|
||||
var newSubmenuId = generateMenuForMailbox(mailbox,
|
||||
key, mailboxActions[key]);
|
||||
document.body.appendChild(newSubmenu);
|
||||
submenuIds.push(newSubmenu.getAttribute("id"));
|
||||
submenuIds.push(newSubmenuId);
|
||||
}
|
||||
initMenu(menuDIV, submenuIds);
|
||||
}
|
||||
|
@ -1346,6 +1320,34 @@ function onMenuEmptyTrash(event) {
|
|||
deleteCachedMessage(folderID + "/" + msgID);
|
||||
}
|
||||
|
||||
function _onMenuChangeToXXXFolder(event, folder) {
|
||||
var type = document.menuTarget.getAttribute("datatype");
|
||||
if (type == "additional")
|
||||
window.alert(labels["You need to choose a non-virtual folder!"]);
|
||||
else {
|
||||
var folderID = document.menuTarget.getAttribute("dataname");
|
||||
var number = folderID.split("/").length;
|
||||
if (number > 3)
|
||||
window.alert(labels["You need to choose a root subfolder!"]);
|
||||
else {
|
||||
var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder";
|
||||
triggerAjaxRequest(urlstr, folderOperationCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onMenuChangeToDraftsFolder(event) {
|
||||
return _onMenuChangeToXXXFolder(event, "Drafts");
|
||||
}
|
||||
|
||||
function onMenuChangeToSentFolder(event) {
|
||||
return _onMenuChangeToXXXFolder(event, "Sent");
|
||||
}
|
||||
|
||||
function onMenuChangeToTrashFolder(event) {
|
||||
return _onMenuChangeToXXXFolder(event, "Trash");
|
||||
}
|
||||
|
||||
function folderOperationCallback(http) {
|
||||
if (http.readyState == 4
|
||||
&& isHttpStatus204(http.status))
|
||||
|
@ -1381,7 +1383,9 @@ function getMenus() {
|
|||
onMenuCreateFolder,
|
||||
onMenuRenameFolder,
|
||||
onMenuExpungeFolder,
|
||||
onMenuDeleteFolder, "-", null,
|
||||
onMenuDeleteFolder,
|
||||
"folderTypeMenu",
|
||||
"-", null,
|
||||
onMenuSharing);
|
||||
menus["addressMenu"] = new Array(newContactFromEmail, newEmailTo, null);
|
||||
menus["messageListMenu"] = new Array(onMenuOpenMessage, "-",
|
||||
|
@ -1403,6 +1407,10 @@ function getMenus() {
|
|||
null, onMenuViewMessageSource,
|
||||
null, onPrintCurrentMessage,
|
||||
onMenuDeleteMessage);
|
||||
menus["folderTypeMenu"] = new Array(onMenuChangeToSentFolder,
|
||||
onMenuChangeToDraftsFolder,
|
||||
onMenuChangeToTrashFolder);
|
||||
|
||||
menus["label-menu"] = new Array(null, "-", null , null, null, null , null,
|
||||
null);
|
||||
menus["mark-menu"] = new Array(null, null, null, null, "-", null, "-",
|
||||
|
|
Loading…
Reference in New Issue