ktemail.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 575 行 · 第 1/2 页
PHP
575 行
}
$sMessage .= '</font>';
$sTitle = sprintf(_kt("Link (ID %s): %s from %s"), $iDocumentID, $sDocumentName, $oSendingUser->getName());
//email the hyperlink
//
$sEmail = null;
$sEmailFrom = null;
$oConfig =& KTConfig::getSingleton();
if (!$oConfig->get('email/sendAsSystem')) {
$sEmail = $oSendingUser->getEmail();
$sEmailFrom = $oSendingUser->getName();
}
$oEmail = new Email($sEmail, $sEmailFrom);
$res = $oEmail->send($aDestEmailAddress, $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 $sDestEmails");
$aEmailErrors[] = "Error sending email ($sTitle) to $sDestEmails";
return PEAR::raiseError(sprintf(_kt("Error sending email (%s) to %s"), $sTitle, $sDestEmails));
} else {
$default->log->info("Send email ($sTitle) to $sDestEmails");
}
// emailed link transaction
// need a document to do this.
$oDocument =& Document::get($iDocumentID);
$oDocumentTransaction = new DocumentTransaction($oDocument, sprintf(_kt("Document link emailed to %s. "), $sDestEmails).$sComment, 'ktcore.transactions.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; $i<count($aEmailAddresses); $i++) {
$bResult = ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $aEmailAddresses[$i] );
$bToReturn = $bToReturn && $bResult;
}
return $bToReturn;
}
class KTDocumentEmailAction extends KTDocumentAction {
var $sName = 'ktcore.actions.document.email';
function getDisplayName() {
return _kt('Email');
}
function getInfo() {
$oConfig =& KTConfig::getSingleton();
$sEmailServer = $oConfig->get('email/emailServer');
if ($sEmailServer == 'none') {
return null;
}
if (empty($sEmailServer)) {
return null;
}
return parent::getInfo();
}
function do_main() {
$oConfig = KTConfig::getSingleton();
$bAttachment = $oConfig->get('email/allowAttachment', false);
$bEmailAddresses = $oConfig->get('email/allowEmailAddresses', false);
$bOnlyOwnGroup = $oConfig->get('email/onlyOwnGroups', false);
$fields = array();
$fields[] = new KTJSONLookupWidget(_kt('Groups'), '',
'groups', '', $this->oPage, false, null, null,
array('action'=>sprintf('getGroups&fDocumentId=%d', $this->oDocument->getId()),
'assigned' => array(),
'multi'=>'true',
'size'=>'8'));
$fields[] = new KTJSONLookupWidget(_kt('Users'), '',
'users', '', $this->oPage, false, null, null,
array('action'=>sprintf('getUsers&fDocumentId=%d', $this->oDocument->getId()),
'assigned' => array(),
'multi'=>'true',
'size'=>'8'));
if ($bAttachment) {
$fields[] = new KTCheckboxWidget(_kt('Attach document'),
_kt('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);
}
if ($bEmailAddresses) {
$fields[] = new KTTextWidget(_kt('Email addresses'),
_kt('Documents can be emailed to external users by entering their email addresses below'),
'fEmailAddresses', '', $this->oPage,
false, null, null, array('cols' => 60, 'rows' => 5));
}
$fields[] = new KTTextWidget(_kt('Comment'),
_kt('A message for those who receive the document'),
'fComment', '', $this->oPage,
true, null, null, array('cols' => 60, 'rows' => 5));
$oTemplate =& $this->oValidator->validateTemplate('ktstandard/action/email');
$aTemplateData = array(
'context' => &$this,
'fields' => $fields,
'groups' => $aGroups,
'users' => $aUsers,
);
return $oTemplate->render($aTemplateData);
}
function json_getGroups() {
$oConfig = KTConfig::getSingleton();
$bOnlyOwnGroup = $oConfig->get('email/onlyOwnGroups', false);
$sFilter = KTUtil::arrayGet($_REQUEST, 'filter', false);
$aGroupList = array('off'=> _kt('-- Please filter --'));
if($sFilter && trim($sFilter)) {
$sWhere = sprintf('name LIKE "%%%s%%"', $sFilter);
if ($bOnlyOwnGroup != true) {
$aGroups = Group::getList($sWhere);
} else {
$aGroups = GroupUtil::listGroupsForUser($this->oUser, array('where' => $sWhere));
}
$aGroupList = array();
foreach($aGroups as $g) {
$aGroupList[$g->getId()] = $g->getName();
}
}
return $aGroupList;
}
function json_getUsers() {
$oConfig = KTConfig::getSingleton();
$bOnlyOwnGroup = $oConfig->get('email/onlyOwnGroups', false);
$sFilter = KTUtil::arrayGet($_REQUEST, 'filter', false);
$aUserList = array('off' => _kt('-- Please filter --'));
if($sFilter && trim($sFilter)) {
$sWhere = sprintf('name LIKE \'%%%s%%\' AND disabled = \'0\'', $sFilter);
if ($bOnlyOwnGroup != true) {
$aUsers = User::getEmailUsers($sWhere);
} else {
$aGroups = GroupUtil::listGroupsForUser($this->oUser);
$aMembers = array();
foreach ($aGroups as $oGroup) {
$aMembers = kt_array_merge($aMembers, $oGroup->getMembers());
}
$aUsers = array();
$aUserIds = array();
foreach ($aMembers as $oUser) {
if (in_array($oUser->getId(), $aUserIds)) {
continue;
}
$aUsers[] = $oUser;
}
}
$aUserList = array();
foreach($aUsers as $u) {
$aUserList[$u->getId()] = $u->getName();
}
}
return $aUserList;
}
function do_email() {
$groupNewRight = trim($_REQUEST['groups_items_added'], chr(160));
$userNewRight = trim($_REQUEST['users_items_added'], chr(160));
$fEmailAddresses = trim($_REQUEST['fEmailAddresses']);
$fAttachDocument = $_REQUEST['fAttachDocument'];
$fComment = $this->oValidator->validateString($_REQUEST['fComment'],
array('redirect_to'=>array('', sprintf('fDocumentId=%d', $this->oDocument->getId()))));
// 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)) {
$aAddresses = explode("\n", $fEmailAddresses);
foreach ($aAddresses as $item){
$aItems = explode(' ', $item);
$aEmailAddresses = array_merge($aEmailAddresses, $aItems);
}
}
$oConfig = KTConfig::getSingleton();
$bAttachment = $oConfig->get('email/allowAttachment', false);
$bEmailAddresses = $oConfig->get('email/allowEmailAddresses', false);
if (empty($bAttachment)) {
$fAttachDocument = false;
}
if (empty($bEmailAddresses)) {
$aEmailAddresses = array();
}
//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(_kt('No recipients set'), sprintf('fDocumentId=%d', $this->oDocument->getId()));
exit(0);
}
$iDocumentID = $this->oDocument->getID();
$sDocumentName = $this->oDocument->getName();
$aEmailErrors = array();
$aUserEmails = array();
// send group emails
sendGroupEmails($aGroupIDs, $aUserEmails, $aEmailErrors);
// send user emails
sendUserEmails($aUserIDs, $aUserEmails, $aEmailErrors);
// send manual/external email addresses
if((boolean)$fAttachDocument){
sendManualEmails($aEmailAddresses, $aUserEmails, $aEmailErrors);
}else{
sendExternalEmails($aEmailAddresses, $iDocumentID, $sDocumentName, $fComment, $aEmailErrors);
}
// get list of email addresses and send
if(!empty($aUserEmails)){
// email addresses are in the keys -> extract the keys
$aListEmails = array_keys($aUserEmails);
sendEmail($aListEmails, $iDocumentID, $sDocumentName, $fComment, (boolean)$fAttachDocument, $aEmailErrors);
}
if (count($aEmailErrors)) {
$_SESSION['KTErrorMessage'][] = join('<br />\n', $aEmailErrors);
}
$_SESSION['KTInfoMessage'][] = _kt('Email sent');
//go back to the document view page
controllerRedirect('viewDocument', sprintf("fDocumentId=%d", $this->oDocument->getId()));
}
}
class KTEmailPlugin extends KTPlugin {
var $sNamespace = 'ktstandard.email.plugin';
function KTEmailPlugin($sFilename = null) {
$res = parent::KTPlugin($sFilename);
$this->sFriendlyName = _kt('Email Plugin');
return $res;
}
function setup() {
$this->registerAction('documentaction', 'KTDocumentEmailAction', 'ktcore.actions.document.email');
}
}
$oRegistry =& KTPluginRegistry::getSingleton();
$oRegistry->registerPlugin('KTEmailPlugin', 'ktstandard.email.plugin', __FILE__);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?