設為首頁收藏本站

會員名稱  取回密碼
 註冊
img_loading
智能检测中
搜尋
熱搜: Redump discuz
檢視: 624|回覆: 0

【轉貼】 Discuz!發送系統通知notification_add

[複製連結]
匿名
匿名  發表於 2021年4月23日 14:41:54 |閱讀模式
字體大小 16px
10px 32px
方法定義位置: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['timestamp'],
  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.         }
懶得打字嗎?讓本助手協助你 【使用進階編輯器請點選右方進階模式】
您需要登入後才可以回覆 登入 | 註冊

本版積分規則

手機版|Archiver|漁家小舖

GMT+8, 2025年4月6日 14:06 , Processed in 1.874945 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回覆 返回頂端 返回清單