calendarexporter: TODO: write new list module, ics creation improvements
This commit is contained in:
parent
76c2f9192a
commit
8f9248aaff
@ -22,6 +22,15 @@ Zarafa.plugins.calendarimporter.data.ResponseHandler = Ext.extend(Zarafa.core.da
|
|||||||
this.successCallback(response);
|
this.successCallback(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call the successCallback callback function.
|
||||||
|
* @param {Object} response Object contained the response data.
|
||||||
|
*/
|
||||||
|
doList : function(response)
|
||||||
|
{
|
||||||
|
this.successCallback(response);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In case exception happened on server, server will return
|
* In case exception happened on server, server will return
|
||||||
* exception response with the code of exception.
|
* exception response with the code of exception.
|
||||||
|
@ -395,11 +395,18 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.form.FormPa
|
|||||||
});
|
});
|
||||||
|
|
||||||
container.getRequest().singleRequest(
|
container.getRequest().singleRequest(
|
||||||
'calendarexportermodule',
|
'appointmentlistmodule',
|
||||||
'export',
|
'list',
|
||||||
{
|
{
|
||||||
calFolder : calValue,
|
groupDir: "ASC",
|
||||||
calIndex : selIndex,
|
restriction: {
|
||||||
|
startdate: 0,
|
||||||
|
duedate: 2145826800 // 2037... highest unix timestamp
|
||||||
|
},
|
||||||
|
sort: [{
|
||||||
|
"field": "startdate",
|
||||||
|
"direction": "DESC"
|
||||||
|
}],
|
||||||
store_entryid : calendarFolder.data.store_entryid,
|
store_entryid : calendarFolder.data.store_entryid,
|
||||||
entryid : calendarFolder.data.entryid
|
entryid : calendarFolder.data.entryid
|
||||||
},
|
},
|
||||||
@ -415,13 +422,41 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.form.FormPa
|
|||||||
*/
|
*/
|
||||||
exportDone : function(response)
|
exportDone : function(response)
|
||||||
{
|
{
|
||||||
if(response.status === true) {
|
if(response.item.length > 0) {
|
||||||
container.getNotifier().notify('info', 'Exported', 'Exported ' + response.entries + ' entries');
|
// call export function here!
|
||||||
|
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||||
|
successCallback: this.downLoadICS.createDelegate(this)
|
||||||
|
});
|
||||||
|
|
||||||
|
container.getRequest().singleRequest(
|
||||||
|
'calendarexportermodule',
|
||||||
|
'export',
|
||||||
|
{
|
||||||
|
data: response,
|
||||||
|
calendar: this.calendarselector.value
|
||||||
|
},
|
||||||
|
responseHandler
|
||||||
|
);
|
||||||
|
container.getNotifier().notify('info', 'Exported', 'Exported ' + response.item.length + ' entries');
|
||||||
} else {
|
} else {
|
||||||
container.getNotifier().notify('error', 'Export Failed', 'Failed to export your calendar');
|
container.getNotifier().notify('info', 'Export Failed', 'There were no items to export!');
|
||||||
}
|
}
|
||||||
this.dialog.close();
|
this.dialog.close();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* download ics file =)
|
||||||
|
* @param {Object} response
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
downLoadICS : function(response)
|
||||||
|
{
|
||||||
|
if(response.status === true) {
|
||||||
|
document.location.href = 'plugins/calendarimporter/php/download.php?fileid='+response.fileid+'&basedir='+response.basedir+'&secid='+response.secid+'&realname='+response.realname;
|
||||||
|
} else {
|
||||||
|
container.getNotifier().notify('error', 'Export Failed', 'ICal File creation failed!');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
importCheckedEvents: function () {
|
importCheckedEvents: function () {
|
||||||
//receive existing calendar store
|
//receive existing calendar store
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Ext.namespace("Zarafa.plugins.calendarimporter"); // Assign the right namespace
|
Ext.namespace("Zarafa.plugins.calendarimporter"); // Assign the right namespace
|
||||||
|
|
||||||
Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin
|
Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
|
23
php/download.php
Normal file
23
php/download.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
$basedir = $_GET["basedir"];
|
||||||
|
$secid = $_GET["secid"];
|
||||||
|
$fileid = $_GET["fileid"];
|
||||||
|
$realname = $_GET["realname"];
|
||||||
|
|
||||||
|
$secfile = $basedir . "/secid." . $secid;
|
||||||
|
$icsfile = $basedir . "/" . $fileid . "." . $secid;
|
||||||
|
|
||||||
|
// if the secid file exists -> download!
|
||||||
|
if(file_exists($secfile)) {
|
||||||
|
@header("Last-Modified: " . @gmdate("D, d M Y H:i:s",time()) . " GMT");
|
||||||
|
@header("Content-type: text/calendar");
|
||||||
|
header("Content-Length: " . filesize($icsfile));
|
||||||
|
header("Content-Disposition: attachment; filename=" . $realname . ".ics");
|
||||||
|
|
||||||
|
//write ics
|
||||||
|
readfile($icsfile);
|
||||||
|
unlink($secfile);
|
||||||
|
unlink($icsfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -76,11 +76,86 @@ class CalendarexporterModule extends Module {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function exportCalendar($actionType, $actionData) {
|
private function randomstring($length = 6) {
|
||||||
/* look up functionality in class.appointmentlistmodule.php (webapp/server/modules)*/
|
// $chars - all allowed charakters
|
||||||
|
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
||||||
|
|
||||||
|
srand((double)microtime()*1000000);
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $length) {
|
||||||
|
$num = rand() % strlen($chars);
|
||||||
|
$tmp = substr($chars, $num, 1);
|
||||||
|
$pass = $pass . $tmp;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
return $pass;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createSecIDFile($secid) {
|
||||||
|
$lockFile = TMP_PATH . "/secid." . $secid;
|
||||||
|
$fh = fopen($lockFile, 'w') or die("can't open secid file");
|
||||||
|
$stringData = date(DATE_RFC822);
|
||||||
|
fwrite($fh, $stringData);
|
||||||
|
fclose($fh);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function writeICSHead($fh, $calname) {
|
||||||
|
$icshead = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Zarafa Webapp//Zarafa Calendar Exporter//DE\nMETHOD:PUBLISH\nX-WR-CALNAME:" . $calname. "\n";
|
||||||
|
fwrite($fh, $icshead);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function writeICSEnd($fh) {
|
||||||
|
$icsend = "END:VCALENDAR";
|
||||||
|
fwrite($fh, $icsend);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function writeEvent($fh, $event) {
|
||||||
|
$head = "BEGIN:VEVENT\n";
|
||||||
|
$end = "END:VEVENT\n";
|
||||||
|
|
||||||
|
$fields = array(
|
||||||
|
"DTSTART" => $event["startdate"],
|
||||||
|
"DTEND" => $event["duedate"],
|
||||||
|
"DTSTAMP" => $event["creation_time"],
|
||||||
|
"DESCRIPTION" => "nothing...",
|
||||||
|
"LOCATION" => $event["location"],
|
||||||
|
"SUMMARY" => $event["subject"]
|
||||||
|
);
|
||||||
|
|
||||||
|
fwrite($fh, $head);
|
||||||
|
|
||||||
|
// event fields:
|
||||||
|
foreach ($fields as $key => $value) {
|
||||||
|
fwrite($fh, $key . ": " . $value . "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($fields);
|
||||||
|
|
||||||
|
fwrite($fh, $end);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function exportCalendar($actionType, $actionData) {
|
||||||
|
$secid = $this->randomstring();
|
||||||
|
$this->createSecIDFile($secid);
|
||||||
|
$tmpname = stripslashes($actionData["calendar"] . ".ics." . $this->randomstring(8));
|
||||||
|
$filename = TMP_PATH . "/" . $tmpname . "." . $secid;
|
||||||
|
|
||||||
|
// create ics file....
|
||||||
|
$fh = fopen($filename, 'w') or die("can't open ics file");
|
||||||
|
$this->writeICSHead($fh, $actionData["calendar"]);
|
||||||
|
|
||||||
|
foreach($actionData["data"]["item"] as $event) {
|
||||||
|
$this->writeEvent($fh, $event["props"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->writeICSEnd($fh);
|
||||||
|
fclose($fh);
|
||||||
|
|
||||||
$response['status'] = true;
|
$response['status'] = true;
|
||||||
$response['entries'] = "1002"; // number of entries that will be exported
|
$response['fileid'] = $tmpname; // number of entries that will be exported
|
||||||
|
$response['basedir'] = TMP_PATH;
|
||||||
|
$response['secid'] = $secid;
|
||||||
|
$response['realname'] = $actionData["calendar"];
|
||||||
$this->addActionData($actionType, $response);
|
$this->addActionData($actionType, $response);
|
||||||
$GLOBALS["bus"]->addData($this->getResponseData());
|
$GLOBALS["bus"]->addData($this->getResponseData());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user