// -*- coding: utf-8; indent-tabs-mode: nil -*- Ext.namespace('Zarafa.calendar.printer'); /** * @class Zarafa.calendar.printer.MeetingRenderer * @extends Zarafa.common.printer.renderers.RecordRenderer * * A printer for appointments and meeting requests using the same layout as for emails * * Prints a single meetingrequest email or calendar item */ Zarafa.calendar.printer.MeetingRenderer = Ext.extend(Zarafa.common.printer.renderers.RecordRenderer, { /** * Generates a template on which prepareData() will be applied to create the HTML body. * @param {zarafa.core.data.MAPIRecord} record the email to print * @return {String} The HTML for the XTemplate to print */ generateBodyTemplate: function(record) { var html = ''; html += '<b>{fullname:htmlEncode}</b>\n'; html += '<hr>\n'; html += '<table>\n'; html += this.addRow(_('Subject'), '{subject:htmlEncode}'); html += this.optionalRow(_('Location'), 'location', '{location:htmlEncode}'); html += this.addRow('', ''); // separator // # TRANSLATORS: See http://docs.sencha.com/ext-js/3-4/#!/api/Date for the meaning of these formatting instructions html += this.addRow(_('Start'), '{startdate:date("' + _('l jS F Y G:i') + '")}'); // # TRANSLATORS: See http://docs.sencha.com/ext-js/3-4/#!/api/Date for the meaning of these formatting instructions html += this.addRow(_('End'), '{enddate:date("' + _('l jS F Y G:i') + '")}'); // this.optionalRow(_('Show Time As', record, '?'); html += this.addRow('', ''); // separator // outlook always prints Recurrence: (none) .. no clue what it means, and why. html += this.optionalRow(_('Recurrence pattern'), 'recurring_pattern', '{recurring_pattern:htmlEncode}'); html += this.optionalRow('', 'recurring_pattern', ''); html += this.optionalRow(_('Organiser'), 'sender_name', '{sender_name:htmlEncode}'); html += this.optionalRow(_('Meeting status'), 'responsestatus', '{responsestatus:responseStatusString}'); html += '<tpl if="!Ext.isEmpty(values.sender_name) || !Ext.isEmpty(values.responsestatus)">'; html += this.addRow('', ''); // separator html += '</tpl>'; // following depends on state of item html += this.optionalRow(_('Required Attendees'), 'display_to', '{display_to:htmlEncode}'); html += this.optionalRow(_('Optional Attendees'), 'display_cc', '{display_cc:htmlEncode}'); html += this.optionalRow(_('Resources'), 'display_bcc', '{display_bcc:htmlEncode}'); html += this.addRow('', ''); // separator html += this.optionalRow(_('Sensitivity'), 'sensitivity', '{sensitivity:sensitivityString}'); html += this.optionalRow(_('Importance'), 'importance', '{importance:importanceString}'); html += '<tpl if="!Ext.isEmpty(values.sensitivity) || !Ext.isEmpty(values.importance)">'; html += this.addRow('', ''); // separator html += '</tpl>'; html += this.optionalRow(_('Attachments'), 'attachment_names', '{attachment_names:htmlEncode}'); html += '</table><br><p>\n'; // outlook strips until the ~*~*~... marker.. that's a bit of a hassle html += record.getBody(true); html += '</p>\n'; return html; }, /** * Prepares data for any record for use in the XTemplate * @param {Zarafa.core.data.MAPIRecord} record The mapi record to print * @return {Array} Data suitable for use in the XTemplate */ prepareData: function(record) { var data = Zarafa.calendar.printer.MeetingRenderer.superclass.prepareData.apply(this, arguments); if (record.isMessageClass('IPM.Schedule', true)) { // meeting request has other names for the same properties data['startdate'] = data['appointment_startdate']; data['enddate'] = data['appointment_duedate']; data['location'] = data['appointment_location']; data['recurring_pattern'] = data['appointment_recurring_pattern']; } else { // normal calendar item data['startdate'] = data['commonstart']; data['enddate'] = data['commonend']; } return data; } });