Monotone-Parent: 4f0272f926f26c8a39d7b00154a9b6dd2d17a27a

Monotone-Revision: 5369f3639a0ee9aca9aab181450a38f9e22e9b47

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-06-19T17:56:35
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2007-06-19 17:56:35 +00:00
parent caec4f8333
commit e495b9afb8
4 changed files with 2 additions and 633 deletions
+2
View File
@@ -1,5 +1,7 @@
2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Scheduler/UIxTaskView.[hm]: removed unused module.
* UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
* SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
-40
View File
@@ -1,40 +0,0 @@
// $Id: UIxTaskView.h 768 2005-07-15 00:13:01Z helge $
#ifndef __SOGo_UIxTaskView_H__
#define __SOGo_UIxTaskView_H__
#include <SOGoUI/UIxComponent.h>
@class NSCalendarDate;
@class iCalToDo;
@class iCalPerson;
@class SOGoDateFormatter;
@interface UIxTaskView : UIxComponent
{
iCalToDo* task;
iCalPerson* attendee;
SOGoDateFormatter *dateFormatter;
id item;
}
- (iCalToDo *) task;
/* permissions */
- (BOOL)canAccessApt;
- (BOOL)canEditApt;
- (SOGoDateFormatter *)dateFormatter;
- (NSCalendarDate *)startTime;
- (NSCalendarDate *)endTime;
- (NSString *)attributesTabLink;
- (NSString *)participantsTabLink;
- (NSString *)completeHrefForMethod:(NSString *)_method
withParameter:(NSString *)_param
forKey:(NSString *)_key;
@end
#endif /* __SOGo_UIxTaskView_H__ */
-294
View File
@@ -1,294 +0,0 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo 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 Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import "UIxTaskView.h"
#import <NGCards/NGCards.h>
#import <SOGo/WOContext+Agenor.h>
#import <SOGo/SOGoUser.h>
#import <Appointments/SOGoTaskObject.h>
#import <SOGoUI/SOGoDateFormatter.h>
#import "UIxComponent+Scheduler.h"
#import "common.h"
@interface UIxTaskView (PrivateAPI)
- (BOOL)isAttendeeActiveUser;
@end
@implementation UIxTaskView
- (void)dealloc {
[task release];
[attendee release];
[dateFormatter release];
[item release];
[super dealloc];
}
/* accessors */
- (NSString *)tabSelection {
NSString *selection;
selection = [self queryParameterForKey:@"tab"];
if (selection == nil)
selection = @"attributes";
return selection;
}
- (void)setAttendee:(id)_attendee {
ASSIGN(attendee, _attendee);
}
- (id)attendee {
return attendee;
}
- (BOOL)isAttendeeActiveUser {
NSString *email, *attEmail;
email = [[[self context] activeUser] primaryEmail];
attendee = [self attendee];
attEmail = [attendee rfc822Email];
return [email isEqualToString: attEmail];
}
- (BOOL)showAcceptButton {
return [[self attendee] participationStatus] != iCalPersonPartStatAccepted;
}
- (BOOL)showRejectButton {
return [[self attendee] participationStatus] != iCalPersonPartStatDeclined;
}
- (NSString *)attendeeStatusColspan {
return [self isAttendeeActiveUser] ? @"1" : @"2";
}
- (void)setItem:(id)_item {
ASSIGN(item, _item);
}
- (id)item {
return item;
}
- (SOGoDateFormatter *)dateFormatter {
if (dateFormatter == nil) {
dateFormatter =
[[SOGoDateFormatter alloc] initWithLocale:[self locale]];
[dateFormatter setFullWeekdayNameAndDetails];
}
return dateFormatter;
}
- (NSCalendarDate *) startTime
{
NSCalendarDate *date;
NSTimeZone *timeZone;
timeZone = [[context activeUser] timeZone];
date = [[self task] startDate];
[date setTimeZone: timeZone];
return date;
}
- (NSCalendarDate *) endTime
{
NSCalendarDate *date;
NSTimeZone *timeZone;
timeZone = [[context activeUser] timeZone];
date = [[self task] due];
[date setTimeZone: timeZone];
return date;
}
- (NSString *)resourcesAsString {
NSArray *resources, *cns;
resources = [[self task] resources];
cns = [resources valueForKey:@"cnForDisplay"];
return [cns componentsJoinedByString:@"<br />"];
}
- (NSString *) categoriesAsString
{
NSEnumerator *categories;
NSArray *rawCategories;
NSMutableArray *l10nCategories;
NSString *currentCategory, *l10nCategory;
rawCategories
= [[task categories] componentsSeparatedByString: @","];
l10nCategories = [NSMutableArray arrayWithCapacity: [rawCategories count]];
categories = [rawCategories objectEnumerator];
currentCategory = [categories nextObject];
while (currentCategory)
{
l10nCategory
= [self labelForKey: [currentCategory stringByTrimmingSpaces]];
if (l10nCategory)
[l10nCategories addObject: l10nCategory];
currentCategory = [categories nextObject];
}
return [l10nCategories componentsJoinedByString: @", "];
}
// task.organizer.cnForDisplay
- (NSString *) eventOrganizer
{
CardElement *organizer;
organizer = [[self task] uniqueChildWithTag: @"organizer"];
return [organizer value: 0 ofAttribute: @"cn"];
}
- (NSString *) priorityLabelKey
{
return [NSString stringWithFormat: @"prio_%@", [task priority]];
}
/* backend */
- (iCalToDo *) task
{
SOGoTaskObject *clientObject;
if (!task)
{
clientObject = [self clientObject];
task = (iCalToDo *) [clientObject component: NO];
[task retain];
}
return task;
}
/* hrefs */
- (NSString *)attributesTabLink {
return [self completeHrefForMethod:[self ownMethodName]
withParameter:@"attributes"
forKey:@"tab"];
}
- (NSString *)participantsTabLink {
return [self completeHrefForMethod:[self ownMethodName]
withParameter:@"participants"
forKey:@"tab"];
}
- (NSString *)debugTabLink {
return [self completeHrefForMethod:[self ownMethodName]
withParameter:@"debug"
forKey:@"tab"];
}
- (NSString *)completeHrefForMethod:(NSString *)_method
withParameter:(NSString *)_param
forKey:(NSString *)_key
{
NSString *href;
[self setQueryParameter:_param forKey:_key];
href = [self completeHrefForMethod:[self ownMethodName]];
[self setQueryParameter:nil forKey:_key];
return href;
}
/* access */
- (BOOL)isMyApt {
NSString *email;
iCalPerson *organizer;
email = [[[self context] activeUser] primaryEmail];
organizer = [[self task] organizer];
if (!organizer) return YES; // assume this is correct to do, right?
return [[organizer rfc822Email] isEqualToString:email];
}
- (BOOL)canAccessApt {
NSString *email;
NSArray *partMails;
if ([self isMyApt])
return YES;
/* not my apt - can access if it's public */
if ([[[self task] accessClass] isEqualToString: @"PUBLIC"])
return YES;
/* can access it if I'm invited :-) */
email = [[[self context] activeUser] primaryEmail];
partMails = [[[self task] participants] valueForKey:@"rfc822Email"];
return [partMails containsObject: email];
}
- (BOOL)canEditApt {
return [self isMyApt];
}
/* action */
- (id<WOActionResults>)defaultAction {
if ([self task] == nil) {
return [NSException exceptionWithHTTPStatus:404 /* Not Found */
reason:@"could not locate task"];
}
return self;
}
- (BOOL)isDeletableClientObject {
return [[self clientObject] respondsToSelector:@selector(delete)];
}
- (id)deleteAction {
NSException *ex;
id url;
if ([self task] == nil) {
return [NSException exceptionWithHTTPStatus:404 /* Not Found */
reason:@"could not locate task"];
}
if (![self isDeletableClientObject]) {
/* return 400 == Bad Request */
return [NSException exceptionWithHTTPStatus:400
reason:@"method cannot be invoked on "
@"the specified object"];
}
if ((ex = [[self clientObject] delete]) != nil) {
// TODO: improve error handling
[self debugWithFormat:@"failed to delete: %@", ex];
return ex;
}
url = [[[self clientObject] container] baseURLInContext:[self context]];
return [self redirectToLocation:url];
}
@end /* UIxTaskView */
-299
View File
@@ -1,299 +0,0 @@
<?xml version='1.0' standalone='yes'?>
<var:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:uix="OGo:uix"
xmlns:label="OGo:label"
className="UIxPageFrame"
title="name"
const:popup="YES"
>
<table cellspacing="0" cellpadding="5" width="100%">
<tr>
<td class="window_label"
><var:string label:value="Appointment viewer" /></td>
</tr>
<tr>
<td>
<table border="0" cellpadding="2" width="100%" cellspacing="0">
<tr bgcolor="#e8e8e0">
<td align="left">
<span class="aptview_title"
><var:string value="startTime"
formatter="dateFormatter"
/></span>
</td>
<td align="right" >
<table border='0' cellpadding='0' cellspacing='1'>
<tr>
<td class="button_auto_env" nowrap="true"
valign='middle' align='center'>
<!--<a class="button_auto"
href="printview"
var:queryDictionary="queryParameters"
target="SOGoPrintView"
><var:string label:value="printview" /></a>-->
</td>
<var:if condition="canEditApt">
<td class="button_auto_env" nowrap="true"
valign='middle' align='center'>
<a class="button_auto"
href="edit"
var:queryDictionary="queryParameters"
><var:string label:value="edit" /></a>
</td>
<td class="button_auto_env" nowrap="true"
valign='middle' align='center'>
<a class="button_auto"
href="delete"
var:queryDictionary="queryParameters"
><var:string label:value="delete" /></a>
</td>
</var:if>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" width="100%">
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<!-- general appointment info -->
<var:if condition="canAccessApt">
<tr valign="top">
<td align="right" width="15%" bgcolor="#E8E8E0" class="aptview_text">
<var:string label:value="Title" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="appointment.summary" const:escapeHTML="NO" />
</td>
</tr>
<tr valign="top">
<td align="right" width="15%" bgcolor="#E8E8E0" class="aptview_text">
<var:string label:value="Location" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="appointment.location" const:escapeHTML="NO" />
</td>
</tr>
<tr valign="top">
<td align="right" width="15%" bgcolor="#E8E8E0" class="aptview_text">
<var:string label:value="Priority" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string label:value="$priorityLabelKey" />
</td>
</tr>
</var:if>
<tr valign="top">
<td align="right" width="15%" bgcolor="#E8E8E0" class="aptview_text">
<var:string label:value="Classification" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:if condition="appointment.isPublic">Public</var:if>
<var:if condition="appointment.isPublic"
const:negate="YES"
>Private</var:if>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" width="100%">
<uix:tabview var:selection="tabSelection"
const:tabStyle="tab"
const:selectedTabStyle="tab_selected"
const:bodyStyle="tabview_body"
>
<uix:tab const:key="attributes"
label:label="attributes"
var:href="attributesTabLink"
>
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="Start time" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="startTime"
formatter="dateFormatter"
/>
</td>
</tr>
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="End time" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="endTime"
formatter="dateFormatter"
/>
</td>
</tr>
<var:if condition="canAccessApt">
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="Categories" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="categoriesAsString" const:escapeHTML="NO" />
</td>
</tr>
<!-- Resources removed for v0.8
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="Resources" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="resourcesAsString"
const:escapeHTML="NO"
/>
</td>
</tr>
-->
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="Organizer" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="eventOrganizer" />
</td>
</tr>
<tr valign="top">
<td align="right"
width="15%"
bgcolor="#E8E8E0"
class="aptview_text"
>
<var:string label:value="Comment" />:
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="appointment.comment" const:insertBR="1"
const:escapeHTML="NO" />
</td>
</tr>
</var:if>
</table>
</uix:tab>
<var:if condition="canAccessApt">
<uix:tab const:key="participants"
label:label="participants"
var:href="participantsTabLink"
>
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr valign="top">
<td align="left" bgcolor="#E8E8E0" class="aptview_title">
<var:string label:value="Name" />
</td>
<td align="left" bgcolor="#E8E8E0" class="aptview_title">
<var:string label:value="Email" />
</td>
<td align="left"
bgcolor="#E8E8E0"
class="aptview_title"
colspan="2"
>
<var:string label:value="Status" />
</td>
</tr>
<var:foreach list="appointment.participants"
item="attendee"
>
<tr valign="top">
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<var:string value="attendee.cnForDisplay" />
</td>
<td align="left" bgcolor="#FFFFF0" class="aptview_text">
<a var:href="attendee.email"
><var:string value="attendee.rfc822Email" /></a>
</td>
<td align="left"
bgcolor="#FFFFF0"
class="aptview_text"
var:colspan="attendeeStatusColspan"
>
<var:component className="UIxCalParticipationStatusView"
partStat="attendee.participationStatus"
/>
</td>
<var:if condition="isAttendeeActiveUser">
<td align="left"
bgcolor="#FFFFF0"
class="button_auto_env"
>
<var:if condition="showAcceptButton">
<a href="accept"
class="button_auto"
_tab="participants"
><var:string label:value="accept" /></a>
</var:if>
<var:if condition="showRejectButton">
<a href="decline"
class="button_auto"
_tab="participants"
><var:string label:value="decline" /></a>
</var:if>
</td>
</var:if>
</tr>
</var:foreach>
</table>
</uix:tab>
</var:if>
<var:if condition="isUIxDebugEnabled">
<uix:tab const:key="debug"
const:label="DEBUG"
var:href="debugTabLink">
SOGo Server - <var:string value="name"/>
<br />
Client: <var:string value="clientObject"/>
<br />
Group: <var:string value="clientObject.group"
/><br />
Deletable: <var:string value="clientObject.isDeletionAllowed"
/><br />
Generation: <var:string value="clientObject.zlGenerationCount"
/><br />
MsgClass: <var:string value="clientObject.outlookMessageClass"
/><br />
<hr />
As iCal:<br />
<pre><var:string value="clientObject.iCalString"/></pre>
<hr />
As Mail:<br />
<pre><var:string value="clientObject.iCalMailString"/></pre>
</uix:tab>
</var:if>
</uix:tabview>
</td>
</tr>
</table>
</var:component>