ktemail.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 575 行 · 第 1/2 页

SVN-BASE
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 + -
显示快捷键?