]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1390 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 25 Mar 2008 22:43:18 +0000 (22:43 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Tue, 25 Mar 2008 22:43:18 +0000 (22:43 +0000)
85 files changed:
ChangeLog
NEWS
Protocols/iCalHTTP/GNUmakefile
SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m
SOPE/NGCards/iCalRecurrenceCalculator.m
Scripts/sql-update-20080303.sh
SoObjects/Appointments/GNUmakefile
SoObjects/Appointments/SOGoAppointmentFolder.m
SoObjects/Appointments/SOGoAptMailDeletion.m
SoObjects/Appointments/SOGoAptMailICalReply.m
SoObjects/Appointments/SOGoAptMailInvitation.m
SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod [new file with mode: 0644]
SoObjects/Appointments/SOGoAptMailRemoval.m
SoObjects/Appointments/SOGoAptMailUpdate.m
SoObjects/Mailer/GNUmakefile
SoObjects/Mailer/SOGoMailForward.h
SoObjects/Mailer/SOGoMailForward.m
SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html [new file with mode: 0644]
SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod [new file with mode: 0644]
SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html [new file with mode: 0644]
SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod [new file with mode: 0644]
SoObjects/Mailer/SOGoMailReply.h
SoObjects/Mailer/SOGoMailReply.m
SoObjects/SOGo/SOGoGCSFolder.m
SoObjects/SOGo/SOGoObject.m
UI/Common/GNUmakefile
UI/Common/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/Contacts/English.lproj/Localizable.strings
UI/Contacts/French.lproj/Localizable.strings
UI/Contacts/GNUmakefile
UI/Contacts/German.lproj/Localizable.strings
UI/Contacts/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/Contacts/UIxContactFoldersView.h
UI/Contacts/UIxContactFoldersView.m
UI/Contacts/UIxContactsListViewContainer.h
UI/Contacts/UIxContactsListViewContainer.m
UI/Contacts/product.plist
UI/MailPartViewers/GNUmakefile
UI/MailPartViewers/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/MailerUI/GNUmakefile
UI/MailerUI/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/MailerUI/UIxMailMainFrame.h
UI/MailerUI/UIxMailMainFrame.m
UI/MailerUI/product.plist
UI/MainUI/GNUmakefile
UI/MainUI/Italian.lproj/Locale [new file with mode: 0644]
UI/MainUI/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/PreferencesUI/GNUmakefile
UI/PreferencesUI/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/SOGoUI/SOGoACLAdvisory.h
UI/SOGoUI/SOGoACLAdvisory.m
UI/SOGoUI/SOGoFolderAdvisory.h
UI/SOGoUI/SOGoFolderAdvisory.m
UI/Scheduler/GNUmakefile
UI/Scheduler/Italian.lproj/Localizable.strings [new file with mode: 0644]
UI/Scheduler/UIxCalMainView.h
UI/Scheduler/UIxCalMainView.m
UI/Scheduler/UIxComponentEditor.m
UI/Scheduler/product.plist
UI/Templates/ContactsUI/UIxContactsListView.wox
UI/Templates/ContactsUI/UIxContactsListViewContainer.wox
UI/Templates/MailerUI/UIxMailMainFrame.wox
UI/Templates/MailerUI/UIxMailUserRightsEditor.wox
UI/Templates/SOGoACLItalianAdditionAdvisory.wox [new file with mode: 0644]
UI/Templates/SOGoACLItalianModificationAdvisory.wox [new file with mode: 0644]
UI/Templates/SOGoACLItalianRemovalAdvisory.wox [new file with mode: 0644]
UI/Templates/SOGoFolderItalianAdditionAdvisory.wox [new file with mode: 0644]
UI/Templates/SOGoFolderItalianRemovalAdvisory.wox [new file with mode: 0644]
UI/Templates/SchedulerUI/UIxCalMainView.wox
UI/WebServerResources/ContactsUI.css
UI/WebServerResources/ContactsUI.js
UI/WebServerResources/MailerUI.css
UI/WebServerResources/MailerUI.js
UI/WebServerResources/SOGoDragHandles.js
UI/WebServerResources/SchedulerUI.js
configure

index 3bbda7cf9a1ce71be362098165ed0a7c21f15575..87b2d996bbc99e9f254e4b4280dcd6a7c367b276 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+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
diff --git a/NEWS b/NEWS
index 03ec83cb28dde69afcc1f267089af7753d87cc82..0dceb933e14fe2108493709e78d1d5534c9d0fa1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,11 @@
 - 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)
 ------------------------
index e59e8c38fdf73ef1ed6ce5aae761880d52a5b211..df1232dbb88d0f0f2e13f070dbbc2bcadaa4ecb1 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = iCalHTTP
 
 iCalHTTP_PRINCIPAL_CLASS = iCalHTTPProduct
 
-iCalHTTP_LANGUAGES = English French
+iCalHTTP_LANGUAGES = English French Italian
 
 iCalHTTP_OBJC_FILES = \
        iCalHTTPProduct.m       \
index e8a236312392b3290e3e28175b3c5d2ef81b3ad3..63cfeb97962f2760aa2ee5fa4f39a1c89686774c 100644 (file)
 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 {
index 4923639cbaf6e9b424fe3267bd085154debcbac5..b5ef7441069530d34b3db2fbd7029a9f3c1364a3 100644 (file)
@@ -71,11 +71,38 @@ static Class yearlyCalcClass  = Nil;
 
 /* 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 */
@@ -178,131 +205,130 @@ static Class yearlyCalcClass  = Nil;
 
 /* 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 */
index e71a28b004329eeac20f08932ee064208d02ded3..e30c2b0039350003fa3cbecd69e6a4f54cb60324 100644 (file)
@@ -34,7 +34,7 @@ sqlscript=""
 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"
 }
index 31caa3fd5086a7ecbe8d1a5582a77e29506ceb73..7893f0d4be2064d383f537e4f7926af9d5239524 100644 (file)
@@ -49,6 +49,12 @@ Appointments_COMPONENTS +=   \
        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/
index 2e81c029b873f937d90dd31e0e1e35f2cddf8361..173b9c0f9df21eda33ab55a45c4ef6ddb396453f 100644 (file)
@@ -157,17 +157,14 @@ static NSNumber   *sharedYes = nil;
   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:)
@@ -191,12 +188,8 @@ static NSNumber   *sharedYes = nil;
     {
       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;
@@ -256,6 +249,8 @@ static NSNumber   *sharedYes = nil;
 
   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];
@@ -334,31 +329,27 @@ static NSNumber   *sharedYes = nil;
   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
@@ -506,8 +497,6 @@ static NSNumber   *sharedYes = nil;
     {
       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"];
     }
 
@@ -918,10 +907,10 @@ static NSNumber   *sharedYes = nil;
                     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;
@@ -929,47 +918,44 @@ static NSNumber   *sharedYes = nil;
   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
@@ -977,19 +963,18 @@ static NSNumber   *sharedYes = nil;
 {
   // 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;
 }
 
index e0c13c8ee88fcaf97258f12fcf3843cd6094f096..02b7c94943f3fd9686e611019fdb8e51e3b8ef6d 100644 (file)
 
 @implementation SOGoAptMailGermanDeletion
 @end
+
+@interface SOGoAptMailItalinDeletion : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianDeletion
+@end
+
index 02a366e76f823ebbab1047cd33f6dd385e17b959..eecd6973698377305ee354a8c1870211157a9bcd 100644 (file)
@@ -176,3 +176,10 @@ static NSCharacterSet *wsSet  = nil;
 
 @implementation SOGoAptMailGermanICalReply
 @end
+
+@interface SOGoAptMailItalianICalReply : SOGoAptMailICalReply
+@end
+
+@implementation SOGoAptMailItalianICalReply
+@end
+
index 84d4b3f7cfb82f66655de3b40abbf2cf624bb384..398c3851b15313f0f132c8310b7c65850dba711c 100644 (file)
 
 @implementation SOGoAptMailGermanInvitation
 @end
+
+@interface SOGoAptMailItalianInvitation : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianInvitation
+@end
+
diff --git a/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html
new file mode 100644 (file)
index 0000000..e470bb0
--- /dev/null
@@ -0,0 +1,6 @@
+<#IsSubject>L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime /> &egrave; stato cancellato</#IsSubject>
+<#IsBody>
+L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime
+/> &egrave; stato cancellato da  <#Organizer
+/>.
+</#IsBody>
\ No newline at end of file
diff --git a/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod
new file mode 100644 (file)
index 0000000..3b83a32
--- /dev/null
@@ -0,0 +1,34 @@
+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;
+}
diff --git a/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html
new file mode 100644 (file)
index 0000000..e2c1caa
--- /dev/null
@@ -0,0 +1,5 @@
+<#IsSubject>Re: appuntamento del <#AptStartDate/> alle ore <#AptStartTime/></#IsSubject>
+<#IsBody>
+<#Attendee/> ha <#HasAccepted>accettato</#HasAccepted><#HasDeclined>declinato</#HasDeclined> il
+tuo invito.
+</#IsBody>
diff --git a/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod
new file mode 100644 (file)
index 0000000..622d22e
--- /dev/null
@@ -0,0 +1,33 @@
+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;
+}
diff --git a/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html
new file mode 100644 (file)
index 0000000..f14f988
--- /dev/null
@@ -0,0 +1,8 @@
+<#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
diff --git a/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod
new file mode 100644 (file)
index 0000000..3b83a32
--- /dev/null
@@ -0,0 +1,34 @@
+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;
+}
diff --git a/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html
new file mode 100644 (file)
index 0000000..688e867
--- /dev/null
@@ -0,0 +1,5 @@
+<#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
diff --git a/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod
new file mode 100644 (file)
index 0000000..3b83a32
--- /dev/null
@@ -0,0 +1,34 @@
+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;
+}
diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html
new file mode 100644 (file)
index 0000000..c8d10ee
--- /dev/null
@@ -0,0 +1,11 @@
+<#IsSubject>L'appuntamento fissato in data <#OldAptStartDate /> alle ore <#OldAptStartTime /> &egrave; stato modificato </#IsSubject>
+<#IsBody>
+Questo appuntamento, fissato precedentemete in data <#OldAptStartDate /> 
+alle ore <#OldAptStartTime /> &egrave; ora programmato il <#NewAptStartDate
+/> alle ore <#NewAptStartTime
+/>
+<#HasHomePageURL>
+Per confermare o disdire vai alla pagina <#HomePageURL
+/>.
+</#HasHomePageURL>
+</#IsBody>
\ No newline at end of file
diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod
new file mode 100644 (file)
index 0000000..9310d67
--- /dev/null
@@ -0,0 +1,46 @@
+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;
+}
index 0053ce4beb3aea828c6e9b64ab89417b7764152b..a35bab183ab4b64f646438196a6f7db3d95b0d57 100644 (file)
 
 @implementation SOGoAptMailGermanRemoval
 @end
+
+@interface SOGoAptMailItalianRemoval : SOGoAptMailNotification
+@end
+
+@implementation SOGoAptMailItalianRemoval
+@end
+
index 21f1d7d018037686cd0116384919f7f68074c6f9..3ff6ff3262d33c0fdc55a9793ddb296d73622207 100644 (file)
 
 @implementation SOGoAptMailFrenchUpdate
 @end
+
+
+@interface SOGoAptMailGermanUpdate : SOGoAptMailNotification
+{
+}
+@end
+
+@implementation SOGoAptMailGermanUpdate
+@end
+
+
+@interface SOGoAptMailItalianUpdate : SOGoAptMailNotification
+{
+}
+@end
+
+@implementation SOGoAptMailItalianUpdate
+@end
+
index 902d868ec7d78f60658fa1fd79932214fa1c556c..b80b24053c0ecfc114075b2ecb85b8f6ab6e6be9 100644 (file)
@@ -42,9 +42,12 @@ Mailer_RESOURCE_FILES += \
        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/
index d5da454946a0c8ea65917b77102886eaafdeffbd..e20fa5d6e162352c0d1dd7f41bb5cfca32cbe169 100644 (file)
@@ -47,4 +47,7 @@
 @interface SOGoMailGermanForward : SOGoMailForward
 @end
 
+@interface SOGoMailItalianForward : SOGoMailForward
+@end
+
 #endif /* SOGOMAILFORWARD_H */
index 37bce7a5b94ab66e484a3c1384e8ed3e20ddbc0d..49165bb642e3314b1c08d33f36d89cced7d570f8 100644 (file)
 
 @implementation SOGoMailGermanForward
 @end
+
+@implementation SOGoMailItalianForward
+@end
+
diff --git a/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html
new file mode 100644 (file)
index 0000000..369e666
--- /dev/null
@@ -0,0 +1,10 @@
+-------- 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/>
diff --git a/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod
new file mode 100644 (file)
index 0000000..5def327
--- /dev/null
@@ -0,0 +1,74 @@
+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;
+}
diff --git a/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html
new file mode 100644 (file)
index 0000000..49a2dda
--- /dev/null
@@ -0,0 +1,5 @@
+Il giorno <#date/>, <#from/> ha scritto:
+
+<#messageBody/>
+
+<#signature/>
diff --git a/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod
new file mode 100644 (file)
index 0000000..0e212a7
--- /dev/null
@@ -0,0 +1,19 @@
+date: WOString {
+  value = date;
+  escapeHTML = NO;
+}
+
+from: WOString {
+  value = from;
+  escapeHTML = NO;
+}
+
+messageBody: WOString {
+  value = messageBody;
+  escapeHTML = NO;
+}
+
+signature: WOString {
+  value = signature;
+  escapeHTML = NO;
+}
index 8f13fcabe08a0a6888744a4c77a0acf172f04beb..421fcc7015a668ee52f5a423273b34eb3d8fc44c 100644 (file)
@@ -47,4 +47,7 @@
 @interface SOGoMailGermanReply : SOGoMailReply
 @end
 
+@interface SOGoMailItalianReply : SOGoMailReply
+@end
+
 #endif /* SOGOMAILREPLY_H */
index f196b33c2431ed8f48d9db93884d8d4e98a026ae..c2294c08bcce72fa1f5bb771e1e240398874939d 100644 (file)
 
 @implementation SOGoMailGermanReply
 @end
+
+@implementation SOGoMailItalianReply
+@end
+
index 38a0c90d971636e3f9cee465b693f5d99e05aa9b..d7f6c6b71b639be480be7a99968bac06c7addba3 100644 (file)
@@ -528,12 +528,26 @@ static BOOL sendFolderAdvisories = NO;
                         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 */
index a4e0c227d2c5b63ef3cd60b2ff30adcd3eee16ca..64f1293fce2c7975c0fc92320e8a5f90c8c79539 100644 (file)
@@ -20,8 +20,8 @@
 */
 
 #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>
index f4def785b958c8d61a7e3a5d65ab326801f2cc0a..4c45d86b3cdbe37e95595e5a44f62c146e43a526 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = CommonUI
 
 CommonUI_PRINCIPAL_CLASS = CommonUIProduct
 
-CommonUI_LANGUAGES = English French German
+CommonUI_LANGUAGES = English French German Italian
 
 CommonUI_OBJC_FILES +=         \
        CommonUIProduct.m       \
diff --git a/UI/Common/Italian.lproj/Localizable.strings b/UI/Common/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..0cf9869
--- /dev/null
@@ -0,0 +1,41 @@
+/* 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!";
index 6762a87f0f1460f516930d1c264ab61c42177e45..0b2871c35f8ddab0b10ad6be3cd4b131e60cdc7c 100644 (file)
 "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";
 
index 9111b54ec2314a9ba05b4e73cf7ce60056a82bdf..82f612d2531b6c5d5f6aedcd7bdadd048e55b31b 100644 (file)
 "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!"
index a561d82f5e4447e49ef05797730fd159069a7ac2..1360378b5ae3967948e6789cc04b472c323a901c 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = ContactsUI
 
 ContactsUI_PRINCIPAL_CLASS = ContactsUIProduct
 
-ContactsUI_LANGUAGES = English French German
+ContactsUI_LANGUAGES = English French German Italian
 
 ContactsUI_OBJC_FILES =                        \
        UIxContactsUserFolders.m \
index 15debcc0d5b363b0b5387b5c5eae432ffb3e7455..d366fe5bf27fedbf4de690060087a97cf31848c6 100644 (file)
 "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";
 
diff --git a/UI/Contacts/Italian.lproj/Localizable.strings b/UI/Contacts/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..d7c2d48
--- /dev/null
@@ -0,0 +1,163 @@
+/* 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
index 51f58b9d698d3fc187f0e581e415ea4754854896..507b522d9b734b188ce72587a9e5481bc247e050 100644 (file)
@@ -31,7 +31,6 @@
   NSMutableDictionary *moduleSettings;
 }
 
-- (WOResponse *) getDragHandlesStateAction;
 - (WOResponse *) saveDragHandleStateAction;
 
 @end
index 964d3506bb3d22264fb457afb1654444bf039b2a..97d143f36c7883d626fdc299732e20519ce54a1e 100644 (file)
 //           ? 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;
index eb0d72d87c9aabe6fbc71ee23c3d43f3570782a8..c8488527cc6f791eb57791a56480a1c8892872a1 100644 (file)
@@ -33,6 +33,8 @@
 {
   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 */
index 23c2a5eb5748b0b42c894998a61be6538dfbd575..724ff867b1d53efddc8b515476eb874a42b02e42 100644 (file)
 
 @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
index 5b19b2f6ef129d9553add9bcbb6df54c09594903..8c06e706e0d39363fbd9907161ce750d21f181b2 100644 (file)
               protectedBy = "View";
               pageName    = "UIxContactsUserFolders"; 
           };
-           dragHandlesState = {
-              protectedBy = "<public>";
-              pageName    = "UIxContactFoldersView";
-              actionName  = "getDragHandlesState";
-           };
           saveDragHandleState = {
              protectedBy = "View";
              pageName    = "UIxContactFoldersView";
index 43db3f799882013c97453954219b5f8f8a315f8b..2c5689d26476db4eeeca581df610367b9c9e2357 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = MailPartViewers
 
 MailPartViewers_PRINCIPAL_CLASS = MailPartViewersProduct
 
-MailPartViewers_LANGUAGES = English French German
+MailPartViewers_LANGUAGES = English French German Italian
 
 MailPartViewers_OBJC_FILES += \
        MailPartViewersProduct.m        \
diff --git a/UI/MailPartViewers/Italian.lproj/Localizable.strings b/UI/MailPartViewers/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..a1051d4
--- /dev/null
@@ -0,0 +1,34 @@
+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";
index 39cd51adec17dcc5efeab3de2847061403dd793e..dc6e918afecbed75a4392d178b90a65126431bd2 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = MailerUI
 
 MailerUI_PRINCIPAL_CLASS = MailerUIProduct
 
-MailerUI_LANGUAGES = English French German
+MailerUI_LANGUAGES = English French German Italian
 
 MailerUI_OBJC_FILES += \
        MailerUIProduct.m       \
diff --git a/UI/MailerUI/Italian.lproj/Localizable.strings b/UI/MailerUI/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..c472080
--- /dev/null
@@ -0,0 +1,240 @@
+/* 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 &hellip;";
+
+/* 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";
index a4f3dcc6bdb10670c0e60ab2305d9ba5e14a724c..922350fb15650cf375ff2efc9ca32006f268c778 100644 (file)
   NSMutableDictionary *moduleSettings;
 }
 
-- (WOResponse *) getDragHandlesStateAction;
 - (WOResponse *) getFoldersStateAction;
 
+- (NSString *) verticalDragHandleStyle;
+- (NSString *) horizontalDragHandleStyle;
+- (NSString *) mailboxContentStyle;
+
 - (WOResponse *) saveDragHandleStateAction;
 - (WOResponse *) saveFoldersStateAction;
 
index 40126f46d75e85c82fe1f2cbd3a7551910d7f92e..dfd45ea48ef80e06fb309fcd61810669654cc5a0 100644 (file)
   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
index 4b10ad44d38ec9e6a31cb115274a1ecfd73bf75b..733563bebabb0140ddca61aff235c0c28b6299a9 100644 (file)
          pageName    = "UIxMailMainFrame";
          actionName  = "compose";
        };
-       dragHandlesState = {
-         protectedBy = "View";
-         pageName    = "UIxMailMainFrame";
-         actionName  = "getDragHandlesState";
-       };
        foldersState = {
          protectedBy = "View";
          pageName    = "UIxMailMainFrame";
index 6149ed2452fa1d6a8817426d2a92d7a13a9fc043..2d0bf7f8e5024c0b78ee6ac1a9a13375c5698121 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = MainUI
 
 MainUI_PRINCIPAL_CLASS = MainUIProduct
 
-MainUI_LANGUAGES = English French German
+MainUI_LANGUAGES = English French German Italian
 
 MainUI_OBJC_FILES += \
        MainUIProduct.m         \
diff --git a/UI/MainUI/Italian.lproj/Locale b/UI/MainUI/Italian.lproj/Locale
new file mode 100644 (file)
index 0000000..3ac61a3
--- /dev/null
@@ -0,0 +1,35 @@
+/* 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";
+}
diff --git a/UI/MainUI/Italian.lproj/Localizable.strings b/UI/MainUI/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..0fbd90c
--- /dev/null
@@ -0,0 +1,10 @@
+/* this file is in UTF-8 format! */
+
+"title" = "SOGo";
+
+"Username:" = "Username:";
+"Password:" = "Password:";
+
+"Connect" = "Entra";
+
+"Wrong username or password." = "Username o password non corretti.";
index fa7f428da1e848866401fd39de2fb02ad78180b7..e36ec4dc84afdafc0373916716c27efdd5409f7e 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = PreferencesUI
 
 PreferencesUI_PRINCIPAL_CLASS = PreferencesUIProduct
 
-PreferencesUI_LANGUAGES = English French German
+PreferencesUI_LANGUAGES = English French German Italian
 
 PreferencesUI_OBJC_FILES =             \
        PreferencesUIProduct.m          \
diff --git a/UI/PreferencesUI/Italian.lproj/Localizable.strings b/UI/PreferencesUI/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..d2cc3ab
--- /dev/null
@@ -0,0 +1,91 @@
+/* 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";
index 7f200d813a60010f3426665aaa31489b2420542d..65c13c429814e247294004e2ba2db81c71c2039a 100644 (file)
@@ -74,6 +74,9 @@
 @interface SOGoACLGermanAdditionAdvisory : SOGoACLAdditionAdvisory
 @end
 
+@interface SOGoACLItalianAdditionAdvisory : SOGoACLAdditionAdvisory
+@end
+
 @interface SOGoACLEnglishModificationAdvisory : SOGoACLModificationAdvisory
 @end
 
@@ -83,6 +86,9 @@
 @interface SOGoACLGermanModificationAdvisory : SOGoACLModificationAdvisory
 @end
 
+@interface SOGoACLItalianModificationAdvisory : SOGoACLModificationAdvisory
+@end
+
 @interface SOGoACLEnglishRemovalAdvisory : SOGoACLRemovalAdvisory
 @end
 
@@ -92,4 +98,7 @@
 @interface SOGoACLGermanRemovalAdvisory : SOGoACLRemovalAdvisory
 @end
 
+@interface SOGoACLItalianRemovalAdvisory : SOGoACLRemovalAdvisory
+@end
+
 #endif /* SOGOACLADVISORY_H */
index ffefbd0bcf0045dd0d4701be450c838ae168573a..ecdbb5ffae7bd713af3de982c296a1ab5b1540f5 100644 (file)
 @implementation SOGoACLGermanAdditionAdvisory
 @end
 
+@implementation SOGoACLItalianAdditionAdvisory
+@end
+
 @implementation SOGoACLEnglishModificationAdvisory
 @end
 
 @implementation SOGoACLGermanModificationAdvisory
 @end
 
+@implementation SOGoACLItalianModificationAdvisory
+@end
+
 @implementation SOGoACLEnglishRemovalAdvisory
 @end
 
 
 @implementation SOGoACLGermanRemovalAdvisory
 @end
+
+@implementation SOGoACLItalianRemovalAdvisory
+@end
+
index 3485d4c6a56e0d3705acde642cb9141f83240aa8..36ee75b9655d65e7c5bfe2bc0ac93f0c6313c6d4 100644 (file)
 @interface SOGoFolderGermanRemovalAdvisory : SOGoFolderAdvisory
 @end
 
+@interface SOGoFolderItalianAdditionAdvisory : SOGoFolderAdvisory
+@end
+
+@interface SOGoFolderItalianRemovalAdvisory : SOGoFolderAdvisory
+@end
+
+
 #endif /* SOGOFOLDERADVISORY_H */
index 45a1e74eb1f93856a7636819f2c1a161ab6ddfc6..26cddaa829951b7c928fe8d634d5bd3f6515aabd 100644 (file)
 @implementation SOGoFolderGermanRemovalAdvisory
 - (NSString *) folderMethod { return @"remove"; }
 @end
+
+@implementation SOGoFolderItalianAdditionAdvisory
+- (NSString *) folderMethod { return @"add"; }
+@end
+
+@implementation SOGoFolderItalianRemovalAdvisory
+- (NSString *) folderMethod { return @"remove"; }
+@end
+
index 03d57ce85312b803a1b4c45100e0482824d600b0..beed29420520f69fd0284ab5e2febb57c4b56ba1 100644 (file)
@@ -6,7 +6,7 @@ BUNDLE_NAME = SchedulerUI
 
 SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct
 
-SchedulerUI_LANGUAGES = English French German
+SchedulerUI_LANGUAGES = English French German Italian
 
 SchedulerUI_OBJC_FILES =               \
        SchedulerUIProduct.m            \
diff --git a/UI/Scheduler/Italian.lproj/Localizable.strings b/UI/Scheduler/Italian.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..46beb67
--- /dev/null
@@ -0,0 +1,469 @@
+/* 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";
index 3ebb2fe04104530baa7026e4073cef0fa375067f..9cfe28b22561128c6e904586afd3d49b1dd6d47a 100644 (file)
 - (void) setYearMenuItem: (NSNumber *) aYearMenuItem;
 - (NSNumber *) yearMenuItem;
 
-- (WOResponse *) getDragHandlesStateAction;
+- (NSString *) verticalDragHandleStyle;
+- (NSString *) horizontalDragHandleStyle;
+- (NSString *) eventsListViewStyle;
+
 - (WOResponse *) saveDragHandleStateAction;
 
 @end
index 0739df961680dd26ab50188d4d502226922468b0..d0939c643b2fae117d3897d8386e6b1999484d93 100644 (file)
@@ -124,22 +124,34 @@ static NSMutableArray *yearMenuItems = nil;
   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
index 1521b06d904c79a44b33cf16626122a1e9b8a3df..91d40d0fb85bc9edfe7952d94e604e632584d692 100644 (file)
@@ -1428,7 +1428,7 @@ RANGE(2);
        // We recur on specific days...
        if ([[self repeat2] intValue] == 1)
          {
-           [theRule setNamedValue: @"bymonthday"  to: [self repeat5]];
+           [theRule setNamedValue: @"bymonthday" to: [self repeat5]];
          }
        else
          {
@@ -1526,16 +1526,12 @@ RANGE(2);
                               |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]];
        }
index 18a20e1aafb222f051af7ffc00ddfb8b837a80e0..85db92f0009e6977f355c628d002a646bdc2df9d 100644 (file)
              protectedBy = "View";
              pageName    = "UIxCalMainView";
           };
-           dragHandlesState = {
-              protectedBy = "<public>";
-              pageName    = "UIxCalMainView";
-              actionName  = "getDragHandlesState";
-           };
           saveDragHandleState = {
              protectedBy = "View";
              pageName    = "UIxCalMainView";
index 0593bb3fb9a87186a0e7352dfcd8b9725a730b11..e7ec45ebd46f5fcfb46da5a7319e16b2cbb8719c 100644 (file)
           <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>
index 31ccfc8c2a080151c2d60f392f939182995ab1bd..1520379e1b9ab25de733a544fe7d91a9ed142a2b 100644 (file)
   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> -->
 
index cd847febad17ca75847eae2990ce58a3cc4469d9..a7f52e3e9a2404204c23d2f4d074fd53a7452f72 100644 (file)
     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>
index 6664a621f3e088cf63af25e0668fe1f1f6e5c748..d751f9ab4f2e47bab14486ef4fe7bc42719ca5e0 100644 (file)
          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/>
diff --git a/UI/Templates/SOGoACLItalianAdditionAdvisory.wox b/UI/Templates/SOGoACLItalianAdditionAdvisory.wox
new file mode 100644 (file)
index 0000000..32bf2a9
--- /dev/null
@@ -0,0 +1,27 @@
+<?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>
diff --git a/UI/Templates/SOGoACLItalianModificationAdvisory.wox b/UI/Templates/SOGoACLItalianModificationAdvisory.wox
new file mode 100644 (file)
index 0000000..b1b3b71
--- /dev/null
@@ -0,0 +1,27 @@
+<?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>
diff --git a/UI/Templates/SOGoACLItalianRemovalAdvisory.wox b/UI/Templates/SOGoACLItalianRemovalAdvisory.wox
new file mode 100644 (file)
index 0000000..00f2936
--- /dev/null
@@ -0,0 +1,27 @@
+<?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>
diff --git a/UI/Templates/SOGoFolderItalianAdditionAdvisory.wox b/UI/Templates/SOGoFolderItalianAdditionAdvisory.wox
new file mode 100644 (file)
index 0000000..219d836
--- /dev/null
@@ -0,0 +1,22 @@
+<?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>
diff --git a/UI/Templates/SOGoFolderItalianRemovalAdvisory.wox b/UI/Templates/SOGoFolderItalianRemovalAdvisory.wox
new file mode 100644 (file)
index 0000000..3f06eac
--- /dev/null
@@ -0,0 +1,22 @@
+<?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>
index 54fac20cb87b6efc39ae6653a4796271e896199d..56783173169a79954538c0e1f6c9bfc003686c99 100644 (file)
@@ -8,6 +8,20 @@
   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>
index dc355914e4537d8f28e6515ef989664809644abd..f91199ad710eb3c71f84e7c3e14727180f4557f2 100644 (file)
@@ -38,7 +38,7 @@ DIV#contactsListContent
   top: 2.5em;
   left: 0px;
   right: 0px;
-  height: 16em;
+  height: 15.5em;
   overflow: auto;
   overflow-x: hidden; }
 
@@ -169,7 +169,8 @@ DIV#folderTreeContent TABLE TD
   padding: 0px; }
 
 TABLE#contactsList
-{ -khtml-user-select: none;
+{ -moz-user-select: none;
+  -khtml-user-select: none;
   width: 100%; }
 
 TABLE#contactsList TD,
@@ -249,13 +250,11 @@ INPUT#searchValue:focus
 
 /* drag handles */
 DIV#dragHandle
-{ 
-  cursor: e-resize;
+{ cursor: e-resize;
   top: 8em;
   left: 15em;
   width: 5px;
-  bottom: 0px;
-}
+  bottom: 0px; }
 
 DIV#rightDragHandle
 {
index d9d7a876a6d4e0a21f2335c6c73ff82eaf746555..696034e6435bef48f1d9193ed7eea29b9100dc94 100644 (file)
@@ -26,39 +26,39 @@ function validateEditorInput(sender) {
 }
 
 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) {
@@ -74,89 +74,96 @@ 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);
 
@@ -169,19 +176,18 @@ function onContactFoldersContextMenu(event) {
   $(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) {
@@ -287,14 +293,8 @@ function moveTo(uri) {
 }
 
 /* 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);
@@ -302,6 +302,18 @@ function onContactRowDblClick(event, node) {
   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');
 
@@ -386,7 +398,6 @@ function uixDeleteSelectedContacts(sender) {
   }
 
   var contactView = $('contactView');
-  contactView.update();
 
   for (var i = 0; i < rows.length; i++) {
     var url, http, rowElem;
@@ -414,7 +425,9 @@ function uixDeleteSelectedContacts(sender) {
   }
 
   if (failCount > 0)
-    alert("Could not delete the selected contacts!");
+    alert(labels["You cannot delete the selected contact(s)."]);
+  else
+    contactView.update();
   
   return false;
 }
@@ -522,7 +535,7 @@ function onConfirmContactSelection(event) {
 }
 
 function onContactMailTo(node) {
-  return openMailTo(node.innerHTML);
+   return openMailTo(node.innerHTML);
 }
 
 function refreshContacts(contactId) {
@@ -534,46 +547,46 @@ 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) {
@@ -714,78 +727,55 @@ function configureAbToolbar() {
 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) {
@@ -880,10 +870,10 @@ function configureSelectionButtons() {
 function initContacts(event) {
    if (!document.body.hasClassName("popup")) {
      configureAbToolbar();
-     getDragHandlesState();
    }
    else
      configureSelectionButtons();
+
    configureContactFolders();
 //     initDnd();
 
@@ -891,6 +881,8 @@ function initContacts(event) {
    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});
    }
index 64c0f727fa5ca366d6cf3351c031ec6645ee3f3a..443e5c9fc615867242ba51cd6fe84ab2b64872eb 100644 (file)
@@ -626,22 +626,18 @@ TABLE#messageList TR[labels~="label1"]._selected TD
 
 /* 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
 {
index 649ad6b252d997a7b149ad19ed97bfdc5b97353f..5bee22dca7023be989d221f5cdc66fcbfaea8886 100644 (file)
@@ -558,7 +558,7 @@ function messageListCallback(http) {
       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();
          });
@@ -1259,7 +1259,6 @@ function initMailer(event) {
 //     initDnd();
     initMailboxTree();
     initMessageCheckTimer();
-    getDragHandlesState();
   }
   
   // Default sort options
@@ -1493,31 +1492,6 @@ function buildMailboxes(accountName, encoded) {
   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";
index 54ac371b24f6ac0ba4a83c1fa3ff5a27fc6e9f0f..fa953dcd9efebebe54bfd07567fa4b63ce897dfd 100644 (file)
@@ -62,28 +62,28 @@ var SOGoDragHandlesInterface = {
     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);
index d2ccc42b8927f15078506bb1ef5ee2c2cc7145d2..305bd123754c59047e9ef192c62edd4b0292bc98 100644 (file)
@@ -385,7 +385,7 @@ function eventsListCallback(http) {
        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();
            });
@@ -696,126 +696,127 @@ function refreshCalendarEvents(scrollEvent) {
 }
 
 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) {
@@ -1723,31 +1724,6 @@ function deletePersonalCalendarCallback(http) {
     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;
@@ -1783,19 +1759,18 @@ function initDateSelectorEvents() {
 }
 
 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);
index eeb6af4411d47098d70948502444cf781d2a490a..522a6f85f952bbe9aad7ce6cd9461baabf39401c 100755 (executable)
--- a/configure
+++ b/configure
@@ -120,6 +120,10 @@ validateGNUstepArgs() {
       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