- <?php
- /**
- *[Discuz!](C)2001-2099ComsenzInc.
- *ThisisNOTafreeware,useissubjecttolicenseterms
- *
- *$Id:function_delete.php270602012-01-0401:32:05Zsonglixin$
- */
- if(!defined(‘IN_DISCUZ‘)){
- exit(‘AccessDenied‘);
- }
- require_oncelibfile(‘function/home‘);
- /**
- *删除用户
- *@paramstring$uids待删的ID数组
- *@paramboolean$delpost是否包含帖子信息
- */
- functiondeletemember($uids,$delpost=true){
- if(!$uids){
- return;
- }
- //腾讯安全
- require_oncelibfile(‘function/sec‘);
- updateMemberOperate($uids,2);
- if($delpost){
- deleteattach($uids,‘uid‘);
- deletepost($uids,‘authorid‘);
- }
- require_oncelibfile(‘function/forum‘);
- foreach($uidsas$uid){
- my_thread_log(‘deluser‘,array(‘uid‘=>$uid));
- }
- $uids=dimplode($uids);
- $numdeleted=DB::result_first("SELECTCOUNT(*)FROM".DB::table(‘common_member‘)."WHEREuidIN($uids)");
- foreach(array(‘common_member_field_forum‘,‘common_member_field_home‘,‘common_member_count‘,‘common_member_log‘,‘common_member_profile‘,
- ‘common_member_verify‘,‘common_member_verify_info‘,‘common_member_status‘,‘common_member_validate‘,‘common_member_magic‘,
- ‘forum_access‘,‘forum_moderator‘,‘common_member_action_log‘)as$table){
- DB::delete($table,"uidIN($uids)");
- }
- $doids=array();
- $query=DB::query("SELECT*FROM".DB::table(‘home_doing‘)."WHEREuidIN($uids)");
- while($value=DB::fetch($query)){
- $doids[$value[‘doid‘]]=$value[‘doid‘];
- }
- $delsql=!empty($doids)?"doidIN(".dimplode($doids).")OR":"";
- DB::delete(‘home_docomment‘,"$delsqluidIN($uids)");
- DB::delete(‘common_domain‘,"idIN($uids)ANDidtype=‘home‘");
- DB::delete(‘home_feed‘,"uidIN($uids)OR(idIN($uids)ANDidtype=‘uid‘)");
- DB::delete(‘home_notification‘,"uidIN($uids)ORauthoridIN($uids)");
- DB::delete(‘home_poke‘,"uidIN($uids)ORfromuidIN($uids)");
- DB::delete(‘home_comment‘,"(uidIN($uids)ORauthoridIN($uids)OR(idIN($uids)ANDidtype=‘uid‘))");
- DB::delete(‘home_visitor‘,"uidIN($uids)ORvuidIN($uids)");
- DB::delete(‘home_friend‘,"uidIN($uids)ORfuidIN($uids)");
- DB::delete(‘home_friend_request‘,"uidIN($uids)ORfuidIN($uids)");
- DB::delete(‘common_invite‘,"uidIN($uids)ORfuidIN($uids)");
- DB::delete(‘common_myinvite‘,"touidIN($uids)ORfromuidIN($uids)");
- DB::delete(‘common_moderate‘,"idIN(".$uids.")ANDidtype=‘uid_cid‘");
- //note删除相册图片
- $query=DB::query("SELECTfilepath,thumb,remoteFROM".DB::table(‘home_pic‘)."WHEREuidIN($uids)");
- while($value=DB::fetch($query)){
- $pics[]=$value;
- }
- deletepicfiles($pics);
- //note删除相册封面图片
- include_oncelibfile(‘function/home‘);
- $query=DB::query("SELECT*FROM".DB::table(‘home_album‘)."WHEREuidIN($uids)");
- while($value=DB::fetch($query)){
- pic_delete($value[‘pic‘],‘album‘,0,($value[‘picflag‘]==2?1:0));
- }
- DB::query("DELETEFROM".DB::table(‘common_mailcron‘).",".DB::table(‘common_mailqueue‘)."USING".DB::table(‘common_mailcron‘).",".DB::table(‘common_mailqueue‘)."WHERE".DB::table(‘common_mailcron‘).".touidIN($uids)AND".DB::table(‘common_mailcron‘).".c.cid",‘UNBUFFERED‘);
- foreach(array(‘home_doing‘,‘home_share‘,‘home_album‘,‘common_credit_rule_log‘,‘common_credit_rule_log_field‘,
- ‘home_pic‘,‘home_blog‘,‘home_blogfield‘,‘home_class‘,‘home_clickuser‘,
- ‘home_userapp‘,‘home_userappfield‘,‘home_show‘,‘common_member‘)as$table){
- DB::delete($table,"uidIN($uids)");
- }
- manyoulog(‘user‘,$uids,‘delete‘);
- return$numdeleted;
- }
- /**
- *删除帖子
- *@paramarray$ids待删的ID数组
- *@paramstring$idtypeauthorid/tid/pid
- *@paramboolean$credit是否处理积分
- *@paramint$posttableidpost分表ID
- */
- functiondeletepost($ids,$idtype=‘pid‘,$credit=false,$posttableid=false,$recycle=false){
- global$_G;
- $recycle=$recycle&&$idtype==‘pid‘?true:false;
- if($_G[‘setting‘][‘plugins‘][HOOKTYPE.‘_deletepost‘]){
- $_G[‘deletepostids‘]=&$ids;
- $hookparam=func_get_args();
- hookscript(‘deletepost‘,‘global‘,‘funcs‘,array(‘param‘=>$hookparam,‘step‘=>‘check‘),‘deletepost‘);
- }
- if(!$ids||!in_array($idtype,array(‘authorid‘,‘tid‘,‘pid‘))){
- return0;
- }
- //notepost分表缓存
- loadcache(‘posttableids‘);
- $posttableids=!empty($_G[‘cache‘][‘posttableids‘])?($posttableid!==false&&in_array($posttableid,$_G[‘cache‘][‘posttableids‘])?array($posttableid):$_G[‘cache‘][‘posttableids‘]):array(‘0‘);
- if($idtype==‘pid‘){
- require_oncelibfile(‘function/forum‘);
- foreach($idsas$pid){
- my_post_log(‘delete‘,array(‘pid‘=>$pid));
- }
- }
- $count=count($ids);
- $idsstr=dimplode($ids);
- //处理积分
- if($credit){
- $tuidarray=$ruidarray=array();
- foreach($posttableidsas$id){
- $query=DB::query(‘SELECTtid,pid,first,authorid,replycredit,invisibleFROM‘.DB::table(getposttable($id))."WHERE$idtypeIN($idsstr)");
- while($post=DB::fetch($query)){
- if($post[‘invisible‘]!=-1&&$post[‘invisible‘]!=-5){
- if($post[‘first‘]){
- $tuidarray[$post[‘fid‘]][]=$post[‘authorid‘];
- }else{
- $ruidarray[$post[‘fid‘]][]=$post[‘authorid‘];
- if($post[‘authorid‘]>0&&$post[‘replycredit‘]>0){
- $replycredit_list[$post[‘authorid‘]][$post[‘tid‘]]+=$post[‘replycredit‘];
- }
- }
- $tids[]=$post[‘tid‘];
- }
- }
- }
- if($tuidarray||$ruidarray){
- require_oncelibfile(‘function/post‘);
- }
- //处理发贴的积分
- if($tuidarray){
- foreach($tuidarrayas$fid=>$tuids){
- updatepostcredits(‘-‘,$tuids,‘post‘,$fid);
- }
- }
- //处理回帖的积分
- if($ruidarray){
- foreach($ruidarrayas$fid=>$ruids){
- updatepostcredits(‘-‘,$ruids,‘reply‘,$fid);
- }
- }
- }
- foreach($posttableidsas$id){
- if($recycle){
- DB::query("UPDATE".DB::table(getposttable($id))."SETinvisible=‘-5‘WHEREpidIN($idsstr)");
- }else{
- foreach(array(getposttable($id),‘forum_postcomment‘)as$table){
- DB::delete($table,"$idtypeIN($idsstr)");
- }
- DB::delete(‘forum_trade‘,($idtype==‘authorid‘?‘sellerid‘:$idtype)."IN($idsstr)");
- DB::delete(‘home_feed‘,"idIN($idsstr)ANDidtype=‘".($idtype==‘authorid‘?‘uid‘:$idtype)."‘");
- }
- }
- if(!$recycle&&$idtype!=‘authorid‘){
- foreach(array(‘forum_postposition‘,‘forum_poststick‘)as$table){
- DB::delete($table,"$idtypeIN($idsstr)");
- }
- }
- if($idtype==‘pid‘){
- DB::delete(‘forum_postcomment‘,"rpidIN($idsstr)");
- DB::delete(‘common_moderate‘,"idIN($idsstr)ANDidtype=‘pid‘");
- }
- if($replycredit_list){
- $query=DB::query("SELECTtid,extcreditstypeFROM".DB::table(‘forum_replycredit‘)."WHEREtidIN(".dimplode($tids).")");
- while($rule=DB::fetch($query)){
- $rule[‘extcreditstype‘]=$rule[‘extcreditstype‘]?$rule[‘extcreditstype‘]:$_G[‘setting‘][‘creditstransextra‘][10];
- $replycredity_rule[$rule[‘tid‘]]=$rule;
- }
- foreach($replycredit_listAS$uid=>$tid_credit){
- foreach($tid_creditAS$tid=>$credit){
- $uid_credit[$replycredity_rule[$tid][‘extcreditstype‘]]-=$credit;
- }
- updatemembercount($uid,$uid_credit,true);
- }
- }
- if(!$recycle){
- deleteattach($ids,$idtype);
- }
- if($_G[‘setting‘][‘plugins‘][HOOKTYPE.‘_deletepost‘]){
- hookscript(‘deletepost‘,‘global‘,‘funcs‘,array(‘param‘=>$hookparam,‘step‘=>‘delete‘),‘deletepost‘);
- }
- return$count;
- }
- functiondeletethreadcover($tids){
- global$_G;
- loadcache(array(‘threadtableids‘,‘posttableids‘));
- $threadtableids=!empty($_G[‘cache‘][‘threadtableids‘])?$_G[‘cache‘][‘threadtableids‘]:array(0);
- $deletecover=array();
- foreach($threadtableidsas$tableid){
- if(!$tableid){
- $threadtable="forum_thread";
- }else{
- $threadtable="forum_thread_$tableid";
- }
- $query=DB::query("SELECTcover,tidFROM".DB::table($threadtable)."WHEREtidIN($tids)");
- while($row=DB::fetch($query)){
- if($row[‘cover‘]){
- $deletecover[$row[‘tid‘]]=$row[‘cover‘];
- }
- }
- }
- if($deletecover){
- foreach($deletecoveras$tid=>$cover){
- $filename=getthreadcover($tid,0,1);
- $remote=$cover<0?1:0;
- dunlink(array(‘attachment‘=>$filename,‘remote‘=>$remote,‘thumb‘=>0));
- }
- }
- }
- /**
- *删除主题
- *@paramarray$ids待删的ID数组
- *@paramboolean$membercount是否更新用户帖数统计
- *@paramboolean$credit是否处理积分
- *@paramboolean$ponly是否只处理分表、入回收站时使用
- */
- functiondeletethread($tids,$membercount=false,$credit=false,$ponly=false){
- global$_G;
- if($_G[‘setting‘][‘plugins‘][HOOKTYPE.‘_deletethread‘]){
- $_G[‘deletethreadtids‘]=&$tids;
- $hookparam=func_get_args();
- hookscript(‘deletethread‘,‘global‘,‘funcs‘,array(‘param‘=>$hookparam,‘step‘=>‘check‘),‘deletethread‘);
- }
- if(!$tids){
- return0;
- }
- require_oncelibfile(‘function/forum‘);
- foreach($tidsas$tid){
- my_post_log(‘delete‘,array(‘tid‘=>$tid));
- }
- $count=count($tids);
- $tids=dimplode($tids);
- //note主题分表缓存
- loadcache(array(‘threadtableids‘,‘posttableids‘));
- $threadtableids=!empty($_G[‘cache‘][‘threadtableids‘])?$_G[‘cache‘][‘threadtableids‘]:array();
- $posttableids=!empty($_G[‘cache‘][‘posttableids‘])?$_G[‘cache‘][‘posttableids‘]:array(‘0‘);
- //补充主题主表
- if(!in_array(0,$threadtableids)){
- $threadtableids=array_merge(array(0),$threadtableids);
- }
- DB::delete(‘common_moderate‘,"idIN($tids)ANDidtype=‘tid‘");
- //note收集待删的tid、fid、posttableid、threadtables
- $atids=$fids=$postids=$threadtables=array();
- foreach($threadtableidsas$tableid){
- $threadtable=!$tableid?"forum_thread":"forum_thread_$tableid";
- //note收集待删的tid、fid、posttableid
- $query=DB::query("SELECTcover,tid,fid,posttableidFROM".DB::table($threadtable)."WHEREtidIN($tids)");
- while($row=DB::fetch($query)){
- $atids[]=$row[‘tid‘];
- //note整理出回帖分表
- $row[‘posttableid‘]=!empty($row[‘posttableid‘])&&in_array($row[‘posttableid‘],$posttableids)?$row[‘posttableid‘]:‘0‘;
- $postids[$row[‘posttableid‘]][$row[‘tid‘]]=$row[‘tid‘];
- if($tableid){
- $fids[$row[‘fid‘]][]=$tableid;
- }
- }
- if(!$tableid&&!$ponly){
- $threadtables[]=$threadtable;
- }
- }
- //更新主题、帖子的积分或用户统计
- if($credit||$membercount){
- $losslessdel=$_G[‘setting‘][‘losslessdel‘]>0?TIMESTAMP-$_G[‘setting‘][‘losslessdel‘]*86400:0;
- //note从分表中得到所有的post列表
- $postlist=$uidarray=$tuidarray=$ruidarray=array();
- foreach($postidsas$posttableid=>$posttabletids){
- $query=DB::query(‘SELECTtid,first,authorid,dateline,replycredit,invisibleFROM‘.DB::table(getposttable($posttableid)).‘WHEREtidIN(‘.dimplode($posttabletids).‘)‘);
- while($post=DB::fetch($query)){
- if($post[‘invisible‘]!=-1&&$post[‘invisible‘]!=-5){
-  
【discuzX2】/source/function/function_delete.php数据清理函数集合分析
发布时间:2023-09-06 01:09责任编辑:苏小强关键词:暂无标签
知识推荐
- websocket之拨云见雾
- 简单的HTML标记
- 【复习笔记】HTML基础
- [转] .net软件反编译笔记
- PHP7 学习笔记(六)403 Forbidden - WAMP Server 2.5
- HTML5基础
- MVC4 中使用 Area 和 注意的地方
- 基于Quartz.NET 实现可中断的任务(转)
- 第一次使用vue.js
- XP系统下Chrome浏览器打开某些网站闪退的解决办法
- 阿里云PCDN新亮点 ?自动调用HTTPDNS 解决域名劫持困扰
- PHP中测试in_array、isset、array_key_exists性能
- Linux Shell编程实战---解析文本中的邮件地址和url
- [JSOI2008]星球大战starwar
- js--封装类名的dom操作
- web自动化10-selenium登录案例
- DWR第二篇之逆向Ajax
- Jmeter学习笔记8-性能测试实践_web程序