From 18e465b1915fec3f2b958e1db0ddab00d883ceab Mon Sep 17 00:00:00 2001 From: wolfgang Date: Thu, 20 Sep 2007 13:32:45 +0000 Subject: [PATCH] git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1180 d1b88da0-ebda-0310-925b-ed51d893ca5b --- ChangeLog | 8 ++ NEWS | 2 + Scripts/sogo-init.d-rhel4 | 87 ++++++++++++++++++++ UI/Common/English.lproj/Localizable.strings | 5 ++ UI/Common/French.lproj/Localizable.strings | 5 ++ UI/Common/UIxPageFrame.h | 5 ++ UI/Common/UIxPageFrame.m | 40 +++++++++ UI/Contacts/UIxContactView.m | 2 +- UI/MailPartViewers/UIxMailPartICalViewer.m | 5 +- UI/MailerUI/UIxMailListView.m | 18 ++++ UI/MainUI/SOGoUserHomePage.m | 5 ++ UI/Scheduler/UIxComponentEditor.m | 2 +- UI/Templates/ContactsUI/UIxContactView.wox | 1 - UI/Templates/MailerUI/UIxMailListView.wox | 2 +- UI/Templates/MainUI/SOGoRootPage.wox | 8 +- UI/Templates/UIxPageFrame.wox | 22 ++++- UI/WebServerResources/ContactsUI.css | 18 ++-- UI/WebServerResources/ContactsUI.js | 1 + UI/WebServerResources/MailerUI.css | 10 +-- UI/WebServerResources/SOGoRootPage.css | 15 +++- UI/WebServerResources/UIxAttendeesEditor.css | 16 +++- UI/WebServerResources/UIxAttendeesEditor.js | 10 +-- UI/WebServerResources/UIxComponentEditor.js | 8 +- 23 files changed, 251 insertions(+), 44 deletions(-) create mode 100755 Scripts/sogo-init.d-rhel4 diff --git a/ChangeLog b/ChangeLog index 72ce783c..ac0d9909 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2007-09-17 Wolfgang Sourdeau + * UI/MailPartViewers/UIxMailPartICalViewer.m + ([UIxMailPartICalViewer -calendarFolder]): returns the "personal" + entry of the Calendars parent folder. + + * UI/MailerUI/UIxMailListView.m ([UIxMailListView + -messageSubject]): new accessor method to work-around a problem + within SOPE where a subject could be returned as an NSData. + * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder -appendPersonalSources]): make sure the value of the "c_path4" of the returned rows are not NSNull, otherwise, discard them. diff --git a/NEWS b/NEWS index e6fe36e0..8947cccf 100644 --- a/NEWS +++ b/NEWS @@ -9,7 +9,9 @@ - fixed search in message content; - added tooltips for toolbar buttons (English and French); - added checkmarks in live search options popup menus; +- added browser detection with recommanded alternatives; - initial support for resizable columns in tables; +- improved IE7 and Safari support: attendees selector; - countless bugfixes; 0.9.0-20070824 diff --git a/Scripts/sogo-init.d-rhel4 b/Scripts/sogo-init.d-rhel4 new file mode 100755 index 00000000..35d20f9c --- /dev/null +++ b/Scripts/sogo-init.d-rhel4 @@ -0,0 +1,87 @@ +#!/bin/bash +# chkconfig: - 85 15 +# description: SOGo is a groupware server +# processname: sogod-0.9 +# config: /etc/sysconfig/sogo +# config: /etc/httpd/conf.d/SOGo.conf +# pidfile: /var/run/sogo/sogod.pid + +# SOGo init script for RedHat +# +# Copyright (C) 2007 Inverse groupe conseil +# +# Author: Wolfgang Sourdeau +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# sogod Scalable OpenGroupware.org (Inverse edition) + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +. /etc/rc.d/init.d/functions + +if [ -z "$GNUSTEP_SYSTEM_ROOT" ] +then + . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh +fi + +REAL_DAEMON=$GNUSTEP_SYSTEM_ROOT/Tools/sogod-0.9 +DAEMON=/usr/sbin/sogod +NAME=sogo +DESC="Scalable OpenGroupware.Org (Inverse edition)" + +PIDFILE=/var/run/sogo/sogod.pid + +SOGO_ARGS="" + +if [ -f /etc/sysconfig/sogo ]; then + . /etc/sysconfig/sogo +fi + +test -x $DAEMON || exit 0 + +#set -e + +case "$1" in + start) + echo -n $"Starting $DESC: " + daemon su - sogo -c $DAEMON + echo "$NAME." + ;; + stop) + echo -n $"Stopping $DESC: " + killproc `basename $REAL_DAEMON` && rm -f $PIDFILE + echo "$NAME." + ;; + restart|force-reload) + echo -n $"Restarting $DESC: " + killproc `basename $REAL_DAEMON` && rm -f $PIDFILE + sleep 1 + daemon su - sogo -c $DAEMON + echo "$NAME." + ;; + status) + status $REAL_DAEMON + ;; + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|restart|force-reload|status}" >&2 + exit 1 + ;; +esac + +exit 0 + diff --git a/UI/Common/English.lproj/Localizable.strings b/UI/Common/English.lproj/Localizable.strings index f25d4d2f..6d453e13 100644 --- a/UI/Common/English.lproj/Localizable.strings +++ b/UI/Common/English.lproj/Localizable.strings @@ -27,6 +27,11 @@ "Sorry, the user rights can not be configured for that object." = "Sorry, the user rights can not be configured for that object."; +"browserNotCompatible" = "We've detected that your browser version is currently not supported on this site. Our recommendation is to use Firefox. Link to download the most current version of this browser is provided bellow:"; +"alternativeBrowsers" = "Alternatively, you can also use the following compatible browsers"; +"alternativeBrowserSafari" = "Alternatively, you can also use Safari."; +"Download" = "Download"; + /* generic.js */ "Unable to subscribe to that folder!" = "Unable to subscribe to that folder!"; diff --git a/UI/Common/French.lproj/Localizable.strings b/UI/Common/French.lproj/Localizable.strings index 839c0bb8..7cd854ba 100644 --- a/UI/Common/French.lproj/Localizable.strings +++ b/UI/Common/French.lproj/Localizable.strings @@ -28,6 +28,11 @@ "Sorry, the user rights can not be configured for that object." = "Sorry, the user rights can not be configured for that object."; +"browserNotCompatible" = "La version de votre navigateur Web n'est présentement pas supportée par ce site. Nous recommandons d'utiliser Firefox. Vous trouverez un lien vers la plus récente version de ce navigateur ci-dessous:"; +"alternativeBrowsers" = "Comme alternative, vous pouvez aussi utiliser les navigateurs suivants:"; +"alternativeBrowserSafari" = "Comme alternative, vous pouvez aussi utiliser Safari."; +"Download" = "Télécharger"; + /* generic.js */ "Unable to subscribe to that folder!" = "Impossible de s'abonner à ce dossier."; "You cannot subscribe to a folder that you own!" = "Impossible de vous abonner à un dossier qui vous appartient."; diff --git a/UI/Common/UIxPageFrame.h b/UI/Common/UIxPageFrame.h index 94fe9816..1faf08cb 100644 --- a/UI/Common/UIxPageFrame.h +++ b/UI/Common/UIxPageFrame.h @@ -23,6 +23,7 @@ #define UIXPAGEFRAME_H #import +#import @interface WOComponent (PopupExtension) @@ -56,6 +57,10 @@ - (void) setToolbar: (NSString *) newToolbar; - (NSString *) toolbar; +- (BOOL) isCompatibleBrowser; +- (BOOL) isIE7Compatible; +- (BOOL) isMac; + @end #endif /* UIXPAGEFRAME_H */ diff --git a/UI/Common/UIxPageFrame.m b/UI/Common/UIxPageFrame.m index 267a653d..193781ed 100644 --- a/UI/Common/UIxPageFrame.m +++ b/UI/Common/UIxPageFrame.m @@ -258,4 +258,44 @@ return toolbar; } +/* browser/os identification */ + +- (BOOL) isCompatibleBrowser +{ + WEClientCapabilities *cc; + + cc = [[context request] clientCapabilities]; + + //NSLog(@"Browser = %@", [cc description]); + NSLog(@"User agent = %@", [cc userAgent]); + //NSLog(@"Browser major version = %i", [cc majorVersion]); + + return ( + ([[cc userAgentType] isEqualToString: @"IE"] && [cc majorVersion] >= 7) || + ([[cc userAgentType] isEqualToString: @"Mozilla"] && [cc majorVersion] >= 5) || + ([[cc userAgentType] isEqualToString: @"Safari"] && [cc majorVersion] >= 4) + ); +} + +- (BOOL) isIE7Compatible +{ + WEClientCapabilities *cc; + + cc = [[context request] clientCapabilities]; + + return ([cc isWindowsBrowser] && + ([[cc userAgent] rangeOfString: @"NT 5.1"].location != NSNotFound || + [[cc userAgent] rangeOfString: @"NT 6"].location != NSNotFound)); +} + +- (BOOL) isMac +{ + WEClientCapabilities *cc; + + cc = [[context request] clientCapabilities]; + + return [cc isMacBrowser]; +} + + @end /* UIxPageFrame */ diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index 01a07de9..dc789fa7 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -282,7 +282,7 @@ { url = [[elements objectAtIndex: 0] value: 0]; data = [NSString stringWithFormat: - @"%@", + @"%@", url, url]; } else diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.m b/UI/MailPartViewers/UIxMailPartICalViewer.m index 6e7a690c..8b31e532 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.m +++ b/UI/MailPartViewers/UIxMailPartICalViewer.m @@ -195,7 +195,8 @@ /* calendar folder support */ -- (id)calendarFolder { +- (id) calendarFolder +{ /* return scheduling calendar of currently logged-in user */ SOGoUser *user; id folder; @@ -205,7 +206,7 @@ inContext: context acquire: NO]; - return folder; + return [folder lookupName: @"personal" inContext: context acquire: NO]; } - (id)storedEventObject { diff --git a/UI/MailerUI/UIxMailListView.m b/UI/MailerUI/UIxMailListView.m index ac5b7184..e004eae9 100644 --- a/UI/MailerUI/UIxMailListView.m +++ b/UI/MailerUI/UIxMailListView.m @@ -98,6 +98,24 @@ static int attachmentFlagSize = 8096; return [dateFormatter formattedDateAndTime: messageDate]; } +- (NSString *) messageSubject +{ + NSString *subject; + id envSubject; + + envSubject = [[message valueForKey: @"envelope"] subject]; + if ([envSubject isKindOfClass: [NSData class]]) + { + subject = [[NSString alloc] initWithData: envSubject + encoding: NSUTF8StringEncoding]; + [subject autorelease]; + } + else + subject = envSubject; + + return subject; +} + - (BOOL) showToAddress { NSString *ftype; diff --git a/UI/MainUI/SOGoUserHomePage.m b/UI/MainUI/SOGoUserHomePage.m index 91015583..032a615f 100644 --- a/UI/MainUI/SOGoUserHomePage.m +++ b/UI/MainUI/SOGoUserHomePage.m @@ -221,6 +221,11 @@ static NSString *defaultModule = nil; date = [NSCalendarDate calendarDate]; [cookie setExpires: [date yesterday]]; [response addCookie: cookie]; + + [response setHeader: date forKey: @"Last-Modified"]; + [response setHeader: @"no-store, no-cache, must-revalidate, max-age=0" forKey: @"Cache-Control"]; + [response setHeader: @"post-check=0, pre-check=0" forKey: @"Cache-Control"]; + [response setHeader: @"no-cache" forKey: @"Pragma"]; return response; } diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index 5cfeecaf..9046b322 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -358,7 +358,7 @@ { NSArray *calendars; - calendars = [[self calendarList] valueForKey: @"folder"]; + calendars = [[self calendarList] valueForKey: @"nameInContainer"]; return [calendars componentsJoinedByString: @","]; } diff --git a/UI/Templates/ContactsUI/UIxContactView.wox b/UI/Templates/ContactsUI/UIxContactView.wox index adfdbeac..888752b0 100644 --- a/UI/Templates/ContactsUI/UIxContactView.wox +++ b/UI/Templates/ContactsUI/UIxContactView.wox @@ -20,7 +20,6 @@ /> + >
-

+


@@ -21,6 +21,6 @@
-
- + diff --git a/UI/Templates/UIxPageFrame.wox b/UI/Templates/UIxPageFrame.wox index ff1588e0..ada40f36 100644 --- a/UI/Templates/UIxPageFrame.wox +++ b/UI/Templates/UIxPageFrame.wox @@ -33,8 +33,9 @@ /> - -