]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1295 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 7 Dec 2007 22:42:55 +0000 (22:42 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 7 Dec 2007 22:42:55 +0000 (22:42 +0000)
ChangeLog
Main/SOGo.m
UI/Contacts/English.lproj/Localizable.strings
UI/Contacts/French.lproj/Localizable.strings
UI/MailPartViewers/UIxMailRenderingContext.m
UI/MainUI/AgenorProfile-oracle.sql
UI/MainUI/AgenorProfile.sql
UI/MainUI/OCSFolderInfo-oracle.sql
UI/MainUI/OCSFolderInfo.sql
UI/Scheduler/UIxComponentEditor.m

index 7094a39221a9fd96370cafd9a9fff29012701be2..9d9c6ca6fb63c6243080f1594278e3db3d1402ca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2007-12-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * Main/SOGo.m ([SOGo -run]): the table creation script now have a
+       @{tableName} substitution variable to be substitued with the real
+       table name obtained from the configuration variables.
+
+2007-12-07  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailRenderingContext.m 
+       We treat multipart/appledouble like multipart/mixed
+       for now. That allows the user to save both parts.
+
+       * Corrected typos in Localizable.string files.
+
 2007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
index 6bdb86e3246fe502e70591459342b3b6b71b5c29..ac530d5619665c9a020a5fb91206e80acaaf086a 100644 (file)
@@ -151,38 +151,62 @@ static BOOL debugObjectAllocation = NO;
   [super dealloc];
 }
 
-- (void) _checkTableWithCM: (GCSChannelManager *) cm
-                 tableURL: (NSString *) url
-                  andType: (NSString *) tableType
+- (NSString *) _sqlScriptFromTableFile: (NSString *) fileName
+                        withTableName: (NSString *) tableName
 {
-  NSString *tableName, *descFile, *tableFile, *fileSuffix;
-  EOAdaptorChannel *tc;
+  NSString *script;
+
+
+  return script;
+}
+
+- (NSString *) _sqlScriptForTable: (NSString *) tableName
+                        withType: (NSString *) tableType
+                   andFileSuffix: (NSString *) fileSuffix
+{
+  NSString *tableFile, *descFile;
   NGBundleManager *bm;
   NSBundle *bundle;
   unsigned int length;
-  NSURL *channelURL;
 
   bm = [NGBundleManager defaultBundleManager];
 
+  bundle = [bm bundleWithName: @"MainUI" type: @"SOGo"];
+  length = [tableType length] - 3;
+  tableFile = [tableType substringToIndex: length];
+  descFile
+    = [bundle pathForResource: [NSString stringWithFormat: @"%@-%@",
+                                        tableFile, fileSuffix]
+             ofType: @"sql"];
+  if (!descFile)
+    descFile = [bundle pathForResource: tableFile ofType: @"sql"];
+
+  return [[NSString stringWithContentsOfFile: descFile]
+          stringByReplacingString: @"@{tableName}"
+          withString: tableName];
+}
+
+- (void) _checkTableWithCM: (GCSChannelManager *) cm
+                 tableURL: (NSString *) url
+                  andType: (NSString *) tableType
+{
+  NSString *tableName, *fileSuffix, *tableScript;
+  EOAdaptorChannel *tc;
+  NSURL *channelURL;
+
   channelURL = [NSURL URLWithString: url];
   fileSuffix = [channelURL scheme];
   tc = [cm acquireOpenChannelForURL: channelURL];
 
   tableName = [url lastPathComponent];
   if ([tc evaluateExpressionX:
-           [NSString stringWithFormat: @"SELECT count(*) FROM %@", tableName]])
+           [NSString stringWithFormat: @"SELECT count(*) FROM %@",
+                     tableName]])
     {
-      bundle = [bm bundleWithName: @"MainUI" type: @"SOGo"];
-      length = [tableType length] - 3;
-      tableFile = [tableType substringToIndex: length];
-      descFile
-       = [bundle pathForResource: [NSString stringWithFormat: @"%@-%@",
-                                            tableFile, fileSuffix]
-                        ofType: @"sql"];
-      if (!descFile)
-       descFile = [bundle pathForResource: tableFile ofType: @"sql"];
-      if (![tc evaluateExpressionX:
-                [NSString stringWithContentsOfFile: descFile]])
+      tableScript = [self _sqlScriptForTable: tableName
+                         withType: tableType
+                         andFileSuffix: fileSuffix];
+      if (![tc evaluateExpressionX: tableScript])
        [self logWithFormat: @"table '%@' successfully created!", tableName];
     }
   else
index 9d17ab3ea93227794a9ef17b17ab744896a05a96..6762a87f0f1460f516930d1c264ab61c42177e45 100644 (file)
@@ -29,7 +29,7 @@
 "Unit" = "Unit";
 "delete" = "delete";
 "edit" = "edit";
-"invalidemailwarn" = "invalidemailwarn";
+"invalidemailwarn" = "The specified email is invalid";
 "new" = "new";
 "Preferred Phone"   = "Preferred Phone";
 
index 4854e4855a3bf442774d1f26ea8b1251fc8fc183..973321b489dcf8edba90552890fe545ba0390490 100644 (file)
@@ -1,4 +1,4 @@
-/* this file is in UTF-8 format! */
+e/* this file is in UTF-8 format! */
 
 "Contact" = "Contact";
 "Address" = "Adresses";
@@ -36,7 +36,7 @@
 "Unit"              = "Département";
 "delete"            = "Effacer";
 "edit"              = "Éditer";
-"invalidemailwarn"  = "Champ de l'email invalide, continuer quand même ?";
+"invalidemailwarn"  = "Le champ de l'adresse électronique est invalide";
 "new"               = "Nouveau";
 "Preferred Phone"   = "Numéro préféré";
 
index a82097f654cad4969b73d08989968667a2696872..0ed6f0bb3133cde43e753750eaedf4159bd62116 100644 (file)
@@ -258,7 +258,7 @@ static BOOL showNamedTextAttachmentsInline = NO;
 
   if ([mt isEqualToString:@"multipart"])
     {
-      if ([st isEqualToString:@"mixed"] || [st isEqualToString:@"related"])
+      if ([st isEqualToString:@"mixed"] || [st isEqualToString:@"related"] || [st isEqualToString: @"appledouble"])
        return [self mixedViewer];
       else if ([st isEqualToString:@"signed"])
        return [self signedViewer];
index 240af39e381c0dfa39a4c3174e0412f97b410928..c3371e55b9ecb80e3e2f87311d8ea901637eee90 100644 (file)
@@ -2,7 +2,7 @@
 -- (C) 2007 Inverse groupe conseil
 --
 
-CREATE TABLE SOGo_user_profile (
+CREATE TABLE @{tableName} (
   c_uid      VARCHAR(255) NOT NULL PRIMARY KEY,
   c_defaults CLOB,
   c_settings CLOB
index 1849425b8ae633d01023699353e5321f9c55b417..f8f0adc8b3eeb17e35b4c075bbe6ce9bd317d093 100644 (file)
@@ -3,7 +3,7 @@
 -- (C) 2006-2007 Inverse groupe conseil
 --
 
-CREATE TABLE SOGo_user_profile (
+CREATE TABLE @{tableName} (
   c_uid      VARCHAR(255) NOT NULL PRIMARY KEY,
   c_defaults TEXT,
   c_settings TEXT
index c019e486017f04d12ec799906a7bc0696db9a22d..3167282b360000550811daccb20459dcd68b7431 100644 (file)
@@ -2,7 +2,7 @@
 -- (C) 2007 Inverse groupe conseil
 --
 
-CREATE TABLE SOGo_folder_info (
+CREATE TABLE @{tableName} (
   c_folder_id      INTEGER PRIMARY KEY,
   c_path           VARCHAR(255)  NOT NULL, -- the full path to the folder
   c_path1          VARCHAR(255)  NOT NULL, -- parts (for fast queries)
@@ -16,12 +16,12 @@ CREATE TABLE SOGo_folder_info (
   c_folder_type    VARCHAR(255)  NOT NULL  -- the folder type ...
 );
 
-CREATE SEQUENCE SOGo_folder_info_seq;
-CREATE OR REPLACE TRIGGER SOGo_folder_info_autonumber
-BEFORE INSERT ON SOGo_folder_info FOR EACH ROW
+CREATE SEQUENCE @{tableName}_seq;
+CREATE OR REPLACE TRIGGER @{tableName}_autonumber
+BEFORE INSERT ON @{tableName} FOR EACH ROW
 BEGIN
     IF :new.c_folder_id IS NULL THEN
-        SELECT SOGO_folder_info_seq.nextval INTO :new.c_folder_id FROM DUAL;
+        SELECT @{tableName}_seq.nextval INTO :new.c_folder_id FROM DUAL;
     END IF;
 END;
 /
index f9fcde209a8c383f838e3277ad0e7e0585a69a8f..548b71a1039259ac10d4545d9b48505920acf005 100644 (file)
@@ -3,7 +3,7 @@
 -- (C) 2006-2007 Inverse groupe conseil
 --
 
-CREATE TABLE SOGo_folder_info (
+CREATE TABLE @{tableName} (
   c_folder_id      SERIAL,
   c_path           VARCHAR(255)  NOT NULL, -- the full path to the folder
   c_path1          VARCHAR(255)  NOT NULL, -- parts (for fast queries)
index 6af7d172421f598babac9caef833133b1f6bc3cd..7384965f01274739eb7a429f3f5eade05af13778 100644 (file)
   SOGoCalendarComponent *co;
   SOGoUser *currentUser;
   BOOL hasOrganizer;
+  SoSecurityManager *sm;
 
   co = [self clientObject];
   owner = [co ownerInContext: context];
 
   hasOrganizer = ([[organizer value: 0] length] > 0);
 
+  sm = [SoSecurityManager sharedSecurityManager];
+  
   return ([co isNew]
-         || ([owner isEqualToString: [currentUser login]]
+         || (([owner isEqualToString: [currentUser login]]
+              || ![sm validatePermission: SOGoCalendarPerm_ModifyComponent
+                      onObject: co
+                      inContext: context])
              && (!hasOrganizer || [component userIsOrganizer: currentUser])));
 }
 
 {
   NSString *organizerEmail;
   NSString *owner, *login;
+  BOOL isOwner, hasOrganizer, hasAttendees;
 
+  owner = [[self clientObject] ownerInContext: context];
+  login = [[context activeUser] login];
+  isOwner = [owner isEqualToString: login];
+  hasAttendees = ([[component attendees] count] > 0);
   organizerEmail = [[component organizer] email];
-  if ([organizerEmail length] == 0)
+  hasOrganizer = ([organizerEmail length] > 0);
+
+  if (hasOrganizer)
     {
-      owner = [[self clientObject] ownerInContext: context];
-      login = [[context activeUser] login];
-      if (![owner isEqualToString: login]
-         || [[component attendees] count] > 0)
+      if (isOwner && !hasAttendees)
        {
          ASSIGN (organizer, [iCalPerson elementWithTag: @"organizer"]);
-         [organizer setCn: [organizerIdentity objectForKey: @"fullName"]];
-         [organizer setEmail: [organizerIdentity objectForKey: @"email"]];
          [component setOrganizer: organizer];
        }
     }
   else
     {
-      if ([[component attendees] count] == 0)
+      if (!isOwner || hasAttendees)
        {
          ASSIGN (organizer, [iCalPerson elementWithTag: @"organizer"]);
+         [organizer setCn: [organizerIdentity objectForKey: @"fullName"]];
+         [organizer setEmail: [organizerIdentity objectForKey: @"email"]];
          [component setOrganizer: organizer];
        }
     }
       if ([component userIsOrganizer: currentUser])
        toolbarFilename = @"SOGoComponentClose.toolbar";
       else
-       {       
+       {
          if ([component userIsOrganizer: ownerUser]
              && ![sm validatePermission: SOGoCalendarPerm_ModifyComponent
                      onObject: clientObject