76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace addons\notice\library\server;
 | 
						|
 | 
						|
use addons\notice\library\GatewayTool;
 | 
						|
use addons\notice\library\ToData;
 | 
						|
use GatewayClient\Gateway;
 | 
						|
 | 
						|
class Msg
 | 
						|
{
 | 
						|
 | 
						|
    // 获取通知数据
 | 
						|
    public function getNoticeData($event, $template, $params)
 | 
						|
    {
 | 
						|
        $toData = ToData::get($event, $template, $params);
 | 
						|
 | 
						|
        $params = array_merge($params, $toData['default_field']);
 | 
						|
        $content = self::formatParams($template['content'], $params);
 | 
						|
 | 
						|
        if ($template['platform'] == 'admin' || $template['platform'] == 'user') {
 | 
						|
            foreach ($toData['to_id'] as $id) {
 | 
						|
                try{
 | 
						|
                    $num = \app\admin\model\notice\Notice::where('to_id', $id)
 | 
						|
                        ->where('platform', $template['platform'])
 | 
						|
                        ->where('type','msg')
 | 
						|
                        ->order('id', 'desc')
 | 
						|
                        ->whereNull('readtime')
 | 
						|
                        ->count();
 | 
						|
 | 
						|
                    // 判断是否开启socket通知
 | 
						|
                    $config = get_addon_config('notice');
 | 
						|
                    if ($config['admin_real'] == 2 && $template['platform'] == 'admin') {
 | 
						|
                        GatewayTool::sendByUid($template['platform'].'_'.$id, 'new_notice', ['msg' => $content, 'num' => $num+1, 'time' => time()]);
 | 
						|
                    }
 | 
						|
                    if ($config['user_real'] == 2 && $template['platform'] == 'user') {
 | 
						|
                        GatewayTool::sendByUid($template['platform'].'_'.$id, 'new_notice', ['msg' => $content, 'num' => $num+1, 'time' => time()]);
 | 
						|
                    }
 | 
						|
 | 
						|
                }catch (\Exception $e) {
 | 
						|
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        // url
 | 
						|
        $url = Msg::formatParams($template['url'], $params);
 | 
						|
        $urlTitle = Msg::formatParams($template['url_title'], $params);
 | 
						|
        $urlExt = [
 | 
						|
            'url' => $url,
 | 
						|
            'url_type' => $template['url_type'],
 | 
						|
            'url_title' => $urlTitle
 | 
						|
        ];
 | 
						|
        $ext = json_encode($urlExt, true);
 | 
						|
 | 
						|
        return [
 | 
						|
            'to_id' => $toData['to_id'],
 | 
						|
            'content' => $content,
 | 
						|
            'ext' => $ext
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    // 格式化模板数据
 | 
						|
    public static function formatParams($content, $params) {
 | 
						|
        if (preg_match_all("/(?<=({{)).+?(?=}})/", $content, $matches)) {
 | 
						|
            foreach ($matches[0] as $k => $field) {
 | 
						|
                $fieldVal = $params[$field] ?? null;
 | 
						|
                if ($fieldVal !== null) {
 | 
						|
                    $content = str_replace("{{" . $field . "}}", $fieldVal, $content);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $content;
 | 
						|
    }
 | 
						|
} |