Implement iCalendar import.
authorJan Schneider <jan@horde.org>
Thu, 11 Mar 2010 17:24:37 +0000 (18:24 +0100)
committerJan Schneider <jan@horde.org>
Thu, 11 Mar 2010 17:24:37 +0000 (18:24 +0100)
kronolith/data.php
kronolith/js/kronolith.js
kronolith/templates/chunks/calendar.php

index 62f525b..63943c4 100644 (file)
@@ -296,6 +296,16 @@ if (is_array($next_step)) {
     $next_step = $data->cleanup();
 }
 
+if (Horde_Util::getFormData('import_ajax')) {
+    $stack = $notification->notify(array('listeners' => 'status', 'raw' => true));
+    if ($stack) {
+        Horde::addInlineScript('window.parent.KronolithCore.showNotifications(window.parent.$A(' . Horde_Serialize::serialize($stack, Horde_Serialize::JSON, Horde_Nls::getCharset()) . '));');
+        Horde::addInlineScript('window.parent.$(window.name).remove();');
+        Horde::outputInlineScript();
+    }
+    exit;
+}
+
 $import_calendars = $export_calendars = array();
 if (Horde_Auth::getAuth()) {
     $calendars = Kronolith::listCalendars(false, Horde_Perms::EDIT);
index ac17dd6..1d624be 100644 (file)
@@ -2226,7 +2226,7 @@ KronolithCore = {
             switch (type) {
             case 'internal':
                 kronolithCTagAc.reset();
-                // Fall through
+                // Fall through.
             case 'tasklists':
                 $('kronolithCalendar' + type + 'LinkImportExport').up('span').hide();
                 break;
@@ -2250,7 +2250,8 @@ KronolithCore = {
             switch (type) {
             case 'internal':
                 kronolithCTagAc.reset(Kronolith.conf.calendars.internal[calendar].tg);
-                // fall through
+                $('kronolithCalendar' + type + 'ImportCal').setValue(calendar);
+                // Fall through.
             case 'tasklists':
                 $('kronolithCalendar' + type + 'Description').setValue(info.desc);
                 $('kronolithCalendar' + type + 'LinkImportExport').up('span').show();
@@ -2657,6 +2658,14 @@ KronolithCore = {
                       data,
                       function(r) {
                           if (r.response.saved) {
+                              if ($F('kronolithCalendarinternalImport')) {
+                                  var name = 'kronolithIframe' + Math.round(Math.random() * 1000),
+                                      iframe = new Element('iframe', { src: 'about:blank', name: name, id: name }).setStyle({ display: 'none' });
+                                  //iframe.observe('load', function() { iframe.remove.defer(); });
+                                  document.body.insert(iframe);
+                                  form.target = name;
+                                  form.submit();
+                              }
                               if (data.calendar) {
                                   var cal = Kronolith.conf.calendars[type][data.calendar],
                                       color = {
index 0b2e414..5ce3fa1 100644 (file)
@@ -10,12 +10,22 @@ if ($groups instanceof PEAR_Error) {
     $groups = array();
 }
 asort($groups);
+$file_upload = $GLOBALS['browser']->allowFileUploads();
 ?>
 <div id="kronolithCalendarDialog" class="kronolithDialog">
 
-<form id="kronolithCalendarForminternal" action="">
+<form id="kronolithCalendarForminternal" method="post" action="<?php echo Horde::applicationUrl('data.php') ?>"<?php if ($file_upload) echo ' enctype="multipart/form-data"' ?>>
 <input type="hidden" name="type" value="internal" />
 <input id="kronolithCalendarinternalId" type="hidden" name="calendar" />
+<?php if ($file_upload): ?>
+<input type="hidden" id="kronolithCalendarinternalImportCal" name="importCal" />
+<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $file_upload ?>" />
+<input type="hidden" name="actionID" value="<?php echo Horde_Data::IMPORT_FILE ?>" />
+<input type="hidden" name="import_step" value="1" />
+<input type="hidden" name="import_format" value="icalendar" />
+<input type="hidden" name="import_ajax" value="1" />
+<?php Horde_Util::pformInput() ?>
+<?php endif; ?>
 
 <div class="kronolithCalendarDiv" id="kronolithCalendarinternal1">
 <div>
@@ -40,7 +50,7 @@ asort($groups);
   <span>
     <span class="kronolithSeparator">|</span>
     <ul>
-      <li><a href="#" class="kronolithTabLink" id="kronolithCalendarinternalLinkImportExport"><?php echo _("Export") /*_("Import/Export")*/ ?></a></li>
+      <li><a href="#" class="kronolithTabLink" id="kronolithCalendarinternalLinkImportExport"><?php echo _("Import/Export") ?></a></li>
     </ul>
   </span>
 </div>
@@ -62,12 +72,12 @@ asort($groups);
 
 <div id="kronolithCalendarinternalTabImportExport" class="kronolithTabsOption" style="display:none">
   <div class="kronolithDialogInfo"><?php echo _("iCalendar is a computer file format which allows internet users to send meeting requests and tasks to other internet users, via email, or sharing files with an extension of .ics. Recipients of the iCalendar data file (with supporting software, such as an email client or calendar application) can respond to the sender easily or counter propose another meeting date/time.") ?></div>
-  <?php /* ?>
-  <label><?php echo _("Import ICS file") ?>:
-    <input type="file" name="import_file" />
-  </label>
+  <label for="kronolithCalendarinternalImport"><?php echo _("Import ICS file") ?>:</label>
+  <input type="file" id="kronolithCalendarinternalImport" name="import_file" /><br />
+  <input type="checkbox" id="kronolithCalendarinternalImportOver" name="purge" />
+  <label for="kronolithCalendarinternalImportOver"><?php echo _("Replace existing calendar with the imported one?") ?></label>
+  <?php echo _("Warning: This deletes all entries in your current calendar.") ?>
   <br />
-  <?php */ ?>
   <label><?php echo _("Export ICS file") ?>:</label>
   <a id="kronolithCalendarinternalExport"><?php echo _("Calendar ICS file") ?></a>
 </div>