2006-06-15 21:34:10 +02:00
|
|
|
<?xml version="1.0" standalone="yes"?>
|
2007-11-10 01:02:30 +01:00
|
|
|
<!DOCTYPE div>
|
2006-06-15 21:34:10 +02:00
|
|
|
<div xmlns="http://www.w3.org/1999/xhtml"
|
2007-11-10 01:02:30 +01:00
|
|
|
xmlns:var="http://www.skyrix.com/od/binding"
|
|
|
|
xmlns:label="OGo:label"
|
|
|
|
xmlns:const="http://www.skyrix.com/od/constant"
|
2015-06-04 01:42:30 +02:00
|
|
|
xmlns:rsrc="OGo:url">
|
|
|
|
|
|
|
|
<!-- PARSING ERROR -->
|
2007-11-10 01:02:30 +01:00
|
|
|
<var:if condition="couldParseCalendar" const:negate="1">
|
2015-06-04 01:42:30 +02:00
|
|
|
<div>
|
|
|
|
<md-toolbar class="md-medium-tall md-warn md-hue-3">
|
|
|
|
<div class="md-toolbar-tools">
|
|
|
|
<h2>
|
|
|
|
SOGo could not parse the body of this calendar MIME part.
|
|
|
|
</h2>
|
|
|
|
</div>
|
|
|
|
</md-toolbar>
|
|
|
|
<md-whiteframe class="md-whiteframe-z1" layout="row" layout-align="space-between center">
|
|
|
|
<pre><var:string value="flatContentAsString" /></pre>
|
|
|
|
</md-whiteframe>
|
2009-09-10 20:31:20 +02:00
|
|
|
</div>
|
2015-06-04 01:42:30 +02:00
|
|
|
</var:if> <!-- if condition="couldParseCalendar" const:negate="1" -->
|
|
|
|
|
|
|
|
<!-- EVENT PROPERLY PARSED -->
|
|
|
|
<var:if condition="couldParseCalendar">
|
|
|
|
|
|
|
|
<md-divider class="md-padding"/>
|
|
|
|
|
|
|
|
<div sg-imip="message" var:sg-imip-path="pathToAttachmentFromMessage">
|
|
|
|
<!-- TODO - remove unused strings
|
|
|
|
<legend>
|
|
|
|
<var:string label:value="Appointment"/>:
|
|
|
|
<strong><var:string value="inEvent.summary" /></strong>
|
|
|
|
|
|
|
|
<var:if condition="isLoggedInUserTheOrganizer">
|
|
|
|
(<var:string label:value="organized_by_you"/>)
|
|
|
|
</var:if>
|
|
|
|
<var:if condition="isLoggedInUserAnAttendee">
|
|
|
|
(<var:string label:value="you_are_an_attendee"/>)
|
|
|
|
</var:if>
|
|
|
|
</legend> -->
|
2007-11-10 01:02:30 +01:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- IMIP REQUEST -->
|
2007-11-18 11:16:25 +01:00
|
|
|
<var:if condition="inCalendar.method.uppercaseString" const:value="REQUEST">
|
2007-11-10 01:02:30 +01:00
|
|
|
<!-- sent to attendees to propose or update a meeting -->
|
|
|
|
<var:if condition="isLoggedInUserAnAttendee">
|
2008-08-28 19:22:36 +02:00
|
|
|
<var:if condition="hasCalendarAccess">
|
2015-06-04 01:42:30 +02:00
|
|
|
<div>
|
|
|
|
<p>
|
2010-05-05 16:40:53 +02:00
|
|
|
<var:if condition="currentUserAttendee.rsvp" const:value="true">
|
2015-06-04 01:42:30 +02:00
|
|
|
|
|
|
|
<var:if condition="currentUserAttendee.partStatWithDefault"
|
|
|
|
const:value="ACCEPTED" const:negate="YES">
|
|
|
|
<md-button type="button" ng-click="iCalendarAction('accept')">
|
|
|
|
<var:string label:value="Accept" />
|
|
|
|
</md-button>
|
|
|
|
</var:if>
|
|
|
|
|
|
|
|
<var:if condition="currentUserAttendee.partStatWithDefault"
|
|
|
|
const:value="DECLINED" const:negate="YES">
|
|
|
|
<md-button type="button" ng-click="iCalendarAction('decline')">
|
|
|
|
<var:string label:value="Decline" />
|
|
|
|
</md-button>
|
|
|
|
</var:if>
|
|
|
|
|
|
|
|
<var:if condition="currentUserAttendee.partStatWithDefault"
|
|
|
|
const:value="TENTATIVE" const:negate="YES">
|
|
|
|
<md-button type="button" ng-click="iCalendarAction('tentative')">
|
|
|
|
<var:string label:value="Tentative" />
|
|
|
|
</md-button>
|
|
|
|
</var:if>
|
|
|
|
|
|
|
|
<var:if condition="currentUserAttendee.partStatWithDefault"
|
|
|
|
const:value="DELEGATED" const:negate="YES">
|
|
|
|
<md-button type="button"
|
|
|
|
ng-click="delegateInvitation = true"
|
|
|
|
ng-hide="delegateInvitation == true">
|
|
|
|
<var:string label:value="Delegate ..." />
|
|
|
|
</md-button>
|
|
|
|
|
|
|
|
<div class="md-actions" layout="row"
|
|
|
|
layout-align="start center"
|
|
|
|
ng-show="delegateInvitation == true">
|
|
|
|
|
|
|
|
<md-autocomplete
|
|
|
|
class="md-flex"
|
|
|
|
md-search-text="searchText"
|
|
|
|
md-selected-item="delegatedTo"
|
|
|
|
md-items="user in userFilter(searchText)"
|
|
|
|
md-min-length="3"
|
|
|
|
md-no-cache="true"
|
|
|
|
md-item-text="user.$shortFormat()"
|
|
|
|
label:md-floating-label="Delegated to">
|
|
|
|
<span class="md-contact-suggestion" layout="row" layout-align="space-between center">
|
|
|
|
<span class="md-contact-name"
|
|
|
|
md-highlight-text="searchText"
|
|
|
|
md-highlight-flags="^i">{{user.cn}}</span> <span class="md-contact-email"
|
|
|
|
md-highlight-text="searchText"
|
|
|
|
md-highlight-flags="^i">{{user.c_email}}</span>
|
|
|
|
</span>
|
|
|
|
</md-autocomplete>
|
|
|
|
<md-button ng-click="delegateInvitation = false"><var:string label:value="Cancel"/></md-button>
|
|
|
|
<md-button class="md-primitive"
|
|
|
|
ng-click="iCalendarAction('delegate')"
|
|
|
|
ng-disabled="!delegatedTo || delegatedTo.length == 0"><var:string label:value="OK"/></md-button>
|
|
|
|
</div>
|
|
|
|
</var:if>
|
|
|
|
<!-- TODO - should we re-enable this? It never
|
|
|
|
worked in v2!
|
|
|
|
<var:if condition="currentUserAttendee.partStatWithDefault"
|
|
|
|
const:value="DELEGATED">
|
|
|
|
<span id="delegateEditor">
|
|
|
|
<span class="floatLeft"><var:string label:value="Delegated to" />
|
|
|
|
<a var:href="currentUserAttendee.delegatedTo" name="delegatedToLink" id="delegatedToLink"><var:string value="currentUserAttendee.delegatedTo.rfc822Email" /></a></span>
|
|
|
|
<input name="delegatedTo" id="delegatedTo" type="text" var:value="currentUserAttendee.delegatedTo.rfc822Email" var:uid="currentUserAttendee.delegatedTo.rfc822Email" style="display: none;" />
|
|
|
|
<a href="#" class="button actionButton" id="iCalendarDelegate" style="display: none;">
|
|
|
|
<span><var:string label:value="OK" /></span></a>
|
|
|
|
</span>
|
|
|
|
</var:if>
|
|
|
|
-->
|
|
|
|
</var:if> <!-- if condition="currentUserAttendee.rsvp" const:value="true" -->
|
|
|
|
|
|
|
|
<var:if condition="isEventStoredInCalendar" const:negate="YES">
|
|
|
|
<md-button type="button" ng-click="iCalendarAction('addToCalendar')">
|
|
|
|
<var:string label:value="Add to calendar" />
|
|
|
|
</md-button>
|
2010-05-05 16:40:53 +02:00
|
|
|
</var:if>
|
2015-06-04 01:42:30 +02:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</var:if> <!-- if condition="hasCalendarAccess" -->
|
|
|
|
|
|
|
|
<p>
|
|
|
|
<var:string label:value="Organizer" />
|
|
|
|
<a var:href="inEvent.organizer.email"
|
|
|
|
><var:string value="organizerDisplayName" /></a>
|
|
|
|
<var:string label:value="request_info" />
|
|
|
|
</p>
|
|
|
|
|
|
|
|
</var:if> <!-- if condition="isLoggedInUserAnAttendee" -->
|
|
|
|
|
|
|
|
<var:if condition="isLoggedInUserAnAttendee" const:negate="YES">
|
|
|
|
<p>
|
|
|
|
<var:string label:value="Organizer" />
|
|
|
|
<a var:href="inEvent.organizer.email">
|
|
|
|
<var:string value="organizerDisplayName" />
|
|
|
|
</a>
|
|
|
|
<var:string label:value="request_info_no_attendee" />
|
|
|
|
</p>
|
2009-11-04 23:13:20 +01:00
|
|
|
</var:if>
|
2015-06-04 01:42:30 +02:00
|
|
|
|
|
|
|
</var:if> <!-- if condition="inCalendar.method.uppercaseString"
|
|
|
|
const:value="REQUEST" -->
|
2007-11-10 01:02:30 +01:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- IMIP REPLY - sent to organizer to update the status of the
|
|
|
|
participant -->
|
2007-11-18 11:16:25 +01:00
|
|
|
<var:if condition="inCalendar.method.uppercaseString" const:value="REPLY">
|
2007-11-10 01:02:30 +01:00
|
|
|
<var:if condition="isReplySenderAnAttendee" const:negate="1">
|
2015-06-04 01:42:30 +02:00
|
|
|
<p>
|
|
|
|
<var:string label:value="reply_info_no_attendee" />
|
|
|
|
</p>
|
2007-11-10 01:02:30 +01:00
|
|
|
</var:if>
|
|
|
|
<var:if condition="isReplySenderAnAttendee">
|
2015-06-04 01:42:30 +02:00
|
|
|
<var:if condition="canOriginalEventBeUpdated">
|
|
|
|
<p>
|
|
|
|
<var:string label:value="Status Update" />:
|
|
|
|
<i><var:string label:value="$inReplyAttendee.partStatWithDefault" /></i>,
|
2013-11-06 21:25:36 +01:00
|
|
|
<var:string label:value="was" />
|
2015-06-04 01:42:30 +02:00
|
|
|
<i><var:string label:value="$storedReplyAttendee.partStatWithDefault"/></i>.
|
|
|
|
</p>
|
|
|
|
<br/>
|
|
|
|
<md-button type="button" ng-click="iCalendarAction('updateUserStatus')">
|
|
|
|
<var:string label:value="Update status" />
|
|
|
|
</md-button>
|
|
|
|
</var:if>
|
2007-11-10 01:02:30 +01:00
|
|
|
</var:if>
|
|
|
|
</var:if>
|
2006-06-15 21:34:10 +02:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- IMIP CANCEL - sent to attendees to notify of the attendee
|
|
|
|
being removed or the
|
|
|
|
event being deleted -->
|
2007-11-18 11:16:25 +01:00
|
|
|
<var:if condition="inCalendar.method.uppercaseString" const:value="CANCEL">
|
2015-06-04 01:42:30 +02:00
|
|
|
<p><var:string label:value="cancel_info_text" /></p>
|
2007-11-10 01:02:30 +01:00
|
|
|
<var:if condition="isEventStoredInCalendar">
|
2015-06-04 01:42:30 +02:00
|
|
|
<md-button type="button" ng-click="iCalendarAction('deleteFromCalendar')">
|
|
|
|
<var:string label:value="Delete from calendar" />
|
|
|
|
</md-button>
|
|
|
|
</var:if>
|
2007-11-10 01:02:30 +01:00
|
|
|
</var:if>
|
2006-06-15 21:34:10 +02:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- IMIP ADD - TODO -->
|
2007-11-18 11:16:25 +01:00
|
|
|
<var:if condition="inCalendar.method.uppercaseString" const:value="ADD">
|
2015-06-04 01:42:30 +02:00
|
|
|
<p><var:string label:value="add_info_text" /></p>
|
2006-06-15 21:34:10 +02:00
|
|
|
</var:if>
|
2007-11-10 01:02:30 +01:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- IMIP PUBLISH - none-scheduling event sent to someone for
|
|
|
|
adding to the calendar -->
|
2007-11-18 11:16:25 +01:00
|
|
|
<var:if condition="inCalendar.method.uppercaseString" const:value="PUBLISH">
|
2015-06-04 01:42:30 +02:00
|
|
|
<p><var:string label:value="publish_info_text" /></p>
|
2006-06-15 21:34:10 +02:00
|
|
|
</var:if>
|
|
|
|
|
2007-11-10 01:02:30 +01:00
|
|
|
<var:if condition="isLoggedInUserTheOrganizer">
|
|
|
|
<!--
|
2015-06-04 01:42:30 +02:00
|
|
|
Possible Status:
|
|
|
|
REPLY => check whether it matches, if not suggest change, show
|
|
|
|
comment
|
|
|
|
REFRESH => add button to resent iCal
|
|
|
|
COUNTER => show panel to decide on counter
|
2007-11-10 01:02:30 +01:00
|
|
|
-->
|
2006-06-15 21:34:10 +02:00
|
|
|
</var:if>
|
2007-11-10 01:02:30 +01:00
|
|
|
<var:if condition="isLoggedInUserTheOrganizer" const:negate="1">
|
|
|
|
<!--
|
2015-06-04 01:42:30 +02:00
|
|
|
Possible Status:
|
|
|
|
REQUEST => ACCEPT, TENTATIVELY, DECLINE buttons with comment field
|
|
|
|
- only show buttons for attendees
|
|
|
|
PUBLISH => just the 'add to calendar' button, rewrite organizer?
|
|
|
|
ADD / CANCEL
|
|
|
|
DECLINE-COUNTER
|
2007-11-10 01:02:30 +01:00
|
|
|
-->
|
2006-06-15 21:34:10 +02:00
|
|
|
</var:if>
|
|
|
|
|
2007-11-10 01:02:30 +01:00
|
|
|
<!-- the user comment is used in replies -->
|
|
|
|
<var:if condition="inEvent.userComment.isNotEmpty">
|
|
|
|
<div class="linked_attachment_meta" style="background-color: white;">
|
|
|
|
<var:string value="inEvent.userComment" const:insertBR="1" />
|
|
|
|
</div>
|
|
|
|
<br />
|
2006-06-15 21:34:10 +02:00
|
|
|
</var:if>
|
2012-11-29 20:00:10 +01:00
|
|
|
|
2007-11-10 01:02:30 +01:00
|
|
|
|
2015-06-04 01:42:30 +02:00
|
|
|
<!-- EVENT'S METADATA (time, organizer, attendees, etc.) -->
|
|
|
|
<div class="pseudo-input-container">
|
|
|
|
<label class="pseudo-input-label"><var:string label:value="Organizer"/></label>
|
|
|
|
<div>
|
|
|
|
<var:string value="organizerDisplayName"/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="pseudo-input-container">
|
|
|
|
<label class="pseudo-input-label"><var:string label:value="Time"/></label>
|
|
|
|
<div>
|
|
|
|
<var:string value="formattedDateTime"/>
|
|
|
|
</div>
|
2006-06-15 21:34:10 +02:00
|
|
|
</div>
|
2015-06-04 01:42:30 +02:00
|
|
|
|
2015-08-04 19:52:31 +02:00
|
|
|
<!-- ATTENDEES -->
|
|
|
|
<md-list>
|
|
|
|
<div class="pseudo-input-container">
|
|
|
|
<label class="pseudo-input-label"><var:string label:value="Attendees"/></label>
|
|
|
|
<!-- md-contact-chips don't support "readonly", so we build them using md-chips
|
|
|
|
in readonly mode and a template similar to the one of md-contact-chips -->
|
|
|
|
<md-chips class="md-contact-chips"
|
|
|
|
ng-model="part.participants"
|
|
|
|
readonly="true">
|
|
|
|
<md-chip-template>
|
|
|
|
<div class="md-contact-avatar"><img src="#" ng-src="{{$chip.image}}" alt="{{$chip.name}}"/></div>
|
|
|
|
<div class="md-contact-name">{{$chip.name}}</div>
|
|
|
|
<md-icon ng-class="'icon-' + $chip.status"><!-- partstat --></md-icon>
|
|
|
|
</md-chip-template>
|
|
|
|
</md-chips>
|
|
|
|
</div>
|
2015-06-04 01:42:30 +02:00
|
|
|
</md-list>
|
|
|
|
|
|
|
|
<var:if condition="authorativeEvent.comment.isNotEmpty">
|
|
|
|
<div class="pseudo-input-container">
|
|
|
|
<label class="pseudo-input-label">
|
|
|
|
<var:string label:value="Comment"/>
|
|
|
|
</label>
|
|
|
|
<div>
|
|
|
|
<p>
|
|
|
|
<var:string value="authorativeEvent.comment" const:insertBR="1" />
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</var:if>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</var:if><!--if condition="couldParseCalendar" -->
|
2007-11-10 01:02:30 +01:00
|
|
|
|
2006-06-15 21:34:10 +02:00
|
|
|
</div>
|