0) { $oDestGroup = Group::get($aGroupIDs[$i]); $default->log->info("sendingEmail to group " . $oDestGroup->getName()); // for each group, retrieve all the users $aUsers = $oDestGroup->getUsers(); // FIXME: this should send one email with multiple To: users for ($j=0; $jlog->info("sendingEmail to group-member " . $aUsers[$j]->getName() . " with email " . $aUsers[$j]->getEmail()); // the user has an email address and has email notification enabled if (strlen($aUsers[$j]->getEmail())>0 && $aUsers[$j]->getEmailNotification()) { //if the to address is valid, send the mail if (validateEmailAddress($aUsers[$j]->getEmail())) { sendEmail($aUsers[$j]->getEmail(), $aUsers[$j]->getName(), $oDocument->getID(), $oDocument->getName(), $sComment, $bAttachDocument, $aEmailErrors); } else { $default->log->error("email validation failed for " . $aUsers[$j]->getEmail()); } } else { $default->log->info("either " . $aUsers[$j]->getUserName() . " has no email address, or notification is not enabled"); } } } else { $default->log->info("filtered group id=" . $aGroupIDs[$i]); } } } /** * Sends emails to the selected users */ function sendUserEmails($aUserIDs, $oDocument, $sComment = "", $bAttachDocument, &$aEmailErrors) { global $default; // loop through users for ($i=0; $i 0) { $oDestUser = User::get($aUserIDs[$i]); $default->log->info("sendingEmail to user " . $oDestUser->getName() . " with email " . $oDestUser->getEmail()); // the user has an email address and has email notification enabled if (strlen($oDestUser->getEmail())>0 && $oDestUser->getEmailNotification()) { //if the to address is valid, send the mail if (validateEmailAddress($oDestUser->getEmail())) { sendEmail($oDestUser->getEmail(), $oDestUser->getName(), $oDocument->getID(), $oDocument->getName(), $sComment, $bAttachDocument, $aEmailErrors); } } else { $default->log->info("either " . $oDestUser->getUserName() . " has no email address, or notification is not enabled"); } } else { $default->log->info("filtered user id=" . $aUserIDs[$i]); } } } /** * Sends emails to the manually entered email addresses */ function sendManualEmails($aEmailAddresses, $oDocument, $sComment = "", $bAttachDocument, &$aEmailErrors) { global $default; // loop through users foreach ($aEmailAddresses as $sEmailAddress) { $default->log->info("sendingEmail to address " . $sEmailAddress); if (validateEmailAddress($sEmailAddress)) { sendEmail($sEmailAddress, $sEmailAddress, $oDocument->getID(), $oDocument->getName(), $sComment, $bAttachDocument, $aEmailErrors); } } } /** * Constructs the email message text and sends the message */ function sendEmail($sDestEmailAddress, $sDestUserName, $iDocumentID, $sDocumentName, $sComment, $bAttachDocument = false, &$aEmailErrors) { if ($bAttachDocument !== true) { return sendEmailHyperlink($sDestEmailAddress, $sDestUserName, $iDocumentID, $sDocumentName, $sComment, $aEmailErrors); } else { return sendEmailDocument($sDestEmailAddress, $sDestUserName, $iDocumentID, $sDocumentName, $sComment, $aEmailErrors); } } function sendEmailDocument($sDestEmailAddress, $sDestUserName, $iDocumentID, $sDocumentName, $sComment, &$aEmailErrors) { global $default; $oSendingUser = User::get($_SESSION["userID"]); $sMessage = 'Your colleague, ' . $oSendingUser->getName() . ', wishes you to view the attached document entitled "' . $sDocumentName . '".'; $sMessage .= "\n\n"; if (strlen($sComment) > 0) { $sMessage .= "

Comments:
$sComment"; } $sTitle = "Document: " . $sDocumentName . " from " . $oSendingUser->getName(); $oEmail = new Email(); $oDocument = Document::get($iDocumentID); $sDocumentPath = $oDocument->getPath(); $sDocumentFileName = $oDocument->getFileName(); $res = $oEmail->sendAttachment($sDestEmailAddress, $sTitle, $sMessage, $sDocumentPath, $sDocumentFileName); if (PEAR::isError($res)) { $default->log->error($res->getMessage()); $aEmailErrors[] = $res->getMessage(); return $res; } else if ($res === false) { $default->log->error("Error sending email ($sTitle) to $sDestEmailAddress"); $aEmailErrors[] = "Error sending email ($sTitle) to $sDestEmailAddress"; return PEAR::raiseError("Error sending email ($sTitle) to $sDestEmailAddress"); } else { $default->log->info("Send email ($sTitle) to $sDestEmailAddress"); } // emailed link transaction $oDocumentTransaction = & new DocumentTransaction($iDocumentID, "Document link emailed to $sDestEmailAddress", EMAIL_ATTACH); if ($oDocumentTransaction->create()) { $default->log->debug("emailBL.php created email link document transaction for document ID=$iDocumentID"); } else { $default->log->error("emailBL.php couldn't create email link document transaction for document ID=$iDocumentID"); } } function sendEmailHyperlink($sDestEmailAddress, $sDestUserName, $iDocumentID, $sDocumentName, $sComment, &$aEmailErrors) { global $default; $oSendingUser = User::get($_SESSION["userID"]); $sMessage = ""; if ($sDestUserName) { $sMessage .= $sDestUserName . ",

"; } $sMessage .= "Your colleague, " . $oSendingUser->getName() . ", wishes you to view the document entitled '" . $sDocumentName . "'.\n "; $sMessage .= "Click on the hyperlink below to view it."; // add the link to the document to the mail $sMessage .= "
" . generateControllerLink("viewDocument", "fDocumentID=$iDocumentID", $sDocumentName); // add optional comment if (strlen($sComment) > 0) { $sMessage .= "

Comments:
$sComment"; } $sMessage .= "
"; $sTitle = "Link: " . $sDocumentName . " from " . $oSendingUser->getName(); //email the hyperlink $oEmail = new Email(); $res = $oEmail->send($sDestEmailAddress, $sTitle, $sMessage); if (PEAR::isError($res)) { $default->log->error($res->getMessage()); $aEmailErrors[] = $res->getMessage(); return $res; } else if ($res === false) { $default->log->error("Error sending email ($sTitle) to $sDestEmailAddress"); $aEmailErrors[] = "Error sending email ($sTitle) to $sDestEmailAddress"; return PEAR::raiseError("Error sending email ($sTitle) to $sDestEmailAddress"); } else { $default->log->info("Send email ($sTitle) to $sDestEmailAddress"); } // emailed link transaction $oDocumentTransaction = & new DocumentTransaction($iDocumentID, "Document link emailed to $sDestEmailAddress", EMAIL_LINK); if ($oDocumentTransaction->create()) { $default->log->debug("emailBL.php created email link document transaction for document ID=$iDocumentID"); } else { $default->log->error("emailBL.php couldn't create email link document transaction for document ID=$iDocumentID"); } } function validateEmailAddress($sEmailAddress) { $aEmailAddresses = array(); if (strpos($sEmailAddress, ";")) { $aEmailAddresses = explode(";", $sEmailAddress); } else { $aEmailAddresses[] = $sEmailAddress; } $bToReturn = true; for ($i=0; $ioValidator->validateTemplate('ktstandard/action/email'); $fields = array(); $fields[] = new KTCheckboxWidget("Attach document", "By default, documents are sent as links into the document management system. Select this option if you want the document contents to be sent as an attachment in the email.", 'fAttachDocument', null, $this->oPage); $fields[] = new KTTextWidget("Email addresses", "FIXME: Add extra email addresses here", 'fEmailAddresses', "", $this->oPage); $fields[] = new KTTextWidget("Comment", "FIXME", 'fComment', "", $this->oPage, true); $aTemplateData = array( 'context' => &$this, 'fields' => $fields, ); return $oTemplate->render($aTemplateData); } function do_email() { $groupNewRight = trim($_REQUEST['groupNewRight'], chr(160)); $userNewRight = trim($_REQUEST['userNewRight'], chr(160)); $fEmailAddresses = trim($_REQUEST['fEmailAddresses']); $fAttachDocument = $_REQUEST['fAttachDocument']; $fComment = $_REQUEST['fComment']; // explode group and user ids $aGroupIDs = array(); $aUserIDs = array(); $aEmailAddresses = array(); if (!empty($groupNewRight)) { $aGroupIDs = explode(",", $groupNewRight); } if (!empty($userNewRight)) { $aUserIDs = explode(",", $userNewRight); } if (!empty($fEmailAddresses)) { $aEmailAddresses = explode(" ", $fEmailAddresses); } //if we're going to send a mail, first make there is someone to send it to if ((count($aGroupIDs) == 0) && (count($aUserIDs) == 0) && (count($aEmailAddresses) == 0)) { $this->errorRedirectToMain('No recipients set', sprintf('fDocumentId=%d', $this->oDocument->getId())); exit(0); } $aEmailErrors = array(); // send group emails sendGroupEmails($aGroupIDs, $this->oDocument, $fComment, (boolean)$fAttachDocument, $aEmailErrors); // send user emails sendUserEmails($aUserIDs, $this->oDocument, $fComment, (boolean)$fAttachDocument, $aEmailErrors); // send manual email addresses sendManualEmails($aEmailAddresses, $this->oDocument, $fComment, (boolean)$fAttachDocument, $aEmailErrors); if (count($aEmailErrors)) { $_SESSION['KTErrorMessage'][] = join("
\n", $aEmailErrors); } $_SESSION['KTInfoMessage'][] = "Email sent"; //go back to the document view page controllerRedirect("viewDocument", sprintf("fDocumentId=%d", $this->oDocument->getId())); } } $oKTActionRegistry->registerAction('documentaction', 'KTDocumentEmailAction', 'ktcore.actions.document.email');