禅道二次开发发送邮件功能

禅道默认在BUG和任务 修改,指派 的时候会发送邮件给默认的接收人

但是其他模块就没有对应的开发配置。如果有发信的需求,就要手动修改代码来进行开发了

 

此次接到的需求是当上传新文档的时候 给指定人发信,这里指定人也是固定的,不需要额外选择

首先参考默认的测试发信页面

 

(本项目禅道是搭建在windows平台上的)

前台页面的路径在 \zentao\module\mail\view\test.html.php 没什么可说的,传了一个收件人到后台   

后台处理的文件路径是\zentao\module\mail\control.php   找到public function test() 这个方法

这个方法前面大段都是判断服务器有没有权限 有没有开启fs读写

真正核心的是

 $this->mail->send($this->post->to, $this->lang->mail->subject, $this->lang->mail->content, "", true);

传的5个参数是  发给谁,主题 ,正文 ,抄送, 是否发给自己。禅道发信默认是不发给自己的

我们再参考BUG模块发信的代码 在\zentao\module\bug\control.php里面

最后的核心发送代码  还是一行

 $this->loadModel('mail')->send($toList, 'BUG #'. $bug->id . ' ' . $bug->title . ' - ' . $productName, $mailContent, $ccList);

 

和mail唯一不同的就是loadModel('mail')->send   和 mail->send 这一点了

那接下来 就可以复用这个地方的代码了

在文档的control.php里 建一个自己的send方法,这里我取名叫sendmail_doc,表明是文档发信

public function sendmail_doc()
            {

              /* 设置发送人和抄送人. 是禅道系统里有的用户*/
                $toList      = 'zhc';  
                $ccList      = 'user1,user2'

             /* 邮件标题和正文. */
                $mailTitle ='有人上传了文件';
                $mailContent = '有人上传了文件,请在系统中查看';                

            /*发送核心语句 */
                $this->loadModel('mail')->send($toList, $mailTitle, $mailContent, $ccList,true);            
            }

ok  然后在创建的地方调用就好了

创建文档的前端页面在\zentao\module\doc\view\create.html.php里面 ,提交之后调用create()方法

只要在create()里面的post提交段插入即可,找到if(!empty($_POST))后面的内容

public function create($libID, $moduleID = 0, $productID = 0, $projectID = 0, $from = 'doc')
    {
        $projectID = (int)$projectID;
        if(!empty($_POST))
        {
            $docResult = $this->doc->create();
            /*就在插入表之后发送,对没错 就是这里*/
			$this->sendmail_doc();
	    	echo js::alert('您创建了文档,邮件已发送');   


            if(!$docResult or dao::isError()) die(js::error(dao::getError()));

            $docID = $docResult['id'];
            if($docResult['status'] == 'exists')
            {
                echo js::alert(sprintf($this->lang->duplicate, $this->lang->doc->common));
                die(js::locate($this->createLink('doc', 'view', "docID=$docID"), 'parent'));
            }
            $this->action->create('doc', $docID, 'Created');

            if($from == 'product') $link = $this->createLink('product', 'doc', "productID={$this->post->product}");
            if($from == 'project') $link = $this->createLink('project', 'doc', "projectID={$this->post->project}");
            if($from == 'doc')
            {
                $productID = intval($this->post->product);
                $projectID = intval($this->post->project);
                $vars = "libID=$libID&moduleID={$this->post->module}&productID=$productID&projectID=$projectID";
                $link = $this->createLink('doc', 'browse', $vars);
            }
            die(js::locate($link, 'parent'));
        }

        $this->loadModel('product');
        $this->loadModel('project');
        ....

这样在创建文档之后就可以发送了

但是 ,这样有个问题,发送的内容是固定的,我们需要带入文档信息  比如标题什么的

我们现在对这个sendmail_doc()进行改造 ,需要额外传一个参数进去 

    $this->sendmail_doc($docResult);
     echo js::alert('您创建了文档,邮件已发送');   

 

传入之后 在sendmail_doc()处增加处理的逻辑

public function sendmail_doc($docResult)
			{
				/* 设置发送人和抄送人. */
				$toList      = 'zhc';
				$ccList      = 'user1,user2';
			    $docID = $docResult['id'];
				$doc = $this->doc->getById($docID, true);			

				/* 设置邮件标题和正文. */
				$mailTitle = $this->app->user->account.'新上传了文件:'.$doc->title;
				$mailContent = $doc->addedBy.'在'.$doc->addedDate.'上传了一份文件 ,  文件名为:'.$doc->title.'请注意查看';
				
				/发送/
				$this->loadModel('mail')->send($toList, $mailTitle, $mailContent, $ccList,true);
				
			}

$this->app->user->account  和 $doc->addedBy 都是可以作为发送人

 $doc->addedBy是数据表doc里的addedBy字段

 

OK 大功告成。到这里 一个发信模块就加好了

转载于:https://my.oschina.net/zhanghaochen/blog/815723

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值