calendarimporter 2.0.3:

- fixed all day eventsvcf importer pre alpha. Import working but contact pictures are not saved.

TODO: rewrite import functionality in php
This commit is contained in:
Christoph Haas 2013-06-23 10:13:22 +00:00
parent 185c885687
commit 1bb1f956d0
2 changed files with 90 additions and 27 deletions

View File

@ -501,12 +501,9 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
*/
storeImages : function (store, action, result, res, records) {
var attachStores = new Array();
Ext.each(records, function(record) {
var attachstore = record.createAttachmentStore();
record.createAttachmentStore();
record.save();
attachStores[attachstore.getId()] = attachstore;
var responseHandler = new Zarafa.plugins.contactimporter.data.ResponseHandler({
successCallback: function (response) {
@ -532,8 +529,8 @@ Zarafa.plugins.contactimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
'contactmodule',
'addattachment',
{
storeid: attachstore.getId(),
entryid: record.id,
storeid: record.get("store_entryid"),
entryid: record.get("entryid"),
tmpfile: record.get("x_photo_path")
},
responseHandler

View File

@ -22,6 +22,7 @@
*/
include_once('vcf/class.vCard.php');
require_once('mapi/mapitags.php' );
class ContactModule extends Module {
@ -136,32 +137,97 @@ class ContactModule extends Module {
* @param $actionData
*/
private function addAttachment($actionType, $actionData) {
// Get Attachment data from state
$attachment_state = new AttachmentState();
$attachment_state->open();
$filename = "ContactPicture.jpg";
$tmppath = $actionData["tmpfile"];
$filesize = filesize($tmppath);
$f = getimagesize($tmppath);
$filetype = $f["mime"];
// Move the uploaded file into the attachment state
$attachid = $attachment_state->addProvidedAttachmentFile($actionData["storeid"], $filename, $tmppath, array(
"name" => $filename,
"size" => $filesize,
"type" => $filetype,
"sourcetype" => 'default'
));
$attachment_state->close();
// Get store id
$storeid = false;
if(isset($actionData["storeid"])) {
$storeid = $actionData["storeid"];
}
// Get message entryid
$entryid = false;
if(isset($actionData["entryid"])) {
$entryid = $actionData["entryid"];
}
$tmpimage = $actionData["tmpfile"];
$contactPicture = file_get_contents ($tmpimage);
error_log($tmpdata);
error_log("opening store");
$store = $GLOBALS["mapisession"]->openMessageStore(hex2bin($storeid));
error_log("opening message");
// Open a message from the store
try {
$message = mapi_msgstore_openentry($store, hex2bin($entryid));
} catch (MAPIException $e) {
$e->setHandled();
error_log($e->getCode());
error_log(mapi_last_hresult());
}
error_log("opening attachment");
// Open attachment number 0
$attach = mapi_message_createattach($message);
// Set properties of the attachment
$properties = array(
//PR_ATTACH_SIZE => strlen($contactPicture),
PR_ATTACH_LONG_FILENAME => 'ContactPicture.jpg',
PR_ATTACHMENT_HIDDEN => false,
PR_DISPLAY_NAME => 'ContactPicture.jpg',
PR_ATTACH_METHOD => ATTACH_BY_VALUE,
PR_ATTACH_MIME_TAG => 'image/jpeg',
PR_ATTACHMENT_CONTACTPHOTO => true,
PR_ATTACH_DATA_BIN => "",
PR_ATTACHMENT_FLAGS => 1,
PR_ATTACH_EXTENSION_A => '.jpg',
PR_ATTACH_NUM => 1
);
error_log("setting props");
mapi_setprops($attach, $properties);
// Stream the file to the PR_ATTACH_DATA_BIN property
error_log("streaming file");
$stream = mapi_openproperty($attach, PR_ATTACH_DATA_BIN, IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY);
$handle = fopen($tmpimage, "r");
while (!feof($handle)) {
$contents = fread($handle, BLOCK_SIZE);
mapi_stream_write($stream, $contents);
}
// Commit the stream and save changes
mapi_stream_commit($stream);
error_log("saving attachment");
mapi_savechanges($attach);
if (mapi_last_hresult() > 0) {
error_log("Error saving attach to contact: " . get_mapi_error_name());
}
error_log("saving message");
mapi_savechanges($message);
if (mapi_last_hresult() > 0) {
error_log("Error saving contact: " . get_mapi_error_name());
}
// Open attachment number 0
error_log("final tests attachment");
$testattach = mapi_message_openattach ($message, 0);
error_log(print_r(mapi_attach_getprops($testattach),true));
$response['status'] = true;
$response['storeid'] = $actionData["storeid"];
$response['tmpname'] = $attachid;
$response['name'] = $filename;
$response['size'] = $filesize;
$response['type'] = $filetype;
$response['storeid'] = $storeid;
$response['entryid'] = $entryid;
$this->addActionData($actionType, $response);
$GLOBALS["bus"]->addData($this->getResponseData());