找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3152|回复: 0

[分享] Discuz!发送系统通知方法notification_add解析

[复制链接]
发表于 2017-11-15 14:08:08 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
方法定义位置:

source\function\function_core.php
代码如下:
  1. function notification_add($touid, $type, $note, $notevars = array(), $system = 0) {
  2.         return helper_notification::notification_add($touid, $type, $note, $notevars, $system);
  3. }
复制代码

参数说明:

$touid:接收通知的uid,即发给谁;

$type:通知类型,如system为系统通知,这里$type参数稍微复制一点,下面我们把type参数的各种意义罗列出来供大家参考:

appId(数字)         漫游应用
myapp                应用邀请或请求
credit                积分充值
goods                商品
mod_member        用户审核
system                系统消息
group                群组审核通过
report                举报
verify                认证
manage_                管理通知
magic                道具
poke                打招呼
friend                好友
task                任务
wall                留言
piccomment        图片评论
blogcomment        日志评论
sharecomment        分享评论
follow                关注
pusearticle        推送
at                        @功能
pcomment        点评
post                回帖引用
show                排行榜
clickblog        日志顶操作
clickarticle 文章顶操作
clickpic        图片顶操作
doing                记录
pmreport        消息举报
sharenotice        分享通知
group                群组
reward                悬赏
activity        活动
thread                主题
blog                日志
article                文章

$note:通知内容,支持html代码;

$notevars:附加参数,如:actor、from_num、from_id、from_idtype


$system:是否系统通知,默认0,强制转为系统通知;

详细代码逻辑参考helper_notification类代码

helper类所在位置:

\source\class\helper\helper_notification.php


相关代码如下:
  1. public static function notification_add($touid, $type, $note, $notevars = array(), $system = 0, $category = -1) {
  2.                 global $_G;

  3.                 if(!($tospace = getuserbyuid($touid))) {
  4.                         return false;
  5.                 }
  6.                 space_merge($tospace, 'field_home');
  7.                 $filter = empty($tospace['privacy']['filter_note'])?array():array_keys($tospace['privacy']['filter_note']);

  8.                 if($filter && (in_array($type.'|0', $filter) || in_array($type.'|'.$_G['uid'], $filter))) {
  9.                         return false;
  10.                 }
  11.                 if($category == -1) {
  12.                         $category = 0;
  13.                         $categoryname = '';
  14.                         if($type == 'follow' || $type == 'follower') {
  15.                                 switch ($type) {
  16.                                                         case 'follow' : $category = 5; break;
  17.                                                         case 'follower' : $category = 6; break;
  18.                                                 }
  19.                                 $categoryname = $type;
  20.                         } else {
  21.                                 foreach($_G['notice_structure'] as $key => $val) {
  22.                                         if(in_array($type, $val)) {
  23.                                                 switch ($key) {
  24.                                                         case 'mypost' : $category = 1; break;
  25.                                                         case 'interactive' : $category = 2; break;
  26.                                                         case 'system' : $category = 3; break;
  27.                                                         case 'manage' : $category = 4; break;
  28.                                                         default :  $category = 0;
  29.                                                 }
  30.                                                 $categoryname = $key;
  31.                                                 break;
  32.                                         }
  33.                                 }
  34.                         }
  35.                 } else {
  36.                         switch ($category) {
  37.                                 case 1 : $categoryname = 'mypost'; break;
  38.                                 case 2 : $categoryname = 'interactive'; break;
  39.                                 case 3 : $categoryname = 'system'; break;
  40.                                 case 4 : $categoryname = 'manage'; break;
  41.                                 case 5 : $categoryname = 'follow'; break;
  42.                                 case 6 : $categoryname = 'follower'; break;
  43.                                 default :  $categoryname = 'app';
  44.                         }
  45.                 }
  46.                 if($category == 0) {
  47.                         $categoryname = 'app';
  48.                 } elseif($category == 1 || $category == 2) {
  49.                         $categoryname = $type;
  50.                 }
  51.                 $notevars['actor'] = "<a href="home.php?mod=space&uid=$_G[uid]">".$_G['member']['username']."</a>";
  52.                 if(!is_numeric($type)) {
  53.                         $vars = explode(':', $note);
  54.                         if(count($vars) == 2) {
  55.                                 $notestring = lang('plugin/'.$vars[0], $vars[1], $notevars);
  56.                         } else {
  57.                                 $notestring = lang('notification', $note, $notevars);
  58.                         }
  59.                         $frommyapp = false;
  60.                 } else {
  61.                         $frommyapp = true;
  62.                         $notestring = $note;
  63.                 }

  64.                 $oldnote = array();
  65.                 if($notevars['from_id'] && $notevars['from_idtype']) {
  66.                         $oldnote = C::t('home_notification')->fetch_by_fromid_uid($notevars['from_id'], $notevars['from_idtype'], $touid);
  67.                 }
  68.                 if(empty($oldnote['from_num'])) $oldnote['from_num'] = 0;
  69.                 $notevars['from_num'] = $notevars['from_num'] ? $notevars['from_num'] : 1;
  70.                 $setarr = array(
  71.                         'uid' => $touid,
  72.                         'type' => $type,
  73.                         'new' => 1,
  74.                         'authorid' => $_G['uid'],
  75.                         'author' => $_G['username'],
  76.                         'note' => $notestring,
  77.                         'dateline' => $_G['times**p'],
  78.                         'from_id' => $notevars['from_id'],
  79.                         'from_idtype' => $notevars['from_idtype'],
  80.                         'from_num' => ($oldnote['from_num']+$notevars['from_num']),
  81.                         'category' => $category
  82.                 );
  83.                 if($system) {
  84.                         $setarr['authorid'] = 0;
  85.                         $setarr['author'] = '';
  86.                 }
  87.                 $pkId = 0;
  88.                 if($oldnote['id']) {
  89.                         C::t('home_notification')->update($oldnote['id'], $setarr);
  90.                         $pkId = $oldnote['id'];
  91.                 } else {
  92.                         $oldnote['new'] = 0;
  93.                         $pkId = C::t('home_notification')->insert($setarr, true);
  94.                 }
  95.                 $banType = array('task');
  96.                 if($_G['setting']['cloud_status'] && !in_array($type, $banType)) {
  97.                         $noticeService = Cloud::loadClass('Service_Client_Notification');
  98.                         if($oldnote['id']) {
  99.                                 $noticeService->update($touid, $pkId, $setarr['from_num'], $setarr['dateline'], $note);
  100.                         } else {
  101.                                 $extra = $type == 'post' ? array('pId' => $notevars['pid']) : array();
  102.                                 $extra['notekey'] = $note;
  103.                                 $noticeService->add($touid, $pkId, $type, $setarr['authorid'], $setarr['author'], $setarr['from_id'], $setarr['from_idtype'], $setarr['note'], $setarr['from_num'], $setarr['dateline'], $extra);
  104.                         }
  105.                 }

  106.                 if(empty($oldnote['new'])) {
  107.                         C::t('common_member')->increase($touid, array('newprompt' => 1));
  108.                         $newprompt = C::t('common_member_newprompt')->fetch($touid);
  109.                         if($newprompt) {
  110.                                 $newprompt['data'] = unserialize($newprompt['data']);
  111.                                 if(!empty($newprompt['data'][$categoryname])) {
  112.                                         $newprompt['data'][$categoryname] = intval($newprompt['data'][$categoryname]) + 1;
  113.                                 } else {
  114.                                         $newprompt['data'][$categoryname] = 1;
  115.                                 }
  116.                                 C::t('common_member_newprompt')->update($touid, array('data' => serialize($newprompt['data'])));
  117.                         } else {
  118.                                 C::t('common_member_newprompt')->insert($touid, array($categoryname => 1));
  119.                         }
  120.                         require_once libfile('function/mail');
  121.                         $mail_subject = lang('notification', 'mail_to_user');
  122.                         sendmail_touser($touid, $mail_subject, $notestring, $frommyapp ? 'myapp' : $type);
  123.                 }

  124.                 if(!$system && $_G['uid'] && $touid != $_G['uid']) {
  125.                         C::t('home_friend')->update_num_by_uid_fuid(1, $_G['uid'], $touid);
  126.                 }
  127.         }
复制代码




发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-19 15:13 , Processed in 0.045232 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表