See ChangeLog

Monotone-Parent: e0268121f41f4a9ac6226ffcf9e54efb36a9d2d3
Monotone-Revision: 5ca46341daec14901e918e991004a22b7ada9f49

Monotone-Author: ludovic@Sophos.ca
Monotone-Date: 2008-09-28T14:02:40
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Ludovic Marcotte 2008-09-28 14:02:40 +00:00
parent 7693e9df82
commit 26e2ab38de
15 changed files with 700 additions and 340 deletions

View File

@ -1,3 +1,23 @@
2008-09-28 Ludovic Marcotte <lmarcotte@inverse.ca>
* Modified the following files:
SoObjects/Mailer/SOGoDraftObject.m
UI/MailerUI/Dutch.lproj/Localizable.strings
UI/MailerUI/English.lproj/Localizable.strings
UI/MailerUI/French.lproj/Localizable.strings
UI/MailerUI/German.lproj/Localizable.strings
UI/MailerUI/Italian.lproj/Localizable.strings
UI/MailerUI/Spanish.lproj/Localizable.strings
UI/MailerUI/Toolbars/SOGoDraftObject.toolbar
UI/MailerUI/UIxMailEditor.m
UI/MailerUI/UIxMailListView.m
UI/Templates/MailerUI/UIxMailEditor.wox
UI/Templates/MailerUI/UIxMailListView.wox
UI/WebServerResources/UIxMailEditor.js
in order to add support for X-Priority in emails.
* Regenerated the sope-patchset in order to add
capabilities to parse BODY[HEADER.FIELDS ...] responses.
2008-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/SOGoLDAPUserDefaults.m ([SOGoLDAPUserDefaults

File diff suppressed because it is too large Load Diff

View File

@ -181,7 +181,7 @@ static BOOL showTextAttachmentsInline = NO;
{
id headerValue;
unsigned int count;
NSString *messageID;
NSString *messageID, *priority;
for (count = 0; count < 8; count++)
{
@ -199,6 +199,29 @@ static BOOL showTextAttachmentsInline = NO;
messageID = [self _generateMessageID];
[headers setObject: messageID forKey: @"message-id"];
}
priority = [newHeaders objectForKey: @"priority"];
if (!priority || [priority isEqualToString: @"NORMAL"])
{
[headers removeObjectForKey: @"X-Priority"];
}
else if ([priority isEqualToString: @"HIGHEST"])
{
[headers setObject: @"1 (Highest)" forKey: @"X-Priority"];
}
else if ([priority isEqualToString: @"HIGH"])
{
[headers setObject: @"2 (High)" forKey: @"X-Priority"];
}
else if ([priority isEqualToString: @"LOW"])
{
[headers setObject: @"4 (Low)" forKey: @"X-Priority"];
}
else
{
[headers setObject: @"5 (Lowest)" forKey: @"X-Priority"];
}
}
- (NSDictionary *) headers
@ -1235,8 +1258,10 @@ static BOOL showTextAttachmentsInline = NO;
[map addObject: userAgent forKey: @"User-Agent"];
/* add custom headers */
// [self _addHeaders: [lInfo objectForKey: @"headers"] toHeaderMap:map];
if ([(s = [headers objectForKey: @"X-Priority"]) length] > 0)
[map setObject: s
forKey: @"X-Priority"];
[self _addHeaders: _headers toHeaderMap: map];
return map;

View File

@ -79,6 +79,12 @@
"Edit Draft..." = "Concept aanpassen...";
"highest" = "Highest";
"high" = "High";
"normal" = "Normal";
"low" = "Low";
"lowest" = "Lowest";
"This mail is being sent from an unsecure network!" = "Deze e-mail wordt verzonden vanaf een onveilig netwerk!";
/* Popup "show" */

View File

@ -92,10 +92,15 @@
"bcc" = "Bcc";
"Addressbook" = "Address Book";
"Anais" = "Anais";
"Edit Draft..." = "Edit Draft...";
"highest" = "Highest";
"high" = "High";
"normal" = "Normal";
"low" = "Low";
"lowest" = "Lowest";
"This mail is being sent from an unsecure network!" = "This mail is being sent from an unsecure network!";
/* Popup "show" */

View File

@ -96,6 +96,12 @@
"Edit Draft..." = "Modifier le brouillon...";
"highest" = "Maximale";
"high" = "Haute";
"normal" = "Normale";
"low" = "Basse";
"lowest" = "Minimale";
"This mail is being sent from an unsecure network!" = "Ce mail est envoyé depuis un réseau non sécurisé !";
/* Popup "show" */

View File

@ -80,6 +80,12 @@
"Edit Draft..." = "Entwurf bearbeiten...";
"highest" = "Highest";
"high" = "High";
"normal" = "Normal";
"low" = "Low";
"lowest" = "Lowest";
"This mail is being sent from an unsecure network!" = "Diese e-Mail wurde von einem unsicheren Netzwerk gesendet!";
/* Popup "show" */

View File

@ -102,6 +102,12 @@
"Edit Draft..." = "Modifica bozza...";
"highest" = "Highest";
"high" = "High";
"normal" = "Normal";
"low" = "Low";
"lowest" = "Lowest";
"This mail is being sent from an unsecure network!" = "Questa email è stata spedita da un network contrassegnato come non sicuro!";
/* Popup "show" */

View File

@ -99,6 +99,12 @@
"Edit Draft..." = "Modificar borrador...";
"highest" = "Highest";
"high" = "High";
"normal" = "Normal";
"low" = "Low";
"lowest" = "Lowest";
"This mail is being sent from an unsecure network!" = "Este mendaje es enviado desde una red no segura.";
/* Popup "show" */

View File

@ -27,5 +27,10 @@
cssClass = "tbicon_save";
label = "Save";
tooltip = "Save this message"; },
{ link = "#";
hasMenu = YES;
label = "Priority";
onclick = "return onSelectPriority(event);";
image = "priority.png"; },
)
)

View File

@ -1,6 +1,8 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
Copyright (C) 2008 Inverse inc.
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
@ -64,6 +66,9 @@
NSString *from;
SOGoMailFolder *sentFolder;
NSString *priority;
id item;
/* these are for the inline attachment list */
NSString *attachmentName;
NSArray *attachmentNames;
@ -85,7 +90,7 @@ static NSArray *infoKeys = nil;
infoKeys = [[NSArray alloc] initWithObjects:
@"subject", @"to", @"cc", @"bcc",
@"from", @"replyTo", @"inReplyTo",
nil];
@"priority", nil];
/* Internet mail settings */
@ -100,8 +105,20 @@ static NSArray *infoKeys = nil;
[internetMailHeaders count]);
}
- (id) init
{
if ((self = [super init]))
{
[self setPriority: @"NORMAL"];
}
return self;
}
- (void) dealloc
{
[item release];
[priority release];
[sentFolder release];
[fromEMails release];
[from release];
@ -117,6 +134,45 @@ static NSArray *infoKeys = nil;
}
/* accessors */
- (void) setItem: (id) _item
{
ASSIGN (item, _item);
}
- (id) item
{
return item;
}
- (NSArray *) priorityClasses
{
static NSArray *priorities = nil;
if (!priorities)
{
priorities = [NSArray arrayWithObjects: @"HIGHEST", @"HIGH",
@"NORMAL", @"LOW", @"LOWEST", nil];
[priorities retain];
}
return priorities;
}
- (void) setPriority: (NSString *) _priority
{
ASSIGN(priority, _priority);
}
- (NSString *) priority
{
return priority;
}
- (NSString *) itemPriorityText
{
return [self labelForKey: [NSString stringWithFormat: @"%@", [item lowercaseString]]];
}
- (NSString *) isMailReply
{
return ([to count] > 0 ? @"true" : @"false");

View File

@ -27,6 +27,7 @@
*/
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSCharacterSet.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSEnumerator.h>
#import <Foundation/NSTimeZone.h>
@ -104,6 +105,55 @@
return [dateFormatter formattedDateAndTime: messageDate];
}
//
// Priorities are defined like this:
//
// X-Priority: 1 (Highest)
// X-Priority: 2 (High)
// X-Priority: 3 (Normal)
// X-Priority: 4 (Low)
// X-Priority: 5 (Lowest)
//
// Sometimes, the MUAs don't send over the string in () so we ignore it.
//
- (NSString *) messagePriority
{
NSString *result;
NSData *data;
data = [message objectForKey: @"header"];
result = @"";
if (data)
{
NSString *s;
s = [[NSString alloc] initWithData: data
encoding: NSASCIIStringEncoding];
if (s)
{
NSRange r;
[s autorelease];
r = [s rangeOfString: @":"];
if (r.length)
{
s = [[s substringFromIndex: r.location+1]
stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([s hasPrefix: @"1"]) result = [self labelForKey: @"highest"];
else if ([s hasPrefix: @"2"]) result = [self labelForKey: @"high"];
else if ([s hasPrefix: @"4"]) result = [self labelForKey: @"low"];
else if ([s hasPrefix: @"5"]) result = [self labelForKey: @"lowest"];
}
}
}
return result;
}
- (NSString *) messageSubject
{
id baseSubject;
@ -239,9 +289,8 @@
if (!keys)
keys = [[NSArray alloc] initWithObjects: @"UID",
@"FLAGS", @"ENVELOPE", @"RFC822.SIZE",
@"BODYSTRUCTURE", nil];
@"FLAGS", @"ENVELOPE", @"RFC822.SIZE",
@"BODYSTRUCTURE", @"BODY[HEADER.FIELDS (X-PRIORITY)]", nil];
return keys;
}

View File

@ -28,7 +28,19 @@
</ul>
</div>
<div class="menu" id="priority-menu">
<ul id="itemPriorityList" class="choiceMenu">
<var:foreach list="priorityClasses" item="item">
<li var:priority="item"><var:string
var:value="itemPriorityText" /></li>
</var:foreach>
</ul>
</div>
<form const:href="send" name="pageform" enctype="multipart/form-data" autocomplete="off">
<input type="hidden" name="priority" id="priority"
var:value="priority"/>
<div id="attachmentsArea">
<var:string label:value="Attachments:" />
<ul id="attachments">

View File

@ -26,9 +26,11 @@
><img rsrc:src="title_read_14x14.png" label:title="Flagged" /></td
><td class="tbtv_headercell sortableTableHeader" id="dateHeader"
><var:string label:value="Date"/></td
><td class="tbtv_headercell" id="priorityHeader"
><var:string label:value="Priority"/></td
></tr>
<tr class="tableview"
><td colspan="6" class="tbtv_navcell"
><td colspan="7" class="tbtv_navcell"
><var:if condition="hasPrevious">
<a href="#"
idx="1"><var:string label:value="first"/></a> |
@ -107,6 +109,12 @@
><var:string value="messageDate"
/><entity name="nbsp"
/></td
><td class="messagePriorityColumn"
><var:string value="messagePriority"
/><entity name="nbsp"
/></td
></tr>
</var:foreach>
</tbody>

View File

@ -553,6 +553,33 @@ function initMailEditor() {
var focusField = (mailIsReply ? textarea : $("addr_0"));
focusField.focus();
initializePriorityMenu();
}
function initializePriorityMenu() {
var priority = $("priority").value.toUpperCase();
var priorityMenu = $("priority-menu").childNodesWithTag("ul")[0];
var menuEntries = $(priorityMenu).childNodesWithTag("li");
var chosenNode;
if (priority == "HIGHEST")
chosenNode = menuEntries[0];
else if (priority == "HIGH")
chosenNode = menuEntries[1];
else if (priority == "LOW")
chosenNode = menuEntries[3];
else if (priority == "LOWEST")
chosenNode = menuEntries[4];
else
chosenNode = menuEntries[2];
priorityMenu.chosenNode = chosenNode;
$(chosenNode).addClassName("_chosen");
var menuItems = $("itemPriorityList").childNodesWithTag("li");
for (var i = 0; i < menuItems.length; i++)
menuItems[i].observe("mousedown",
onMenuSetPriority.bindAsEventListener(menuItems[i]),
false);
}
function getMenus() {
@ -599,6 +626,19 @@ function attachmentDeleteCallback(http) {
}
}
function onMenuSetPriority(event) {
event.cancelBubble = true;
var priority = this.getAttribute("priority");
if (this.parentNode.chosenNode)
this.parentNode.chosenNode.removeClassName("_chosen");
this.addClassName("_chosen");
this.parentNode.chosenNode = this;
var priorityInput = $("priority");
priorityInput.value = priority;
}
function onSelectAllAttachments() {
var list = $("attachments");
var nodes = list.childNodesWithTag("li");
@ -606,6 +646,17 @@ function onSelectAllAttachments() {
nodes[i].selectElement();
}
function onSelectPriority(event) {
if (event.button == 0 || (isSafari() && event.button == 1)) {
var node = getTarget(event);
if (node.tagName != 'BUTTON')
node = $(node).up("button");
popupToolbarMenu(node, "priority-menu");
Event.stop(event);
// preventDefault(event);
}
}
function onWindowResize(event) {
var textarea = document.pageform.text;
var rowheight = (Element.getHeight(textarea) / textarea.rows);