$hookparam, 'step' => 'check'), 'deletemember'); } if($delpost) { deleteattach($uids, 'uid'); deletepost($uids, 'authorid'); } $arruids = $uids; $uids = dimplode($uids); $numdeleted = count($arruids); foreach(array('common_member_field_forum', 'common_member_field_home', 'common_member_count', 'common_member_profile', 'common_member_status',) as $table) { C::t($table)->delete($arruids, true, 1); } foreach(array( 'common_member_log', 'common_member_verify', 'common_member_validate', 'common_member_magic') as $table) { C::t($table)->delete($arruids, true); } C::t('forum_access')->delete_by_uid($arruids); C::t('common_member_verify_info')->delete_by_uid($arruids); C::t('common_member_action_log')->delete_by_uid($arruids); C::t('forum_moderator')->delete_by_uid($arruids); C::t('forum_post_location')->delete_by_uid($arruids); $doids = array(); $query = C::t('home_doing')->fetch_all_by_uid_doid($arruids); foreach($query as $value) { $doids[$value['doid']] = $value['doid']; } C::t('home_docomment')->delete_by_doid_uid($doids, $arruids); C::t('common_domain')->delete_by_id_idtype($arruids, 'home'); C::t('home_feed')->delete_by_uid($arruids); C::t('home_notification')->delete_by_uid($arruids); C::t('home_poke')->delete_by_uid_or_fromuid($uids); C::t('home_comment')->delete_by_uid($arruids); C::t('home_visitor')->delete_by_uid_or_vuid($uids); C::t('home_friend')->delete_by_uid_fuid($arruids); C::t('home_friend_request')->delete_by_uid_or_fuid($arruids); C::t('common_invite')->delete_by_uid_or_fuid($arruids); C::t('common_myinvite')->delete_by_touid_or_fromuid($uids); C::t('common_moderate')->delete($arruids, 'uid_cid'); C::t('common_member_forum_buylog')->delete_by_uid($arruids); C::t('forum_threadhidelog')->delete_by_uid($arruids); C::t('common_member_crime')->delete_by_uid($arruids); foreach(C::t('forum_collectionfollow')->fetch_all_by_uid($arruids) as $follow) { C::t('forum_collection')->update_by_ctid($follow['ctid'], 0, -1); } foreach(C::t('forum_collectioncomment')->fetch_all_by_uid($arruids) as $comment) { C::t('forum_collection')->update_by_ctid($comment['ctid'], 0, 0, -1); } $query = C::t('home_pic')->fetch_all_by_uid($uids); foreach($query as $value) { $pics[] = $value; } deletepicfiles($pics); include_once libfile('function/home'); $query = C::t('home_album')->fetch_all_by_uid($arruids); foreach($query as $value) { pic_delete($value['pic'], 'album', 0, ($value['picflag'] == 2 ? 1 : 0)); } C::t('common_mailcron')->delete_by_touid($arruids); 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', 'forum_collectioncomment', 'forum_collectionfollow', 'forum_collectionteamworker') as $table) { C::t($table)->delete_by_uid($arruids); } C::t('common_member')->delete($arruids, 1, 1); manyoulog('user', $uids, 'delete'); if($_G['setting']['plugins']['func'][HOOKTYPE]['deletemember']) { hookscript('deletemember', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletemember'); } return $numdeleted; } function deletepost($ids, $idtype = 'pid', $credit = false, $posttableid = false, $recycle = false) { global $_G; $recycle = $recycle && $idtype == 'pid' ? true : false; if($_G['setting']['plugins']['func'][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'))) { return 0; } loadcache('posttableids'); $posttableids = !empty($_G['cache']['posttableids']) ? ($posttableid !== false && in_array($posttableid, $_G['cache']['posttableids']) ? array($posttableid) : $_G['cache']['posttableids']): array('0'); $count = count($ids); $idsstr = dimplode($ids); if($credit) { $tuidarray = $ruidarray = $_G['deleteauthorids'] = array(); foreach($posttableids as $id) { $postlist = array(); if($idtype == 'pid') { $postlist = C::t('forum_post')->fetch_all($id, $ids, false); } elseif($idtype == 'tid') { $postlist = C::t('forum_post')->fetch_all_by_tid($id, $ids, false); } elseif($idtype == 'authorid') { $postlist = C::t('forum_post')->fetch_all_by_authorid($id, $ids, false); } foreach($postlist as $post) { 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']] = $post['tid']; $_G['deleteauthorids'][$post['authorid']] = $post['authorid']; } } unset($postlist); } if($tuidarray || $ruidarray) { require_once libfile('function/post'); } if($tuidarray) { foreach($tuidarray as $fid => $tuids) { updatepostcredits('-', $tuids, 'post', $fid); } } if($ruidarray) { foreach($ruidarray as $fid => $ruids) { updatepostcredits('-', $ruids, 'reply', $fid); } } } foreach($posttableids as $id) { if($recycle) { C::t('forum_post')->update($id, $ids, array('invisible' => -5)); } else { if($idtype == 'pid') { C::t('forum_post')->delete($id, $ids); C::t('forum_postcomment')->delete_by_pid($ids); C::t('forum_postcomment')->delete_by_rpid($ids); } elseif($idtype == 'tid') { C::t('forum_post')->delete_by_tid($id, $ids); C::t('forum_postcomment')->delete_by_tid($ids); } elseif($idtype == 'authorid') { C::t('forum_post')->delete_by_authorid($id, $ids); C::t('forum_postcomment')->delete_by_authorid($ids); } C::t('forum_trade')->delete_by_id_idtype($ids, ($idtype == 'authorid' ? 'sellerid' : $idtype)); C::t('home_feed')->delete_by_id_idtype($ids, ($idtype == 'authorid' ? 'uid' : $idtype)); } } if(!$recycle && $idtype != 'authorid') { if($idtype == 'pid') { C::t('forum_poststick')->delete_by_pid($ids); } elseif($idtype == 'tid') { C::t('forum_poststick')->delete_by_tid($ids); } } if($idtype == 'pid') { C::t('forum_postcomment')->delete_by_rpid($ids); C::t('common_moderate')->delete($ids, 'pid'); C::t('forum_post_location')->delete($ids); C::t('forum_filter_post')->delete_by_pid($ids); C::t('forum_hotreply_number')->delete_by_pid($ids); C::t('forum_hotreply_member')->delete_by_pid($ids); } elseif($idtype == 'tid') { C::t('forum_post_location')->delete_by_tid($ids); C::t('forum_filter_post')->delete_by_tid($ids); C::t('forum_hotreply_number')->delete_by_tid($ids); C::t('forum_hotreply_member')->delete_by_tid($ids); C::t('forum_sofa')->delete($ids); } elseif($idtype == 'authorid') { C::t('forum_post_location')->delete_by_uid($ids); } if($replycredit_list) { foreach(C::t('forum_replycredit')->fetch_all($tids) as $rule) { $rule['extcreditstype'] = $rule['extcreditstype'] ? $rule['extcreditstype'] : $_G['setting']['creditstransextra'][10] ; $replycredity_rule[$rule['tid']] = $rule; } foreach($replycredit_list AS $uid => $tid_credit) { foreach($tid_credit AS $tid => $credit) { $uid_credit[$replycredity_rule[$tid]['extcreditstype']] -= $credit; } updatemembercount($uid, $uid_credit, true); } } if(!$recycle) { deleteattach($ids, $idtype); } if($tids) { foreach($tids as $tid) { updatethreadcount($tid, 1); } } if($_G['setting']['plugins']['func'][HOOKTYPE]['deletepost']) { hookscript('deletepost', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletepost'); } return $count; } function deletethreadcover($tids) { global $_G; loadcache(array('threadtableids', 'posttableids')); $threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array(0); $deletecover = array(); foreach($threadtableids as $tableid) { foreach(C::t('forum_thread')->fetch_all_by_tid($tids, 0, 0, $tableid) as $row) { if($row['cover']) { $deletecover[$row['tid']] = $row['cover']; } } } if($deletecover) { foreach($deletecover as $tid => $cover) { $filename = getthreadcover($tid, 0, 1); $remote = $cover < 0 ? 1 : 0; dunlink(array('attachment' => $filename, 'remote' => $remote, 'thumb' => 0)); } } } function deletethread($tids, $membercount = false, $credit = false, $ponly = false) { global $_G; if($_G['setting']['plugins']['func'][HOOKTYPE]['deletethread']) { $_G['deletethreadtids'] = & $tids; $hookparam = func_get_args(); hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'check'), 'deletethread'); } if(!$tids) { return 0; } $count = count($tids); $arrtids = $tids; $tids = dimplode($tids); 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); } C::t('common_moderate')->delete($arrtids, 'tid'); C::t('forum_threadclosed')->delete($arrtids); C::t('forum_newthread')->delete_by_tids($arrtids); $cachefids = $atids = $fids = $postids = $threadtables = $_G['deleteauthorids'] = array(); foreach($threadtableids as $tableid) { foreach(C::t('forum_thread')->fetch_all_by_tid($arrtids, 0, 0, $tableid) as $row) { $atids[] = $row['tid']; $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; } $cachefids[$row['fid']] = $row['fid']; $_G['deleteauthorids'][$row['authorid']] = $row['authorid']; } if(!$tableid && !$ponly) { $threadtables[] = $tableid; } } if($credit || $membercount) { $losslessdel = $_G['setting']['losslessdel'] > 0 ? TIMESTAMP - $_G['setting']['losslessdel'] * 86400 : 0; $postlist = $uidarray = $tuidarray = $ruidarray = array(); foreach($postids as $posttableid => $posttabletids) { foreach(C::t('forum_post')->fetch_all_by_tid($posttableid, $posttabletids, false) as $post) { if($post['invisible'] != -1 && $post['invisible'] != -5) { $postlist[] = $post; } } } foreach(C::t('forum_replycredit')->fetch_all($arrtids) as $rule) { $rule['extcreditstype'] = $rule['extcreditstype'] ? $rule['extcreditstype'] : $_G['setting']['creditstransextra'][10] ; $replycredit_rule[$rule['tid']] = $rule; } foreach($postlist as $post) { if($post['dateline'] < $losslessdel) { if($membercount) { if($post['first']) { updatemembercount($post['authorid'], array('threads' => -1, 'post' => -1), false); } else { updatemembercount($post['authorid'], array('posts' => -1), false); } } } else { if($credit) { if($post['first']) { $tuidarray[$post['fid']][] = $post['authorid']; } else { $ruidarray[$post['fid']][] = $post['authorid']; } } } if($credit || $membercount) { if($post['authorid'] > 0 && $post['replycredit'] > 0) { if($replycredit_rule[$post['tid']]['extcreditstype']) { updatemembercount($post['authorid'], array($replycredit_rule[$post['tid']]['extcreditstype'] => (int)('-'.$post['replycredit']))); } } } } if($credit) { if($tuidarray || $ruidarray) { require_once libfile('function/post'); } if($tuidarray) { foreach($tuidarray as $fid => $tuids) { updatepostcredits('-', $tuids, 'post', $fid); } } if($ruidarray) { foreach($ruidarray as $fid => $ruids) { updatepostcredits('-', $ruids, 'reply', $fid); } } $auidarray = $attachtables = array(); foreach($atids as $tid) { $attachtables[getattachtableid($tid)][] = $tid; } foreach($attachtables as $attachtable => $attachtids) { foreach(C::t('forum_attachment_n')->fetch_all_by_id($attachtable, 'tid', $attachtids) as $attach) { if($attach['dateline'] > $losslessdel) { $auidarray[$attach['uid']] = !empty($auidarray[$attach['uid']]) ? $auidarray[$attach['uid']] + 1 : 1; } } } if($auidarray) { $postattachcredits = !empty($_G['forum']['postattachcredits']) ? $_G['forum']['postattachcredits'] : $_G['setting']['creditspolicy']['postattach']; updateattachcredits('-', $auidarray, $postattachcredits); } } } $relatecollection = C::t('forum_collectionthread')->fetch_all_by_tids($arrtids); if(count($relatecollection) > 0) { $collectionids = array(); foreach($relatecollection as $collection) { $collectionids[] = $collection['ctid']; } $collectioninfo = C::t('forum_collection')->fetch_all($collectionids); foreach($relatecollection as $collection) { $decthread = C::t('forum_collectionthread')->delete_by_ctid_tid($collection['ctid'], $arrtids); $lastpost = null; if(in_array($collectioninfo[$collection['ctid']]['lastpost'], $arrtids) && ($collectioninfo[$collection['ctid']]['threadnum'] - $decthread) > 0) { $collection_thread = C::t('forum_collectionthread')->fetch_by_ctid_dateline($collection['ctid']); if($collection_thread) { $thread = C::t('forum_thread')->fetch($collection_thread['tid']); $lastpost = array( 'lastpost' => $thread['tid'], 'lastsubject' => $thread['subject'], 'lastposttime' => $thread['dateline'], 'lastposter' => $thread['authorid'] ); } } C::t('forum_collection')->update_by_ctid($collection['ctid'], -$decthread, 0, 0, 0, 0, 0, $lastpost); } C::t('forum_collectionrelated')->delete($arrtids); } if($cachefids) { C::t('forum_thread')->clear_cache($cachefids, 'forumdisplay_'); } if($ponly) { if($_G['setting']['plugins']['func'][HOOKTYPE]['deletethread']) { hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletethread'); } C::t('forum_thread')->update($arrtids, array('displayorder'=>-1, 'digest'=>0, 'moderated'=>1)); foreach($postids as $posttableid=>$oneposttids) { C::t('forum_post')->update_by_tid($posttableid, $oneposttids, array('invisible' => '-1')); } return $count; } C::t('forum_replycredit')->delete($arrtids); C::t('forum_post_location')->delete_by_tid($arrtids); C::t('common_credit_log')->delete_by_operation_relatedid(array('RCT', 'RCA', 'RCB'), $arrtids); C::t('forum_threadhidelog')->delete_by_tid($arrtids); deletethreadcover($arrtids); foreach($threadtables as $tableid) { C::t('forum_thread')->delete_by_tid($arrtids, false, $tableid); } if($atids) { foreach($postids as $posttableid=>$oneposttids) { deletepost($oneposttids, 'tid', false, $posttableid); } deleteattach($atids, 'tid'); } if($fids) { loadcache('forums'); foreach($fids as $fid => $tableids) { if(empty($_G['cache']['forums'][$fid]['archive'])) { continue; } foreach(C::t('forum_thread')->count_posts_by_fid($fid) as $row) { C::t('forum_forum_threadtable')->insert(array( 'fid' => $fid, 'threadtableid' => $tableid, 'threads' => $row['threads'], 'posts' => $row['posts'] ), false, true); } } } foreach(array('forum_forumrecommend', 'forum_polloption', 'forum_poll', 'forum_polloption_image', 'forum_activity', 'forum_activityapply', 'forum_debate', 'forum_debatepost', 'forum_threadmod', 'forum_relatedthread', 'forum_pollvoter', 'forum_threadimage', 'forum_threadpreview') as $table) { C::t($table)->delete_by_tid($arrtids); } C::t('forum_typeoptionvar')->delete_by_tid($arrtids); C::t('forum_poststick')->delete_by_tid($arrtids); C::t('forum_filter_post')->delete_by_tid($arrtids); C::t('forum_hotreply_member')->delete_by_tid($arrtids); C::t('forum_hotreply_number')->delete_by_tid($arrtids); C::t('home_feed')->delete_by_id_idtype($arrtids, 'tid'); C::t('common_tagitem')->delete(0, $arrtids, 'tid'); C::t('forum_threadrush')->delete($arrtids); if($_G['setting']['plugins']['func'][HOOKTYPE]['deletethread']) { hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletethread'); } return $count; } function deleteattach($ids, $idtype = 'aid') { global $_G; if(!$ids || !in_array($idtype, array('authorid', 'uid', 'tid', 'pid'))) { return; } $idtype = $idtype == 'authorid' ? 'uid' : $idtype; $pics = $attachtables = array(); if($idtype == 'tid') { $pollImags = C::t('forum_polloption_image')->fetch_all_by_tid($ids); foreach($pollImags as $image) { dunlink($image); } } foreach(C::t('forum_attachment')->fetch_all_by_id($idtype, $ids) as $attach) { $attachtables[$attach['tableid']][] = $attach['aid']; } foreach($attachtables as $attachtable => $aids) { if($attachtable == 127) { continue; } $attachs = C::t('forum_attachment_n')->fetch_all($attachtable, $aids); foreach($attachs as $attach) { if($attach['picid']) { $pics[] = $attach['picid']; } dunlink($attach); } C::t('forum_attachment_exif')->delete($aids); C::t('forum_attachment_n')->delete($attachtable, $aids); } C::t('forum_attachment')->delete_by_id($idtype, $ids); if($pics) { $albumids = array(); C::t('home_pic')->delete($pics); $query = C::t('home_pic')->fetch_all($pics); foreach($query as $album) { if(!in_array($album['albumid'], $albumids)) { C::t('home_album')->update($album['albumid'], array('picnum' => C::t('home_pic')->check_albumpic($album['albumid']))); $albumids[] = $album['albumid']; } } } } function deletecomments($cids) { global $_G; $blognums = $newcids = $dels = $counts = array(); $allowmanage = checkperm('managecomment'); $query = C::t('home_comment')->fetch_all($cids); $deltypes = array(); foreach($query as $value) { if($allowmanage || $value['authorid'] == $_G['uid'] || $value['uid'] == $_G['uid']) { $dels[] = $value; $newcids[] = $value['cid']; $deltypes[] = $value['idtype'].'_cid'; if($value['authorid'] != $_G['uid'] && $value['uid'] != $_G['uid']) { $counts[$value['authorid']]['coef'] -= 1; } if($value['idtype'] == 'blogid') { $blognums[$value['id']]++; } } } if(empty($dels)) return array(); C::t('home_comment')->delete($newcids); for($i = 0; $i < count($newcids); $i++) { C::t('common_moderate')->delete($newcids[$i], $deltypes[$i]); } if($counts) { foreach ($counts as $uid => $setarr) { batchupdatecredit('comment', $uid, array(), $setarr['coef']); } } if($blognums) { $nums = renum($blognums); foreach ($nums[0] as $num) { C::t('home_blog')->increase($nums[1][$num], 0, array('replynum' => -$num)); } } return $dels; } function deleteblogs($blogids, $force = false) { global $_G; $blogs = $newblogids = $counts = array(); $allowmanage = checkperm('manageblog'); $query = C::t('home_blog')->fetch_all($blogids); foreach($query as $value) { if($allowmanage || $value['uid'] == $_G['uid']) { $blogs[] = $value; $newblogids[] = $value['blogid']; if($value['status'] == 0) { if($value['uid'] != $_G['uid']) { $counts[$value['uid']]['coef'] -= 1; } $counts[$value['uid']]['blogs'] -= 1; } } } if(empty($blogs)) return array(); C::t('common_moderate')->delete($newblogids, 'blogid'); C::t('common_moderate')->delete($newblogids, 'blogid_cid'); if(getglobal('setting/blogrecyclebin') && !$force) { C::t('home_blog')->update($newblogids, array('status' => -1)); return $blogs; } C::t('home_blog')->delete($newblogids); C::t('home_blogfield')->delete($newblogids); C::t('home_comment')->delete('', $newblogids, 'blogid'); C::t('home_feed')->delete_by_id_idtype($newblogids, 'blogid'); C::t('home_clickuser')->delete_by_id_idtype($newblogids, 'blogid'); if($counts) { foreach ($counts as $uid => $setarr) { batchupdatecredit('publishblog', $uid, array('blogs' => $setarr['blogs']), $setarr['coef']); } } C::t('common_tagitem')->delete(0, $newblogids, 'blogid'); return $blogs; } function deletefeeds($feedids) { global $_G; $allowmanage = checkperm('managefeed'); $feeds = $newfeedids = array(); $query = C::t('home_feed')->fetch_all($feedids); foreach($query as $value) { if($allowmanage || $value['uid'] == $_G['uid']) { $newfeedids[] = $value['feedid']; $feeds[] = $value; } } if(empty($newfeedids)) return array(); C::t('home_feed')->delete($newfeedids); return $feeds; } function deleteshares($sids) { global $_G; $allowmanage = checkperm('manageshare'); $shares = $newsids = $counts = array(); foreach(C::t('home_share')->fetch_all($sids) as $value) { if($allowmanage || $value['uid'] == $_G['uid']) { $shares[] = $value; $newsids[] = $value['sid']; if($value['uid'] != $_G['uid']) { $counts[$value['uid']]['coef'] -= 1; } $counts[$value['uid']]['sharings'] -= 1; } } if(empty($shares)) return array(); C::t('home_share')->delete($newsids); C::t('home_comment')->delete('', $newsids, 'sid'); C::t('home_feed')->delete_by_id_idtype($newsids, 'sid'); C::t('common_moderate')->delete($newsids, 'sid'); C::t('common_moderate')->delete($newsids, 'sid_cid'); if($counts) { foreach ($counts as $uid => $setarr) { batchupdatecredit('createshare', $uid, array('sharings' => $setarr['sharings']), $setarr['coef']); } } return $shares; } function deletedoings($ids) { global $_G; $allowmanage = checkperm('managedoing'); $doings = $newdoids = $counts = array(); $query = C::t('home_doing')->fetch_all($ids); foreach($query as $value) { if($allowmanage || $value['uid'] == $_G['uid']) { $doings[] = $value; $newdoids[] = $value['doid']; if($value['uid'] != $_G['uid']) { $counts[$value['uid']]['coef'] -= 1; } $counts[$value['uid']]['doings'] -= 1; } } if(empty($doings)) return array(); C::t('home_doing')->delete($newdoids); C::t('home_docomment')->delete_by_doid_uid($newdoids); C::t('home_feed')->delete_by_id_idtype($newdoids, 'doid'); C::t('common_moderate')->delete($newdoids, 'doid'); if($counts) { foreach ($counts as $uid => $setarr) { if ($uid) { batchupdatecredit('doing', $uid, array('doings' => $setarr['doings']), $setarr['coef']); $lastdoing = C::t('home_doing')->fetch_all_by_uid_doid($uid, '', 'dateline', 0, 1, true, true); $setarr = array('recentnote'=>$lastdoing[0]['message'], 'spacenote'=>$lastdoing[0]['message']); C::t('common_member_field_home')->update($_G['uid'], $setarr); } } } return $doings; } function deletespace($uid) { global $_G; $allowmanage = checkperm('managedelspace'); if($allowmanage) { C::t('common_member')->update($uid, array('status' => 1)); manyoulog('user', $uid, 'delete'); return true; } else { return false; } } function deletepics($picids) { global $_G; $albumids = $sizes = $pics = $newids = array(); $allowmanage = checkperm('managealbum'); $haveforumpic = false; $query = C::t('home_pic')->fetch_all($picids); foreach($query as $value) { if($allowmanage || $value['uid'] == $_G['uid']) { $pics[] = $value; $newids[] = $value['picid']; $sizes[$value['uid']] = $sizes[$value['uid']] + $value['size']; $albumids[$value['albumid']] = $value['albumid']; if(!$haveforumpic && $value['remote'] > 1) { $haveforumpic = true; } } } if(empty($pics)) return array(); C::t('home_pic')->delete($newids); if($haveforumpic) { for($i = 0;$i < 10;$i++) { C::t('forum_attachment_n')->reset_picid($i, $newids); } } C::t('home_comment')->delete('', $newids, 'picid'); C::t('home_feed')->delete_by_id_idtype($newids, 'picid'); C::t('home_clickuser')->delete_by_id_idtype($newids, 'picid'); C::t('common_moderate')->delete($newids, 'picid'); C::t('common_moderate')->delete($newids, 'picid_cid'); if($sizes) { foreach ($sizes as $uid => $setarr) { $attachsize = intval($sizes[$uid]); updatemembercount($uid, array('attachsize' => -$attachsize), false); } } require_once libfile('function/spacecp'); foreach ($albumids as $albumid) { if($albumid) { album_update_pic($albumid); } } deletepicfiles($pics); return $pics; } function deletepicfiles($pics) { global $_G; $remotes = array(); include_once libfile('function/home'); foreach ($pics as $pic) { pic_delete($pic['filepath'], 'album', $pic['thumb'], $pic['remote']); } } function deletealbums($albumids) { global $_G; $sizes = $dels = $newids = $counts = array(); $allowmanage = checkperm('managealbum'); $albums = C::t('home_album')->fetch_all($albumids); foreach($albums as $value) { if($value['albumid']) { if($allowmanage || $value['uid'] == $_G['uid']) { $dels[] = $value; $newids[] = $value['albumid']; if(!empty($value['pic'])) { include_once libfile('function/home'); pic_delete($value['pic'], 'album', 0, ($value['picflag'] == 2 ? 1 : 0)); } } $counts[$value['uid']]['albums'] -= 1; } } if(empty($dels)) return array(); $pics = $picids = array(); $query = C::t('home_pic')->fetch_all_by_albumid($newids); foreach($query as $value) { $pics[] = $value; $picids[] = $value['picid']; $sizes[$value['uid']] = $sizes[$value['uid']] + $value['size']; } if($picids) { deletepics($picids); } C::t('home_album')->delete($newids); C::t('home_feed')->delete_by_id_idtype($newids, 'albumid'); if($picids) { C::t('home_clickuser')->delete_by_id_idtype($picids, 'picid'); } if($sizes) { foreach ($sizes as $uid => $value) { $attachsize = intval($sizes[$uid]); $albumnum = $counts[$uid]['albums'] ? $counts[$uid]['albums'] : 0; updatemembercount($uid, array('albums' => $albumnum, 'attachsize' => -$attachsize), false); } } return $dels; } function deletetrasharticle($aids) { global $_G; require_once libfile('function/home'); $articles = $trashid = $pushs = $dels = array(); foreach(C::t('portal_article_trash')->fetch_all($aids) as $value) { $dels[$value['aid']] = $value['aid']; $article = dunserialize($value['content']); $articles[$article['aid']] = $article; if(!empty($article['idtype'])) $pushs[$article['idtype']][] = $article['id']; if($article['pic']) { pic_delete($article['pic'], 'portal', $article['thumb'], $article['remote']); } if($article['htmlmade'] && $article['htmldir'] && $article['htmlname']) { deletehtml(DISCUZ_ROOT.'/'.$article['htmldir'].$article['htmlname'], $article['contents']); } } if($dels) { C::t('portal_article_trash')->delete($dels, 'UNBUFFERED'); deletearticlepush($pushs); deletearticlerelated($dels); } return $articles; } function deletearticle($aids, $istrash = true) { global $_G; if(empty($aids)) return false; $trasharr = $article = $bids = $dels = $attachment = $attachaid = $catids = $pushs = array(); $query = C::t('portal_article_title')->fetch_all($aids); foreach($query as $value) { $catids[] = intval($value['catid']); $dels[$value['aid']] = $value['aid']; $article[] = $value; if(!empty($value['idtype'])) $pushs[$value['idtype']][] = $value['id']; } if($dels) { foreach($article as $key => $value) { if($istrash) { $trasharr[] = array('aid' => $value['aid'], 'content'=>serialize($value)); } elseif($value['pic']) { pic_delete($value['pic'], 'portal', $value['thumb'], $value['remote']); $attachaid[] = $value['aid']; if($value['madehtml'] && $value['htmldir'] && $value['htmlname']) { deletehtml(DISCUZ_ROOT.'/'.$value['htmldir'].$value['htmlname'], $value['contents']); } } } if($istrash && $trasharr) { C::t('portal_article_trash')->insert_batch($trasharr); } else { deletearticlepush($pushs); deletearticlerelated($dels); } C::t('portal_article_title')->delete($dels); C::t('common_moderate')->delete($dels, 'aid'); $catids = array_unique($catids); if($catids) { foreach($catids as $catid) { $cnt = C::t('portal_article_title')->fetch_count_for_cat($catid); C::t('portal_category')->update($catid, array('articles'=>dintval($cnt))); } } } return $article; } function deletearticlepush($pushs) { if(!empty($pushs) && is_array($pushs)) { foreach($pushs as $idtype=> $fromids) { switch ($idtype) { case 'blogid': if(!empty($fromids)) C::t('home_blogfield')->update($fromids, array('pushedaid'=>'0')); break; case 'tid': if(!empty($fromids)) C::t('forum_thread')->update($fromids, array('pushedaid'=>'0')); break; } } } } function deletearticlerelated($dels) { C::t('portal_article_count')->delete($dels); C::t('portal_article_content')->delete_by_aid($dels); if($attachment = C::t('portal_attachment')->fetch_all_by_aid($dels)) { require_once libfile('function/home'); foreach ($attachment as $value) { pic_delete($value['attachment'], 'portal', $value['thumb'], $value['remote']); } C::t('portal_attachment')->delete(array_keys($attachment)); } C::t('portal_comment')->delete_by_id_idtype($dels, 'aid'); C::t('common_moderate')->delete($dels, 'aid_cid'); C::t('portal_article_related')->delete_by_aid_raid($dels); } function deleteportaltopic($dels) { if(empty($dels)) return false; $targettplname = array(); foreach ((array)$dels as $key => $value) { $targettplname[] = 'portal/portal_topic_content_'.$value; } C::t('common_diy_data')->delete($targettplname, null); require_once libfile('class/blockpermission'); $tplpermission = & template_permission::instance(); $templates = array(); $tplpermission->delete_allperm_by_tplname($targettplname); deletedomain($dels, 'topic'); C::t('common_template_block')->delete_by_targettplname($targettplname); require_once libfile('function/home'); $picids = array(); foreach(C::t('portal_topic')->fetch_all($dels) as $value) { if($value['picflag'] != '0') pic_delete(str_replace('portal/', '', $value['cover']), 'portal', 0, $value['picflag'] == '2' ? '1' : '0'); } $picids = array(); foreach(C::t('portal_topic_pic')->fetch_all($dels) as $value) { $picids[] = $value['picid']; pic_delete($value['filepath'], 'portal', $value['thumb'], $value['remote']); } if (!empty($picids)) { C::t('portal_topic_pic')->delete($picids, true); } C::t('portal_topic')->delete($dels); C::t('portal_comment')->delete_by_id_idtype($dels, 'topicid'); C::t('common_moderate')->delete($dels, 'topicid_cid'); include_once libfile('function/block'); block_clear(); include_once libfile('function/cache'); updatecache('diytemplatename'); } function deletedomain($ids, $idtype) { if($ids && $idtype) { C::t('common_domain')->delete_by_id_idtype($ids, $idtype); } } function deletecollection($ctid) { $tids = array(); $threadlist = C::t('forum_collectionthread')->fetch_all_by_ctid($ctid); $tids = array_keys($threadlist); deleterelatedtid($tids, $ctid); $collectionteamworker = C::t('forum_collectionteamworker')->fetch_all_by_ctid($ctid); foreach ($collectionteamworker as $worker) { notification_add($worker['uid'], "system", 'collection_removed', array('ctid'=>$collectiondata['ctid'], 'collectionname'=>$collectiondata['name']), 1); } C::t('forum_collectionthread')->delete_by_ctid($ctid); C::t('forum_collectionfollow')->delete_by_ctid($ctid); C::t('forum_collectioncomment')->delete_by_ctid($ctid); C::t('forum_collectionteamworker')->delete_by_ctid($ctid); C::t('forum_collectioninvite')->delete_by_ctid($ctid); C::t('forum_collection')->delete($ctid, true); } function deleterelatedtid($tids, $ctid) { $loadreleated = C::t('forum_collectionrelated')->fetch_all($tids, true); foreach($loadreleated as $loadexist) { if($loadexist['tid']) { $collectionlist = explode("\t", $loadexist['collection']); if(count($collectionlist)>0) { foreach ($collectionlist as $collectionkey=>$collectionvalue) { if ($collectionvalue == $ctid) { unset($collectionlist[$collectionkey]); break; } } } $newcollection = implode("\t", $collectionlist); if (trim($newcollection) == '') { C::t('forum_collectionrelated')->delete($loadexist['tid']); C::t('forum_thread')->update_status_by_tid($loadexist['tid'], '1111111011111111', '&'); } else { C::t('forum_collectionrelated')->update_collection_by_ctid_tid($newcollection, $loadexist['tid'], true); } } } } function deletehtml($htmlname, $count = 1) { global $_G; @unlink($htmlname.'.'.$_G['setting']['makehtml']['extendname']); if($count > 1) { for($i = 2; $i <= $count; $i++) { @unlink($htmlname.$i.'.'.$_G['setting']['makehtml']['extendname']); } } } function deletememberpost($uids) { global $_G; require_once libfile('function/post'); loadcache('posttableids'); foreach($uids as $uid) { $tidsdelete = array(); $posttables = empty($_G['cache']['posttableids']) ? array(0) : $_G['cache']['posttableids']; foreach($posttables as $posttableid) { $pidsthread = $pidsdelete = array(); $postlist = C::t('forum_post')->fetch_all_by_authorid($posttableid, $uid, false); if($postlist) { foreach($postlist as $post) { if($post['first']) { $tidsdelete[] = $post['tid']; } $pidsdelete[] = $post['pid']; $pidsthread[$post['pid']] = $post['tid']; } } deletepost($pidsdelete, 'pid', true, $posttableid, true); } unset($postlist); if($tidsdelete) { deletethread($tidsdelete, true, true, true); } } } ?>