2008-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+ * UI/MailPartViewers/UIxMailPartICalViewer.m
+ ([UIxMailPartICalViewer -currentUserAttendee]): new method that
+ returns the current user as an attendee representation in the
+ displayed event, if found.
+
* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
-_urlHostString]): replace "@" with %40 AFTER invoking
stringByEscapingURL.
-0.9.0-2008MMDD (1.0 rc4)
+0.9.0-20080208 (1.0 rc5)
+------------------------
+- improved validation in the custom recurrence window
+- improved resiliance when parsing buggy recurrence rules
+- added the ability to authenticate users and to identify their resources with
+ an LDAP field other than the username
+- the monthly view would not switch to the next or previous month if the
+ current day of the new month was already displayed in the current view
+- enabled the instant-messaging entry in the addressbook
+- prevent the user from selecting disabled menu entries
+- added the ability to add/remove and renamed calendars in DAV
+- no longer require a default domain name/imap server to work properly
+- the position of the splitters is now remembered across user sessions
+- improved the email notifications when creating and removing a folder
+- fixed the tab handling in IE7
+- dramatic improvement in the overall stability of SOGo
+
+0.9.0-20080116 (1.0 rc4)
------------------------
- improved the attendees window;
- added the attendees pulldown menu in the event editor (like in Lightning);
#import <SoObjects/SOGo/SOGoDateFormatter.h>
#import <SoObjects/SOGo/SOGoUser.h>
+#import <SoObjects/SOGo/iCalEntityObject+Utilities.h>
#import <SoObjects/Appointments/iCalEntityObject+SOGo.h>
#import <SoObjects/Appointments/SOGoAppointmentFolder.h>
#import <SoObjects/Appointments/SOGoAppointmentObject.h>
return [attendees objectAtIndex:0];
}
+- (iCalPerson *) currentUserAttendee
+{
+ iCalPerson *currentUser;
+
+ currentUser = [[self storedEvent] findParticipant: [context activeUser]];
+
+ return currentUser;
+}
+
- (iCalPerson *) storedReplyAttendee
{
/*
<var:if condition="inCalendar.method.uppercaseString" const:value="REQUEST">
<!-- sent to attendees to propose or update a meeting -->
<var:if condition="isLoggedInUserAnAttendee">
- <var:if condition="$storedReplyAttendee.partStatWithDefault"
- const:value="NEEDS-ACTION" const:negate="YES">
- <p class="uix_ical_toolbar" id="iCalendarToolbar">
+ <p class="uix_ical_toolbar" id="iCalendarToolbar">
+ <var:if condition="currentUserAttendee.partStatWithDefault"
+ const:value="ACCEPTED" const:negate="YES">
<input id="iCalendarAccept" class="button"
type="button" label:value="Accept"/>
+ </var:if>
+ <var:if condition="currentUserAttendee.partStatWithDefault"
+ const:value="DECLINED" const:negate="YES">
<input id="iCalendarDecline" class="button"
type="button" label:value="Decline"/>
- <!-- <input id="iCalendarTentative" class="button"
- type="button" label:value="Tentative"/> -->
- <var:if condition="isEventStoredInCalendar" const:negate="YES">
- | <input id="iCalendarAddToCalendar" class="button"
- type="button" label:value="Add to calendar"/>
- </var:if>
- </p>
- </var:if>
+ </var:if>
+ <!-- <input id="iCalendarTentative" class="button"
+ type="button" label:value="Tentative"/> -->
+ <var:if condition="isEventStoredInCalendar" const:negate="YES">
+ | <input id="iCalendarAddToCalendar" class="button"
+ type="button" label:value="Add to calendar"/>
+ </var:if>
+ </p>
<p>
<var:string label:value="Organizer" />
var day = node.getAttribute("date");
var needRefresh = (listFilter == 'view_selectedday'
&& day != currentDay);
-
+
changeDateSelectorDisplay(day);
changeCalendarDisplay( { "day": day } );
if (needRefresh)
refreshEvents();
-
+
return false;
}
}
function changeCalendarDisplay(data, newView) {
- var url = ApplicationBaseURL + ((newView) ? newView : currentView);
+ newView = ((newView) ? newView : currentView);
+ var url = ApplicationBaseURL + newView;
var day = null;
var scrollEvent = null;
day = currentDay;
if (day) {
- if (data) {
+ if (data && newView != "monthview") {
var divs = $$('div.day[day='+day+']');
if (divs.length) {
// Don't reload the view if the event is present in current view
-
+
// Deselect previous day
var selectedDivs = $$('div.day.selectedDay');
selectedDivs.each(function(div) {
div.removeClassName('selectedDay');
});
-
+
// Select new day
divs.each(function(div) {
div.addClassName('selectedDay');