+2008-03-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+ -takeValuesFromRequest:_rqinContext:_ctx]): treat the regular
+ monthly recurrences as all others.
+
+ * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+ -davSetProperties:setPropsremovePropertiesNamed:removedPropsinContext:localContext]):
+ returns an exception if the property to modify is not
+ "davDisplayName" and if the current user has not the owner role
+ over the current collection.
+
+2008-03-25 Francis Lachapelle <flachapelle@inverse.ca>
+
+ * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
+ -verticalDragHandleStyle]): CSS style wrt to position of drag
+ handle saved by current user.
+ ([UIxCalMainView -horizontalDragHandleStyle]): idem.
+ ([UIxCalMainView -eventsListViewStyle]): idem.
+
+ * UI/Contacts/UIxContactsListViewContainer.m
+ ([UIxContactsListViewContainer -verticalDragHandleStyle]): CSS
+ style wrt to position of drag handle saved by current user.
+ ([UIxContactsListViewContainer -horizontalDragHandleStyle]): idem.
+ ([UIxContactsListViewContainer -contactsListContentStyle]): idem.
+
+ * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
+ -verticalDragHandleStyle]): CSS style wrt to position of drag
+ handle saved by current user.
+ ([UIxMailMainFrame -horizontalDragHandleStyle]): idem.
+ ([UIxMailMainFrame -mailboxContentStyle]): idem.
+
2008-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentFolder.m
- converted to use the gnustep-make 2 build framework
- added custom DAV methods for managing user permissions from the SOGo Integrator
- pressing enter in the contact edition dialog will perform the creation/update operation
+- implemented more of the CalDAV specification for compatibility with Lightning 0.8
+- added Italian translation, thanks to Marco Lertora
+- improved restoration of drag handles state
+- improved contextual menu handling of Address Book module
+- fixed various bugs occuring with Safari 3.1
0.9.0-20080208 (1.0 rc5)
------------------------
iCalHTTP_PRINCIPAL_CLASS = iCalHTTPProduct
-iCalHTTP_LANGUAGES = English French
+iCalHTTP_LANGUAGES = English French Italian
iCalHTTP_OBJC_FILES = \
iCalHTTPProduct.m \
typedef BOOL NGMonthSet[12];
typedef BOOL NGMonthDaySet[32]; // 0 is unused
-static void NGMonthDaySet_clear(NGMonthDaySet *daySet) {
+static void
+NGMonthDaySet_clear(NGMonthDaySet *daySet)
+{
register unsigned i;
- for (i = 1; i <= 31; i++)
+ for (i = 0; i <= 31; i++)
(*daySet)[i] = NO;
}
-static void NGMonthDaySet_copyOrUnion(NGMonthDaySet *base, NGMonthDaySet *new,
- BOOL doCopy)
+static void
+NGMonthDaySet_copyOrUnion(NGMonthDaySet *base, NGMonthDaySet *new,
+ BOOL doCopy)
{
register unsigned i;
-
+
if (doCopy)
memcpy(base, new, sizeof(NGMonthDaySet));
else {
/* factory */
-+ (id)recurrenceCalculatorForRecurrenceRule:(iCalRecurrenceRule *)_rrule
- withFirstInstanceCalendarDateRange:(NGCalendarDateRange *)_range
++ (id) recurrenceCalculatorForRecurrenceRule: (iCalRecurrenceRule *) _rrule
+ withFirstInstanceCalendarDateRange: (NGCalendarDateRange *) _range
{
- return [[[self alloc] initWithRecurrenceRule:_rrule
- firstInstanceCalendarDateRange:_range] autorelease];
+ iCalRecurrenceFrequency freq;
+ Class calcClass;
+ id calc;
+
+ freq = [_rrule frequency];
+ if (freq == iCalRecurrenceFrequenceDaily)
+ calcClass = dailyCalcClass;
+ else if (freq == iCalRecurrenceFrequenceWeekly)
+ calcClass = weeklyCalcClass;
+ else if (freq == iCalRecurrenceFrequenceMonthly)
+ calcClass = monthlyCalcClass;
+ else if (freq == iCalRecurrenceFrequenceYearly)
+ calcClass = yearlyCalcClass;
+ else
+ calcClass = Nil;
+
+ if (calcClass)
+ {
+ calc = [[calcClass alloc] initWithRecurrenceRule:_rrule
+ firstInstanceCalendarDateRange: _range];
+ [calc autorelease];
+ }
+ else
+ {
+ [self errorWithFormat: @"unsupported rrule frequency: %@", _rrule];
+ calc = nil;
+ }
+
+ return calc;
}
/* complex calculation convenience */
/* init */
-- (id)initWithRecurrenceRule:(iCalRecurrenceRule *)_rrule
- firstInstanceCalendarDateRange:(NGCalendarDateRange *)_range
+- (id) initWithRecurrenceRule: (iCalRecurrenceRule *) _rrule
+ firstInstanceCalendarDateRange: (NGCalendarDateRange *) _range
{
- iCalRecurrenceFrequency freq;
- Class calcClass = Nil;
+ if ((self = [super init]))
+ {
+ rrule = [_rrule retain];
+ firstRange = [_range retain];
+ }
- freq = [_rrule frequency];
- if (freq == iCalRecurrenceFrequenceDaily)
- calcClass = dailyCalcClass;
- else if (freq == iCalRecurrenceFrequenceWeekly)
- calcClass = weeklyCalcClass;
- else if (freq == iCalRecurrenceFrequenceMonthly)
- calcClass = monthlyCalcClass;
- else if (freq == iCalRecurrenceFrequenceYearly)
- calcClass = yearlyCalcClass;
- else {
- [self errorWithFormat:@"unsupported rrule frequency: %@", _rrule];
- calcClass = Nil;
- [self release];
- return nil;
- }
-
- [self autorelease]; // TODO: why autorelease?
- if (calcClass == Nil)
- return nil;
-
- if ((self = [[calcClass alloc] init]) != nil) {
- self->rrule = [_rrule retain];
- self->firstRange = [_range retain];
- }
return self;
}
-- (void)dealloc {
- [self->firstRange release];
- [self->rrule release];
+- (void) dealloc
+{
+ [firstRange release];
+ [rrule release];
[super dealloc];
}
/* helpers */
-- (unsigned)offsetFromSundayForJulianNumber:(long)_jn {
- return (unsigned)((int)(_jn + 1.5)) % 7;
+- (unsigned) offsetFromSundayForJulianNumber: (long) _jn
+{
+ return (unsigned)((int) (_jn + 1.5)) % 7;
}
-- (unsigned)offsetFromSundayForWeekDay:(iCalWeekDay)_weekDay {
+- (unsigned) offsetFromSundayForWeekDay: (iCalWeekDay) _weekDay
+{
unsigned offset;
- switch (_weekDay) {
- case iCalWeekDaySunday: offset = 0; break;
- case iCalWeekDayMonday: offset = 1; break;
- case iCalWeekDayTuesday: offset = 2; break;
- case iCalWeekDayWednesday: offset = 3; break;
- case iCalWeekDayThursday: offset = 4; break;
- case iCalWeekDayFriday: offset = 5; break;
- case iCalWeekDaySaturday: offset = 6; break;
- default: offset = 0; break;
- }
+ switch (_weekDay)
+ {
+ case iCalWeekDaySunday:
+ offset = 0; break;
+ case iCalWeekDayMonday:
+ offset = 1; break;
+ case iCalWeekDayTuesday:
+ offset = 2; break;
+ case iCalWeekDayWednesday:
+ offset = 3; break;
+ case iCalWeekDayThursday:
+ offset = 4; break;
+ case iCalWeekDayFriday:
+ offset = 5; break;
+ case iCalWeekDaySaturday:
+ offset = 6; break;
+ default:
+ offset = 0; break;
+ }
+
return offset;
}
-- (unsigned)offsetFromSundayForCurrentWeekStart {
- return [self offsetFromSundayForWeekDay:[self->rrule weekStart]];
+- (unsigned) offsetFromSundayForCurrentWeekStart
+{
+ return [self offsetFromSundayForWeekDay: [rrule weekStart]];
}
-- (iCalWeekDay)weekDayForJulianNumber:(long)_jn {
- unsigned day;
+- (iCalWeekDay) weekDayForJulianNumber: (long)_jn
+{
+ unsigned int day;
iCalWeekDay weekDay;
-
- day = [self offsetFromSundayForJulianNumber:_jn];
- switch (day) {
- case 0: weekDay = iCalWeekDaySunday; break;
- case 1: weekDay = iCalWeekDayMonday; break;
- case 2: weekDay = iCalWeekDayTuesday; break;
- case 3: weekDay = iCalWeekDayWednesday; break;
- case 4: weekDay = iCalWeekDayThursday; break;
- case 5: weekDay = iCalWeekDayFriday; break;
- case 6: weekDay = iCalWeekDaySaturday; break;
- default:
- [self errorWithFormat:@"got unexpected weekday: %d", day];
+ iCalWeekDay weekDays[] = {iCalWeekDaySunday, iCalWeekDayMonday,
+ iCalWeekDayTuesday, iCalWeekDayWednesday,
+ iCalWeekDayThursday, iCalWeekDayFriday,
+ iCalWeekDaySaturday};
+
+ if (day < 7)
+ weekDay = weekDays[day];
+ else
+ {
+ [self errorWithFormat:
+ @"got unexpected weekday: %d (falling back on sunday)", day];
weekDay = iCalWeekDaySunday;
- break; /* keep compiler happy */
- }
+ }
+
return weekDay;
}
/* calculation */
-- (NSArray *)recurrenceRangesWithinCalendarDateRange:(NGCalendarDateRange *)_r{
+- (NSArray *)
+ recurrenceRangesWithinCalendarDateRange: (NGCalendarDateRange *) _r
+{
return nil; /* subclass responsibility */
}
-- (BOOL)doesRecurrWithinCalendarDateRange:(NGCalendarDateRange *)_range {
- NSArray *ranges;
- ranges = [self recurrenceRangesWithinCalendarDateRange:_range];
- return (ranges == nil || [ranges count] == 0) ? NO : YES;
+- (BOOL) doesRecurrWithinCalendarDateRange: (NGCalendarDateRange *) _range
+{
+ return ([[self recurrenceRangesWithinCalendarDateRange: _range] count]
+ > 0);
}
-- (NGCalendarDateRange *)firstInstanceCalendarDateRange {
- return self->firstRange;
+- (NGCalendarDateRange *) firstInstanceCalendarDateRange
+{
+ return firstRange;
}
-- (NGCalendarDateRange *)lastInstanceCalendarDateRange {
+- (NGCalendarDateRange *) lastInstanceCalendarDateRange
+{
NSCalendarDate *start, *end;
+ NGCalendarDateRange *range;
- if ((start = [self lastInstanceStartDate]) == nil)
- return nil;
-
- end = [start addTimeInterval:[self->firstRange duration]];
- return [NGCalendarDateRange calendarDateRangeWithStartDate:start
- endDate:end];
+ range = nil;
+
+ start = [self lastInstanceStartDate];
+ if (start)
+ {
+ end = [start addTimeInterval: [firstRange duration]];
+ range = [NGCalendarDateRange calendarDateRangeWithStartDate: start
+ endDate: end];
+ }
+
+ return range;
}
-- (NSCalendarDate *)lastInstanceStartDate {
- NSCalendarDate *until;
-
+- (NSCalendarDate *) lastInstanceStartDate
+{
/*
NOTE: this is horribly inaccurate and doesn't even consider the use
of repeatCount. It MUST be implemented by subclasses properly!
However, it does the trick for SOGo 1.0 - that's why it's left here.
*/
- if ((until = [self->rrule untilDate]) != nil)
- return until;
-
- return nil;
+ return [rrule untilDate];
}
@end /* iCalRecurrenceCalculator */
function addField() {
oldIFS="$IFS"
IFS=" "
- part="`echo -e \"ALTER TABLE $table ADD COLUMN c_component VARCHAR(10) NOT NULL DEFAULT 'vcard';\\n\"`";
+ part="`echo -e \"ALTER TABLE $table ADD COLUMN c_component VARCHAR(10); UPDATE TABLE $table SET COLUMN c_component = 'vcard' WHERE c_component IS NULL; ALTER TABLE $table ALTER COLUMN c_component SET NOT NULL;\\n\"`";
sqlscript="$sqlscript$part"
IFS="$oldIFS"
}
SOGoAptMailGermanUpdate.wo \
SOGoAptMailGermanRemoval.wo \
SOGoAptMailGermanDeletion.wo \
+ SOGoAptMailItalianInvitation.wo \
+ SOGoAptMailItalianICalReply.wo \
+ SOGoAptMailItalianUpdate.wo \
+ SOGoAptMailItalianRemoval.wo \
+ SOGoAptMailItalianDeletion.wo \
+
ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/
ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/
NSArray *properties;
unsigned int count, max;
- [r appendContentString: @"<D:propstat>"];
- [r appendContentString: @"<D:prop>"];
+ [r appendContentString: @"<D:propstat><D:prop>"];
properties = [propstat objectForKey: @"properties"];
max = [properties count];
for (count = 0; count < max; count++)
[r appendContentString: [properties objectAtIndex: count]];
- [r appendContentString: @"</D:prop>"];
- [r appendContentString: @"<D:status>"];
+ [r appendContentString: @"</D:prop><D:status>"];
[r appendContentString: [propstat objectForKey: @"status"]];
- [r appendContentString: @"</D:status>"];
- [r appendContentString: @"</D:propstat>"];
+ [r appendContentString: @"</D:status></D:propstat>"];
}
#warning we should use the EOFetchSpecification for that!!! (see doPROPFIND:)
{
methodSel = NSSelectorFromString(methodName);
if ([sogoObject respondsToSelector: methodSel])
- {
- value = [[sogoObject performSelector: methodSel]
- stringByEscapingXMLString];
- if (![value length])
- NSLog (@"value empty?");
- }
+ value = [[sogoObject performSelector: methodSel]
+ stringByEscapingXMLString];
}
return value;
values = [NSMutableArray array];
+// if ([[object objectForKey: @"c_name"] isEqualToString: @"176A-4E8BDE62-5-B73ECD10"])
+// NSLog(@"breajpoint");
sogoObject = [self lookupName: [object objectForKey: @"c_name"]
inContext: context
acquire: NO];
NSEnumerator *propstats;
NSDictionary *propstat;
- [r appendContentString: @" <D:response>\r\n"];
- [r appendContentString: @" <D:href>"];
+ [r appendContentString: @"<D:response><D:href>"];
[r appendContentString: baseURL];
if (![baseURL hasSuffix: @"/"])
[r appendContentString: @"/"];
[r appendContentString: [object objectForKey: @"c_name"]];
- [r appendContentString: @"</D:href>\r\n"];
+ [r appendContentString: @"</D:href>"];
propstats = [[self _propstats: properties ofObject: object]
objectEnumerator];
while ((propstat = [propstats nextObject]))
[self _appendPropstat: propstat toResponse: r];
- [r appendContentString: @" </D:response>\r\n"];
+ [r appendContentString: @"</D:response>\r\n"];
}
- (void) appendMissingObjectRef: (NSString *) href
toComplexResponse: (WOResponse *) r
{
- [r appendContentString: @" <D:response>\r\n"];
- [r appendContentString: @" <D:href>"];
+ [r appendContentString: @"<D:response><D:href>"];
[r appendContentString: href];
- [r appendContentString: @"</D:href>\r\n"];
- [r appendContentString: @" <D:status>HTTP/1.1 404 Not Found</D:status>\r\n"];
- [r appendContentString: @" </D:response>\r\n"];
+ [r appendContentString: @"</D:href><D:status>HTTP/1.1 404 Not Found</D:status></D:response>\r\n"];
}
- (void) _appendTimeRange: (id <DOMElement>) timeRangeElement
{
urlComponents = [componentURLPath componentsSeparatedByString: @"/"];
cName = [urlComponents objectAtIndex: [urlComponents count] - 1];
- if ([cName isEqualToString: @"2AAC-4E8AB421-1-B767AA80"])
- NSLog (@"breakpoint...");
component = [NSDictionary dictionaryWithObject: cName forKey: @"c_name"];
}
forRange: (NGCalendarDateRange *) _r
intoArray: (NSMutableArray *) _ma
{
- NSMutableDictionary *row;
+ NSMutableDictionary *row, *fixedRow;
NSDictionary *cycleinfo;
NSCalendarDate *startDate, *endDate;
- NGCalendarDateRange *fir;
+ NGCalendarDateRange *fir, *rRange;
NSArray *rules, *exRules, *exDates, *ranges;
unsigned i, count;
NSString *content;
content = [_row objectForKey: @"c_cycleinfo"];
if (![content isNotNull])
{
- [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", _row];
+ [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@",
+ _row];
return;
}
cycleinfo = [content propertyList];
if (!cycleinfo)
{
- [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", _row];
+ [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@",
+ _row];
return;
}
row = [self fixupRecord:_row fetchRange: _r];
[row removeObjectForKey: @"c_cycleinfo"];
- [row setObject: sharedYes forKey:@"isRecurrentEvent"];
-
- startDate = [row objectForKey:@"startDate"];
- endDate = [row objectForKey:@"endDate"];
- fir = [NGCalendarDateRange calendarDateRangeWithStartDate:startDate
- endDate:endDate];
- rules = [cycleinfo objectForKey:@"rules"];
- exRules = [cycleinfo objectForKey:@"exRules"];
- exDates = [cycleinfo objectForKey:@"exDates"];
+ [row setObject: sharedYes forKey: @"isRecurrentEvent"];
+
+ startDate = [row objectForKey: @"startDate"];
+ endDate = [row objectForKey: @"endDate"];
+ fir = [NGCalendarDateRange calendarDateRangeWithStartDate: startDate
+ endDate: endDate];
+ rules = [cycleinfo objectForKey: @"rules"];
+ exRules = [cycleinfo objectForKey: @"exRules"];
+ exDates = [cycleinfo objectForKey: @"exDates"];
- ranges = [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange:_r
- firstInstanceCalendarDateRange:fir
- recurrenceRules:rules
- exceptionRules:exRules
- exceptionDates:exDates];
+ ranges = [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange: _r
+ firstInstanceCalendarDateRange: fir
+ recurrenceRules: rules
+ exceptionRules: exRules
+ exceptionDates: exDates];
count = [ranges count];
-
- for (i = 0; i < count; i++) {
- NGCalendarDateRange *rRange;
- id fixedRow;
-
- rRange = [ranges objectAtIndex:i];
- fixedRow = [self fixupCycleRecord:row cycleRange:rRange];
- if (fixedRow != nil)
- {
+ for (i = 0; i < count; i++)
+ {
+ rRange = [ranges objectAtIndex:i];
+ fixedRow = [self fixupCycleRecord: row cycleRange: rRange];
+ if (fixedRow)
[_ma addObject:fixedRow];
- }
- }
+ }
}
- (NSArray *) fixupCyclicRecords: (NSArray *) _records
{
// TODO: is the result supposed to be sorted by date?
NSMutableArray *ma;
- unsigned i, count;
-
- if (_records == nil) return nil;
- if ((count = [_records count]) == 0)
- return _records;
-
- ma = [NSMutableArray arrayWithCapacity:count];
- for (i = 0; i < count; i++) {
- id row; // TODO: what is the type of the record?
-
- row = [_records objectAtIndex:i];
- [self _flattenCycleRecord:row forRange:_r intoArray:ma];
- }
+ NSDictionary *row;
+ unsigned int i, count;
+
+ count = [_records count];
+ ma = [NSMutableArray arrayWithCapacity: count];
+ if (count > 0)
+ for (i = 0; i < count; i++)
+ {
+ row = [_records objectAtIndex: i];
+ [self _flattenCycleRecord: row forRange: _r intoArray: ma];
+ }
+
return ma;
}
@implementation SOGoAptMailGermanDeletion
@end
+
+@interface SOGoAptMailItalinDeletion : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianDeletion
+@end
+
@implementation SOGoAptMailGermanICalReply
@end
+
+@interface SOGoAptMailItalianICalReply : SOGoAptMailICalReply
+@end
+
+@implementation SOGoAptMailItalianICalReply
+@end
+
@implementation SOGoAptMailGermanInvitation
@end
+
+@interface SOGoAptMailItalianInvitation : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianInvitation
+@end
+
--- /dev/null
+<#IsSubject>L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime /> è stato cancellato</#IsSubject>
+<#IsBody>
+L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime
+/> è stato cancellato da <#Organizer
+/>.
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>Re: appuntamento del <#AptStartDate/> alle ore <#AptStartTime/></#IsSubject>
+<#IsBody>
+<#Attendee/> ha <#HasAccepted>accettato</#HasAccepted><#HasDeclined>declinato</#HasDeclined> il
+tuo invito.
+</#IsBody>
--- /dev/null
+AptStartDate: WOString {
+ value = startDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = startDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Attendee: WOString {
+ value = attendee.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasAccepted: WOConditional {
+ condition = hasAccepted;
+}
+
+HasDeclined: WOConditional {
+ condition = hasDeclined;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>Appunatemento in data <#AptStartDate /> alle ore <#AptStartTime /></#IsSubject>
+<#IsBody>
+Sei stato invitato da <#Organizer /> ad un appuntamento.
+<#HasHomePageURL>
+Per accettare o declinare l'invito vai alla pagina <#HomePageURL
+/>.
+</#HasHomePageURL>
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>Rimozione dall'appuntamento del <#AptStartDate /> alle ore <#AptStartTime /></#IsSubject>
+<#IsBody>
+Sei stato rimosso da <#Organizer /> dall'appuntamento programmato per il giorno <#AptStartDate
+/> alle ore <#AptStartTime />.
+</#IsBody>
\ No newline at end of file
--- /dev/null
+AptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+AptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
--- /dev/null
+<#IsSubject>L'appuntamento fissato in data <#OldAptStartDate /> alle ore <#OldAptStartTime /> è stato modificato </#IsSubject>
+<#IsBody>
+Questo appuntamento, fissato precedentemete in data <#OldAptStartDate />
+alle ore <#OldAptStartTime /> è ora programmato il <#NewAptStartDate
+/> alle ore <#NewAptStartTime
+/>
+<#HasHomePageURL>
+Per confermare o disdire vai alla pagina <#HomePageURL
+/>.
+</#HasHomePageURL>
+</#IsBody>
\ No newline at end of file
--- /dev/null
+OldAptStartDate: WOString {
+ value = oldStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+OldAptStartTime: WOString {
+ value = oldStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+NewAptStartDate: WOString {
+ value = newStartDate;
+ dateformat = "%d/%m/%y";
+ escapeHTML = NO;
+}
+
+NewAptStartTime: WOString {
+ value = newStartDate;
+ dateformat = "%H:%M";
+ escapeHTML = NO;
+}
+
+Organizer: WOString {
+ value = newApt.organizer.cnWithoutQuotes;
+ escapeHTML = NO;
+}
+
+HasHomePageURL: WOConditional {
+ condition = homePageURL.length;
+}
+
+HomePageURL: WOString {
+ value = appointmentURL;
+ escapeHTML = NO;
+}
+
+IsSubject: WOConditional {
+ condition = isSubject;
+}
+
+IsBody: WOConditional {
+ condition = isSubject;
+ negate = YES;
+}
@implementation SOGoAptMailGermanRemoval
@end
+
+@interface SOGoAptMailItalianRemoval : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianRemoval
+@end
+
@implementation SOGoAptMailFrenchUpdate
@end
+
+
+@interface SOGoAptMailGermanUpdate : SOGoAptMailNotification
+{
+}
+@end
+
+@implementation SOGoAptMailGermanUpdate
+@end
+
+
+@interface SOGoAptMailItalianUpdate : SOGoAptMailNotification
+{
+}
+@end
+
+@implementation SOGoAptMailItalianUpdate
+@end
+
SOGoMailEnglishForward.wo \
SOGoMailFrenchForward.wo \
SOGoMailGermanForward.wo \
+ SOGoMailItalianForward.wo \
SOGoMailEnglishReply.wo \
SOGoMailFrenchReply.wo \
- SOGoMailGermanReply.wo
+ SOGoMailGermanReply.wo \
+ SOGoMailItalianReply.wo
+
ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/
ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/
@interface SOGoMailGermanForward : SOGoMailForward
@end
+@interface SOGoMailItalianForward : SOGoMailForward
+@end
+
#endif /* SOGOMAILFORWARD_H */
@implementation SOGoMailGermanForward
@end
+
+@implementation SOGoMailItalianForward
+@end
+
--- /dev/null
+-------- Messaggio originale --------
+Oggetto: <#subject/>
+Data: <#date/>
+Da: <#from/>
+<#hasReplyTo>Reply-To: <#replyTo/></#hasReplyTo><#hasOrganization>Organizzazione: <#organization/></#hasOrganization>A: <#to/>
+<#hasCc>CC: <#cc/></#hasCc><#hasNewsGroups>Newsgroups: <#newsgroups/></#hasNewsGroups><#hasReferences>Riferimento: <#references/></#hasReferences>
+
+<#messageBody/>
+
+<#signature/>
--- /dev/null
+subject: WOString {
+ value = subject;
+ escapeHTML = NO;
+}
+
+date: WOString {
+ value = date;
+ escapeHTML = NO;
+}
+
+from: WOString {
+ value = from;
+ escapeHTML = NO;
+}
+
+hasReplyTo: WOConditional {
+ condition = hasReplyTo;
+}
+
+replyTo: WOString {
+ value = replyTo;
+ escapeHTML = NO;
+}
+
+hasOrganization: WOConditional {
+ condition = hasOrganization;
+}
+
+organization: WOString {
+ value = organization;
+ escapeHTML = NO;
+}
+
+to: WOString {
+ value = to;
+ escapeHTML = NO;
+}
+
+hasCc: WOConditional {
+ condition = hasCc;
+}
+
+cc: WOString {
+ value = cc;
+ escapeHTML = NO;
+}
+
+hasNewsGroups: WOConditional {
+ condition = hasNewsGroups;
+}
+
+newsgroups: WOString {
+ value = newsgroups;
+ escapeHTML = NO;
+}
+
+hasReferences: WOConditional {
+ condition = hasReferences;
+}
+
+references: WOString {
+ value = references;
+ escapeHTML = NO;
+}
+
+messageBody: WOString {
+ value = messageBody;
+ escapeHTML = NO;
+}
+
+signature: WOString {
+ value = signature;
+ escapeHTML = NO;
+}
--- /dev/null
+Il giorno <#date/>, <#from/> ha scritto:
+
+<#messageBody/>
+
+<#signature/>
--- /dev/null
+date: WOString {
+ value = date;
+ escapeHTML = NO;
+}
+
+from: WOString {
+ value = from;
+ escapeHTML = NO;
+}
+
+messageBody: WOString {
+ value = messageBody;
+ escapeHTML = NO;
+}
+
+signature: WOString {
+ value = signature;
+ escapeHTML = NO;
+}
@interface SOGoMailGermanReply : SOGoMailReply
@end
+@interface SOGoMailItalianReply : SOGoMailReply
+@end
+
#endif /* SOGOMAILREPLY_H */
@implementation SOGoMailGermanReply
@end
+
+@implementation SOGoMailItalianReply
+@end
+
inContext: (WOContext *) localContext
{
NSString *newDisplayName;
+ NSException *exception;
+ NSArray *currentRoles;
- newDisplayName = [setProps objectForKey: @"davDisplayName"];
- if ([newDisplayName length])
- [self renameTo: newDisplayName];
+ currentRoles = [[localContext activeUser] rolesForObject: self
+ inContext: localContext];
+ if ([currentRoles containsObject: SoRole_Owner])
+ {
+ newDisplayName = [setProps objectForKey: @"davDisplayName"];
+ if ([newDisplayName length])
+ {
+ [self renameTo: newDisplayName];
+ exception = nil;
+ }
+ else
+ exception = [NSException exceptionWithHTTPStatus: 404];
+ }
+ else
+ exception = [NSException exceptionWithHTTPStatus: 403];
- return nil;
+ return exception;
}
/* acls as a container */
*/
#if LIB_FOUNDATION_LIBRARY
-#error SOGo will not work properly with libFoundation. \
- Please use gnustep-base instead.
+#error SOGo will not work properly with libFoundation.
+#error Please use gnustep-base instead.
#endif
#import <unistd.h>
CommonUI_PRINCIPAL_CLASS = CommonUIProduct
-CommonUI_LANGUAGES = English French German
+CommonUI_LANGUAGES = English French German Italian
CommonUI_OBJC_FILES += \
CommonUIProduct.m \
--- /dev/null
+/* this file is in UTF-8 format! */
+
+/* toolbars */
+"Save" = "Salva";
+"Close" = "Chiudi";
+"Edit User Rights" = "Modifica permessi";
+
+"Home" = "Home";
+"Calendar" = "Calendario";
+"Address Book" = "Rubrica";
+"Mail" = "Posta";
+"Preferences" = "Preferenze";
+"Disconnect" = "Disconnetti";
+"Right Administration" = "Amministrazione permessi";
+"Log Console (dev.)" = "Log Console (dev.)";
+
+"User" = "Utente";
+"Owner:" = "Proprietario:";
+"Help" = "Aiuto";
+"Add..." = "Aggiungi...";
+"Remove" = "Rimuovi...";
+
+"noJavascriptError" = "SOGo ha bisogno di Javascript per essere eseguito. Verifica che questo elemento sia presente ed attivato nelle preferenze del browser";
+"noJavascriptRetry" = "Riprova";
+
+"Publish the Free/Busy information" = "Pubblica le informazioni sullo stato (libero/impegnato)";
+"Default Roles" = "Permessi predefiniti";
+"Sorry, the user rights can not be configured for that object." = "Non è possibile configurare i permessi per questo oggetto.";
+"browserNotCompatible" = "La versione del browser utilizzato non è supportata. Raccomandiamo l'utilizzo di Firefox. Clicca sul link per scaricarne l'ultima versione disponibile.";
+"alternativeBrowsers" = "Alternativamente, puoi utilizzare questi browser compatibili";
+"alternativeBrowserSafari" = "Alternativamente, puoi utilizzare Safari.";
+"Download" = "Scarica";
+
+/* generic.js */
+"Unable to subscribe to that folder!" = "Impossibile sottoscrivere la cartella!";
+"You cannot subscribe to a folder that you own!" = "Non puoi sottoscrivere una cartella di cui sei proprietario!";
+"Unable to unsubscribe from that folder!" = "Impossibile annullare la sottoscrizione alla cartella!";
+"You cannot unsubscribe from a folder that you own!" = "Non puoi annullare la sottoscrizione ad una cartella di cui sei proprietario!";
+"Unable to rename that folder!" = "Impossibile rinominare la cartella!";
+"You have already subscribed to that folder!" = "Hai già sottoscritto la cartella!";
+"The user rights cannot be edited for this object!" = "I permessi di questo oggetto non possono essere modificati!";
"Name of the Address Book" = "Name of the Address Book";
"Are you sure you want to delete the selected address book?"
= "Are you sure you want to delete the selected address book?";
+"You cannot delete the selected contact(s)"
+= "You cannot delete the selected contact(s).";
"Address Book Name" = "Address Book Name";
"Name of the Address Book" = "Nom du carnet d'adresses";
"Are you sure you want to delete the selected address book?"
= "Voulez-vous vraiment supprimer le carnet d'adresses sélectionné ?";
-
+"You cannot delete the selected contact(s)"
+= "Vous ne pouvez pas supprimer les contacts sélectionnés.";
"Address Book Name" = "Nom du carnet d'adresses";
"You cannot subscribe to a folder that you own!"
ContactsUI_PRINCIPAL_CLASS = ContactsUIProduct
-ContactsUI_LANGUAGES = English French German
+ContactsUI_LANGUAGES = English French German Italian
ContactsUI_OBJC_FILES = \
UIxContactsUserFolders.m \
"Name of the Address Book" = "Adressbuch-Name";
"Are you sure you want to delete the selected address book?"
= "Wollen Sie wirklich das ausgewählte Adressbuch löschen?";
+"You cannot delete the selected contact(s)"
+= "Ausgewählte Karten können nicht gelöscht werden.";
"Address Book Name" = "Adressbuch Name";
--- /dev/null
+/* this file is in UTF-8 format! */\r
+\r
+"Contact" = "Contatto";\r
+"Address" = "Indirizzo";\r
+"Other" = "Altro";\r
+\r
+"Name" = "Nome";\r
+"Internet" = "Email";\r
+"Phones" = "Numeri di telefono";\r
+"Home" = "Personale";\r
+"Work" = "Lavoro";\r
+\r
+"Address Books" = "Rubrica";\r
+\r
+"Addressbook" = "Rubrica";\r
+"Addresses" = "Indirizzi";\r
+"Update" = "Aggiorna";\r
+"Cancel" = "Anulla";\r
+"Common" = "Comuni";\r
+"Contact editor" = "Editor dei contatti";\r
+"Contact viewer" = "Visulizzatore dei contatti";\r
+"Email" = "Email";\r
+"Screen Name" = "Nome Instant Messeger";\r
+"Extended" = "Nome completo";\r
+"Fax" = "Fax";\r
+"Firstname" = "Nome";\r
+"Home" = "Casa";\r
+"HomePhone" = "Telefono casa";\r
+"Lastname" = "Cognome";\r
+"Location" = "Località ";\r
+"MobilePhone" = "Cellulare";\r
+"Name" = "Nome";\r
+"OfficePhone" = "Telefono ufficio";\r
+"Organization" = "Società ";\r
+"Work Phone" = "Telefono di lavoro";\r
+"Phone" = "Telefono";\r
+"Phones" = "Telefoni";\r
+"Postal" = "CAP";\r
+"Save" = "Salva";\r
+"URL" = "Pagina Web";\r
+"Unit" = "Unità ";\r
+"delete" = "cancella";\r
+"edit" = "modifica";\r
+"invalidemailwarn" = "L'indirizzo email specificato non è valido";\r
+"new" = "new";\r
+"Preferred Phone" = "Telefono lavoro";\r
+\r
+/* Folders */\r
+"Personal Address Book" = "Rubrica personale";\r
+\r
+/* Tooltips */\r
+\r
+"Create a new address book card" = "Crea un nuovo contatto";\r
+"Create a new list" = "Crea una nuova lista";\r
+"Edit the selected card" = "Modifica il contatto selezionato";\r
+"Send a mail message" = "Invia un'email";\r
+"Delete selected card or address book" = "Cancella il contatto selezionato";\r
+\r
+"htmlMailFormat_UNKNOWN" = "Sconosciuto";\r
+"htmlMailFormat_FALSE" = "Testo normale";\r
+"htmlMailFormat_TRUE" = "HTML";\r
+\r
+"Name or Email" = "Nome o indirizzo Email";\r
+"Personal Addressbook" = "Rubrica personale";\r
+"Search in Addressbook" = "Cerca nella rubrica";\r
+\r
+"New Card" = "Nuovo contatto";\r
+"New List" = "Nuova lista";\r
+"Modify" = "Modifica";\r
+"Sharing..." = "Condividi...";\r
+"Write" = "Scrivi";\r
+"Delete" = "Cancella";\r
+"Instant Message" = "Messaggio istantaneo";\r
+"Add..." = "Aggiungi...";\r
+"Remove" = "Rimuovi";\r
+\r
+"Preferred" = "Predefinito";\r
+"Card for %@" = "Biglietto da visita di %@";\r
+"Display:" = "Nome visualizzato:";\r
+"Display Name:" = "Nome visualizzato:";\r
+"Email:" = "Email:";\r
+"Additional Email:" = "Email aggiuntiva:";\r
+\r
+"Phone Number:" = "Numero di telefono:";\r
+"Prefers to receive messages formatted as:"\r
+= "Formato preferito per i messaggi di posta:";\r
+"Screen Name:" = "Nome Instant Messenger:";\r
+\r
+"Firstname:" = "Nome:";\r
+"Lastname:" = "Cognome:";\r
+"First:" = "Nome:";\r
+"Last:" = "Cognome";\r
+"Nickname:" = "Soprannome:";\r
+\r
+"Telephone" = "Telefono";\r
+"Work:" = "Lavoro:";\r
+"Home:" = "Casa:";\r
+"Fax:" = "Fax:";\r
+"Mobile:" = "Cellulare:";\r
+"Pager:" = "Cerca Persone:";\r
+\r
+"Title:" = "Titolo:";\r
+"Service:" = "Service:";\r
+"Company:" = "Società :";\r
+"Street Address:" = "Indirizzo:";\r
+"Address:" = "Indirizzo:";\r
+"City:" = "Città :";\r
+"State_Province:" = "Provincia:";\r
+"ZIP_Postal Code:" = "CAP:";\r
+"Country:" = "Nazione:";\r
+"Web:" = "Pagina Web:";\r
+"Web Page:" = "Pagina Web:";\r
+"Department:" = "Reparto:";\r
+"Organization:" = "Società :";\r
+"Work" = "Lavoro";\r
+"Other Infos" = "Altre informazioni";\r
+\r
+"Note:" = "Note:";\r
+"Timezone:" = "Fuso orario:";\r
+"Birthday:" = "Data di Nascita:";\r
+"Freebusy URL:" = "Freebusy URL:";\r
+\r
+"Add as..." = "Aggiungi come...";\r
+"Recipient" = "Destinatario";\r
+"Carbon Copy" = "Copia Carbone";\r
+"Blind Carbon Copy" = "Copia Carbone Nascosta";\r
+\r
+"New Addressbook..." = "Nuova rubrica...";\r
+"Subscribe to an Addressbook..." = "Sottoscrivi una rubrica...";\r
+"Remove the selected Addressbook" = "Rimuovi la rubrica selezionata";\r
+\r
+"Name of the Address Book" = "Nome della rubrica";\r
+"Are you sure you want to delete the selected address book?"\r
+= "Sei sicuro di voler cancellare la rubrica selezionata?";\r
+\r
+"Address Book Name" = "Nome della Rubrica";\r
+\r
+"You cannot subscribe to a folder that you own!"\r
+= "Non puoi sottoscrivere una cartella di cui sei proprietario!";\r
+"Unable to subscribe to that folder!"\r
+= "Non puoi sottoscrivere la cartella!";\r
+\r
+"Default Roles" = "Permessi predefiniti";\r
+"User rights for:" = "Permessi per:";\r
+\r
+"This person can add cards to this addressbook."\r
+= "Questa persona può aggiungere contatti a questa rubrica.";\r
+"This person can edit the cards of this addressbook."\r
+= "Questa persona può modificare i contatti di questa rubrica.";\r
+"This person can list the content of this addressbook."\r
+= "Questa persona può visualizzare i contenuti di questa rubrica.";\r
+"This person can read the cards of this addressbook."\r
+= "Questa persona può leggere i contatti di questa rubrica.";\r
+"This person can erase cards from this addressbook."\r
+= "Questa persona può eliminare contatti da questa rubrica.";\r
+\r
+"The selected contact has no email address."\r
+= "Il contatto selezionato non dispone di indirizzo email.";\r
+\r
+"You cannot delete the selected contact(s)"\r
+= "Non puoi eliminare il contatto selezionato.";\r
+\r
+"Please select a contact." = "Per favore seleziona un contatto.";\r
NSMutableDictionary *moduleSettings;
}
-- (WOResponse *) getDragHandlesStateAction;
- (WOResponse *) saveDragHandleStateAction;
@end
// ? contactFolder : nil);
// }
-- (WOResponse *) getDragHandlesStateAction
-{
- NSArray *dragHandles;
- NSString *vertical, *horizontal;
-
- [self _setupContext];
-
- vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
- horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
- dragHandles = [[NSArray alloc] initWithObjects:
- vertical ? vertical : @"",
- horizontal ? horizontal : @"",
- nil];
-
- return [self responseWithStatus: 200
- andString: [dragHandles jsonRepresentation]];
-}
-
- (WOResponse *) saveDragHandleStateAction
{
WORequest *request;
{
NSString *selectorComponentClass;
id currentFolder;
+ NSUserDefaults *ud;
+ NSMutableDictionary *moduleSettings;
}
- (void) setCurrentFolder: (id) folder;
- (NSString *) currentContactFolderOwner;
- (NSString *) currentContactFolderName;
+- (NSString *) verticalDragHandleStyle;
+- (NSString *) horizontalDragHandleStyle;
+- (NSString *) contactsListContentStyle;
+
@end
#endif /* UIXCONTACTSLISTVIEWCONTAINERBASE_H */
@implementation UIxContactsListViewContainer
+- (void) _setupContext
+{
+ SOGoUser *activeUser;
+ NSString *module;
+ SOGoContactFolders *clientObject;
+
+ activeUser = [context activeUser];
+ clientObject = [[self clientObject] container];
+
+ module = [clientObject nameInContainer];
+
+ ud = [activeUser userSettings];
+ moduleSettings = [ud objectForKey: module];
+ if (!moduleSettings)
+ {
+ moduleSettings = [NSMutableDictionary new];
+ [moduleSettings autorelease];
+ }
+ [ud setObject: moduleSettings forKey: module];
+}
+
- (id) init
{
if ((self = [super init]))
return [[self queryParameterForKey: @"popup"] boolValue];
}
+- (NSString *) verticalDragHandleStyle
+{
+ NSString *vertical;
+
+ [self _setupContext];
+ vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
+
+ return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil);
+}
+
+- (NSString *) horizontalDragHandleStyle
+{
+ NSString *horizontal;
+
+ [self _setupContext];
+ horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
+
+ return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil);
+}
+
+- (NSString *) contactsListContentStyle
+{
+ int height;
+
+ [self _setupContext];
+ height = [[moduleSettings objectForKey: @"DragHandleVertical"] intValue];
+
+ return (height ? [NSString stringWithFormat: @"%ipx", (height - 27)] : nil);
+}
+
@end
protectedBy = "View";
pageName = "UIxContactsUserFolders";
};
- dragHandlesState = {
- protectedBy = "<public>";
- pageName = "UIxContactFoldersView";
- actionName = "getDragHandlesState";
- };
saveDragHandleState = {
protectedBy = "View";
pageName = "UIxContactFoldersView";
MailPartViewers_PRINCIPAL_CLASS = MailPartViewersProduct
-MailPartViewers_LANGUAGES = English French German
+MailPartViewers_LANGUAGES = English French German Italian
MailPartViewers_OBJC_FILES += \
MailPartViewersProduct.m \
--- /dev/null
+ACCEPTED = "accettato";
+COMPLETED = "completato";
+DECLINED = "declinato";
+DELEGATED = "inviata delega";
+IN-PROCESS = "in lavorazione";
+NEEDS-ACTION = "richiede un'azione";
+TENTATIVE = "tentativo";
+organized_by_you = "organizzata da te";
+you_are_an_attendee = "sei uno degli invitati";
+add_info_text = "Le richieste iMIP 'ADD' non sono ancora supportate da SOGo.";
+publish_info_text = "Il mittente ti invia in allegato informazioni sull'evento.";
+cancel_info_text = "Il tuo invito o l'intero evento sono stati cancellati.";
+request_info_no_attendee = "sta proponento un incontro agli invitati. Ricevi questa email come notifica, non sei incluso come partecipante.";
+Appointment = "Appuntamento";
+
+Organizer = "Organizzatore";
+Time = "Ora";
+Attendees = "Invitati";
+request_info = "ti invita a partecipare ad un incontro.";
+"Add to calendar" = "Aggiungi al calendario";
+"Delete from calendar" = "Rimuovi dal calendario";
+"Update status" = "Aggiorna lo stato";
+Accept = "Accetta";
+Decline = "Declina";
+Tentative = "Tentativo";
+"Update status in calendar" = "Aggiorna lo stato nel calendari";
+reply_info_no_attendee = "Hai ricevuto una risposta relativa all'incontro programmato da un utente che non è incluso come partecipante.";
+reply_info = "Questa è una risposta ad un invito ad un evento organizzato da te.";
+
+"to" = "a";
+
+"Untitled" = "Senza titolo";
+
+"Size" = "Dimensione";
MailerUI_PRINCIPAL_CLASS = MailerUIProduct
-MailerUI_LANGUAGES = English French German
+MailerUI_LANGUAGES = English French German Italian
MailerUI_OBJC_FILES += \
MailerUIProduct.m \
--- /dev/null
+/* this file is in UTF-8 format! */
+
+/* Icon's label */
+"Create" = "Crea";
+"Empty Trash" = "Svuota cestino";
+"Delete" = "Cancella";
+"Expunge" = "Expunge";
+"Forward" = "Inoltra";
+"Get Mail" = "Scarica posta";
+"Junk" = "Indesiderato";
+"Reply" = "Rispondi";
+"Reply All" = "Rispondi a tutti";
+"Print" = "Stampa";
+"Stop" = "Stop";
+"Write" = "Scrivi";
+
+"Send" = "Invia";
+"Contacts" = "Contatti";
+"Attach" = "Allegato";
+"Save" = "Salva";
+
+/* Tooltips */
+
+"Send this message now" = "Invia ora il messaggio";
+"Select a recipient from an Address Book" = "Seleziona almeno un destinatario dalla rubrica";
+"Include an attachment" = "Includi un allegato";
+"Save this message" = "Salva questo messaggio";
+"Get new messages" = "Scarica nuovi messaggi";
+"Create a new message" = "Scrivi un nuovo messaggio";
+"Go to address book" = "Vai alla rubrica";
+"Reply to the message" = "Rispondi a questo messaggio";
+"Reply to sender and all recipients" = "Rispondi al mittente e a tutti i destinatari";
+"Forward selected message" = "Inoltra il messaggio selezionato";
+"Delete selected message or folder" = "Cancella il messaggio o la cartella selezionata";
+"Mark the selected messages as junk" = "Contrassegna il messaggio selezionato come indesiderato";
+"Print this message" = "Stampa questo messaggio";
+"Stop the current transfer" = "Ferma il trasferimento in corso";
+
+/* Main Frame */
+
+"Home" = "Home";
+"Calendar" = "Calendario";
+"Addressbook" = "Rubrica";
+"Mail" = "Posta";
+"Right Administration" = "Gestione permessi";
+
+"Help" = "Aiuto";
+
+/* Mail account main windows */
+
+"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Benvenuto in SOGo Mailer. Usa l'albero di sinistra per navigare tra i tuoi account di posta!";
+
+"Read messages" = "Leggi messaggi";
+"Write a new message" = "Scrivi un nuovo messaggio";
+
+"Share: " = "Condividi: ";
+"Account: " = "Account: ";
+"Shared Account: " = "Account condiviso: ";
+
+/* acls */
+"Default Roles" = "Permessi predefiniti";
+"User rights for:" = "Permessi per:";
+
+"List and see this folder" = "Elenca e guarda questa cartella";
+"Read mails from this folder" = "Leggi emails da questa cartella";
+"Mark mails read and unread" = "Contrassegna emails lette/non lette";
+"Modify the flags of the mails in this folder" = "Modifica i contrassegni delle emails in questa cartella";
+"Insert, copy and move mails into this folder" = "Inserisci, copia e sposta emails in questa cartella";
+"Post mails" = "Recapita emails";
+"Add subfolders to this folder" = "Aggiungi sottocartelle a questa cartella";
+"Remove this folder" = "Rimuovi questa cartella";
+"Erase mails from this folder" = "Elimina emails da questa cartella";
+"Expunge this folder" = "Expugne per questa cartella";
+"Modify the acl of this folder" = "Modifica i permessi per questa cartella";
+
+"Update" = "Aggiorna";
+"Cancel" = "Annulla";
+
+/* Mail edition */
+
+"From" = "Da";
+"Subject" = "Oggetto";
+"To" = "A";
+"Add address" = "Aggiungi indirizzi";
+"Reply-To" = "Rispondi a";
+
+"Attachments:" = "Allegati:";
+"Open" = "Apri";
+"Select All" = "Seleziona tutti";
+"Attach Web Page..." = "Allega pagina Web...";
+"Attach File(s)..." = "Allega File(s)...";
+
+"to" = "A";
+"cc" = "Cc";
+"bcc" = "Bcc";
+
+"Addressbook" = "Rubrica";
+"Anais" = "Anais";
+
+"Edit Draft..." = "Modifica bozza...";
+
+"This mail is being sent from an unsecure network!" = "Questa email è stata spedita da un network contrassegnato come non sicuro!";
+
+/* Popup "show" */
+
+"all" = "tutti";
+"read" = "letti";
+"unread" = "non letti";
+"deleted" = "cancellati";
+"flagged" = "contrassegnati";
+
+/* MailListView */
+
+"Sender" = "Mittente";
+"Subject or Sender" = "Oggetto o Mittente";
+"To or Cc" = "A o Cc";
+"Entire Message" = "Tutto il messaggio";
+
+"Date" = "Data";
+"View" = "Vista";
+"All" = "Tutti";
+"Unread" = "Non letti";
+"messages" = "messaggi";
+
+"first" = "Primo";
+"previous" = "Precedente";
+"next" = "Prossimo";
+"last" = "Ultimo";
+
+"msgnumber_to" = "a";
+"msgnumber_of" = "di";
+
+"Mark Unread" = "Contrassegna come da leggere";
+"Mark Read" = "Contrassegna come letto";
+
+"Untitled" = "Senza nome";
+
+/* Tree */
+
+"SentFolderName" = "Posta inviata";
+"TrashFolderName" = "Cestino";
+"InboxFolderName" = "Posta in arrivo";
+"DraftsFolderName" = "Bozze";
+"SieveFolderName" = "Filtri";
+"Folders" = "Cartelle"; /* title line */
+
+/* MailMoveToPopUp */
+
+"MoveTo" = "Sposta in …";
+
+/* Address Popup menu */
+"Add to Address Book..." = "Aggiungi alla rubrica...";
+"Compose Mail To" = "Invia email a ";
+"Create Filter From Message..." = "Crea filtro dal messaggio...";
+
+/* Image Popup menu */
+"Save Image" = "Salva immagine";
+
+/* Mailbox popup menus */
+"Open in New Mail Window" = "Apri in una nuova finestra";
+"Copy Folder Location" = "Copia cartella";
+"Subscribe..." = "Sottoscrivi...";
+"Properties..." = "Proprietà ...";
+"Mark Folder Read..." = "Contrassegna cartella come già letta...";
+"New Folder..." = "Nuova cartella...";
+"Compact This Folder" = "Compatta cartella";
+"Search Messages..." = "Cerca messaggi...";
+"Sharing..." = "Condivisione...";
+"New Subfolder..." = "Nuova sottocartella...";
+"Rename Folder..." = "Rinomina cartella...";
+"Delete Folder" = "Cancella cartella";
+"Use This Folder For" = "Usa questa cartella per";
+"Get Messages for Account" = "Scarica messaggi per l'account";
+
+/* Use This Folder menu */
+"Sent Messages" = "Messaggi inviati";
+"Drafts" = "Bozze";
+"Deleted Messages" = "Messaggi cancellati";
+
+/* Message list popup menu */
+"Open Message In New Window" = "Apri messaggio in una nuova finestra";
+"Reply to Sender Only" = "Rispondi";
+"Reply to All" = "Rispondi a tutti";
+"Forward" = "Inoltra";
+"Edit As New..." = "Modifica come...";
+"Move To" = "Sposta in ";
+"Copy To" = "Copia in ";
+"Label" = "Etichetta";
+"Mark" = "Contrassegna";
+"Save As..." = "Salva come ...";
+"Print Preview" = "Anteprima di stampa";
+"View Message Source" = "Visualizza sorgente";
+"Print..." = "Stampa...";
+"Delete Message" = "Cancella messaggio";
+
+"This Folder" = "This Folder";
+
+/* Label popup menu */
+"None" = "Nessuno";
+"Important" = "Importante";
+"Work" = "Lavoro";
+"Personal" = "Personale";
+"To Do" = "Da fare";
+"Later" = "Posponi";
+
+/* Mark popup menu */
+"As Read" = "Già letto";;
+"Thread As Read" = "Thread già letto";
+"As Read By Date..." = "Già letti per data...";;
+"All Read" = "Tutti già letti";;
+"Flag" = "Contrassegna";
+"As Junk" = "Come indesiderati";
+"As Not Junk" = "Come non indesiderati";
+"Run Junk Mail Controls" = "Avvia controllo email indesiderate";
+
+/* Folder operations */
+"Name :" = "Nome :";
+"Enter the new name of your folder :"
+ = "Inserisci il nuovo nome della tua cartella :";
+"Do you really want to move this folder into the trash ?"
+ = "Sei sicuro di voler spostare la cartella nel cestino ?";
+"Operation failed" = "Operazione non riuscita";
+
+"quotasFormat" = "Spazio usato: %{0} su %{1} Kb; %{2}%";
+
+"Please select a message." = "Per favore seleziona un messaggio.";
+"Please select a message to print." = "Per favore seleziona un messaggio da stampare.";
+"Please select only one message to print." = "Per favore seleziona un solo messaggio da stampare.";
+
+"You need to choose a non-virtual folder!" = "Devi selezionare una cartella fisica, non virtuale!";
+
+"Moving a message into its own folder is impossible!"
+= "La cartella di destinazione coincide con la cartella di origine!";
+"Copying a message into its own folder is impossible!"
+= "La cartella di destinazione coincide con la cartella di origine!";
+
+/* Message editing */
+"error_validationfailed" = "Validazione fallita";
+"error_missingsubject" = "Nessun oggetto specificato";
+"error_missingrecipients" = "Nessun destinatario specificato";
NSMutableDictionary *moduleSettings;
}
-- (WOResponse *) getDragHandlesStateAction;
- (WOResponse *) getFoldersStateAction;
+- (NSString *) verticalDragHandleStyle;
+- (NSString *) horizontalDragHandleStyle;
+- (NSString *) mailboxContentStyle;
+
- (WOResponse *) saveDragHandleStateAction;
- (WOResponse *) saveFoldersStateAction;
return [self redirectToLocation: newLocation];
}
-- (WOResponse *) getDragHandlesStateAction
+- (WOResponse *) getFoldersStateAction
{
- NSArray *dragHandles;
- NSString *vertical, *horizontal;
+ NSString *expandedFolders;
[self _setupContext];
+ expandedFolders = [moduleSettings objectForKey: @"ExpandedFolders"];
- vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
- horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
- dragHandles = [[NSArray alloc] initWithObjects:
- vertical ? vertical : @"",
- horizontal ? horizontal : @"",
- nil];
+ return [self responseWithStatus: 200 andString: expandedFolders];
+}
- return [self responseWithStatus: 200
- andString: [dragHandles jsonRepresentation]];
+- (NSString *) verticalDragHandleStyle
+{
+ NSString *vertical;
+
+ [self _setupContext];
+ vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
+
+ return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil);
}
-- (WOResponse *) getFoldersStateAction
+- (NSString *) horizontalDragHandleStyle
{
- NSString *expandedFolders;
+ NSString *horizontal;
- [self _setupContext];
- expandedFolders = [moduleSettings objectForKey: @"ExpandedFolders"];
+ [self _setupContext];
+ horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
- return [self responseWithStatus: 200 andString: expandedFolders];
+ return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil);
+}
+
+- (NSString *) mailboxContentStyle
+{
+ NSString *height;
+
+ [self _setupContext];
+ height = [moduleSettings objectForKey: @"DragHandleVertical"];
+
+ return (height ? [NSString stringWithFormat: @"%ipx", ([height intValue] - 27)] : nil);
}
- (WOResponse *) saveDragHandleStateAction
pageName = "UIxMailMainFrame";
actionName = "compose";
};
- dragHandlesState = {
- protectedBy = "View";
- pageName = "UIxMailMainFrame";
- actionName = "getDragHandlesState";
- };
foldersState = {
protectedBy = "View";
pageName = "UIxMailMainFrame";
MainUI_PRINCIPAL_CLASS = MainUIProduct
-MainUI_LANGUAGES = English French German
+MainUI_LANGUAGES = English French German Italian
MainUI_OBJC_FILES += \
MainUIProduct.m \
--- /dev/null
+/* Italian */
+{
+ NSLanguageName = "Italian";
+ NSFormalName = "Italian";
+ NSLocaleCode = "it"; /* ISO 639-1 */
+ NSLanguageCode = "ita"; /* ISO 639-2 */
+ NSParentContext = "";
+
+ NSAMPMDesignation = (AM, PM);
+ NSCurrencySymbol = "â¬";
+ NSDateFormatString = "%A, %e %B, %Y";
+ NSDateTimeOrdering = DMYH;
+ NSDecimalDigits = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
+ NSDecimalSeparator = ".";
+ NSEarlierTimeDesignations = (prima, scorso, dopo, fa);
+ NSHourNameDesignations = ((0, notte), (10, mattina), (12, giorno), (14, pomeriggio), (19, sera));
+ NSInternationalCurrencyString = EUR; /* ISO 4217 */
+ NSLaterTimeDesignations = (dopo);
+ NSMonthNameArray = (Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre);
+ NSNextDayDesignations = (domani);
+ NSNextNextDayDesignations = (dopodomani);
+ NSPriorDayDesignations = (ieri);
+ NSShortDateFormatString = "%d/%m/%y";
+ NSShortMonthNameArray = (Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic);
+ NSShortTimeDateFormatString = "%d/%m/%y %H:%M";
+ NSShortWeekDayNameArray = (Lun, Mar, Mer, Gio, Ven, Sab, Dom);
+ NSThisDayDesignations = (oggi, ora);
+ NSThousandsSeparator = ",";
+ NSTimeDateFormatString = "%A, %e %B, %Y %H:%M:%S %Z";
+ NSTimeFormatString = "%H:%M:%S";
+ NSWeekDayNameArray = (Lunedi, Martedi, Mercoledi, Giovedi, Venerdi, Sabato, Domenica);
+ NSYearMonthWeekDesignations = (anno, mese, settimana);
+ NSPositiveCurrencyFormatString = "⬠9,999.00";
+ NSNegativeCurrencyFormatString = "-⬠9,999.00";
+}
--- /dev/null
+/* this file is in UTF-8 format! */
+
+"title" = "SOGo";
+
+"Username:" = "Username:";
+"Password:" = "Password:";
+
+"Connect" = "Entra";
+
+"Wrong username or password." = "Username o password non corretti.";
PreferencesUI_PRINCIPAL_CLASS = PreferencesUIProduct
-PreferencesUI_LANGUAGES = English French German
+PreferencesUI_LANGUAGES = English French German Italian
PreferencesUI_OBJC_FILES = \
PreferencesUIProduct.m \
--- /dev/null
+/* toolbar */
+"Save and Close" = "Salva e chiudi";
+"Close" = "Chiudi";
+
+/* tabs */
+"General" = "Generale";
+"Calendar Options" = "Opzioni calendario";
+"Mail Options" = "Opzioni di posta";
+"Identities" = "Identità ";
+"Password" = "Password";
+
+/* ooo */
+"I'm currently in the office" = "Sono in ufficio";
+"I'm currently out of the office" = "Sono fuori ufficio";
+"AutoReply only once to each sender with the following text :" = "Rispondi automaticamente solo una volta ad ogni mittente usando questo testo:";
+
+/* d & t */
+"Current Time Zone :" = "Fuso orario:";
+"Short Date Format :" = "Data breve:";
+"Long Date Format :" = "Data estesa:";
+"Time Format :" = "Formato ora:";
+
+"shortDateFmt_0" = "%m/%e/%Y";
+"shortDateFmt_1" = "%m/%e/%y";
+"shortDateFmt_2" = "%m/%d/%Y";
+"shortDateFmt_3" = "%m/%d/%y";
+"shortDateFmt_4" = "%y/%m/%d";
+"shortDateFmt_5" = "%Y-%m-%d";
+"shortDateFmt_6" = "%d-%b-%y";
+"shortDateFmt_7" = "";
+
+"longDateFmt_0" = "%A, %B %d, %Y";
+"longDateFmt_1" = "%B %d, %Y";
+"longDateFmt_2" = "%A, %d %B, %Y";
+"longDateFmt_3" = "%d %B, %Y";
+"longDateFmt_4" = "";
+
+"timeFmt_0" = "%I:%M %p";
+"timeFmt_1" = "%H:%M";
+"timeFmt_2" = "";
+
+/* calendar */
+"Week begins on :" = "La settimana inizia il:";
+"Day start time :" = "La giornata lavorativa inizia alle ore:";
+"Day end time :" = "La giornata lavorativa termina alle ore:";
+"First week of year :" = "Prima settimana dell'anno:";
+"Enable reminders for Calendar items" = "Abilita promemoria per gli eventi del Calendario";
+"Play a sound when a reminder comes due" = "Riproduci un suono quando un promemoria è attivo";
+"Default reminder :" = "Promemoria predefinito:";
+
+"firstWeekOfYear_HideWeekNumbers" = "Non visualizzare i numeri della settimana";
+"firstWeekOfYear_January1" = "Inizia l'1 gennaio";
+"firstWeekOfYear_First4DayWeek" = "Prima settimana di 4 giorni";
+"firstWeekOfYear_FirstFullWeek" = "Prima settimana completa";
+
+"reminderTime_0000" = "0 minuti";
+"reminderTime_0005" = "5 minuti";
+"reminderTime_0010" = "10 minuti";
+"reminderTime_0015" = "15 minuti";
+"reminderTime_0030" = "30 minuti";
+"reminderTime_0100" = "1 ora";
+"reminderTime_0200" = "2 ore";
+"reminderTime_0400" = "4 ore";
+"reminderTime_0800" = "8 ore";
+"reminderTime_1200" = "1/2 giornata";
+"reminderTime_2400" = "1 giorno";
+"reminderTime_4800" = "2 giorni";
+
+/* Mailer */
+"Check for new mail:" = "Controlla la posta in arrivo:";
+"messagecheck_manually" = "Manualmente";
+"messagecheck_every_minute" = "Ogni minuto";
+"messagecheck_every_2_minutes" = "Ogni 2 minuti";
+"messagecheck_every_5_minutes" = "Ogni 5 minuti";
+"messagecheck_every_10_minutes" = "Ogni 10 minuti";
+"messagecheck_every_20_minutes" = "Ogni 20 minuti";
+"messagecheck_every_30_minutes" = "Ogni 30 minuti";
+"messagecheck_once_per_hour" = "Ogni ora";
+
+"Forward messages:" = "Inoltra messaggi come:";
+"messageforward_inline" = "Parte del messaggio";
+"messageforward_attached" = "Allegato";
+
+"Default identity:" = "Identità principale:";
+"Manage identities..." = "Gestisci identità ...";
+"Signature:" = "Firma:";
+
+/* password */
+"New password:" = "Nuova password:";
+"Confirmation:" = "Ripeti nuova password:";
+"Change" = "Cambia Password";
@interface SOGoACLGermanAdditionAdvisory : SOGoACLAdditionAdvisory
@end
+@interface SOGoACLItalianAdditionAdvisory : SOGoACLAdditionAdvisory
+@end
+
@interface SOGoACLEnglishModificationAdvisory : SOGoACLModificationAdvisory
@end
@interface SOGoACLGermanModificationAdvisory : SOGoACLModificationAdvisory
@end
+@interface SOGoACLItalianModificationAdvisory : SOGoACLModificationAdvisory
+@end
+
@interface SOGoACLEnglishRemovalAdvisory : SOGoACLRemovalAdvisory
@end
@interface SOGoACLGermanRemovalAdvisory : SOGoACLRemovalAdvisory
@end
+@interface SOGoACLItalianRemovalAdvisory : SOGoACLRemovalAdvisory
+@end
+
#endif /* SOGOACLADVISORY_H */
@implementation SOGoACLGermanAdditionAdvisory
@end
+@implementation SOGoACLItalianAdditionAdvisory
+@end
+
@implementation SOGoACLEnglishModificationAdvisory
@end
@implementation SOGoACLGermanModificationAdvisory
@end
+@implementation SOGoACLItalianModificationAdvisory
+@end
+
@implementation SOGoACLEnglishRemovalAdvisory
@end
@implementation SOGoACLGermanRemovalAdvisory
@end
+
+@implementation SOGoACLItalianRemovalAdvisory
+@end
+
@interface SOGoFolderGermanRemovalAdvisory : SOGoFolderAdvisory
@end
+@interface SOGoFolderItalianAdditionAdvisory : SOGoFolderAdvisory
+@end
+
+@interface SOGoFolderItalianRemovalAdvisory : SOGoFolderAdvisory
+@end
+
+
#endif /* SOGOFOLDERADVISORY_H */
@implementation SOGoFolderGermanRemovalAdvisory
- (NSString *) folderMethod { return @"remove"; }
@end
+
+@implementation SOGoFolderItalianAdditionAdvisory
+- (NSString *) folderMethod { return @"add"; }
+@end
+
+@implementation SOGoFolderItalianRemovalAdvisory
+- (NSString *) folderMethod { return @"remove"; }
+@end
+
SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct
-SchedulerUI_LANGUAGES = English French German
+SchedulerUI_LANGUAGES = English French German Italian
SchedulerUI_OBJC_FILES = \
SchedulerUIProduct.m \
--- /dev/null
+/* this file is in UTF-8 format! */
+
+/* Tooltips */
+
+"Create a new event" = "Crea un nuovo evento";
+"Create a new task" = "Crea una nuova attività ";
+"Edit this event or task" = "Modifica questo evento o attività ";
+"Delete this event or task" = "Cancella questo evento o attività ";
+"Go to today" = "Oggi";
+"Switch to day view" = "Giorno";
+"Switch to week view" = "Settimana";
+"Switch to month view" = "Mese";
+
+/* Day */
+
+"Sunday" = "Domenica";
+"Monday" = "Lunedi";
+"Tuesday" = "Martedi";
+"Wednesday" = "Mercoledi";
+"Thursday" = "Giovedi";
+"Friday" = "Venerdi";
+"Saturday" = "Sabato";
+
+"Sun" = "Dom";
+"Mon" = "Lun";
+"Tue" = "Mar";
+"Wed" = "Mer";
+"Thu" = "Gio";
+"Fri" = "Ven";
+"Sat" = "Sab";
+
+"a2_Sunday" = "Do";
+"a2_Monday" = "Lu";
+"a2_Tuesday" = "Ma";
+"a2_Wednesday" = "Me";
+"a2_Thursday" = "Gi";
+"a2_Friday" = "Ve";
+"a2_Saturday" = "Sa";
+
+"dayLabelFormat" = "%d/%m/%Y";
+"today" = "Oggi";
+
+/* Week */
+
+"Week" = "Settimana";
+"this week" = "questa settimana";
+
+"Week %d" = "Settimana %d";
+
+/* Month */
+
+"this month" = "questo mese";
+
+"January" = "Gennaio";
+"February" = "Febbraio";
+"March" = "Marzo";
+"April" = "Aprile";
+"May" = "Maggio";
+"June" = "Giugno";
+"July" = "Luglio";
+"August" = "Agosto";
+"September" = "Settembre";
+"October" = "Ottobre";
+"November" = "Novembre";
+"December" = "Dicembre";
+
+"a3_January" = "Gennaio";
+"a3_February" = "Febbraio";
+"a3_March" = "Marzo";
+"a3_April" = "Aprile";
+"a3_May" = "Maggio";
+"a3_June" = "Giugno";
+"a3_July" = "Luglio";
+"a3_August" = "Agosto";
+"a3_September" = "Settembre";
+"a3_October" = "Ottobre";
+"a3_November" = "Novembre";
+"a3_December" = "Dicembre";
+
+/* Year */
+
+"this year" = "quest'anno";
+
+/* Menu */
+
+"Calendars" = "Calendari";
+"Calendar" = "Calendario";
+"Contacts" = "Contatti";
+
+"New Calendar..." = "Nuovo calendario...";
+"Delete Calendar" = "Rimuovi calendario...";
+"Sharing..." = "Condivisione";
+"Export Calendar..." = "Esporta calendario...";
+"Publish Calendar..." = "Pubblica calendario...";
+"Reload Remote Calendars" = "Aggiorna calendari Remoti";
+"Properties" = "Proprietà ";
+
+"Compose E-Mail to All Attendees" = "Invia Email a tutti gli invitati";
+"Compose E-Mail to Undecided Attendees" = "Invia Email agli invitati indecisi";
+
+/* Folders */
+"Personal calendar" = "Calendario personale";
+
+/* Misc */
+
+"OpenGroupware.org" = "OpenGroupware.org";
+"Forbidden" = "Vietato";
+
+/* acls */
+"Default Roles" = "Permessi predefiniti";
+"User rights for:" = "Permessi per:";
+"label_Public" = "Pubblico";
+"label_Private" = "Privato";
+"label_Confidential" = "Confidenziale";
+"View All" = "Tutto";
+"View the Date & Time" = "Data e ora";
+"Modify" = "Modifica";
+"Respond To" = "Rispondi a";
+"None" = "Nessuno";
+"This person can create objects in my calendar." = "Questa persona può inserire elementi nel mio calendario.";
+"This person can erase objects from my calendar." = "Questa persona può rimuovere elementi dal mio calendario.";
+
+/* Button Titles */
+
+"New Calendar..." = "Nuovo calendario...";
+"Subscribe to a Calendar..." = "Sottoscrivi un calendario...";
+"Remove the selected Calendar" = "Rimuovi il calendario selezionato...";
+
+"Name of the Calendar" = "Nome del calendario";
+
+"new" = "Nuovo";
+"printview" = "Anteprima di Stampa";
+"edit" = "Modifica";
+"delete" = "Cancella";
+"proposal" = "Proposta";
+"Save and Close" = "Salva e chiudi";
+"Close" = "Chiudi";
+"Invite Attendees" = "Invita partecipanti";
+"Documents" = "Collegamento";
+"Update" = "Aggiorna";
+"Cancel" = "Annulla";
+"show_rejected_apts" = "Visualizza appuntamenti rifiutati";
+"hide_rejected_apts" = "Nascondi appuntamenti rifiutati";
+
+
+/* Schedule */
+
+"Schedule" = "Schedule";
+"No appointments found" = "Nessun appuntamento trovato";
+"Meetings proposed by you" = "Incontri proposti da te";
+"Meetings proposed to you" = "Incontri a cui sei stato invitato";
+"sched_startDateFormat" = "%d/%m %H:%M";
+"action" = "Azione";
+"accept" = "Accetta";
+"decline" = "Declina";
+"more attendees" = "Altri partecipanti";
+"Hide already accepted and rejected appointments" = "Nascondi gli appuntamenti già accettati o declinati";
+"Show already accepted and rejected appointments" = "Visualizza gli appuntamenti già accettati o declinati";
+
+
+/* Appointments */
+
+"Appointment viewer" = "Visualizza appuntamenti";
+"Appointment editor" = "Modifica appuntamenti";
+"Appointment proposal" = "Proponi appuntamenti";
+"Appointment on" = "Appuntamento del";
+"Start:" = "Inizio:";
+"End:" = "Fine:";
+"Due Date:" = "Scadenza:";
+"Title:" = "Titolo:";
+"Calendar:" = "Calendario:";
+"Name" = "Nome";
+"Email" = "Email";
+"Status:" = "Stato:";
+"% complete" = "% completato";
+"Location:" = "Luogo:";
+"Priority:" = "Priorità :";
+"Privacy" = "Privacy";
+"Cycle" = "Ricorrenza";
+"Cycle End" = "Termine ricorrenza";
+"Categories" = "Categorie";
+"Classification" = "Classificazione";
+"Duration" = "Durata";
+"Attendees:" = "Partecipanti:";
+"Resources" = "Risorse";
+"Organizer:" = "Organizzatore:";
+"Description:" = "Descrizione:";
+"Document:" = "Documento:";
+"Category:" = "Categoria:";
+"Repeat:" = "Ripeti:";
+"Reminder:" = "Promemoria:";
+
+"Target:" = "Percorso:";
+
+"attributes" = "attributi";
+"attendees" = "invitati";
+/* checkbox title */
+"is private" = "contrassegna come privato";
+/* classification */
+"Public" = "Pubblico";
+"Private" = "Privato";
+/* text used in overviews and tooltips */
+"empty title" = "Senza titolo";
+"private appointment" = "Appuntamento privato";
+
+"Change..." = "Modifica...";
+
+/* Appointments (participation state) */
+
+"partStat_NEEDS-ACTION" = "Richiede un'azione";
+"partStat_ACCEPTED" = "Accettato";
+"partStat_DECLINED" = "Declinato";
+"partStat_TENTATIVE" = "Tentativo";
+"partStat_DELEGATED" = "Inviata delega";
+"partStat_OTHER" = "Altro";
+
+/* Appointments (error messages) */
+
+"Conflicts found!" = "Individuato conflitto!";
+"Invalid iCal data!" = "Dati iCal non validi!";
+"Could not create iCal data!" = "Impossibile creare dati iCal!";
+
+/* Searching */
+
+"view_all" = "Tutti";
+"view_today" = "Oggi";
+"view_next7" = "Prossimi 7 giorni";
+"view_next14" = "Prossimi 14 giorni";
+"view_next31" = "Prossimi 31 giorni";
+"view_thismonth" = "Questo mese";
+"view_future" = "Tutti i prossimi eventi";
+"view_selectedday" = "Giorno selezionato";
+
+"View:" = "Visualizza:";
+"Title or Description" = "Titolo o descrizione";
+
+"Search" = "Cerca";
+"Search attendees" = "Cerca invitati";
+"Search resources" = "Cerca risorse";
+"Search appointments" = "Cerca appuntamenti";
+"Search in Anais" = "Cerca in Anais";
+
+"All day Event" = "Tutta la giornata";
+"check for conflicts" = "Controlla conflitti";
+
+"Browse URL" = "Cerca URL";
+
+/* calendar modes */
+
+"Overview" = "Panoramica";
+"Chart" = "Grafico";
+"List" = "Lista";
+"Columns" = "Colonne";
+
+/* Priorities */
+
+"prio_0" = "Nessuna";
+"prio_1" = "Alta";
+"prio_2" = "Alta";
+"prio_3" = "Alta";
+"prio_4" = "Alta";
+"prio_5" = "Normale";
+"prio_6" = "Bassa";
+"prio_7" = "Bassa";
+"prio_8" = "Bassa";
+"prio_9" = "Bassa";
+
+/* access classes (privacy) */
+"PUBLIC_vevent" = "Evento pubblico";
+"CONFIDENTIAL_vevent" = "Evento confidenziale";
+"PRIVATE_vevent" = "Evento privato";
+"PUBLIC_vtodo" = "Attività pubblica";
+"CONFIDENTIAL_vtodo" = "Attività confidenziale";
+"PRIVATE_vtodo" = "Attività privata";
+
+/* status type */
+"status_" = "Non specificato";
+"status_NOT-SPECIFIED" = "Non specificato";
+"status_TENTATIVE" = "Tentativo";
+"status_CONFIRMED" = "Confermato";
+"status_CANCELLED" = "Cancellato";
+"status_NEEDS-ACTION" = "Richiede un'azione";
+"status_IN-PROCESS" = "In esecuzione";
+"status_COMPLETED" = "Completato il ";
+
+/* Cycles */
+
+"cycle_once" = "ricorre una volta";
+"cycle_daily" = "ricorre una volta al giorno";
+"cycle_weekly" = "ricorrenza settimanale";
+"cycle_2weeks" = "ricorre per 2 settimane";
+"cycle_4weeks" = "ricorre per 4 settimane";
+"cycle_monthly" = "ricorre per 1 mese";
+"cycle_weekday" = "ricorre un giorno alla settimana";
+"cycle_yearly" = "ricorre annualmente";
+
+"cycle_end_never" = "nessuna data di fine";
+"cycle_end_until" = "ricorrenza fino al";
+
+"Recurrence pattern" = "Modello di ricorrenza";
+"Range of recurrence" = "Intervallo di ricorrenza";
+
+"Repeat" = "Ripetizione";
+"Daily" = "Giornaliera";
+"Weekly" = "Settimanale";
+"Monthly" = "Mensile";
+"Yearly" = "Annuale";
+"Every" = "Ogni";
+"Days" = "Giorni";
+"Week(s)" = "Settimana/e";
+"On" = "Il";
+"Month(s)" = "Mese/i";
+"The" = "Il";
+"Recur on day(s)" = "Ricorre il giorno/i";
+"Year(s)" = "Anno/i";
+"cycle_of" = "di";
+"No end date" = "Nessuna data di fine";
+"Create" = "Crea";
+"Appointment(s)" = "Appuntamento/i";
+"Appointments(s)" = "Appuntamento/i";
+"Repeat until" = "Ripeti fino ";
+
+"First" = "Primo";
+"Second" = "Secondo";
+"Third" = "Terzo";
+"Fourth" = "Quarto";
+"Fift" = "Quinto";
+"Last" = "Ultimo";
+
+/* Appointment categories */
+
+"category_NONE" = "Nessuna";
+"category_ANNIVERSARY" = "Anniversario";
+"category_BIRTHDAY" = "Compleanno";
+"category_BUSINESS" = "Lavoro";
+"category_CALLS" = "Chiamare";
+"category_CLIENTS" = "Clienti";
+"category_COMPETITION" = "Gara";
+"category_CUSTOMER" = "Cliente";
+"category_FAVORITES" = "Preferiti";
+"category_FOLLOW UP" = "Supplementari";
+"category_GIFTS" = "Regali";
+"category_HOLIDAYS" = "Vacanze";
+"category_IDEAS" = "Idee";
+"category_ISSUES" = "Inconvegnenti";
+"category_MISCELLANEOUS" = "Varie";
+"category_PERSONAL" = "Personale";
+"category_PROJECTS" = "Progetto";
+"category_PUBLIC HOLIDAY" = "Festività ";
+"category_STATUS" = "Stato";
+"category_SUPPLIERS" = "Fornitore";
+"category_TRAVEL" = "Viaggio";
+"category_VACATION" = "Ferie";
+
+"repeat_NEVER" = "Non si ripete";
+"repeat_DAILY" = "Quotidianamente";
+"repeat_WEEKLY" = "Settimanalmente";
+"repeat_BI-WEEKLY" = "Bisettimanalmente";
+"repeat_EVERY WEEKDAY" = "Nei giorni lavorativi";
+"repeat_MONTHLY" = "Mensilmente";
+"repeat_YEARLY" = "Annualmente";
+"repeat_CUSTOM" = "Personalizza...";
+
+"reminder_NONE" = "Nessun promemoria";
+"reminder_5_MINUTES_BEFORE" = "5 minuti prima";
+"reminder_10_MINUTES_BEFORE" = "10 minuti prima";
+"reminder_15_MINUTES_BEFORE" = "15 minuti prima";
+"reminder_30_MINUTES_BEFORE" = "30 minuti prima";
+"reminder_45_MINUTES_BEFORE" = "45 minuti prima";
+"reminder_1_HOUR_BEFORE" = "1 ora prima";
+"reminder_2_HOURS_BEFORE" = "2 ore prima";
+"reminder_5_HOURS_BEFORE" = "5 ore prima";
+"reminder_15_HOURS_BEFORE" = "15 ore prima";
+"reminder_1_DAY_BEFORE" = "1 giorno prima";
+"reminder_2_DAYS_BEFORE" = "2 giorni prima";
+"reminder_1_WEEK_BEFORE" = "1 settimana prima";
+"reminder_CUSTOM" = "Personalizza...";
+
+"zoom_400" = "400%";
+"zoom_200" = "200%";
+"zoom_100" = "100%";
+"zoom_50" = "50%";
+"zoom_25" = "25%";
+
+/* validation errors */
+
+validate_notitle = "Nessun titolo inserito, continuare?";
+validate_invalid_startdate = "Data iniziale non corretta!";
+validate_invalid_enddate = "Data finale non corretta!";
+validate_endbeforestart = "La data finale specificata è precedente alla data di inizio.";
+
+"Tasks" = "Tasks";
+"Show completed tasks" = "Visualizza attività completate";
+
+/* tabs */
+"Task" = "Attività ";
+"Event" = "Evento";
+"Recurrence" = "Ricorrenza";
+
+/* toolbar */
+"New Event" = "Nuovo evento";
+"New Task" = "Nuova attività ";
+"Edit" = "Modifica";
+"Delete" = "Rimuovi";
+"Go to Today" = "Oggi";
+"Day View" = "Giorno";
+"Week View" = "Settimana";
+"Month View" = "Mese";
+
+"eventPartStatModificationError" = "Lo stato della tua partecipazione non può essere modificato.";
+
+/* menu */
+"New Event..." = "Nuovo evento...";
+"New Task..." = "Nuova attività ...";
+"Edit Selected Event..." = "Modifica evento selezionato...";
+"Delete Selected Event" = "Rimuovi evento selezionato...";
+"Select All" = "Seleziona tutti";
+"Workweek days only" = "Solo giorni lavorativi";
+"Tasks in View" = "Attività in elenco";
+
+"eventDeleteConfirmation" = "Stai per cancellare in maniera permanente l'evento.\nVuoi procedere?";
+"taskDeleteConfirmation" = "Stai per cancellare in maniera permanente il task.\nVuoi procedere?";
+
+"Are you sure you want to delete the calendar \"%{0}\"?"
+= "Sei sicuro di voler cancellare il calendario \"%{0}\"?";
+
+/* Legend */
+"Required participant" = "Richiede partecipanti";
+"Optional participant" = "Partecipanti opzionali";
+"Chair" = "Chair";
+
+"Needs action" = "Richiede un'azione";
+"Accepted" = "Accettato";
+"Declined" = "Declinato";
+"Tentative" = "Tentativo";
+
+"Free" = "Libero";
+"Busy" = "Occupato";
+"Maybe busy" = "Probabilmente occupato";
+"No free-busy information" = "Informazione non disponibile";
+
+/* FreeBusy panel buttons */
+"Previous slot" = "Precedente";
+"Next slot" = "Successivo";
+"Previous hour" = "Ora precedente";
+"Next hour" = "Ora successiva";
+
+/* apt list */
+"Title" = "Titolo";
+"Start" = "Inizio";
+"End" = "Fine";
+"Location" = "Luogo";
+"(Private Event)" = "(Evento privato)";
+
+vevent_class0 = "(Evento pubblico)";
+vevent_class1 = "(Evento privato)";
+vevent_class2 = "(Evento confidenziale)";
+
+vtodo_class0 = "(Attività pubblica)";
+vtodo_class1 = "(Attività privata)";
+vtodo_class2 = "(Attività confidenziale)";
+
+"closeThisWindowMessage" = "Grazie! Ora puoi chiudere la finestra ";
+"Multicolumn Day View" = "Vista per giorno multi-colonna";
+
+"Please select an event or a task." = "Per favore seleziona un evento o un'attività .";
+"Suggest time slot:" = "Periodo suggerito:";
+"From" = "Da";
+"To" = "A";
- (void) setYearMenuItem: (NSNumber *) aYearMenuItem;
- (NSNumber *) yearMenuItem;
-- (WOResponse *) getDragHandlesStateAction;
+- (NSString *) verticalDragHandleStyle;
+- (NSString *) horizontalDragHandleStyle;
+- (NSString *) eventsListViewStyle;
+
- (WOResponse *) saveDragHandleStateAction;
@end
return yearMenuItem;
}
-- (WOResponse *) getDragHandlesStateAction
+- (NSString *) verticalDragHandleStyle
{
- NSArray *dragHandles;
- NSString *vertical, *horizontal;
+ NSString *vertical;
- [self _setupContext];
+ [self _setupContext];
+ vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
+
+ return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil);
+}
+
+- (NSString *) horizontalDragHandleStyle
+{
+ NSString *horizontal;
+
+ [self _setupContext];
+ horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
+
+ return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil);
+}
+
+- (NSString *) eventsListViewStyle
+{
+ NSString *height;
- vertical = [moduleSettings objectForKey: @"DragHandleVertical"];
- horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"];
- dragHandles = [[NSArray alloc] initWithObjects:
- vertical != nil ? vertical : @"",
- horizontal ? horizontal : @"",
- nil];
+ [self _setupContext];
+ height = [moduleSettings objectForKey: @"DragHandleVertical"];
- return [self responseWithStatus: 200
- andString: [dragHandles jsonRepresentation]];
+ return (height ? [NSString stringWithFormat: @"%ipx", ([height intValue] - 27)] : nil);
}
- (WOResponse *) saveDragHandleStateAction
// We recur on specific days...
if ([[self repeat2] intValue] == 1)
{
- [theRule setNamedValue: @"bymonthday" to: [self repeat5]];
+ [theRule setNamedValue: @"bymonthday" to: [self repeat5]];
}
else
{
|iCalWeekDayFriday)];
[rule setFrequency: iCalRecurrenceFrequenceDaily];
}
- else if ([repeat caseInsensitiveCompare: @"MONTHLY"] == NSOrderedSame)
- {
- [rule setNamedValue: @"bymonthday"
- to: [NSString stringWithFormat: @"%d", [[component startDate] dayOfMonth]]];
- [rule setFrequency: iCalRecurrenceFrequenceMonthly];
- }
- else if ([repeat caseInsensitiveCompare: @"DAILY"] == NSOrderedSame ||
- [repeat caseInsensitiveCompare: @"WEEKLY"] == NSOrderedSame ||
- [repeat caseInsensitiveCompare: @"YEARLY"] == NSOrderedSame)
+ else if ([repeat caseInsensitiveCompare: @"MONTHLY"] == NSOrderedSame
+ || [repeat caseInsensitiveCompare: @"DAILY"] == NSOrderedSame
+ || [repeat caseInsensitiveCompare: @"WEEKLY"] == NSOrderedSame
+ || [repeat caseInsensitiveCompare: @"YEARLY"] == NSOrderedSame)
{
+ [rule setInterval: @"1"];
[rule setFrequency:
(iCalRecurrenceFrequency) [rule valueForFrequency: repeat]];
}
protectedBy = "View";
pageName = "UIxCalMainView";
};
- dragHandlesState = {
- protectedBy = "<public>";
- pageName = "UIxCalMainView";
- actionName = "getDragHandlesState";
- };
saveDragHandleState = {
protectedBy = "View";
pageName = "UIxCalMainView";
<tr class="tableview"
var:id="currentCName"
var:contactname="currentContact.displayName"
- var:contactid="currentContact.c_uid"
- onclick="return onContactRowClick(event, this);"
- ondblclick="return onContactRowDblClick(event, this);"
- onmousedown="return false;"
- onselectstart="return false;"
- oncontextmenu="return onContactContextMenu(event, this);">
+ var:contactid="currentContact.c_uid">
<td><img rsrc:src="abcard.gif"
/><var:string value="currentContact.displayName" const:escapeHTML="YES" /></td>
<td><var:string value="currentContact.mail"/></td>
title="name"
var:popup="isPopup">
<var:if condition="hideFrame" const:negate="YES">
+
+ <style type="text/css">
+ <var:if condition="horizontalDragHandleStyle">
+ DIV#dragHandle, DIV#rightPanel
+ { left: <var:string value="horizontalDragHandleStyle" />; }
+ DIV#contactFoldersList
+ { width: <var:string value="horizontalDragHandleStyle" />; }
+ </var:if><var:if condition="verticalDragHandleStyle">
+ DIV#rightDragHandle, DIV#contactView
+ { top: <var:string value="verticalDragHandleStyle" />; }
+ </var:if><var:if condition="contactsListContentStyle">
+ DIV#contactsListContent
+ { height: <var:string value="contactsListContentStyle" />; }
+ </var:if>
+ </style>
+
<div class="menu" id="contactFoldersMenu">
<ul>
<li><var:string label:value="Modify" /></li>
<div class="dragHandle" id="rightDragHandle"><!-- space --></div>
- <div id="contactView" onmousedown="return false;"
- ></div>
+ <div id="contactView" onmousedown="return false;"><!-- space --></div>
</div>
<!-- /var:if> -->
var textMailAccounts = '<var:string value="mailAccounts" const:escapeHTML="NO"/>';
var textQuotaSupport = '<var:string value="quotaSupport" const:escapeHTML="NO"/>';
</script>
+ <style type="text/css">
+ <var:if condition="horizontalDragHandleStyle">
+ DIV#verticalDragHandle, DIV#rightPanel
+ { left: <var:string value="horizontalDragHandleStyle" />; }
+ DIV#leftPanel
+ { width: <var:string value="horizontalDragHandleStyle" />; }
+ </var:if><var:if condition="verticalDragHandleStyle">
+ DIV#rightDragHandle, DIV#messageContent
+ { top: <var:string value="verticalDragHandleStyle" />; }
+ </var:if><var:if condition="mailboxContentStyle">
+ DIV#mailboxContent
+ { height: <var:string value="mailboxContentStyle" />; }
+ </var:if>
+ </style>
<div class="menu" id="accountIconMenu">
<ul>
<li><var:string label:value="Subscribe..." /></li>
label:value="Add subfolders to this folder"/></label>
<br/>
<label><input type="checkbox" class="checkBox"
- const:name="ObjectEraser"
+ const:name="FolderEraser"
var:checked="userCanRemoveFolder"/><var:string
label:value="Remove this folder"/></label>
<br/>
<label><input type="checkbox" class="checkBox"
- const:name="MailMessageEraser"
+ const:name="ObjectEraser"
var:checked="userCanEraseMails"/><var:string
label:value="Erase mails from this folder"/></label>
<br/>
--- /dev/null
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE container>
+<container
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:var="http://www.skyrix.com/od/binding"
+ xmlns:const="http://www.skyrix.com/od/constant"
+ xmlns:rsrc="OGo:url"
+ xmlns:label="OGo:label">
+
+<var:if condition="isSubject">
+ Sei stato aggiunto da <var:string value="currentUserName" const:escapeHTML="NO"/>
+</var:if>
+
+<var:if condition="isBody">
+<var:string value="currentUserName" const:escapeHTML="NO"/> ti ha aggiunto alla lista di accesso per la cartella <var:string const:value='"' const:escapeHTML="NO"/><var:string value="resourceName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/>.
+
+Puoi iscriverti direttamente alla cartella utilizzando questo link:
+ <var:string value="httpAdvisoryURL" const:escapeHTML="NO"/>subscribe?mail-invitation=YES
+
+Altrimenti, potrai farlo in un secondo momento utilizzando l'interfaccia web di SOGo.
+
+Puoi anche accedere a questa risorsa da remoto utilizzando questo URL:
+
+<var:string value="httpFolderURL" const:escapeHTML="NO"/>
+</var:if>
+
+</container>
--- /dev/null
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE container>
+<container
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:var="http://www.skyrix.com/od/binding"
+ xmlns:const="http://www.skyrix.com/od/constant"
+ xmlns:rsrc="OGo:url"
+ xmlns:label="OGo:label">
+
+<var:if condition="isSubject">
+ <var:string value="currentUserName" const:escapeHTML="NO"/> ha modificato i permessi di accesso
+</var:if>
+
+<var:if condition="isBody">
+<var:string value="currentUserName" const:escapeHTML="NO"/> ha modificato i tuoi permessi di accesso alla cartella <var:string const:value='"' const:escapeHTML="NO"/><var:string value="resourceName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/>.
+
+Puoi sottoscrivere direttamente la cartella utilizzando il seguente link:
+ <var:string value="httpAdvisoryURL" const:escapeHTML="NO"/>subscribe?mail-invitation=YES
+
+Altrimenti, potrai sottoscriverti in un secondo momento utilizzando l'interfaccia web di SOGo.
+
+Puoi anche accedere da remoto a questa risorsa utilizzando il seguente URL:
+
+<var:string value="httpFolderURL" const:escapeHTML="NO"/>
+</var:if>
+
+</container>
--- /dev/null
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE container>
+<container
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:var="http://www.skyrix.com/od/binding"
+ xmlns:const="http://www.skyrix.com/od/constant"
+ xmlns:rsrc="OGo:url"
+ xmlns:label="OGo:label">
+
+<var:if condition="isSubject">
+ <var:string value="currentUserName" const:escapeHTML="NO"/> ti ha rimosso
+</var:if>
+
+<var:if condition="isBody">
+<var:string value="currentUserName" const:escapeHTML="NO"/> ti ha rimosso dalla lista accessi per la cartella <var:string const:value='"' const:escapeHTML="NO"/><var:string value="resourceName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/>.
+
+Puoi annullare la tua sottoscrizione utilizzando questo link:
+ <var:string value="httpAdvisoryURL" const:escapeHTML="NO"/>unsubscribe?mail-invitation=YES
+
+Altrimenti, potrai annullare la sottoscrizione in un secondo momento dall'interfaccia di SOGo.
+
+Potrai anche accedere a questa risorsa utilizzando l'URL:
+
+<var:string value="httpFolderURL" const:escapeHTML="NO"/>
+</var:if>
+
+</container>
--- /dev/null
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE container>
+<container
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:var="http://www.skyrix.com/od/binding"
+ xmlns:const="http://www.skyrix.com/od/constant"
+ xmlns:rsrc="OGo:url"
+ xmlns:label="OGo:label">
+
+<var:if condition="isSubject">
+ <var:string const:value='"' const:escapeHTML="NO"/><var:string value="displayName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/> è stata creata
+</var:if>
+
+<var:if condition="isBody">
+La cartella <var:string const:value='"' const:escapeHTML="NO"/><var:string value="displayName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/> è stata creata.
+
+Puoi accedere a questa risorsa da remoto utilizzando il seguente URL:
+
+<var:string value="httpFolderURL" const:escapeHTML="NO"/>
+</var:if>
+
+</container>
--- /dev/null
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE container>
+<container
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:var="http://www.skyrix.com/od/binding"
+ xmlns:const="http://www.skyrix.com/od/constant"
+ xmlns:rsrc="OGo:url"
+ xmlns:label="OGo:label">
+
+<var:if condition="isSubject">
+ <var:string const:value='"' const:escapeHTML="NO"/><var:string value="displayName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/> è stata cancellata
+</var:if>
+
+<var:if condition="isBody">
+La cartella <var:string const:value='"' const:escapeHTML="NO"/><var:string value="displayName" const:escapeHTML="NO"/><var:string const:value='"' const:escapeHTML="NO"/> è stata cancellata.
+
+Il seguente URL non è più disponibile:
+
+<var:string value="httpFolderURL" const:escapeHTML="NO"/>
+</var:if>
+
+</container>
xmlns:label="OGo:label"
className="UIxPageFrame"
title="title">
+ <style type="text/css">
+ <var:if condition="horizontalDragHandleStyle">
+ DIV#verticalDragHandle, DIV#rightPanel
+ { left: <var:string value="horizontalDragHandleStyle" />; }
+ DIV#leftPanel
+ { width: <var:string value="horizontalDragHandleStyle" />; }
+ </var:if><var:if condition="verticalDragHandleStyle">
+ DIV#rightDragHandle, DIV#calendarView
+ { top: <var:string value="verticalDragHandleStyle" />; }
+ </var:if><var:if condition="eventsListViewStyle">
+ DIV#eventsListView
+ { height: <var:string value="eventsListViewStyle" />; }
+ </var:if>
+ </style>
<div class="preload" style="visibility: hidden;">
<img rsrc:src="event-gradient.png"/>
</div>
top: 2.5em;
left: 0px;
right: 0px;
- height: 16em;
+ height: 15.5em;
overflow: auto;
overflow-x: hidden; }
padding: 0px; }
TABLE#contactsList
-{ -khtml-user-select: none;
+{ -moz-user-select: none;
+ -khtml-user-select: none;
width: 100%; }
TABLE#contactsList TD,
/* drag handles */
DIV#dragHandle
-{
- cursor: e-resize;
+{ cursor: e-resize;
top: 8em;
left: 15em;
width: 5px;
- bottom: 0px;
-}
+ bottom: 0px; }
DIV#rightDragHandle
{
}
function openContactsFolder(contactsFolder, reload, idx) {
- if ((contactsFolder && contactsFolder != currentContactFolder)
- || reload) {
- currentContactFolder = contactsFolder;
- var url = URLForFolderID(currentContactFolder) +
- "/view?noframe=1";
-
- var searchValue = search["value"];
- if (searchValue && searchValue.length > 0)
- url += ("&search=" + search["criteria"]
- + "&value=" + escape(searchValue.utf8encode()));
- var sortAttribute = sorting["attribute"];
- if (sortAttribute && sortAttribute.length > 0)
- url += ("&sort=" + sorting["attribute"]
- + "&asc=" + sorting["ascending"]);
-
- var selection;
- if (contactsFolder == currentContactFolder) {
- var contactsList = $("contactsList");
- if (contactsList)
- selection = contactsList.getSelectedRowsId();
-// else
-// window.alert("no contactsList");
- }
- else
- selection = null;
-
- if (document.contactsListAjaxRequest) {
- document.contactsListAjaxRequest.aborted = true;
- document.contactsListAjaxRequest.abort();
- }
- document.contactsListAjaxRequest
- = triggerAjaxRequest(url, contactsListCallback, selection);
- }
+ if ((contactsFolder && contactsFolder != currentContactFolder)
+ || reload) {
+ currentContactFolder = contactsFolder;
+ var url = URLForFolderID(currentContactFolder) +
+ "/view?noframe=1";
+
+ var searchValue = search["value"];
+ if (searchValue && searchValue.length > 0)
+ url += ("&search=" + search["criteria"]
+ + "&value=" + escape(searchValue.utf8encode()));
+ var sortAttribute = sorting["attribute"];
+ if (sortAttribute && sortAttribute.length > 0)
+ url += ("&sort=" + sorting["attribute"]
+ + "&asc=" + sorting["ascending"]);
+
+ var selection;
+ if (contactsFolder == currentContactFolder) {
+ var contactsList = $("contactsList");
+ if (contactsList)
+ selection = contactsList.getSelectedRowsId();
+ // else
+ // window.alert("no contactsList");
+ }
+ else
+ selection = null;
+
+ if (document.contactsListAjaxRequest) {
+ document.contactsListAjaxRequest.aborted = true;
+ document.contactsListAjaxRequest.abort();
+ }
+ document.contactsListAjaxRequest
+ = triggerAjaxRequest(url, contactsListCallback, selection);
+ }
}
function openContactsFolderAtIndex(element) {
}
function contactsListCallback(http) {
- if (http.readyState == 4) {
- if (http.status == 200) {
- document.contactsListAjaxRequest = null;
-
- var table = $("contactsList");
- if (table) {
- // Update table
- var data = http.responseText;
- var html = data.replace(/^(.*\n)*.*(<table(.*\n)*)$/, "$2");
- var tbody = table.tBodies[0];
- var tmp = document.createElement('div');
- $(tmp).update(html);
- table.replaceChild(tmp.firstChild.tBodies[0], tbody);
- }
- else {
- // Add table (doesn't happen .. yet)
- var div = $("contactsListContent");
- div.update(http.responseText);
- table = $("contactsList");
- configureSortableTableHeaders(table);
- TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
- }
-
- if (sorting["attribute"] && sorting["attribute"].length > 0) {
- var sortHeader;
- if (sorting["attribute"] == "displayName")
- sortHeader = $("nameHeader");
- else if (sorting["attribute"] == "mail")
- sortHeader = $("mailHeader");
- else if (sorting["attribute"] == "screenName")
- sortHeader = $("screenNameHeader");
- else if (sorting["attribute"] == "org")
- sortHeader = $("orgHeader");
- else if (sorting["attribute"] == "phone")
- sortHeader = $("phoneHeader");
- else
- sortHeader = null;
+ if (http.readyState == 4) {
+ if (http.status == 200) {
+ document.contactsListAjaxRequest = null;
+
+ var table = $("contactsList");
+ if (table) {
+ // Update table
+ var data = http.responseText;
+ var html = data.replace(/^(.*\n)*.*(<table(.*\n)*)$/, "$2");
+ var tbody = table.tBodies[0];
+ var tmp = document.createElement('div');
+ $(tmp).update(html);
+ table.replaceChild($(tmp).select("table tbody")[0], tbody);
+
+ var rows = table.tBodies[0].rows;
+ for (var i = 0; i < rows.length; i++) {
+ Event.observe(rows[i], "mousedown", onRowClick);
+ Event.observe(rows[i], "dblclick", onContactRowDblClick.bindAsEventListener(rows[i]));
+ Event.observe(rows[i], "selectstart", listRowMouseDownHandler);
+ Event.observe(rows[i], "contextmenu", onContactContextMenu.bindAsEventListener(rows[i]));
+ }
+ }
+ else {
+ // Add table (doesn't happen .. yet)
+ var div = $("contactsListContent");
+ div.update(http.responseText);
+ table = $("contactsList");
+ configureSortableTableHeaders(table);
+ TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
+ }
+
+ if (sorting["attribute"] && sorting["attribute"].length > 0) {
+ var sortHeader;
+ if (sorting["attribute"] == "displayName")
+ sortHeader = $("nameHeader");
+ else if (sorting["attribute"] == "mail")
+ sortHeader = $("mailHeader");
+ else if (sorting["attribute"] == "screenName")
+ sortHeader = $("screenNameHeader");
+ else if (sorting["attribute"] == "org")
+ sortHeader = $("orgHeader");
+ else if (sorting["attribute"] == "phone")
+ sortHeader = $("phoneHeader");
+ else
+ sortHeader = null;
- if (sortHeader) {
- var sortImages = $(table.tHead).getElementsByClassName("sortImage");
- $(sortImages).each(function(item) {
- item.remove();
- });
-
- var sortImage = createElement("img", "messageSortImage", "sortImage");
- sortHeader.insertBefore(sortImage, sortHeader.firstChild);
- if (sorting["ascending"])
- sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
- else
- sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
- }
- }
-
- var selected = http.callbackData;
- if (selected) {
- for (var i = 0; i < selected.length; i++) {
- var row = $(selected[i]);
- if (row)
- row.selectElement();
- }
+ if (sortHeader) {
+ var sortImages = $(table.tHead).select(".sortImage");
+ $(sortImages).each(function(item) {
+ item.remove();
+ });
+
+ var sortImage = createElement("img", "messageSortImage", "sortImage");
+ sortHeader.insertBefore(sortImage, sortHeader.firstChild);
+ if (sorting["ascending"])
+ sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
+ else
+ sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
+ }
+ }
+
+ var selected = http.callbackData;
+ if (selected) {
+ for (var i = 0; i < selected.length; i++) {
+ var row = $(selected[i]);
+ if (row)
+ row.selectElement();
+ }
+ }
}
- }
- else {
- var table = $("contactsList");
- if (table) {
- var sortImages = $(table.tHead).getElementsByClassName("sortImage");
- $(sortImages).each(function(item) {
- item.remove();
- });
- var tBody = $(table.tBodies[0]);
- var length = tBody.rows.length;
- for (var i = length - 1; i > -1; i--)
- tBody.removeChild(tBody.rows[i]);
+ else {
+ var table = $("contactsList");
+ if (table) {
+ var sortImages = $(table.tHead).select(".sortImage");
+ $(sortImages).each(function(item) {
+ item.remove();
+ });
+ var tBody = $(table.tBodies[0]);
+ var length = tBody.rows.length;
+ for (var i = length - 1; i > -1; i--)
+ tBody.removeChild(tBody.rows[i]);
+ }
}
- }
- }
- else
- log ("ajax problem 1: status = " + http.status);
+ }
+ else
+ log ("ajax problem 1: status = " + http.status);
}
function onContactFoldersContextMenu(event) {
var menu = $("contactFoldersMenu");
- //Event.observe(menu, "hideMenu", onContactFoldersContextMenuHide, false);
Event.observe(menu, "mousedown", onContactFoldersContextMenuHide, false);
popupMenu(event, "contactFoldersMenu", this);
$(this).selectElement();
}
-function onContactContextMenu(event, element) {// log ("onContactContextMenu");
+function onContactContextMenu(event) {
var menu = $("contactMenu");
-
- Event.observe(menu, "mousedown", onContactContextMenuHide, false);
- popupMenu(event, "contactMenu", element);
-
- var topNode = $("contactsList");
+ var topNode = $('contactsList');
var selectedNodes = topNode.getSelectedRows();
- topNode.menuSelectedRows = selectedNodes;
- for (var i = 0; i < selectedNodes.length; i++)
- $(selectedNodes[i]).deselect();
- topNode.menuSelectedEntry = element;
- $(element).selectElement();
+
+ if (selectedNodes.length > 1) {
+ // TODO: Add support for selection of multiple contacts
+ }
+ else {
+ Event.observe(menu, "hideMenu", onContactContextMenuHide);
+ popupMenu(event, "contactMenu", this);
+ }
}
function onContactContextMenuHide(event) {
}
/* contact menu entries */
-function onContactRowClick(event, node) {
- loadContact(node.getAttribute('id'));
-
- return onRowClick(event);
-}
-
-function onContactRowDblClick(event, node) {
- var contactId = node.getAttribute('id');
+function onContactRowDblClick(event) {
+ var contactId = this.getAttribute('id');
openContactWindow(URLForFolderID(currentContactFolder)
+ "/" + contactId + "/edit", contactId);
return false;
}
+function onContactSelectionChange(event) {
+ var rows = this.getSelectedRowsId();
+
+ if (rows.length == 1) {
+ var node = $(rows[0]);
+ loadContact(node.getAttribute('id'));
+ }
+ else if (rows.length > 1) {
+ $('contactView').update();
+ }
+}
+
function onMenuEditContact(event) {
var contactId = document.menuTarget.getAttribute('id');
}
var contactView = $('contactView');
- contactView.update();
for (var i = 0; i < rows.length; i++) {
var url, http, rowElem;
}
if (failCount > 0)
- alert("Could not delete the selected contacts!");
+ alert(labels["You cannot delete the selected contact(s)."]);
+ else
+ contactView.update();
return false;
}
}
function onContactMailTo(node) {
- return openMailTo(node.innerHTML);
+ return openMailTo(node.innerHTML);
}
function refreshContacts(contactId) {
}
function onAddressBookNew(event) {
- createFolder(window.prompt(labels["Name of the Address Book"]),
- appendAddressBook);
- preventDefault(event);
+ createFolder(window.prompt(labels["Name of the Address Book"]),
+ appendAddressBook);
+ preventDefault(event);
}
function appendAddressBook(name, folder) {
- var owner;
- var result = true;
+ var owner;
+ var result = true;
- if (folder) {
- owner = getSubscribedFolderOwner(folder);
- folder = accessToSubscribedFolder(folder);
- }
- else
- folder = "/" + name;
+ if (folder) {
+ owner = getSubscribedFolderOwner(folder);
+ folder = accessToSubscribedFolder(folder);
+ }
+ else
+ folder = "/" + name;
- if (!owner)
- owner = UserLogin;
-
- if ($(folder))
- result = false;
- else {
- var contactFolders = $("contactFolders");
- var items = contactFolders.childNodesWithTag("li");
- var li = document.createElement("li");
-
- // Add the calendar to the proper place
- var i = getListIndexForFolder(items, owner, name);
- if (i != items.length) // User is subscribed to other calendars of the same owner
- contactFolders.insertBefore(li, items[i]);
- else
- contactFolders.appendChild(li);
+ if (!owner)
+ owner = UserLogin;
- li.setAttribute("id", folder);
- li.setAttribute("owner", owner);
- li.appendChild(document.createTextNode(name));
- setEventsOnContactFolder(li);
- }
+ if ($(folder))
+ result = false;
+ else {
+ var contactFolders = $("contactFolders");
+ var items = contactFolders.childNodesWithTag("li");
+ var li = document.createElement("li");
+
+ // Add the calendar to the proper place
+ var i = getListIndexForFolder(items, owner, name);
+ if (i != items.length) // User is subscribed to other calendars of the same owner
+ contactFolders.insertBefore(li, items[i]);
+ else
+ contactFolders.appendChild(li);
+
+ li.setAttribute("id", folder);
+ li.setAttribute("owner", owner);
+ li.appendChild(document.createTextNode(name));
+ setEventsOnContactFolder(li);
+ }
- return result;
+ return result;
}
function newFolderCallback(http) {
function configureContactFolders() {
var contactFolders = $("contactFolders");
if (contactFolders) {
- Event.observe(contactFolders, "mousedown", listRowMouseDownHandler);
- Event.observe(contactFolders, "click", onFolderSelectionChange);
+ contactFolders.observe("mousedown", listRowMouseDownHandler);
+ contactFolders.observe("click", onFolderSelectionChange);
var lis = contactFolders.childNodesWithTag("li");
for (var i = 0; i < lis.length; i++)
setEventsOnContactFolder(lis[i]);
-
+
lookupDeniedFolders();
-
+
var personalFolder = $("/personal");
personalFolder.selectElement();
openContactsFolder("/personal");
}
}
-function setEventsOnContactFolder(node) {
- Event.observe(node, "mousedown", listRowMouseDownHandler, false);
- Event.observe(node, "click", onRowClick, false);
- Event.observe(node, "contextmenu",
- onContactFoldersContextMenu.bindAsEventListener(node), false);
-}
+function setEventsOnContactFolder(folder) {
+ var node = $(folder);
-function onMenuModify(event) {
- var folders = $("contactFolders");
- var selected = folders.getSelectedNodes()[0];
-
- if (UserLogin == selected.getAttribute("owner")) {
- var currentName = selected.innerHTML;
- var newName = window.prompt(labels["Address Book Name"],
- currentName);
- if (newName && newName.length > 0
- && newName != currentName) {
- var url = (URLForFolderID(selected.getAttribute("id"))
- + "/renameFolder?name=" + escape(newName.utf8encode()));
- triggerAjaxRequest(url, folderRenameCallback,
- {node: selected, name: newName});
- }
- } else
- window.alert(clabels["Unable to rename that folder!"]);
+ node.observe("mousedown", listRowMouseDownHandler);
+ node.observe("click", onRowClick);
+ Event.observe(node, "contextmenu",
+ onContactFoldersContextMenu.bindAsEventListener(node));
}
-function folderRenameCallback(http) {
- if (http.readyState == 4) {
- if (isHttpStatus204(http.status)) {
- var dict = http.callbackData;
- dict["node"].innerHTML = dict["name"];
- }
- }
-}
+function onMenuModify(event) {
+ var folders = $("contactFolders");
+ var selected = folders.getSelectedNodes()[0];
-function getDragHandlesState() {
- var urlstr = ApplicationBaseURL + "dragHandlesState";
- triggerAjaxRequest(urlstr, getDragHandlesStateCallback);
+ if (UserLogin == selected.getAttribute("owner")) {
+ var currentName = selected.innerHTML;
+ var newName = window.prompt(labels["Address Book Name"],
+ currentName);
+ if (newName && newName.length > 0
+ && newName != currentName) {
+ var url = (URLForFolderID(selected.getAttribute("id"))
+ + "/renameFolder?name=" + escape(newName.utf8encode()));
+ triggerAjaxRequest(url, folderRenameCallback,
+ {node: selected, name: newName});
+ }
+ } else
+ window.alert(clabels["Unable to rename that folder!"]);
}
-function getDragHandlesStateCallback(http) {
- if (http.status == 200) {
- if (http.responseText.length > 0) {
- // The response text is a JSON array
- // of the top and right offsets.
- var data = http.responseText.evalJSON(true);
- if (data[0].length > 0) {
- $("contactsListContent").setStyle({ height: data[0] });
- $("contactView").setStyle({ top: data[0] });
- $("rightDragHandle").setStyle({ top: data[0] });
- }
- if (data[1].length > 0) {
- $("contactFoldersList").setStyle({ width: data[1] });
- $("rightPanel").setStyle({ left: data[1] });
- $("dragHandle").setStyle({ left: data[1] });
+function folderRenameCallback(http) {
+ if (http.readyState == 4) {
+ if (isHttpStatus204(http.status)) {
+ var dict = http.callbackData;
+ dict["node"].innerHTML = dict["name"];
}
- }
- }
+ }
}
function onMenuSharing(event) {
function initContacts(event) {
if (!document.body.hasClassName("popup")) {
configureAbToolbar();
- getDragHandlesState();
}
else
configureSelectionButtons();
+
configureContactFolders();
// initDnd();
if (table) {
// Initialize contacts table
table.multiselect = true;
+ Event.observe(table, "mousedown",
+ onContactSelectionChange.bindAsEventListener(table));
configureSortableTableHeaders(table);
TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true});
}
/* drag handles */
DIV#verticalDragHandle
-{
- cursor: e-resize;
+{ cursor: e-resize;
top: 7.5em;
left: 15em;
width: 5px;
- bottom: 0px;
-}
+ bottom: 0px; }
DIV#rightDragHandle
-{
- cursor: n-resize;
+{ cursor: n-resize;
top: 18em;
left: 0px;
right: 0px;
- height: 5px;
-}
+ height: 5px; }
@media print
{
var sortHeader = $(sorting["attribute"] + "Header");
if (sortHeader) {
- var sortImages = $(table.tHead).getElementsByClassName("sortImage");
+ var sortImages = $(table.tHead).select(".sortImage");
$(sortImages).each(function(item) {
item.remove();
});
// initDnd();
initMailboxTree();
initMessageCheckTimer();
- getDragHandlesState();
}
// Default sort options
return account;
}
-function getDragHandlesState() {
- var urlstr = ApplicationBaseURL + "dragHandlesState";
- triggerAjaxRequest(urlstr, getDragHandlesStateCallback);
-}
-
-function getDragHandlesStateCallback(http) {
- if (http.status == 200) {
- if (http.responseText.length > 0) {
- // The response text is a JSON array
- // of the top and right offsets.
- var data = http.responseText.evalJSON(true);
- if (data[0].length > 0) {
- $("mailboxContent").setStyle({ height: data[0] });
- $("messageContent").setStyle({ top: data[0] });
- $("rightDragHandle").setStyle({ top: data[0] });
- }
- if (data[1].length > 0) {
- $("leftPanel").setStyle({ width: data[1] });
- $("rightPanel").setStyle({ left: data[1] });
- $("verticalDragHandle").setStyle({ left: data[1] });
- }
- }
- }
-}
-
function getFoldersState() {
if (mailAccounts.length > 0) {
var urlstr = ApplicationBaseURL + "foldersState";
if (this.dhType == 'horizontal') {
var pointerX = Event.pointerX(event);
if (pointerX <= this.leftMargin) {
- this.rightBlock.setStyle({ left: (this.leftMargin) + 'px' });
- this.leftBlock.setStyle({ width: (this.leftMargin) + 'px' });
+ this.rightBlock.setStyle({ left: (this.leftMargin) + 'px' });
+ this.leftBlock.setStyle({ width: (this.leftMargin) + 'px' });
}
else {
- var deltaX = Math.floor(pointerX - this.origX - (this.offsetWidth / 2));
- this.rightBlock.setStyle({ left: (this.origRight + deltaX) + 'px' });
- this.leftBlock.setStyle({ width: (this.origLeft + deltaX) + 'px' });
+ var deltaX = Math.floor(pointerX - this.origX - (this.offsetWidth / 2));
+ this.rightBlock.setStyle({ left: (this.origRight + deltaX) + 'px' });
+ this.leftBlock.setStyle({ width: (this.origLeft + deltaX) + 'px' });
}
- this.saveDragHandleState(this.dhType, this.leftBlock.getStyle("width"));
+ this.saveDragHandleState(this.dhType, parseInt(this.leftBlock.getStyle("width")));
}
else if (this.dhType == 'vertical') {
- var pointerY = Event.pointerY(event);
- if (pointerY <= this.topMargin) {
- this.lowerBlock.setStyle({ top: (this.topMargin - delta) + 'px' });
- this.upperBlock.setStyle({ height: (this.topMargin - delta) + 'px' });
- }
- else {
- var deltaY = Math.floor(pointerY - this.origY - (this.offsetHeight / 2));
- this.lowerBlock.setStyle({ top: (this.origLower + deltaY - delta) + 'px' });
- this.upperBlock.setStyle({ height: (this.origUpper + deltaY - delta) + 'px' });
- }
- this.saveDragHandleState(this.dhType, this.upperBlock.getStyle("height"));
+ var pointerY = Event.pointerY(event);
+ if (pointerY <= this.topMargin) {
+ this.lowerBlock.setStyle({ top: (this.topMargin - delta) + 'px' });
+ this.upperBlock.setStyle({ height: (this.topMargin - delta) + 'px' });
+ }
+ else {
+ var deltaY = Math.floor(pointerY - this.origY - (this.offsetHeight / 2));
+ this.lowerBlock.setStyle({ top: (this.origLower + deltaY - delta) + 'px' });
+ this.upperBlock.setStyle({ height: (this.origUpper + deltaY - delta) + 'px' });
+ }
+ this.saveDragHandleState(this.dhType, parseInt(this.lowerBlock.getStyle("top")));
}
Event.stopObserving(document.body, "mouseup", this.stopHandleDraggingBound, true);
Event.stopObserving(document.body, "mousemove", this.moveBound, true);
var sortHeader = $(sorting["attribute"] + "Header");
if (sortHeader) {
- var sortImages = $(table.tHead).getElementsByClassName("sortImage");
+ var sortImages = $(table.tHead).select(".sortImage");
$(sortImages).each(function(item) {
item.remove();
});
}
function refreshCalendarEventsCallback(http) {
- if (http.readyState == 4
- && http.status == 200) {
-
- if (http.responseText.length > 0) {
- var data = http.responseText.evalJSON(true);
- // log("refresh calendar events: " + data.length);
- for (var i = 0; i < data.length; i++)
- drawCalendarEvent(data[i],
- http.callbackData["startDate"],
- http.callbackData["endDate"]);
- }
- scrollDayView(http.callbackData["scrollEvent"]);
- }
- else
- log("AJAX error when refreshing calendar events");
+ if (http.readyState == 4
+ && http.status == 200) {
+ if (http.responseText.length > 0) {
+ var data = http.responseText.evalJSON(true);
+ // log("refresh calendar events: " + data.length);
+ var dateTuples = new Array();
+ for (var i = 0; i < data.length; i++) {
+ drawCalendarEvent(data[i],
+ http.callbackData["startDate"],
+ http.callbackData["endDate"]);
+ }
+ }
+ scrollDayView(http.callbackData["scrollEvent"]);
+ }
+ else
+ log("AJAX error when refreshing calendar events");
}
function drawCalendarEvent(eventData, sd, ed) {
- var viewStartDate = sd.asDate();
- var viewEndDate = ed.asDate();
+ var viewStartDate = sd.asDate();
+ var viewEndDate = ed.asDate();
- var startDate = new Date();
- startDate.setTime(eventData[4] * 1000);
- var endDate = new Date();
- endDate.setTime(eventData[5] * 1000);
+ var startDate = new Date();
+ startDate.setTime(eventData[4] * 1000);
+ var endDate = new Date();
+ endDate.setTime(eventData[5] * 1000);
- // log ("s: " + startDate + "; e: " + endDate);
+ //log ("s: " + startDate + "; e: " + endDate);
- var days = startDate.daysUpTo(endDate);
+ var days = startDate.daysUpTo(endDate);
- var title;
- if (currentView == "monthview"
- && (eventData[7] == 0))
- title = startDate.getDisplayHoursString() + " " + eventData[3];
- else
- title = eventData[3];
+ var title;
+ if (currentView == "monthview"
+ && (eventData[7] == 0))
+ title = startDate.getDisplayHoursString() + " " + eventData[3];
+ else
+ title = eventData[3];
- // log("title: " + title);
- // log("viewS: " + viewStartDate);
- var startHour = null;
- var endHour = null;
+ // log("title: " + title);
+ // log("viewS: " + viewStartDate);
+ var startHour = null;
+ var endHour = null;
- var siblings = new Array();
- for (var i = 0; i < days.length; i++)
- if (days[i].earlierDate(viewStartDate) == viewStartDate
- && days[i].laterDate(viewEndDate) == viewEndDate) {
- var starts;
-
- // log("day: " + days[i]);
- if (i == 0) {
- var quarters = (startDate.getUTCHours() * 4
- + Math.floor(startDate.getUTCMinutes() / 15));
- starts = quarters;
- startHour = startDate.getDisplayHoursString();
- endHour = endDate.getDisplayHoursString();
- }
- else
- starts = 0;
+ var siblings = new Array();
+ for (var i = 0; i < days.length; i++)
+ if (days[i].earlierDate(viewStartDate) == viewStartDate
+ && days[i].laterDate(viewEndDate) == viewEndDate) {
+ var starts;
+
+ // log("day: " + days[i]);
+ if (i == 0) {
+ var quarters = (startDate.getUTCHours() * 4
+ + Math.floor(startDate.getUTCMinutes() / 15));
+ starts = quarters;
+ startHour = startDate.getDisplayHoursString();
+ endHour = endDate.getDisplayHoursString();
+ }
+ else
+ starts = 0;
- var ends;
- var lasts;
- if (i == days.length - 1) {
- var quarters = (endDate.getUTCHours() * 4
- + Math.ceil(endDate.getUTCMinutes() / 15));
- ends = quarters;
- }
- else
- ends = 96;
- lasts = ends - starts;
- if (!lasts)
- lasts = 1;
-
- var eventDiv = newEventDIV(eventData[0], eventData[1], starts, lasts,
- null, null, title);
- siblings.push(eventDiv);
- eventDiv.siblings = siblings;
- if (eventData[9].length > 0)
- eventDiv.addClassName(eventData[9]);
- var dayString = days[i].getDayString();
- // log("day: " + dayString);
- var parentDiv = null;
- if (currentView == "monthview") {
- var dayDivs = $("monthDaysView").childNodesWithTag("div");
- var j = 0;
- while (!parentDiv && j < dayDivs.length) {
- if (dayDivs[j].getAttribute("day") == dayString)
- parentDiv = dayDivs[j];
- else
- j++;
- }
+ var ends;
+ var lasts;
+ if (i == days.length - 1) {
+ var quarters = (endDate.getUTCHours() * 4
+ + Math.ceil(endDate.getUTCMinutes() / 15));
+ ends = quarters;
+ }
+ else
+ ends = 96;
+ lasts = ends - starts;
+ if (!lasts)
+ lasts = 1;
+
+ var eventDiv = newEventDIV(eventData[0], eventData[1], starts, lasts,
+ null, null, title);
+ siblings.push(eventDiv);
+ eventDiv.siblings = siblings;
+ if (eventData[9].length > 0)
+ eventDiv.addClassName(eventData[9]); // event owner status
+ var dayString = days[i].getDayString();
+ // log("day: " + dayString);
+ var parentDiv = null;
+ if (currentView == "monthview") {
+ var dayDivs = $("monthDaysView").childNodesWithTag("div");
+ var j = 0;
+ while (!parentDiv && j < dayDivs.length) {
+ if (dayDivs[j].getAttribute("day") == dayString)
+ parentDiv = dayDivs[j];
+ else
+ j++;
+ }
+ }
+ else {
+ if (eventData[7] == 0) {
+ var daysView = $("daysView");
+ var eventsDiv = $(daysView).childNodesWithTag("div")[1];
+ var dayDivs = $(eventsDiv).childNodesWithTag("div");
+ var j = 0;
+ while (!parentDiv && j < dayDivs.length) {
+ if (dayDivs[j].getAttribute("day") == dayString)
+ parentDiv = dayDivs[j].childNodesWithTag("div")[0];
+ else
+ j++;
+ }
+ }
+ else {
+ var header = $("calendarHeader");
+ var daysDiv = $(header).childNodesWithTag("div")[1];
+ var dayDivs = $(daysDiv).childNodesWithTag("div");
+ var j = 0;
+ while (!parentDiv && j < dayDivs.length) {
+ if (dayDivs[j].getAttribute("day") == dayString)
+ parentDiv = dayDivs[j];
+ else
+ j++;
+ }
+ }
+ }
+ if (parentDiv)
+ parentDiv.appendChild(eventDiv);
}
- else {
- if (eventData[7] == 0) {
- var daysView = $("daysView");
- var eventsDiv = $(daysView).childNodesWithTag("div")[1];
- var dayDivs = $(eventsDiv).childNodesWithTag("div");
- var j = 0;
- while (!parentDiv && j < dayDivs.length) {
- if (dayDivs[j].getAttribute("day") == dayString)
- parentDiv = dayDivs[j].childNodesWithTag("div")[0];
- else
- j++;
- }
- }
- else {
- var header = $("calendarHeader");
- var daysDiv = $(header).childNodesWithTag("div")[1];
- var dayDivs = $(daysDiv).childNodesWithTag("div");
- var j = 0;
- while (!parentDiv && j < dayDivs.length) {
- if (dayDivs[j].getAttribute("day") == dayString)
- parentDiv = dayDivs[j];
- else
- j++;
- }
- }
- }
- if (parentDiv)
- parentDiv.appendChild(eventDiv);
- }
}
function eventClass(cname) {
log ("ajax problem 5: " + http.status);
}
-function getDragHandlesState() {
- var urlstr = ApplicationBaseURL + "dragHandlesState";
- triggerAjaxRequest(urlstr, getDragHandlesStateCallback);
-}
-
-function getDragHandlesStateCallback(http) {
- if (http.status == 200) {
- if (http.responseText.length > 0) {
- // The response text is a JSON array
- // of the top and right offsets.
- var data = http.responseText.evalJSON(true);
- if (data[0].length > 0) {
- $("eventsListView").setStyle({ height: data[0] });
- $("calendarView").setStyle({ top: data[0] });
- $("rightDragHandle").setStyle({ top: data[0] });
- }
- if (data[1].length > 0) {
- $("leftPanel").setStyle({ width: data[1] });
- $("rightPanel").setStyle({ left: data[1] });
- $("verticalDragHandle").setStyle({ left: data[1] });
- }
- }
- }
-}
-
function configureLists() {
var list = $("tasksList");
list.multiselect = true;
}
function initCalendars() {
- sorting["attribute"] = "start";
- sorting["ascending"] = true;
+ sorting["attribute"] = "start";
+ sorting["ascending"] = true;
- if (!document.body.hasClassName("popup")) {
- getDragHandlesState();
- initDateSelectorEvents();
- initCalendarSelector();
- configureSearchField();
- configureLists();
- var selector = $("calendarSelector");
- if (selector)
- selector.attachMenu("calendarsMenu");
- }
+ if (!document.body.hasClassName("popup")) {
+ initDateSelectorEvents();
+ initCalendarSelector();
+ configureSearchField();
+ configureLists();
+ var selector = $("calendarSelector");
+ if (selector)
+ selector.attachMenu("calendarsMenu");
+ }
}
FastInit.addOnLoad(initCalendars);
ARG_GSMAKE="$HOME/GNUstep/Library/Makefiles/"
elif test -f /usr/GNUstep/System/Library/Makefiles/GNUstep.sh; then
ARG_GSMAKE="/usr/GNUstep/System/Library/Makefiles/"
+ elif test -f /usr/share/GNUstep/Makefiles/GNUstep.sh; then
+ ARG_GSMAKE="/usr/share/GNUstep/Makefiles/"
+ elif test -f $GNUSTEP_MAKEFILES/GNUstep.sh; then
+ ARG_GSMAKE="$GNUSTEP_MAKEFILES/"
else
echo "error: please specify a GNUstep make tree!"
exit 1