mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-25 17:33:49 +01:00
add new feature: mails can now be saved as infologs
This commit is contained in:
parent
f45b9edc35
commit
1cce044c59
@ -598,6 +598,81 @@
|
|||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* imports a mail identified by uid as infolog
|
||||||
|
*
|
||||||
|
* @author Cornelius Weiss <nelius@cwtech.de>
|
||||||
|
* @todo search if infolog with from and subject allready exists ->appned body & inform user
|
||||||
|
* @param string $_email_address rfc822 conform emailaddresses
|
||||||
|
* @param string $_subject
|
||||||
|
* @param string $_message
|
||||||
|
* @param array $_attachments
|
||||||
|
* @param string $_date
|
||||||
|
* @return array $content array for uiinfolog
|
||||||
|
*/
|
||||||
|
function import_mail($_email_address,$_subject,$_message,$_attachments,$_date)
|
||||||
|
{
|
||||||
|
$address_array = imap_rfc822_parse_adrlist($_email_address,'');
|
||||||
|
foreach ((array)$address_array as $address)
|
||||||
|
{
|
||||||
|
$email[] = $emailadr = sprintf('%s@%s',
|
||||||
|
trim($address->mailbox),
|
||||||
|
trim($address->host));
|
||||||
|
$name[] = !empty($address->personal) ? $address->personal : $emailadr;
|
||||||
|
}
|
||||||
|
|
||||||
|
$info = array(
|
||||||
|
'info_type' => isset($this->enums['type']['email']) ? 'email' : 'note',
|
||||||
|
'info_from' => implode(',',$name),
|
||||||
|
'info_addr' => implode(',',$email),
|
||||||
|
'info_subject' => $_subject,
|
||||||
|
'info_des' => $_message,
|
||||||
|
'info_startdate' => $_date,
|
||||||
|
'info_status' => 'done',
|
||||||
|
'info_priority' => 1,
|
||||||
|
'info_percent' => 100,
|
||||||
|
'referer' => false,
|
||||||
|
'link_to' => array(
|
||||||
|
'to_id' => 0,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// find the addressbookentry to link with
|
||||||
|
$addressbook = CreateObject('addressbook.bocontacts');
|
||||||
|
$contacts = array();
|
||||||
|
foreach ($email as $mailadr)
|
||||||
|
{
|
||||||
|
$contacts = array_merge($contacts,(array)$addressbook->search(
|
||||||
|
array(
|
||||||
|
'email' => $mailadr,
|
||||||
|
'email_home' => $mailadr
|
||||||
|
),True,'','','',false,'OR',false,null,'',false));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($contacts) || empty($contacts[0]))
|
||||||
|
{
|
||||||
|
$info['msg'] = lang('Attension: No Contact with address %1 found.',$info['info_addr']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ((array)$contacts as $contact)
|
||||||
|
{
|
||||||
|
$this->link->link('infolog',$info['link_to']['to_id'],'addressbook',$contact['id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($_attachments))
|
||||||
|
{
|
||||||
|
foreach ($_attachments as $attachment)
|
||||||
|
{
|
||||||
|
$this->link->link('infolog',$info['link_to']['to_id'],'file',$attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook called by link-class to include infolog in the appregistry of the linkage
|
* Hook called by link-class to include infolog in the appregistry of the linkage
|
||||||
*
|
*
|
||||||
|
@ -33,7 +33,8 @@
|
|||||||
'close' => True,
|
'close' => True,
|
||||||
'admin' => True,
|
'admin' => True,
|
||||||
'hook_view' => True,
|
'hook_view' => True,
|
||||||
'writeLangFile' => True
|
'writeLangFile' => True,
|
||||||
|
'import_mail' => True,
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* reference to the infolog preferences of the user
|
* reference to the infolog preferences of the user
|
||||||
@ -633,7 +634,10 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$content['msg'] = lang('InfoLog entry saved');
|
$content['msg'] = lang('InfoLog entry saved');
|
||||||
$content['js'] = "opener.location.href='".($link=$GLOBALS['egw']->link($referer,array('msg' => $content['msg'])))."';";
|
if ($referer !== false)
|
||||||
|
{
|
||||||
|
$content['js'] = "opener.location.href='".($link=$GLOBALS['egw']->link($referer,array('msg' => $content['msg'])))."';";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$content[$tabs] = $active_tab;
|
$content[$tabs] = $active_tab;
|
||||||
if ((int) $content['pm_id'] != (int) $content['old_pm_id'])
|
if ((int) $content['pm_id'] != (int) $content['old_pm_id'])
|
||||||
@ -1057,6 +1061,107 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* imports a mail as infolog
|
||||||
|
* two possible calls:
|
||||||
|
* 1. with function args set. (we come from send mail)
|
||||||
|
* 2. with $_GET['uid] = someuid (we come from display mail)
|
||||||
|
*
|
||||||
|
* @author Cornelius Weiss <nelius@cwtech.de>
|
||||||
|
* @param unknown_type $_to_emailAddress
|
||||||
|
* @param string $_subject
|
||||||
|
* @param string $_body
|
||||||
|
* @param array $_attachments
|
||||||
|
* @param string $_date
|
||||||
|
*/
|
||||||
|
function import_mail($_to_emailAddress=false,$_subject=false,$_body=false,$_attachments=false,$_date=false)
|
||||||
|
{
|
||||||
|
$uid = $_GET['uid'];
|
||||||
|
$mailbox = $_GET['mailbox'];
|
||||||
|
|
||||||
|
if (!empty($_to_emailAddress))
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_info']['flags']['currentapp'] = 'infolog';
|
||||||
|
$GLOBALS['egw']->translation->add_app($GLOBALS['egw_info']['flags']['currentapp']);
|
||||||
|
echo '<script>window.resizeTo(750,550);</script>';
|
||||||
|
|
||||||
|
if (is_array($_attachments))
|
||||||
|
{
|
||||||
|
foreach ($_attachments as $attachment)
|
||||||
|
{
|
||||||
|
$attachments[] = array(
|
||||||
|
'name' => $attachment['name'],
|
||||||
|
'mimeType' => $attachment['type'],
|
||||||
|
'tmp_name' => $attachment['file'],
|
||||||
|
'size' => $attachment['size'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->edit($this->bo->import_mail(
|
||||||
|
implode(',',$_to_emailAddress),$_subject,$_body,$attachments,''
|
||||||
|
));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
elseif ($uid && $mailbox)
|
||||||
|
{
|
||||||
|
$bofelamimail =& CreateObject('felamimail.bofelamimail',$GLOBALS['egw']->translation->charset());
|
||||||
|
$bopreferences =& CreateObject('felamimail.bopreferences');
|
||||||
|
$bofelamimail->openConnection();
|
||||||
|
|
||||||
|
$headers = $bofelamimail->getMessageHeader($mailbox,$uid);
|
||||||
|
$bodyParts = $bofelamimail->getMessageBody($uid,'');
|
||||||
|
$attachments = $bofelamimail->getMessageAttachments($uid);
|
||||||
|
|
||||||
|
if (isset($headers->senderaddress)) $mailaddress = $bofelamimail->decode_header($headers->senderaddress);
|
||||||
|
elseif (isset($headers->fromaddress)) $mailaddress = $bofelamimail->decode_header($headers->fromaddress);
|
||||||
|
|
||||||
|
$subject = $bofelamimail->decode_header($headers->Subject);
|
||||||
|
|
||||||
|
// this should be a method of felamimail!
|
||||||
|
// We also need a html2text converter there!
|
||||||
|
for($i=0; $i<count($bodyParts); $i++)
|
||||||
|
{
|
||||||
|
// add line breaks to $bodyParts
|
||||||
|
$newBody = $GLOBALS['egw']->translation->convert($bodyParts[$i]['body'], $bodyParts[$i]['charSet']);
|
||||||
|
$newBody = explode("\n",$newBody);
|
||||||
|
// create it new, with good line breaks
|
||||||
|
reset($newBody);
|
||||||
|
while(list($key,$value) = @each($newBody))
|
||||||
|
{
|
||||||
|
$value .= "\n";
|
||||||
|
$bodyAppend = $bofelamimail->wordwrap($value,75,"\n");
|
||||||
|
$message .= $bodyAppend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($attachments))
|
||||||
|
{
|
||||||
|
foreach ($attachments as $num => $attachment)
|
||||||
|
{
|
||||||
|
$attachments[$num] = array_merge($attachments[$num],$bofelamimail->getAttachment($_uid, $attachment['partID']));
|
||||||
|
$attachments[$num]['tmp_name'] = tempnam($GLOBALS['egw_info']['server']['temp_dir'],$GLOBALS['egw_info']['flags']['currentapp']."_");
|
||||||
|
$tmpfile = fopen($attachments[$num]['tmp_name'],'w');
|
||||||
|
fwrite($tmpfile,$attachments[$num]['attachment']);
|
||||||
|
fclose($tmpfile);
|
||||||
|
unset($attachments[$num]['attachment']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->edit($this->bo->import_mail(
|
||||||
|
$mailaddress,
|
||||||
|
$subject,
|
||||||
|
$message,
|
||||||
|
$attachments,
|
||||||
|
strtotime($headers->date)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
$GLOBALS['egw']->common->egw_header();
|
||||||
|
echo "<script> window.close(); alert('Error: no mail (Mailbox / UID) given!');</script>";
|
||||||
|
$GLOBALS['egw']->common->egw_exit();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* writes langfile with all templates and messages registered here
|
* writes langfile with all templates and messages registered here
|
||||||
*
|
*
|
||||||
|
@ -36,6 +36,7 @@ apply the changes infolog de
|
|||||||
are you shure you want to delete this entry ? infolog de Sind Sie sicher, dass Sie diesen Eintrag löschen wollen?
|
are you shure you want to delete this entry ? infolog de Sind Sie sicher, dass Sie diesen Eintrag löschen wollen?
|
||||||
attach a file infolog de Datei anhängen
|
attach a file infolog de Datei anhängen
|
||||||
attach file infolog de Datei anhängen
|
attach file infolog de Datei anhängen
|
||||||
|
attension: no contact with address %1 found. infolog de Achtung: Kein Kontakt mit der Adresse %1 gefunden!
|
||||||
back to main list infolog de Zurück zur Gesamtliste
|
back to main list infolog de Zurück zur Gesamtliste
|
||||||
billed infolog de abgerechnet
|
billed infolog de abgerechnet
|
||||||
both infolog de Annahme+erledigt
|
both infolog de Annahme+erledigt
|
||||||
@ -207,6 +208,7 @@ project settings: price, times infolog de Einstellungen zum Projekt: Preis, Zeit
|
|||||||
re: infolog de Re:
|
re: infolog de Re:
|
||||||
read one record by passing its id. infolog de Einen Datensatz spezifiziert durch seine id lesen.
|
read one record by passing its id. infolog de Einen Datensatz spezifiziert durch seine id lesen.
|
||||||
read rights (default) infolog de Leserechte (Vorgabe)
|
read rights (default) infolog de Leserechte (Vorgabe)
|
||||||
|
reg. expr. for local ip's<br>eg. ^192.168.1. infolog de reg. Ausdr. für lokale IP's<br>^192\.168\.1\.
|
||||||
reg. expr. for local ip's<br>eg. ^192\.168\.1\. infolog de reg. Ausdr. für lokale IP's<br>^192\.168\.1\.
|
reg. expr. for local ip's<br>eg. ^192\.168\.1\. infolog de reg. Ausdr. für lokale IP's<br>^192\.168\.1\.
|
||||||
remark infolog de Bemerkung
|
remark infolog de Bemerkung
|
||||||
remove this link (not the entry itself) infolog de Diese Verknüpfung lösen (nicht den Eintrag selbst)
|
remove this link (not the entry itself) infolog de Diese Verknüpfung lösen (nicht den Eintrag selbst)
|
||||||
@ -285,6 +287,7 @@ urgency infolog de Priorit
|
|||||||
urgent infolog de Dringend
|
urgent infolog de Dringend
|
||||||
used time infolog de benötigte Zeit
|
used time infolog de benötigte Zeit
|
||||||
valid path on clientside<br>eg. \\server\share or e:\ infolog de gültiger Pfad clientseitig<br>zB. \\Server\Share oder e:\
|
valid path on clientside<br>eg. \\server\share or e:\ infolog de gültiger Pfad clientseitig<br>zB. \\Server\Share oder e:\
|
||||||
|
valid path on clientside<br>eg. \servershare or e: infolog de gültiger Pfad clientseitig<br>zB. \\Server\Share oder e:\
|
||||||
values for selectbox infolog de Werte für die Auswahlbox
|
values for selectbox infolog de Werte für die Auswahlbox
|
||||||
view all subs of this entry infolog de alle Untereinträge dieses Eintrag anzeigen
|
view all subs of this entry infolog de alle Untereinträge dieses Eintrag anzeigen
|
||||||
view other subs infolog de andere Untereinträge anzeigen
|
view other subs infolog de andere Untereinträge anzeigen
|
||||||
|
@ -36,6 +36,7 @@ apply the changes infolog en Apply the changes
|
|||||||
are you shure you want to delete this entry ? infolog en Are you sure you want to delete this entry ?
|
are you shure you want to delete this entry ? infolog en Are you sure you want to delete this entry ?
|
||||||
attach a file infolog en Attach a file
|
attach a file infolog en Attach a file
|
||||||
attach file infolog en Attach file
|
attach file infolog en Attach file
|
||||||
|
attension: no contact with address %1 found. infolog en Attension: No Contact with address %1 found.
|
||||||
back to main list infolog en Back to main list
|
back to main list infolog en Back to main list
|
||||||
billed infolog en billed
|
billed infolog en billed
|
||||||
both infolog en both
|
both infolog en both
|
||||||
|
Loading…
Reference in New Issue
Block a user