listsSql.php 5.0 KB
<?php

namespace Model;

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

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


    /**
     * 查询列表
     * @param string $where
     * @param int $p
     * @param int $size
     * @return string
     * @author:dc
     * @time 2023/3/16 18:11
     */
    public static function lists(string $where, int $p, int $size){

        $filed = '`id`,`uid`,`msgno`,`subject`,`from`,`from_name`,`to`,`date`,`size`,`recent`,`flagged`,`answered`,`deleted`,`seen`,`draft`,`udate`,`folder_id`,`is_file`,`cc`,`bcc`,`description`,`email_id`';

        return "select {$filed} from `".static::$table."` where ".$where." order by `udate` desc limit {$size} offset ".(($p-1)*$size);

    }

    /**
     * 统计列表
     * @param string $where
     * @return string
     * @author:dc
     * @time 2023/3/16 18:10
     */
    public static function listCount(string $where){

        return "select count(*) from `".static::$table."` where ".$where;
    }

    /**
     * 获取最后一条更新的msgno
     * @param $email_id
     * @param $folder_id
     * @return string
     * @author:dc
     * @time 2023/2/18 10:01
     */
    public static function lastMsgno($email_id,$folder_id):string{
        return "select max(`msgno`) from `".self::$table."` where ".dbWhere(['email_id'=>$email_id,'folder_id'=>$folder_id])." limit 1";
    }

    /**
     * 获取已存在的id
     * @param $email_id
     * @param $folder_id
     * @param $msgno
     * @return string
     * @author:dc
     * @time 2023/2/18 10:08
     */
    public static function getIds($email_id,$folder_id,$msgno):string {
        return "select `id`,`msgno` from `".static::$table."` where ".dbWhere([
            'email_id' =>  $email_id,
            'folder_id' =>  $folder_id,
            'msgno' =>  $msgno,
            ]);
    }

    /**
     * 通过uuid查询id和email_id
     * @param $uuid
     * @return string
     * @author:dc
     * @time 2023/2/18 10:44
     */
    public static function hasUuid($uuid):string {
        return "select `id`,`email_id`,`uuid` from `".self::$table."` where ".dbWhere(['uuid'=>$uuid]);
    }

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

        return "select {$filed} from `".self::$table."` where ".$where;
    }


    /**
     * 存草稿
     * @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 = [
            '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){
            // 修改
            if(!db()->update(listsSql::$table,$draftData,dbWhere(
                [
                    'id'    =>  $draftid,
                    'email_id'  =>  $draftData['email_id']
                ]
            ))){
                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(db(),[
                'lists_id'    =>  $draftid,
                'text_html'  =>  $draftBody
            ]);

            return $draftid;

        }else{
            return 0;
        }
    }


}