diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 89cdae10..64c55de6 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -993,7 +993,9 @@ class calendar extends rcube_plugin
// show part page
if (!empty($_GET['_frame'])) {
- $this->rc->output->add_handlers(array('attachmentframe' => array($this, 'attachment_frame')));
+ $this->attachment = $attachment;
+ $this->register_handler('plugin.attachmentframe', array($this, 'attachment_frame'));
+ $this->register_handler('plugin.attachmentcontrols', array($this->ui, 'attachment_controls'));
$this->rc->output->send('calendar.attachment');
exit;
}
diff --git a/plugins/calendar/drivers/database/database_driver.php b/plugins/calendar/drivers/database/database_driver.php
index 9c759471..b4d35905 100644
--- a/plugins/calendar/drivers/database/database_driver.php
+++ b/plugins/calendar/drivers/database/database_driver.php
@@ -664,6 +664,7 @@ class database_driver extends calendar_driver
$event['allday'] = intval($event['all_day']);
$event['free_busy'] = $free_busy_map[$event['free_busy']];
$event['calendar'] = $event['calendar_id'];
+ $event['recurrence_id'] = intval($event['recurrence_id']);
// parse recurrence rule
if ($event['recurrence'] && preg_match_all('/([A-Z]+)=([^;]+);?/', $event['recurrence'], $m, PREG_SET_ORDER)) {
diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php
index 5fae6e3f..d6bd69e9 100644
--- a/plugins/calendar/lib/calendar_ui.php
+++ b/plugins/calendar/lib/calendar_ui.php
@@ -520,4 +520,22 @@ class calendar_ui
return html::tag('ul', $attrib, '', html::$common_attrib);
}
+ function attachment_controls($attrib = array())
+ {
+ $table = new html_table(array('cols' => 3));
+
+ if (!empty($this->calendar->attachment['name'])) {
+ $table->add('title', Q(rcube_label('filename')));
+ $table->add(null, Q($this->calendar->attachment['name']));
+ $table->add(null, '[' . html::a('?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING']), Q(rcube_label('download'))) . ']');
+ }
+
+ if (!empty($this->calendar->attachment['size'])) {
+ $table->add('title', Q(rcube_label('filesize')));
+ $table->add(null, Q(show_bytes($this->calendar->attachment['size'])));
+ }
+
+ return $table->show($attrib);
+ }
+
}
diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css
index c1663fc6..d12342de 100644
--- a/plugins/calendar/skins/default/calendar.css
+++ b/plugins/calendar/skins/default/calendar.css
@@ -247,68 +247,75 @@ a.miniColors-trigger {
margin-top: -3px;
}
-#attachmentcontainer
-{
- position: absolute;
- top: 80px;
- left: 20px;
- right: 20px;
- bottom: 20px;
+#attachmentcontainer {
+ position: absolute;
+ top: 80px;
+ left: 20px;
+ right: 20px;
+ bottom: 20px;
}
-#attachmentframe
-{
- width: 100%;
- height: 100%;
- border: 1px solid #999999;
- background-color: #F9F9F9;
+#attachmentframe {
+ width: 100%;
+ height: 100%;
+ border: 1px solid #999999;
+ background-color: #F9F9F9;
}
-.attachments-list ul
-{
- margin: 0px;
- padding: 0px;
- list-style-image: none;
- list-style-type: none;
+#partheader {
+ position: absolute;
+ top: 20px;
+ left: 220px;
+ right: 20px;
+ height: 40px;
}
-.attachments-list ul li
-{
- height: 18px;
- font-size: 12px;
- padding-left: 2px;
- padding-top: 2px;
- padding-right: 4px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- -o-text-overflow: ellipsis;
+#partheader table td {
+ padding-left: 2px;
+ padding-right: 4px;
+ vertical-align: middle;
+ font-size: 11px;
}
-.attachments-list ul li img
-{
- padding-right: 2px;
- vertical-align: middle;
+
+.attachments-list ul {
+ margin: 0px;
+ padding: 0px;
+ list-style-image: none;
+ list-style-type: none;
}
-.attachments-list ul li a
-{
- text-decoration: none;
+.attachments-list ul li {
+ height: 18px;
+ font-size: 12px;
+ padding-left: 2px;
+ padding-top: 2px;
+ padding-right: 4px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
}
-.attachments-list ul li a:hover
-{
- text-decoration: underline;
+.attachments-list ul li img {
+ padding-right: 2px;
+ vertical-align: middle;
}
-#eventshow .attachments-list ul
-{
- display: block;
+.attachments-list ul li a {
+ text-decoration: none;
}
-#eventshow .attachments-list ul li
-{
- float: left;
+.attachments-list ul li a:hover {
+ text-decoration: underline;
+}
+
+#eventshow .attachments-list ul {
+ display: block;
+}
+
+#eventshow .attachments-list ul li {
+ float: left;
}
diff --git a/plugins/calendar/skins/default/templates/attachment.html b/plugins/calendar/skins/default/templates/attachment.html
index cd39109e..34d4da66 100644
--- a/plugins/calendar/skins/default/templates/attachment.html
+++ b/plugins/calendar/skins/default/templates/attachment.html
@@ -9,9 +9,8 @@