True, 'compose' => True, 'composeFromDraft' => True, 'getAttachment' => True, 'fileSelector' => True, 'forward' => True, 'reply' => True, 'replyAll' => True, 'selectFolder' => True, ); var $destinations = array( 'to' => 'to', 'cc' => 'cc', 'bcc' => 'bcc', 'replyto' => 'replyto', 'folder' => 'folder' ); function uicompose() { $this->displayCharset = $GLOBALS['egw']->translation->charset(); if (!isset($_POST['composeid']) && !isset($_GET['composeid'])) { // create new compose session $this->bocompose =& CreateObject('felamimail.bocompose','',$this->displayCharset); $this->composeID = $this->bocompose->getComposeID(); } else { // reuse existing compose session if (isset($_POST['composeid'])) $this->composeID = $_POST['composeid']; else $this->composeID = $_GET['composeid']; $this->bocompose =& CreateObject('felamimail.bocompose',$this->composeID,$this->displayCharset); } $this->t =& CreateObject('phpgwapi.Template',EGW_APP_TPL); $this->bofelamimail =& CreateObject('felamimail.bofelamimail',$this->displayCharset); $this->mailPreferences = ExecMethod('felamimail.bopreferences.getPreferences'); $this->t->set_unknowns('remove'); $this->rowColor[0] = $GLOBALS['egw_info']["theme"]["bg01"]; $this->rowColor[1] = $GLOBALS['egw_info']["theme"]["bg02"]; } function unhtmlentities ($string) { $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); return strtr ($string, $trans_tbl); } function action() { $formData['identity'] = (int)$_POST['identity']; foreach($_POST['destination'] as $key => $destination) { if(!empty($_POST['address'][$key])) { if($destination == 'folder') { $formData[$destination][] = $GLOBALS['egw']->translation->convert($_POST['address'][$key], $this->charset, 'UTF7-IMAP'); } else { $formData[$destination][] = $_POST['address'][$key]; } } } $formData['reply_to'] = $this->bocompose->stripSlashes($_POST['reply_to']); $formData['subject'] = $this->bocompose->stripSlashes($_POST['subject']); $formData['body'] = $this->bocompose->stripSlashes($_POST['body']); $formData['priority'] = $this->bocompose->stripSlashes($_POST['priority']); $formData['signatureID'] = (int)$_POST['signatureID']; $formData['mimeType'] = $this->bocompose->stripSlashes($_POST['mimeType']); $formData['disposition'] = (bool)$_POST['disposition']; $formData['to_infolog'] = $_POST['to_infolog']; //$formData['mailbox'] = $_GET['mailbox']; if((bool)$_POST['saveAsDraft'] == true) { // save as draft $this->bocompose->saveAsDraft($formData); } else { if(!$this->bocompose->send($formData)) { $this->compose(); return; } } #$GLOBALS['egw']->common->egw_exit(); print ""; } function compose($_focusElement='to') { // read the data from session // all values are empty for a new compose window $sessionData = $this->bocompose->getSessionData(); if (is_array($_GET['preset'])) { if ($_GET['preset']['file'] && is_readable($_GET['preset']['file'])) { $this->bocompose->addAttachment(array_merge($sessionData,$_GET['preset'])); $sessionData = $this->bocompose->getSessionData(); } foreach(array('to','cc','bcc','subject','body') as $name) { if ($_GET['preset'][$name]) $sessionData[$name] = $_GET['preset'][$name]; } } $preferences = ExecMethod('felamimail.bopreferences.getPreferences'); #_debug_array($preferences); // is the to address set already? if (!empty($_GET['send_to'])) { $sessionData['to'] = base64_decode($_GET['send_to']); } $this->display_app_header(); $this->t->set_file(array("composeForm" => "composeForm.tpl")); $this->t->set_block('composeForm','header','header'); $this->t->set_block('composeForm','body_input'); $this->t->set_block('composeForm','attachment','attachment'); $this->t->set_block('composeForm','attachment_row','attachment_row'); $this->t->set_block('composeForm','attachment_row_bold'); $this->t->set_block('composeForm','destination_row'); $this->t->set_block('composeForm','simple_text'); $this->translate(); $this->t->set_var("link_addressbook",$GLOBALS['egw']->link('/index.php',array( 'menuaction' => 'addressbook.uicontacts.emailpopup', ))); $this->t->set_var("focusElement",$_focusElement); $linkData = array ( 'menuaction' => 'felamimail.uicompose.selectFolder', ); $this->t->set_var('folder_select_url',$GLOBALS['egw']->link('/index.php',$linkData)); $linkData = array ( 'menuaction' => 'felamimail.uicompose.fileSelector', 'composeid' => $this->composeID ); $this->t->set_var('file_selector_url',$GLOBALS['egw']->link('/index.php',$linkData)); $linkData = array ( 'menuaction' => 'felamimail.uicompose.action', 'composeid' => $this->composeID ); $this->t->set_var("link_action",$GLOBALS['egw']->link('/index.php',$linkData)); $this->t->set_var('folder_name',$this->bofelamimail->sessionData['mailbox']); $this->t->set_var('compose_id',$this->composeID); // check for some error messages from last posting attempt if($errorInfo = $this->bocompose->getErrorInfo()) { $this->t->set_var('errorInfo',"$errorInfo"); } else { $this->t->set_var('errorInfo',' '); } // header $allIdentities = $preferences->getIdentity(); #_debug_array($allIdentities); $defaultIdentity = 0; foreach($allIdentities as $key => $singleIdentity) { $identities[$key] = $singleIdentity->realName.' <'.$singleIdentity->emailAddress.'>'; if($singleIdentity->default) $defaultIdentity = $key; } $selectFrom = $GLOBALS['egw']->html->select('identity', $defaultIdentity, $identities, true, "style='width:100%;'"); $this->t->set_var('select_from', $selectFrom); // from, to, cc $this->t->set_var('img_clear_left', $GLOBALS['egw']->common->image('felamimail','clear_left')); $this->t->set_var('img_fileopen', $GLOBALS['egw']->common->image('phpgwapi','fileopen')); $this->t->set_var('img_mail_send', $GLOBALS['egw']->common->image('felamimail','mail_send')); $this->t->set_var('img_attach_file', $GLOBALS['egw']->common->image('felamimail','attach')); $this->t->set_var('ajax-loader', $GLOBALS['egw']->common->image('felamimail','ajax-loader')); $this->t->set_var('img_fileexport', $GLOBALS['egw']->common->image('felamimail','fileexport')); $destinationRows = 0; foreach(array('to','cc','bcc') as $destination) { foreach((array)$sessionData[$destination] as $key => $value) { $selectDestination = $GLOBALS['egw']->html->select('destination[]', $destination, $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'"); $this->t->set_var('select_destination', $selectDestination); $this->t->set_var('address', @htmlentities($value, ENT_QUOTES, $this->displayCharset)); $this->t->parse('destinationRows','destination_row',True); $destinationRows++; } } while($destinationRows < 3) { // and always add one empty row $selectDestination = $GLOBALS['egw']->html->select('destination[]', 'to', $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'"); $this->t->set_var('select_destination', $selectDestination); $this->t->set_var('address', ''); $this->t->parse('destinationRows','destination_row',True); $destinationRows++; } // and always add one empty row $selectDestination = $GLOBALS['egw']->html->select('destination[]', 'to', $this->destinations, false, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'"); $this->t->set_var('select_destination', $selectDestination); $this->t->set_var('address', ''); $this->t->parse('destinationRows','destination_row',True); $this->t->set_var("cc",@htmlentities($sessionData['cc'],ENT_QUOTES,$this->displayCharset)); $this->t->set_var("bcc",@htmlentities($sessionData['bcc'],ENT_QUOTES,$this->displayCharset)); $this->t->set_var("reply_to",@htmlentities($sessionData['reply_to'],ENT_QUOTES,$this->displayCharset)); $this->t->set_var("subject",@htmlentities($sessionData['subject'],ENT_QUOTES,$this->displayCharset)); $this->t->set_var('addressbookImage',$GLOBALS['egw']->common->image('phpgwapi/templates/phpgw_website','users')); $this->t->set_var('infologImage',$GLOBALS['egw']->html->image('felamimail','to_infolog',lang('Save as infolog'),'width="17px" height="17px" valign="middle"' )); $this->t->set_var('lang_save_as_infolog',lang('Save as infolog')); $this->t->pparse("out","header"); // body if($sessionData['mimeType'] == 'html') { $style="border:0px; width:100%; height:400px;"; # $this->t->set_var('tinymce', $GLOBALS['egw']->html->tinymceQuick('body', 'simple', $sessionData['body'], $style)); $cleanHTMLBody = $this->getCleanHTML($sessionData['body']); $this->t->set_var('tinymce', $GLOBALS['egw']->html->fckEditorQuick('body', 'simple', $cleanHTMLBody)); $this->t->set_var('mimeType', 'html'); } else { $style="border:0px; width:100%; height:400px;"; # $this->t->set_var('tinymce', $GLOBALS['egw']->html->tinymceQuick('body', 'ascii', $sessionData['body'], $style)); $this->t->set_var('tinymce', $GLOBALS['egw']->html->fckEditorQuick('body', 'ascii', $sessionData['body'])); $this->t->set_var('mimeType', 'text'); } $signatures = ExecMethod('felamimail.bopreferences.getListOfSignatures'); $selectSignatures = array( '-1' => lang('no signature') ); foreach($signatures as $signature) { $selectSignatures[$signature['signatureid']] = $signature['description']; } $selectBox = $GLOBALS['egw']->html->select('signatureID', $sessionData['signatureID'], $selectSignatures, true, "style='width: 100%;' onchange='fm_compose_changeInputType(this)'"); $this->t->set_var("select_signature", $selectBox); $this->t->pparse("out","body_input"); // attachments if (is_array($sessionData['attachments']) && count($sessionData['attachments']) > 0) { $imgClearLeft = $GLOBALS['egw']->common->image('felamimail','clear_left'); foreach((array)$sessionData['attachments'] as $id => $attachment) { $tempArray = array ( '1' => $attachment['name'], '2' => $attachment['type'], '.2' => "style='text-align:center;'", '3' => $attachment['size'], '4' => "" ); $tableRows[] = $tempArray; } if(count($tableRows) > 0) { if(!is_object($GLOBALS['egw']->html)) { $GLOBALS['egw']->html =& CreateObject('phpgwapi.html'); } $table = $GLOBALS['egw']->html->table($tableRows, "style='width:100%'"); } $this->t->set_var('attachment_rows',$table); } else { $this->t->set_var('attachment_rows',''); } $this->t->pparse("out","attachment"); } function composeFromDraft() { $icServer = (int)$_GET['icServer']; $folder = base64_decode($_GET['folder']); $replyID = $_GET['uid']; if (!empty($folder) && !empty($replyID) ) { // this fill the session data with the values from the original email $this->bocompose->getDraftData($icServer, $folder, $replyID); } $this->compose('body'); } function display_app_header() { if(!@is_object($GLOBALS['egw']->js)) { $GLOBALS['egw']->js =& CreateObject('phpgwapi.javascript'); } $GLOBALS['egw']->js->validate_file('jscode','composeMessage','felamimail'); $GLOBALS['egw']->js->set_onload('javascript:initAll();'); $GLOBALS['egw_info']['flags']['include_xajax'] = True; $GLOBALS['egw']->common->egw_header(); } function fileSelector() { if(is_array($_FILES["addFileName"])) { #phpinfo(); #_debug_array($_FILES); if($_FILES['addFileName']['error'] == $UPLOAD_ERR_OK) { $formData['name'] = $_FILES['addFileName']['name']; $formData['type'] = $_FILES['addFileName']['type']; $formData['file'] = $_FILES['addFileName']['tmp_name']; $formData['size'] = $_FILES['addFileName']['size']; $this->bocompose->addAttachment($formData); print ""; } else { print ""; } } if(!@is_object($GLOBALS['egw']->js)) { $GLOBALS['egw']->js =& CreateObject('phpgwapi.javascript'); } $GLOBALS['egw']->js->validate_file('dhtmlxtree','js/dhtmlXCommon'); $GLOBALS['egw']->js->validate_file('dhtmlxtree','js/dhtmlXTree'); $GLOBALS['egw']->js->validate_file('jscode','composeMessage','felamimail'); $GLOBALS['egw']->common->egw_header(); #$uiwidgets =& CreateObject('felamimail.uiwidgets'); $this->t->set_file(array("composeForm" => "composeForm.tpl")); $this->t->set_block('composeForm','fileSelector','fileSelector'); $this->translate(); $linkData = array ( 'menuaction' => 'felamimail.uicompose.fileSelector', 'composeid' => $this->composeID ); $this->t->set_var('file_selector_url', $GLOBALS['egw']->link('/index.php',$linkData)); $maxUploadSize = ini_get('upload_max_filesize'); $this->t->set_var('max_uploadsize', $maxUploadSize); $this->t->set_var('ajax-loader', $GLOBALS['egw']->common->image('felamimail','ajax-loader')); $this->t->pparse("out","fileSelector"); } function forward() { $icServer = (int)$_GET['icServer']; $folder = base64_decode($_GET['folder']); $replyID = $_GET['reply_id']; $partID = $_GET['part_id']; if (!empty($replyID)) { // this fill the session data with the values from the original email $this->bocompose->getForwardData($icServer, $folder, $replyID, $partID); } $this->compose(); } function getAttachment() { $bocompose =& CreateObject('felamimail.bocompose', $_GET['_composeID']); $attachment = $bocompose->sessionData['attachments'][$_GET['attID']] ; header ("Content-Type: ".$attachment['type']."; name=\"". $this->bofelamimail->decode_header($attachment['name']) ."\""); header ("Content-Disposition: inline; filename=\"". $this->bofelamimail->decode_header($attachment['name']) ."\""); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Pragma: public"); $fp = fopen($attachment['file'], 'rb'); fpassthru($fp); $GLOBALS['egw']->common->egw_exit(); exit; } function getCleanHTML($_body) { $nonDisplayAbleCharacters = array('[\016]','[\017]', '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]', '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]'); $kses =& CreateObject('phpgwapi.kses'); $kses->AddHTML('p', array( 'align' => array('minlen' => 1, 'maxlen' => 10) ) ); $kses->AddHTML('div', array( 'align' => array('minlen' => 1, 'maxlen' => 10) ) ); $kses->AddHTML('br'); $kses->AddHTML('b'); $kses->AddHTML('center'); $kses->AddHTML('em'); $kses->AddHTML('font', array( 'color' => array('minlen' => 1, 'maxlen' => 10) ) ); $kses->AddHTML('i'); $kses->AddHTML("s"); $kses->AddHTML('strike'); $kses->AddHTML('strong'); $kses->AddHTML('u'); $kses->AddHTML('hr', array( "class" => array('maxlen' => 20), "style" => array('minlen' => 1), ) ); $kses->AddHTML("ul"); $kses->AddHTML('ol', array( "type" => array('maxlen' => 20) ) ); $kses->AddHTML("li"); $kses->AddHTML("h1"); $kses->AddHTML("h2"); $kses->AddHTML('a', array( "href" => array('maxlen' => 145, 'minlen' => 10), "name" => array('minlen' => 2), 'target' => array('maxlen' => 10) ) ); $kses->AddHTML('pre', array( "wrap" => array('maxlen' => 10) ) ); $kses->AddHTML( "blockquote",array( "class" => array("minlen" => 1, 'maxlen' => 20), "style" => array("minlen" => 1), "cite" => array('maxlen' => 30), "type" => array('maxlen' => 10), "dir" => array("minlen" => 1, 'maxlen' => 10) ) ); $body = $kses->Parse($_body); $body = preg_replace($nonDisplayAbleCharacters, '', $body); return $body; } function selectFolder() { if(!@is_object($GLOBALS['egw']->js)) { $GLOBALS['egw']->js =& CreateObject('phpgwapi.javascript'); } $GLOBALS['egw']->js->validate_file('dhtmlxtree','js/dhtmlXCommon'); $GLOBALS['egw']->js->validate_file('dhtmlxtree','js/dhtmlXTree'); $GLOBALS['egw']->js->validate_file('jscode','composeMessage','felamimail'); $GLOBALS['egw']->common->egw_header(); $bofelamimail =& CreateObject('felamimail.bofelamimail',$this->displayCharset); $uiwidgets =& CreateObject('felamimail.uiwidgets'); $connectionStatus = $bofelamimail->openConnection(); $folderObjects = $bofelamimail->getFolderObjects(false); $folderTree = $uiwidgets->createHTMLFolder ( $folderObjects, 'INBOX', 0, lang('IMAP Server'), $mailPreferences['username'].'@'.$mailPreferences['imapServerAddress'], 'divFolderTree', false, true ); print '
'; print $folderTree; } function reply() { $icServer = (int)$_GET['icServer']; $folder = base64_decode($_GET['folder']); $replyID = $_GET['reply_id']; $partID = $_GET['part_id']; if (!empty($folder) && !empty($replyID) ) { // this fill the session data with the values from the original email $this->bocompose->getReplyData('single', $icServer, $folder, $replyID, $partID); } $this->compose('body'); } function replyAll() { $icServer = (int)$_GET['icServer']; $folder = base64_decode($_GET['folder']); $replyID = $_GET['reply_id']; $partID = $_GET['part_id']; if (!empty($folder) && !empty($replyID) ) { // this fill the session data with the values from the original email $this->bocompose->getReplyData('all', $icServer, $folder, $replyID, $partID); } $this->compose('body'); } function translate() { $this->t->set_var("lang_message_list",lang('Message List')); $this->t->set_var("lang_to",lang('to')); $this->t->set_var("lang_cc",lang('cc')); $this->t->set_var("lang_bcc",lang('bcc')); $this->t->set_var("lang_identity",lang('identity')); $this->t->set_var("lang_reply_to",lang('reply to')); $this->t->set_var("lang_subject",lang('subject')); $this->t->set_var("lang_addressbook",lang('addressbook')); $this->t->set_var("lang_search",lang('search')); $this->t->set_var("lang_send",lang('send')); $this->t->set_var('lang_save_as_draft',lang('save as draft')); $this->t->set_var("lang_back_to_folder",lang('back to folder')); $this->t->set_var("lang_attachments",lang('attachments')); $this->t->set_var("lang_add",lang('add')); $this->t->set_var("lang_remove",lang('remove')); $this->t->set_var("lang_priority",lang('priority')); $this->t->set_var("lang_normal",lang('normal')); $this->t->set_var("lang_high",lang('high')); $this->t->set_var("lang_low",lang('low')); $this->t->set_var("lang_signature",lang('signature')); $this->t->set_var("lang_select_folder",lang('select folder')); $this->t->set_var('lang_max_uploadsize',lang('max uploadsize')); $this->t->set_var('lang_adding_file_please_wait',lang('Adding file to message. Please wait!')); $this->t->set_var('lang_receive_notification',lang('Receive notification')); $this->t->set_var("th_bg",$GLOBALS['egw_info']["theme"]["th_bg"]); $this->t->set_var("bg01",$GLOBALS['egw_info']["theme"]["bg01"]); $this->t->set_var("bg02",$GLOBALS['egw_info']["theme"]["bg02"]); $this->t->set_var("bg03",$GLOBALS['egw_info']["theme"]["bg03"]); } } ?>