From: <bbu...@us...> - 2004-03-26 10:17:42
|
Update of /cvsroot/tikiwiki/tiki In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19548 Modified Files: Tag: BRANCH-1-8 tiki-mailin-code.php tiki-admin_mailin.php Log Message: adding attachments handling to the mail-in feature Index: tiki-mailin-code.php =================================================================== RCS file: /cvsroot/tikiwiki/tiki/tiki-mailin-code.php,v retrieving revision 1.2.4.1 retrieving revision 1.2.4.2 diff -u -d -r1.2.4.1 -r1.2.4.2 --- tiki-mailin-code.php 18 Mar 2004 17:11:07 -0000 1.2.4.1 +++ tiki-mailin-code.php 26 Mar 2004 10:06:47 -0000 1.2.4.2 @@ -10,6 +10,7 @@ require_once ("lib/webmail/mimeDecode.php"); include_once ("lib/webmail/class.rc4crypt.php"); include_once ("lib/webmail/htmlMimeMail.php"); +include_once ('lib/wiki/wikilib.php'); function parse_output(&$obj, &$parts, $i) { if (!empty($obj->parts)) { @@ -61,6 +62,26 @@ } } +function check_attachments(&$output, &$out, $page, $user) { + global $wikilib; + $cnt = 0; + for ($it = 0; $it < count($output->parts); $it++) + { + if (isset($output->parts[$it]->d_parameters["filename"])) + { + $attachmentPart = $output->parts[$it]; + $fileName = $attachmentPart->d_parameters["filename"]; + $fileType = $attachmentPart->ctype_primary ."/". $attachmentPart->ctype_secondary; + $fileData = $attachmentPart->body; + $fileSize = strlen($fileData); + $wikilib->wiki_attach_file($page, $fileName, $fileType, $fileSize, $fileData, "attached by mail", $user, ""); + $cnt++; + } + } + $out .= $cnt; + $out .= " attachment(s) added<br/>"; +} + // The mailin script is used to get / set wiki pages using an email account // Get a list of ACTIVE emails accounts configured for mailin procedures @@ -75,11 +96,11 @@ $content .= "Account :" . $acc['account'] . "<br />"; $content .= "Type :" . $acc['type'] . "<br />"; $content .= "--------------------------<br />"; + $pop3 = new POP3($acc["pop"], $acc["username"], $acc["pass"]); $pop3->Open(); $s = $pop3->Stats(); $mailsum = $s["message"]; - for ($i = 1; $i <= $mailsum; $i++) { $aux = $pop3->ListMessage($i); @@ -94,6 +115,7 @@ $cantUseMailIn = $acc["anonymous"]=='n' && empty($aux["sender"]["user"]); if($cantUseMailIn) { + $content .= "Anonymous user acces denied, sending auto-reply to email address: " . $aux["sender"]["email"] . "<br />"; $mail = new htmlMimeMail(); $mail->setFrom($acc["account"]); @@ -102,123 +124,59 @@ $mail->setText("Sorry, you can't use this feature."); $res = $mail->send(array($aux["sender"]["email"]), 'mail'); $content .= "Response sent<br />"; + } else { - if (empty($aux["sender"]["user"])) - $aux["sender"]["user"] = $aux["sender"]["email"]; - - if (empty($aux["sender"]["name"])) - $aux["sender"]["name"] = $aux["sender"]["email"]; - - // Now determine account type - if ($acc['type'] == 'wiki-get') { + + if (empty($aux["sender"]["user"])) $aux["sender"]["user"] = $aux["sender"]["email"]; + if (empty($aux["sender"]["name"])) $aux["sender"]["name"] = $aux["sender"]["email"]; + + $page = trim($aux['subject']); + + switch ($acc['type']) { + case 'wiki-get': + $method = 'GET'; + break; + case 'wiki-put': + $method = 'PUT'; + break; + case 'wiki-append': + $method = 'APPEND'; + break; + case 'wiki': + $parts = explode(':', $page); + if (!isset($parts[1])) { + //setting GET method as default + $parts[1] = $parts[0]; + $parts[0] = 'GET'; + } + $method = $parts[0]; + $page = $parts[1]; + break; + } + + if($method == 'GET') { + // A wiki-get account sends a copy of the page to the sender // and also sends the source of the page - $page = trim($aux['subject']); - $mail = new htmlMimeMail(); $mail->setFrom($acc["account"]); $mail->setSubject($page); if ($tikilib->page_exists($page)) { $info = $tikilib->get_page_info($page); - $data = $tikilib->parse_data($info["data"]); // Now we should attach the source here $mail->addAttachment($info['data'], 'source.txt', 'plain/txt'); } else { $data = 'Page not found'; } - $mail->setSMTPParams($acc["smtp"], $acc["smtpPort"], '', $acc["useAuth"], $acc["username"], $acc["pass"]); $mail->setHTML($data, strip_tags($data)); $res = $mail->send(array($aux["sender"]["email"]), 'mail'); - $content .= "Response sent<br />"; - // Send the email - } - - if ($acc['type'] == 'wiki-put') { - // This is used to UPDATE wiki pages - $page = trim($aux['subject']); - - $full = $message["full"]; - $params = array( - 'input' => $full, - 'crlf' => "\r\n", - 'include_bodies' => TRUE, - 'decode_headers' => TRUE, - 'decode_bodies' => TRUE - ); - - $output = Mail_mimeDecode::decode($params); - parse_output($output, $parts, 0); - - if (isset($parts["text"][0])) - $body = $parts["text"][0]; - - if (isset($body)) { - if (!$tikilib->page_exists($page)) { - $content .= "Page: $page has been created<br />"; - - $tikilib->create_page($page, - 0, $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - } else { - $tikilib->update_page($page, $body, "Created from " . $acc["account"], $aux["sender"]["user"], - '0.0.0.0', ''); - - $content .= "Page: $page has been updated"; - } - } - } - - if ($acc['type'] == 'wiki-append') { - // This is used to UPDATE wiki pages - $page = trim($aux['subject']); - - $full = $message["full"]; - $params = array( - 'input' => $full, - 'crlf' => "\r\n", - 'include_bodies' => TRUE, - 'decode_headers' => TRUE, - 'decode_bodies' => TRUE - ); - - $output = Mail_mimeDecode::decode($params); - parse_output($output, $parts, 0); - - if (isset($parts["text"][0])) - $body = $parts["text"][0]; - - if (isset($body)) { - if (!$tikilib->page_exists($page)) { - $content .= "Page: $page has been created<br />"; - - $tikilib->create_page($page, - 0, $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - } else { - $info = $tikilib->get_page_info($page); - - $tikilib->update_page($page, $info['data'] . $body, - "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - $content .= "Page: $page has been updated"; - } - } - } - - if ($acc['type'] == 'wiki') { - // This is used to GET/SET wiki pages depending on the body - $p_page = trim($aux['subject']); - - $parts = explode(':', $p_page); - - if (!isset($parts[1])) { - $parts[1] = $parts[0]; - - $parts[0] = 'GET'; - } - - $method = $parts[0]; - $page = $parts[1]; + $content .= "Response sent<br/>"; + + } else { + $full = $message["full"]; $params = array( 'input' => $full, @@ -227,68 +185,60 @@ 'decode_headers' => TRUE, 'decode_bodies' => TRUE ); - $output = Mail_mimeDecode::decode($params); parse_output($output, $parts, 0); - - if (isset($parts["text"][0])) - $body = $parts["text"][0]; - - if ($method == 'PUT') { - if (!$tikilib->page_exists($page)) { - $content .= "Page: $page has been created<br />"; - - $tikilib->create_page($page, - 0, $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - } else { - $tikilib->update_page($page, $body, "Created from " . $acc["account"], $aux["sender"]["user"], - '0.0.0.0', ''); - - $content .= "Page: $page has been updated"; - } - } elseif ($method == 'GET') { - $mail = new htmlMimeMail(); - - $mail->setFrom($acc["account"]); - $mail->setSubject($page); - - if ($tikilib->page_exists($page)) { - $info = $tikilib->get_page_info($page); - - $data = $tikilib->parse_data($info["data"]); - // Now we should attach the source here - $mail->addAttachment($data, $page . '.html', 'plain/html'); - + if (isset($parts["text"][0])) $body = $parts["text"][0]; + + switch ($method) { + case 'PUT': + if (isset($body)) { + if (!$tikilib->page_exists($page)) { + $tikilib->create_page($page, 0, $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been created<br/>"; + } else { + $tikilib->update_page($page, $body, "Updated from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been updated<br/>"; + } + } + check_attachments($output, $content, $page, $aux["sender"]["user"]); + break; + case 'APPEND': + if (isset($body)) { + if (!$tikilib->page_exists($page)) { + $tikilib->create_page($page,0 , $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been created<br/>"; + } else { + $info = $tikilib->get_page_info($page); + $tikilib->update_page($page, $info['data'] . $body, "Updated from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been updated<br/>"; + } + } + check_attachments($output, $content, $page, $aux["sender"]["user"]); + break; + case 'PREPEND': + if (isset($body)) { + if (!$tikilib->page_exists($page)) { + $tikilib->create_page($page,0 , $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been created<br/>"; + } else { + $info = $tikilib->get_page_info($page); + $tikilib->update_page($page, $body . $info['data'], "Updated from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); + $content .= "Page: $page has been updated<br/>"; + } + } + check_attachments($output, $content, $page, $aux["sender"]["user"]); + break; + default: + $content .= "Wrong operation for 'wiki' type account, sending auto-reply to email address: " . $aux["sender"]["email"] . "<br />"; + $mail = new htmlMimeMail(); + $mail->setFrom($acc["account"]); + $mail->setSubject(tra('Tiki mail-in instructions')); $mail->setSMTPParams($acc["smtp"], $acc["smtpPort"], '', $acc["useAuth"], $acc["username"], $acc["pass"]); - $mail->setHTML($info['data'], strip_tags($data)); + $mail->setText("Use the subject to indicate the operation to apply:\nGET:WikiName to get a wiki page\nPUT:WikiName to update/create a wiki page (use the body for the page data)\nAPPEND:WikiName to append data to a Wiki page (use the body for the data to add)"); $res = $mail->send(array($aux["sender"]["email"]), 'mail'); - $content .= "Response sent<br />"; - } else { - $data = 'Page not found'; - } - } elseif ($method == 'APPEND' || $method == 'PREPEND') { - if (!$tikilib->page_exists($page)) { - $content .= "Page: $page has been created<br />"; - - $tikilib->create_page($page, - 0, $body, date('U'), "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - } else { - $info = $tikilib->get_page_info($page); - - $tikilib->update_page($page, ($method=='APPEND' ? $info['data'] . $body : $body . $info['data']), - "Created from " . $acc["account"], $aux["sender"]["user"], '0.0.0.0', ''); - $content .= "Page: $page has been updated"; - } - } else { - $mail = new htmlMimeMail(); - - $mail->setFrom($acc["account"]); - $mail->setSubject(tra('Tiki mail-in instructions')); - $mail->setSMTPParams($acc["smtp"], $acc["smtpPort"], '', $acc["useAuth"], $acc["username"], $acc["pass"]); - $mail->setText("Use the subject to indicate the operation to apply:\nGET:WikiName to get a wiki page\nPUT:WikiName to update/create a wiki page (use the body for the page data)\nAPPEND:WikiName to append data to a Wiki page (use the body for the data to add)"); - $res = $mail->send(array($aux["sender"]["email"]), 'mail'); - } - } + $content .= "Response sent<br/>"; + }//end switch ($method) + }//end if($method == 'GET') }//end if($cantUseMailIn) // Remove the email from the pop3 server $pop3->DeleteMessage($i); Index: tiki-admin_mailin.php =================================================================== RCS file: /cvsroot/tikiwiki/tiki/tiki-admin_mailin.php,v retrieving revision 1.4.2.3 retrieving revision 1.4.2.4 diff -u -d -r1.4.2.3 -r1.4.2.4 --- tiki-admin_mailin.php 18 Mar 2004 17:11:07 -0000 1.4.2.3 +++ tiki-admin_mailin.php 26 Mar 2004 10:06:47 -0000 1.4.2.4 @@ -35,7 +35,7 @@ check_ticket('admin-mailin'); $mailinlib->replace_mailin_account($_REQUEST["accountId"], $_REQUEST["account"], $_REQUEST["pop"], $_REQUEST["port"], $_REQUEST["username"], $_REQUEST["pass"], $_REQUEST["smtp"], $_REQUEST["useAuth"], $_REQUEST["smtpPort"], $_REQUEST["type"], - $_REQUEST["active"], $_REQUEST["anonymous"]); + $_REQUEST["active"], $_REQUEST["anonymous"], $_REQUEST["attachments"]); $_REQUEST["accountId"] = 0; } @@ -48,7 +48,6 @@ $info = $mailinlib->get_mailin_account($_REQUEST["accountId"]); } else { $info["account"] = ''; - $info["username"] = ''; $info["pass"] = ''; $info["pop"] = ''; @@ -59,6 +58,7 @@ $info["type"] = 'wiki-get'; $info["active"] = 'y'; $info["anonymous"] = 'y'; + $info["attachments"] = 'n'; } $smarty->assign('info', $info); |