Monotone-Parent: 0d7ec7c80044ea713be016f5438ae7893c4ef140

Monotone-Revision: 65abf28d09d0ab2a977e4b818473c959e2670132

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-10-17T21:03:39
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2007-10-17 21:03:39 +00:00
parent eab8fb4f40
commit 901304d722
9 changed files with 251 additions and 44 deletions

View File

@ -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.

View File

@ -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

View File

@ -139,9 +139,64 @@
"MoveTo" = "Move &hellip;";
"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!";

View File

@ -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.";

View File

@ -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!";

View File

@ -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;

View File

@ -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";

View File

@ -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>

View File

@ -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, "-",