See ChangeLog
Monotone-Parent: e0268121f41f4a9ac6226ffcf9e54efb36a9d2d3 Monotone-Revision: 5ca46341daec14901e918e991004a22b7ada9f49 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2008-09-28T14:02:40 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
7693e9df82
commit
26e2ab38de
20
ChangeLog
20
ChangeLog
|
@ -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
|
@ -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 */
|
||||
if ([(s = [headers objectForKey: @"X-Priority"]) length] > 0)
|
||||
[map setObject: s
|
||||
forKey: @"X-Priority"];
|
||||
|
||||
// [self _addHeaders: [lInfo objectForKey: @"headers"] toHeaderMap:map];
|
||||
[self _addHeaders: _headers toHeaderMap: map];
|
||||
|
||||
return map;
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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" */
|
||||
|
|
|
@ -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"; },
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
@ -240,8 +290,7 @@
|
|||
if (!keys)
|
||||
keys = [[NSArray alloc] initWithObjects: @"UID",
|
||||
@"FLAGS", @"ENVELOPE", @"RFC822.SIZE",
|
||||
@"BODYSTRUCTURE", nil];
|
||||
|
||||
@"BODYSTRUCTURE", @"BODY[HEADER.FIELDS (X-PRIORITY)]", nil];
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue