正在显示
1 个修改的文件
包含
112 行增加
和
54 行删除
| @@ -30,11 +30,11 @@ class MailListV2 extends Base { | @@ -30,11 +30,11 @@ class MailListV2 extends Base { | ||
| 30 | * @author:dc | 30 | * @author:dc |
| 31 | * @time 2024/7/19 11:37 | 31 | * @time 2024/7/19 11:37 |
| 32 | */ | 32 | */ |
| 33 | - private function getFolderId(string $folder){ | 33 | + private function getFolderId(string $folder,$emails=[]){ |
| 34 | // 查询 文件夹 | 34 | // 查询 文件夹 |
| 35 | static $folderList; | 35 | static $folderList; |
| 36 | if(!$folderList){ | 36 | if(!$folderList){ |
| 37 | - $folderList = db()->all(folderSql::all($this->getEmails('id'))); | 37 | + $folderList = db()->all(folderSql::all($emails?:$this->getEmails('id'))); |
| 38 | } | 38 | } |
| 39 | $folder_id = []; | 39 | $folder_id = []; |
| 40 | // 文件夹id | 40 | // 文件夹id |
| @@ -53,39 +53,6 @@ class MailListV2 extends Base { | @@ -53,39 +53,6 @@ class MailListV2 extends Base { | ||
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | 55 | ||
| 56 | - private function from_not_in(){ | ||
| 57 | - $where = []; | ||
| 58 | - /** | ||
| 59 | - * 不查询哪些发件人的邮件 | ||
| 60 | - */ | ||
| 61 | - $form_not_in = app()->request('from_not_in'); | ||
| 62 | - if($form_not_in){ | ||
| 63 | - if(is_string($form_not_in)){ | ||
| 64 | - $form_not_in = explode(',',$form_not_in); | ||
| 65 | - } | ||
| 66 | - $form_not_in = is_array($form_not_in) ? $form_not_in : [$form_not_in]; | ||
| 67 | - $form_not_in = array_filter($form_not_in,function ($v){ | ||
| 68 | - if(is_string($v) && Verify::sEmail($v)){ | ||
| 69 | - return true; | ||
| 70 | - } | ||
| 71 | - return false; | ||
| 72 | - }); | ||
| 73 | - if($form_not_in){ | ||
| 74 | - $where = array_merge($where,$form_not_in); | ||
| 75 | - } | ||
| 76 | - } | ||
| 77 | - // 过滤掉 | ||
| 78 | - foreach ($where as $k=>$item){ | ||
| 79 | - if(stripos($item,'postmaster@') === 0){ | ||
| 80 | - unset($where[$k]); | ||
| 81 | - } | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - $where[] = 'noreply@google.com'; | ||
| 85 | - | ||
| 86 | - return $where; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | /** | 56 | /** |
| 90 | * 处理like条件 | 57 | * 处理like条件 |
| 91 | * @param $str | 58 | * @param $str |
| @@ -167,12 +134,14 @@ class MailListV2 extends Base { | @@ -167,12 +134,14 @@ class MailListV2 extends Base { | ||
| 167 | 134 | ||
| 168 | // 星标就不加文件夹赛选 | 135 | // 星标就不加文件夹赛选 |
| 169 | if(empty($where['flagged'])){ | 136 | if(empty($where['flagged'])){ |
| 170 | - $folder_id = $this->getFolderId($folder); | 137 | +// $folder_id = $this->getFolderId($folder); |
| 171 | 138 | ||
| 172 | //目录 | 139 | //目录 |
| 173 | - $where['folder_id'] = $folder_id; | 140 | +// $where['folder_id'] = $folder_id; |
| 141 | + $where['_'] = $this->assignSql($folder); | ||
| 174 | }else{ | 142 | }else{ |
| 175 | - $where['lists|email_id'] = $this->getEmails('id'); | 143 | +// $where['lists|email_id'] = $this->getEmails('id'); |
| 144 | + $where['_'] = $this->assignSql2(); | ||
| 176 | } | 145 | } |
| 177 | 146 | ||
| 178 | if($ids) $where['id'] = $ids; | 147 | if($ids) $where['id'] = $ids; |
| @@ -268,6 +237,98 @@ class MailListV2 extends Base { | @@ -268,6 +237,98 @@ class MailListV2 extends Base { | ||
| 268 | } | 237 | } |
| 269 | 238 | ||
| 270 | 239 | ||
| 240 | + | ||
| 241 | + private function assignSql($folder){ | ||
| 242 | + // 被分配的 | ||
| 243 | + $assign = app()->request('assign'); | ||
| 244 | + $sql = ''; | ||
| 245 | + $fids = []; | ||
| 246 | + if(!empty($assign['email_id'])){ | ||
| 247 | + // 此处请求中的 | ||
| 248 | + $email = array_values(array_intersect($assign['email_id'],$this->getEmails('id'))); | ||
| 249 | + if($email){ | ||
| 250 | + $fids = $this->getFolderId($folder,$email); | ||
| 251 | + // 有目录id和from | ||
| 252 | + if($fids && !empty($assign['from'])){ | ||
| 253 | + $sql = dbWhere(['folder_id'=>$fids, $folder=='发件箱'?'to':'from'=>$assign['from']]); | ||
| 254 | + } | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + // 返回 不在assign中的目录 | ||
| 258 | + $afids = array_values(array_diff($this->getFolderId($folder),$fids)); | ||
| 259 | + | ||
| 260 | + if($sql && $afids){ | ||
| 261 | + return '(('.dbWhere(['folder_id'=>$afids]).') or ('.$sql.')) and '; | ||
| 262 | + }else if($afids){ | ||
| 263 | + return dbWhere(['folder_id'=>$afids]).' and '; | ||
| 264 | + }else if($sql&&!$afids){ | ||
| 265 | + return '('.$sql.') and '; | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + return '`folder_id` = 0 and '; | ||
| 269 | + | ||
| 270 | + } | ||
| 271 | + | ||
| 272 | + return dbWhere(['folder_id'=>$this->getFolderId($folder)]).' and '; | ||
| 273 | + | ||
| 274 | + } | ||
| 275 | + private function assignSql2(){ | ||
| 276 | + // 被分配的 | ||
| 277 | + $assign = app()->request('assign'); | ||
| 278 | + $sql = ''; | ||
| 279 | + if(!empty($assign['email_id'])){ | ||
| 280 | + // 分配的联系人 | ||
| 281 | + $email = array_values(array_intersect($assign['email_id'],$this->getEmails('id'))); | ||
| 282 | + if($email&&!empty($assign['from'])){ | ||
| 283 | + $sql = dbWhere(['email_id'=>$email]).' and ('.dbWhere(['from'=>$assign['from']]).' or '.dbWhere(['to'=>$assign['from']]).')'; | ||
| 284 | + } | ||
| 285 | + | ||
| 286 | + // 分配的邮箱 | ||
| 287 | + $email2 = array_diff($this->getEmails('id'),$assign['email_id']); | ||
| 288 | + if($email2){ | ||
| 289 | + if($sql){ | ||
| 290 | + return '('.dbWhere(['email_id'=>$email2]).' or ('.$sql.')) and '; | ||
| 291 | + } | ||
| 292 | + return dbWhere(['email_id'=>$email2]); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + if($sql){ | ||
| 296 | + return '('.$sql.') and '; | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + | ||
| 300 | + return '`email_id` = 0 and '; | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + // 默认 | ||
| 304 | + return dbWhere(['email_id'=>$this->getEmails('id')]).' and '; | ||
| 305 | + | ||
| 306 | + } | ||
| 307 | + private function assignSql3($folder){ | ||
| 308 | + // 被分配的 | ||
| 309 | + $assign = app()->request('assign'); | ||
| 310 | + $sql = ''; | ||
| 311 | + $fids = []; | ||
| 312 | + if(!empty($assign['email_id'])){ | ||
| 313 | + // 此处请求中的 | ||
| 314 | + $email = array_diff($this->getEmails('id'),$assign['email_id']); | ||
| 315 | + if($email){ | ||
| 316 | + $fids = $this->getFolderId($folder,$email); | ||
| 317 | + // 有目录id和from | ||
| 318 | + if($fids){ | ||
| 319 | + return dbWhere(['folder_id'=>$fids]); | ||
| 320 | + } | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + | ||
| 324 | + return '`folder_id` = 0 and '; | ||
| 325 | + | ||
| 326 | + } | ||
| 327 | + | ||
| 328 | + return dbWhere(['folder_id'=>$this->getFolderId($folder)]).' and '; | ||
| 329 | + | ||
| 330 | + } | ||
| 331 | + | ||
| 271 | /** | 332 | /** |
| 272 | * 统计收件箱的数量 | 333 | * 统计收件箱的数量 |
| 273 | * @author:dc | 334 | * @author:dc |
| @@ -282,42 +343,39 @@ class MailListV2 extends Base { | @@ -282,42 +343,39 @@ class MailListV2 extends Base { | ||
| 282 | $sql = "select count(*) from `lists` where "; | 343 | $sql = "select count(*) from `lists` where "; |
| 283 | 344 | ||
| 284 | $where['deleted'] = 0; //未删状态 | 345 | $where['deleted'] = 0; //未删状态 |
| 285 | - // 屏蔽哪些邮件 | ||
| 286 | -// $where['from.notin'] = $this->from_not_in(); | ||
| 287 | -// $where['_'] = "`from` not like 'postmaster@%'"; | ||
| 288 | -// if(!$where['from.notin']) unset($where['from.notin']); | ||
| 289 | 346 | ||
| 290 | // 发件箱 | 347 | // 发件箱 |
| 291 | if(in_array('hot_send',$show_count_filed)){ | 348 | if(in_array('hot_send',$show_count_filed)){ |
| 292 | - $where['folder_id'] = $this->getFolderId('发件箱'); | 349 | +// $where['folder_id'] = $this->getFolderId('发件箱'); |
| 293 | // 预热发件箱 | 350 | // 预热发件箱 |
| 294 | $where['is_hots'] = 1; | 351 | $where['is_hots'] = 1; |
| 295 | - $fCount = db()->cache($this->cache)->count($sql.dbWhere($where)); | 352 | + $fCount = db()->cache($this->cache)->count($sql.$this->assignSql3('发件箱').dbWhere($where)); |
| 296 | } | 353 | } |
| 297 | 354 | ||
| 298 | // 预热收件箱 | 355 | // 预热收件箱 |
| 299 | if(in_array('hot_inbox',$show_count_filed)) { | 356 | if(in_array('hot_inbox',$show_count_filed)) { |
| 300 | - $where['folder_id'] = $this->getFolderId('收件箱'); | 357 | +// $where['folder_id'] = $this->getFolderId('收件箱'); |
| 301 | $where['is_hots'] = 1; | 358 | $where['is_hots'] = 1; |
| 302 | - $sCount = db()->cache($this->cache)->count($sql . dbWhere($where)); | 359 | + $sCount = db()->cache($this->cache)->count($sql .$this->assignSql3('收件箱'). dbWhere($where)); |
| 303 | } | 360 | } |
| 361 | + unset($where['folder_id']); | ||
| 304 | 362 | ||
| 305 | if(in_array('send',$show_count_filed)) { | 363 | if(in_array('send',$show_count_filed)) { |
| 306 | - $where['folder_id'] = $this->getFolderId('发件箱'); | 364 | +// $where['folder_id'] = $this->getFolderId('发件箱'); |
| 307 | $where['is_hots'] = 0; | 365 | $where['is_hots'] = 0; |
| 308 | - $faCount = db()->cache($this->cache)->count($sql . dbWhere($where)); | 366 | + $faCount = db()->cache($this->cache)->count($sql . $this->assignSql('发件箱').dbWhere($where)); |
| 309 | } | 367 | } |
| 310 | // 垃圾箱 | 368 | // 垃圾箱 |
| 311 | if(in_array('junk',$show_count_filed)) { | 369 | if(in_array('junk',$show_count_filed)) { |
| 312 | - $where['folder_id'] = $this->getFolderId('垃圾箱'); | 370 | +// $where['folder_id'] = $this->getFolderId('垃圾箱'); |
| 313 | $where['is_hots'] = 0; | 371 | $where['is_hots'] = 0; |
| 314 | - $lajiCount = db()->cache($this->cache)->count($sql . dbWhere($where)); | 372 | + $lajiCount = db()->cache($this->cache)->count($sql . $this->assignSql('垃圾箱').dbWhere($where)); |
| 315 | } | 373 | } |
| 316 | 374 | ||
| 317 | // 收件箱 | 375 | // 收件箱 |
| 318 | - $where['folder_id'] = $this->getFolderId('收件箱'); | 376 | +// $where['folder_id'] = $this->getFolderId('收件箱'); |
| 319 | $where['is_hots'] = 0; | 377 | $where['is_hots'] = 0; |
| 320 | - $sql = "select count(*) from `lists` left join `lists_auto` on `lists`.`id`= `lists_auto`.`list_id` where `lists_auto`.`list_id` IS NULL and "; | 378 | + $sql = "select count(*) from `lists` left join `lists_auto` on `lists`.`id`= `lists_auto`.`list_id` where `lists_auto`.`list_id` IS NULL and ".$this->assignSql('收件箱'); |
| 321 | 379 | ||
| 322 | // 模糊标题搜索 | 380 | // 模糊标题搜索 |
| 323 | $subject = app()->request('subject'); | 381 | $subject = app()->request('subject'); |
| @@ -361,9 +419,9 @@ class MailListV2 extends Base { | @@ -361,9 +419,9 @@ class MailListV2 extends Base { | ||
| 361 | if(in_array('flagged',$show_count_filed)) { | 419 | if(in_array('flagged',$show_count_filed)) { |
| 362 | $where['flagged'] = 1; | 420 | $where['flagged'] = 1; |
| 363 | unset($where['folder_id']); | 421 | unset($where['folder_id']); |
| 364 | - $where['email_id'] = $emails; | 422 | +// $where['email_id'] = $emails; |
| 365 | unset($where['is_hots']); | 423 | unset($where['is_hots']); |
| 366 | - $flaggedCount = db()->cache($this->cache)->count("SELECT COUNT(*) FROM (select `id` from `lists` where " . dbWhere($where).' group by `udate`) as c'); | 424 | + $flaggedCount = db()->cache($this->cache)->count("SELECT COUNT(*) FROM (select `id` from `lists` where " . $this->assignSql2().dbWhere($where).' group by `udate`) as c'); |
| 367 | } | 425 | } |
| 368 | 426 | ||
| 369 | $data = []; | 427 | $data = []; |
-
请 注册 或 登录 后发表评论