listsSql.php 4.8 KB
<?php

namespace Model;

/**
 * 邮件列表
 * @author:dc
 * @time 2023/2/17 14:15
 * Class lists
 * @package Model
 */
class listsSql {

    /**
     * 表
     * @var string
     */
    public static $table = 'lists';



    public static function update(\Lib\Db $db,$data,$where) {
        if(is_array($where)){
            $where = dbWhere($where);
        }elseif (is_numeric($where)) {
            $where = dbWhere(['id' => $where]);
        }
        $num = 0;
        foreach ([self::$table,"lists_back",/* "lists_hot" */] as $table) {
            $num += $db->update($table,$data,$where);
        }
        return $num;
    }


    /**
     * 根据id查询
     * @param string $where
     * @return string
     * @author:dc
     * @time 2023/3/17 16:24
     */
    public static function first($db,string $where,$filed='*', $throw=false) {

        foreach ([self::$table,"lists_back","lists_hot"] as $table) {
            $sql =  "select {$filed} from `".$table."` where ".$where.' limit 1';
            if($throw){
                $data = $db->throw($throw)->first($sql);
            }else{
                $data = $db->first($sql);
            }
            if($data) {
                return $data;
            }
        }

        return [];
    }


    public static function count($db,string $where){
        $num = 0;
        foreach ([self::$table,"lists_back",/*"lists_hot"*/] as $table) {
            $sql =  "select count(*) as `mc` from `".$table."` where ".$where;
            $data = $db->value($sql);
            if($data && is_numeric($data)) {
                $num += $data;
            }
        }
        return $num;
    }


    /**
     * 查询所有
     * @param $db
     * @param $where
     * @param string $filed
     * @return array
     * @author:dc
     * @time 2024/1/22 11:15
     */
    public static function all($db,$where,$filed='*'){
        if(is_array($where)){
            $where = dbWhere($where);
        }
        $data = [];
        foreach ([self::$table,"lists_back"] as $table) {
            $sql =  "select {$filed} from `".$table."` where ".$where;
            $all = $db->all($sql);
            if($all) {
                $data = array_merge($data, $all);
            }
        }
        return $data;
    }



    /**
     * 存草稿
     * @param array $data
     * @param array $email
     * @param int $draftid
     * @return int
     * @author:dc
     * @time 2023/4/11 9:44
     */
    public static function saveDraft(array $data, array $email,int $draftid = 0):int {
        $draftData = [
            'uid'   =>  -rand(0,99999999),
            'subject'   =>  $data['subject'],
            'from'   =>  $data['email'],
            'from_name'   =>  $data['nickname'],
            'date'   =>  time(),
            'udate'   =>  time(),
            'draft'   =>  1,
            'seen'   =>  1,
            'folder_id'   =>  db()->value(folderSql::first(['folder'=>'草稿箱','email_id'=>$email['id']],'`id`')),
            'email_id'    =>  $email['id'],
            'is_file'  =>  $data['attachment'] ? 1 : 0, //是否附件
            'description'  =>  mb_substr(strip_tags($data['body']),0,150), //是否附件
            'references'    =>  [
                'receipt'   =>  $data['receipt'],
                'priority'  =>  $data['priority'],
                'massSuit'  =>  $data['massSuit']?1:0,
                'jobName'  =>  $data['jobName']??'',
            ]
        ];
        $draftData['to'] = $data['tos'][0]['email'];
        $draftData['to_name'] = $data['tos'];
        $draftData['cc'] = $data['cc'];
        $draftData['bcc'] = $data['bcc'];

//        $draftData['uuid'] = md5($draftData['email_id'].$draftData['folder_id'].rand(1111111,9999999999));

        if($draftid){
            // 修改
            unset($draftData['uid']);
            $t = listsSql::update(db(),$draftData,dbWhere(
                [
                    'id'    =>  $draftid,
                    'email_id'  =>  $draftData['email_id']
                ]
            ));
            if(!$t){
                return 0;
            }
        }else{
            $draftid = db()->insert(listsSql::$table,$draftData);
        }

        if($draftid){
            $draftBody = [
                [
                    'type'  =>  'text/html',
                    'charset'   =>  'utf-8',
                    'body'  =>  base64_encode($data['body'])
                ]
            ];

            foreach ($data['attachment'] as $da){
                $da['name'] = base64_encode($da['name']);
                $da['filename'] = base64_encode($da['filename']);
                $draftBody[] = $da;
            }

            bodySql::insertOrUpdate([
                'lists_id'    =>  $draftid,
                'text_html'  =>  $draftBody
            ]);

            return $draftid;

        }else{
            return 0;
        }
    }


}