prepareNamespacetemplateReplacements(); $this->prepareDateTimereplacements(); $this->prepareLanguagePlaceholder(); $this->prepareNoincludeReplacement(); $this->prepareFieldReplacements($fields); $evdata = [ 'fields' => $fields, 'values' => &$this->values ]; $event = new Doku_Event('PLUGIN_BUREAUCRACY_EMAIL_SEND', $evdata); if($event->advise_before()) { //set default subject $this->subject = sprintf($this->getLang('mailsubject'), $ID); //build html&text table, collect replyto and subject list($table_html, $table_text) = $this->processFieldsBuildTable($fields, $mail); //Body if($this->mailtemplate) { //show template $this->patterns['__tablehtml__'] = '/@TABLEHTML@/'; $this->patterns['__tabletext__'] = '/@TABLETEXT@/'; $this->values['__tablehtml__'] = $table_html; $this->values['__tabletext__'] = $table_text; list($this->_mail_html, $this->_mail_text) = $this->getContent(); } else { //show simpel listing $this->_mail_html .= sprintf($this->getLang('mailintro')."

", dformat()); $this->_mail_html .= $table_html; $this->_mail_text .= sprintf($this->getLang('mailintro')."\n\n", dformat()); $this->_mail_text .= $table_text; } $mail->setBody($this->_mail_text,null,null,$this->_mail_html); // Reply-to if(!empty($this->replyto)) { $replyto = $mail->cleanAddress($this->replyto); $mail->setHeader('Reply-To', $replyto, false); } // To $to = $this->replace(implode(',',$argv)); // get recipient address(es) $to = $mail->cleanAddress($to); $mail->to($to); // From $mail->from($conf['mailfrom']); // Subject $this->subject = $this->replace($this->subject); $mail->subject($this->subject); if(!$mail->send()) { throw new Exception($this->getLang('e_mail')); } } $event->advise_after(); return '

' . $thanks . '

'; } /** * Create html and plain table of the field * and collect values for subject and replyto * * @param helper_plugin_bureaucracy_field[] $fields * @param Mailer $mail * @return array of html and text table */ protected function processFieldsBuildTable($fields, $mail) { global $ID; $table_html = ''; $table_text = ''; foreach($fields as $field) { $html = $text = ''; $value = $field->getParam('value'); $label = $field->getParam('label'); switch($field->getFieldType()) { case 'fieldset': if(!empty($field->depends_on)) { //print fieldset only if depend condition is true foreach($fields as $field_tmp) { if($field_tmp->getParam('label') === $field->depends_on[0] && $field_tmp->getParam('value') === $field->depends_on[1] ) { list($html, $text) = $this->mail_buildRow($label); } } } else { list($html, $text) = $this->mail_buildRow($label); } break; case 'file': if($value === null || $label === null) break; //print attachment only if field was visible $file = $field->getParam('file'); if(!$file['size']) { $message = $this->getLang('attachmentMailEmpty'); } else if($file['size'] > $this->getConf('maxEmailAttachmentSize')) { $message = $file['name'] . ' ' . $this->getLang('attachmentMailToLarge'); msg(sprintf($this->getLang('attachmentMailToLarge_userinfo'), hsc($file['name']), filesize_h($this->getConf('maxEmailAttachmentSize'))), 2); } else { $message = $file['name']; $mail->attachFile($file['tmp_name'], $file['type'], $file['name']); } list($html, $text) = $this->mail_buildRow($label, $message); break; case 'subject': $this->subject = $label; break; case 'usemailtemplate': if (!is_null($field->getParam('template')) ) { $this->mailtemplate = $this->replace($field->getParam('template')); resolve_pageid(getNS($ID), $this->mailtemplate, $ignored); } break; default: if($value === null || $label === null) break; if(is_array($value)) $value = implode(', ', $value); list($html, $text) = $this->mail_buildRow($label, $value); if(!is_null($field->getParam('replyto'))) { $this->replyto[] = $value; } } $table_html .= $html; $table_text .= $text; } $table_html .= '
'; return array($table_html, $table_text); } /** * Build a row * * @param $column1 * @param null $column2 * @return array of html and text row */ protected function mail_buildRow($column1,$column2=null) { if($column2 === null) { $html = ''.hsc($column1).''; $text = "\n=====".$column1.'====='; } else { $html = ''.hsc($column1).''.hsc($column2).''; $text = "\n $column1 \t\t $column2"; } return array($html, $text); } /** * Parse mail template in html and text, and perform replacements * * @return array html and text content */ protected function getContent() { $content = rawWiki($this->mailtemplate); $html = ''; $text = ''; if(preg_match_all('#(.*?)#is', $content, $matches)) { foreach($matches[1] as $index => $codeoptions) { list($syntax,) = explode(' ', trim($codeoptions), 2); if($syntax == 'html') { $html = $matches[2][$index]; } if($syntax == 'text' || $syntax == '') { $text = $matches[2][$index]; } } } return array( $this->replace($html), $this->replace($text) ); } } // vim:ts=4:sw=4:et:enc=utf-8: