首页
站长论坛BBS
救助
投稿
discuz视频教程
discuz技术支持
版块
登录
快速注册

function_delete.php数据清理函数集合分析

ARCHY 2015-6-14 [Discuz开发] 来自PC 复制链接
14613
discuz使用视频教程
31idc

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
discuz X3/source/function/function_delete.php数据清理函数集合分析

  1. <?php
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. require_once libfile('function/home');

  6. /**
  7. * 删除用户
  8. * @param string $uids 待删的 ID 数组
  9. * @param boolean $delpost 是否包含帖子信息
  10. */
  11. function deletemember($uids, $delpost = true) {
  12.         if(!$uids) {
  13.                 return;
  14.         }
  15.         // 腾讯安全
  16.         require_once libfile('function/sec');
  17.         updateMemberOperate($uids, 2);

  18.         if($delpost) {
  19.                 deleteattach($uids, 'uid');
  20.                 deletepost($uids, 'authorid');
  21.         }
  22.         require_once libfile('function/forum');
  23.         foreach($uids as $uid) {
  24.                 my_thread_log('deluser', array('uid' => $uid));
  25.         }

  26.         $uids = dimplode($uids);
  27.         $numdeleted = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_member')." WHERE uid IN ($uids)");
  28.         foreach(array('common_member_field_forum', 'common_member_field_home', 'common_member_count', 'common_member_log', 'common_member_profile',
  29.                 'common_member_verify', 'common_member_verify_info', 'common_member_status', 'common_member_validate', 'common_member_magic',
  30.                 'forum_access', 'forum_moderator', 'common_member_action_log') as $table) {
  31.                 DB::delete($table, "uid IN ($uids)");
  32.         }

  33.         $doids = array();
  34.         $query = DB::query("SELECT * FROM ".DB::table('home_doing')." WHERE uid IN ($uids)");
  35.         while($value = DB::fetch($query)) {
  36.                 $doids[$value['doid']] = $value['doid'];
  37.         }
  38.         $delsql = !empty($doids) ? "doid IN (".dimplode($doids).") OR " : "";

  39.         DB::delete('home_docomment', "$delsql uid IN ($uids)");
  40.         DB::delete('common_domain', "id IN ($uids) AND idtype='home'");
  41.         DB::delete('home_feed', "uid IN ($uids) OR (id IN ($uids) AND idtype='uid')");
  42.         DB::delete('home_notification', "uid IN ($uids) OR authorid IN ($uids)");
  43.         DB::delete('home_poke', "uid IN ($uids) OR fromuid IN ($uids)");
  44.         DB::delete('home_comment', "(uid IN ($uids) OR authorid IN ($uids) OR (id IN ($uids) AND idtype='uid'))");
  45.         DB::delete('home_visitor', "uid IN ($uids) OR vuid IN ($uids)");
  46.         DB::delete('home_friend', "uid IN ($uids) OR fuid IN ($uids)");
  47.         DB::delete('home_friend_request', "uid IN ($uids) OR fuid IN ($uids)");
  48.         DB::delete('common_invite', "uid IN ($uids) OR fuid IN ($uids)");
  49.         DB::delete('common_myinvite', "touid IN ($uids) OR fromuid IN ($uids)");
  50.         DB::delete('common_moderate', "id IN (".$uids.") AND idtype='uid_cid'");

  51.         //note 删除相册图片
  52.         $query = DB::query("SELECT filepath, thumb, remote FROM ".DB::table('home_pic')." WHERE uid IN ($uids)");
  53.         while($value = DB::fetch($query)) {
  54.                 $pics[] = $value;
  55.         }
  56.         deletepicfiles($pics);

  57.         //note 删除相册封面图片
  58.         include_once libfile('function/home');
  59.         $query = DB::query("SELECT * FROM ".DB::table('home_album')." WHERE uid IN ($uids)");
  60.         while($value = DB::fetch($query)) {
  61.                 pic_delete($value['pic'], 'album', 0, ($value['picflag'] == 2 ? 1 : 0));
  62.         }

  63.         DB::query("DELETE FROM ".DB::table('common_mailcron').", ".DB::table('common_mailqueue')." USING ".DB::table('common_mailcron').", ".DB::table('common_mailqueue')." WHERE ".DB::table('common_mailcron').".touid IN ($uids) AND ".DB::table('common_mailcron').".cid=".DB::table('common_mailqueue').".cid", 'UNBUFFERED');

  64.         foreach(array('home_doing', 'home_share', 'home_album', 'common_credit_rule_log', 'common_credit_rule_log_field',
  65.                 'home_pic', 'home_blog', 'home_blogfield', 'home_class', 'home_clickuser',
  66.                 'home_userapp', 'home_userappfield', 'home_show', 'common_member') as $table) {
  67.                 DB::delete($table, "uid IN ($uids)");
  68.         }

  69.         manyoulog('user', $uids, 'delete');
  70.         return $numdeleted;
  71. }

  72. /**
  73. * 删除帖子
  74. * @param array $ids 待删的 ID 数组
  75. * @param string $idtype authorid/tid/pid
  76. * @param boolean $credit 是否处理积分
  77. * @param int $posttableid post分表ID
  78. */
  79. function deletepost($ids, $idtype = 'pid', $credit = false, $posttableid = false, $recycle = false) {
  80.         global $_G;
  81.         $recycle = $recycle && $idtype == 'pid' ? true : false;
  82.         if($_G['setting']['plugins'][HOOKTYPE.'_deletepost']) {
  83.                 $_G['deletepostids'] = & $ids;
  84.                 $hookparam = func_get_args();
  85.                 hookscript('deletepost', 'global', 'funcs', array('param' => $hookparam, 'step' => 'check'), 'deletepost');
  86.         }
  87.         if(!$ids || !in_array($idtype, array('authorid', 'tid', 'pid'))) {
  88.                 return 0;
  89.         }

  90.         //note post分表缓存
  91.         loadcache('posttableids');
  92.         $posttableids = !empty($_G['cache']['posttableids']) ? ($posttableid !== false && in_array($posttableid, $_G['cache']['posttableids']) ? array($posttableid) : $_G['cache']['posttableids']): array('0');

  93.         if($idtype == 'pid') {
  94.                 require_once libfile('function/forum');
  95.                 foreach($ids as $pid) {
  96.                         my_post_log('delete', array('pid' => $pid));
  97.                 }
  98.         }
  99.         $count = count($ids);
  100.         $idsstr = dimplode($ids);

  101.         //处理积分
  102.         if($credit) {
  103.                 $tuidarray = $ruidarray = array();
  104.                 foreach($posttableids as $id) {
  105.                         $query = DB::query('SELECT tid, pid, first, authorid, replycredit, invisible FROM '.DB::table(getposttable($id))." WHERE $idtype IN ($idsstr)");
  106.                         while($post = DB::fetch($query)) {
  107.                                 if($post['invisible'] != -1 && $post['invisible'] != -5) {
  108.                                         if($post['first']) {
  109.                                                 $tuidarray[$post['fid']][] = $post['authorid'];
  110.                                         } else {
  111.                                                 $ruidarray[$post['fid']][] = $post['authorid'];
  112.                                                 if($post['authorid'] > 0 && $post['replycredit'] > 0) {
  113.                                                         $replycredit_list[$post['authorid']][$post['tid']] += $post['replycredit'];
  114.                                                 }
  115.                                         }
  116.                                         $tids[] = $post['tid'];
  117.                                 }
  118.                         }
  119.                 }

  120.                 if($tuidarray || $ruidarray) {
  121.                         require_once libfile('function/post');
  122.                 }
  123.                 //处理发贴的积分
  124.                 if($tuidarray) {
  125.                         foreach($tuidarray as $fid => $tuids) {
  126.                                 updatepostcredits('-', $tuids, 'post', $fid);
  127.                         }
  128.                 }
  129.                 //处理回帖的积分
  130.                 if($ruidarray) {
  131.                         foreach($ruidarray as $fid => $ruids) {
  132.                                 updatepostcredits('-', $ruids, 'reply', $fid);
  133.                         }
  134.                 }
  135.         }

  136.         foreach($posttableids as $id) {
  137.                 if($recycle) {
  138.                         DB::query("UPDATE ".DB::table(getposttable($id))." SET invisible='-5' WHERE pid IN ($idsstr)");
  139.                 } else {
  140.                         foreach(array(getposttable($id), 'forum_postcomment') as $table) {
  141.                                 DB::delete($table, "$idtype IN ($idsstr)");
  142.                         }
  143.                         DB::delete('forum_trade', ($idtype == 'authorid' ? 'sellerid' : $idtype)." IN ($idsstr)");
  144.                         DB::delete('home_feed', "id IN ($idsstr) AND idtype='".($idtype == 'authorid' ? 'uid' : $idtype)."'");
  145.                 }
  146.         }
  147.         if(!$recycle && $idtype != 'authorid') {
  148.                 foreach(array('forum_postposition', 'forum_poststick') as $table) {
  149.                         DB::delete($table, "$idtype IN ($idsstr)");
  150.                 }
  151.         }
  152.         if($idtype == 'pid') {
  153.                 DB::delete('forum_postcomment', "rpid IN ($idsstr)");
  154.                 DB::delete('common_moderate', "id IN ($idsstr) AND idtype='pid'");
  155.         }
  156.         if($replycredit_list) {
  157.                 $query = DB::query("SELECT tid, extcreditstype FROM ".DB::table('forum_replycredit')." WHERE tid IN (".dimplode($tids).")");
  158.                 while($rule = DB::fetch($query)) {
  159.                         $rule['extcreditstype'] = $rule['extcreditstype'] ? $rule['extcreditstype'] : $_G['setting']['creditstransextra'][10] ;
  160.                         $replycredity_rule[$rule['tid']] = $rule;
  161.                 }
  162.                 foreach($replycredit_list AS $uid => $tid_credit) {
  163.                         foreach($tid_credit AS $tid => $credit) {
  164.                                 $uid_credit[$replycredity_rule[$tid]['extcreditstype']] -= $credit;
  165.                         }
  166.                         updatemembercount($uid, $uid_credit, true);
  167.                 }
  168.         }
  169.         if(!$recycle) {
  170.                 deleteattach($ids, $idtype);
  171.         }
  172.         if($_G['setting']['plugins'][HOOKTYPE.'_deletepost']) {
  173.                 hookscript('deletepost', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletepost');
  174.         }
  175.         return $count;
  176. }

  177. function deletethreadcover($tids) {
  178.         global $_G;
  179.         loadcache(array('threadtableids', 'posttableids'));
  180.         $threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array(0);
  181.         $deletecover = array();
  182.         foreach($threadtableids as $tableid) {
  183.                 if(!$tableid) {
  184.                         $threadtable = "forum_thread";
  185.                 } else {
  186.                         $threadtable = "forum_thread_$tableid";
  187.                 }
  188.                 $query = DB::query("SELECT cover, tid FROM ".DB::table($threadtable)." WHERE tid IN ($tids)");
  189.                 while($row = DB::fetch($query)) {
  190.                         if($row['cover']) {
  191.                                 $deletecover[$row['tid']] = $row['cover'];
  192.                         }
  193.                 }
  194.         }
  195.         if($deletecover) {
  196.                 foreach($deletecover as $tid => $cover) {
  197.                         $filename = getthreadcover($tid, 0, 1);
  198.                         $remote = $cover < 0 ? 1 : 0;
  199.                         dunlink(array('attachment' => $filename, 'remote' => $remote, 'thumb' => 0));
  200.                 }
  201.         }
  202. }

  203. /**
  204. * 删除主题
  205. * @param array $ids 待删的 ID 数组
  206. * @param boolean $membercount 是否更新用户帖数统计
  207. * @param boolean $credit 是否处理积分
  208. * @param boolean $ponly 是否只处理分表、入回收站时使用
  209. */
  210. function deletethread($tids, $membercount = false, $credit = false, $ponly = false) {
  211.         global $_G;
  212.         if($_G['setting']['plugins'][HOOKTYPE.'_deletethread']) {
  213.                 $_G['deletethreadtids'] = & $tids;
  214.                 $hookparam = func_get_args();
  215.                 hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'check'), 'deletethread');
  216.         }
  217.         if(!$tids) {
  218.                 return 0;
  219.         }
  220.         require_once libfile('function/forum');
  221.         foreach($tids as $tid) {
  222.                 my_post_log('delete', array('tid' => $tid));
  223.         }
  224.         $count = count($tids);
  225.         $tids = dimplode($tids);

  226.         //note 主题分表缓存
  227.         loadcache(array('threadtableids', 'posttableids'));
  228.         $threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array();
  229.         $posttableids = !empty($_G['cache']['posttableids']) ? $_G['cache']['posttableids'] : array('0');
  230.         //补充主题主表
  231.         if(!in_array(0, $threadtableids)) {
  232.                 $threadtableids = array_merge(array(0), $threadtableids);
  233.         }

  234.         DB::delete('common_moderate', "id IN ($tids) AND idtype='tid'");

  235.         //note 收集待删的tid、fid、posttableid、threadtables
  236.         $atids = $fids = $postids = $threadtables = array();
  237.         foreach($threadtableids as $tableid) {
  238.                 $threadtable = !$tableid ? "forum_thread" : "forum_thread_$tableid";
  239.                 //note 收集待删的tid、fid、posttableid
  240.                 $query = DB::query("SELECT cover, tid, fid, posttableid FROM ".DB::table($threadtable)." WHERE tid IN ($tids)");
  241.                 while($row = DB::fetch($query)) {
  242.                         $atids[] = $row['tid'];
  243.                         //note 整理出回帖分表
  244.                         $row['posttableid'] = !empty($row['posttableid']) && in_array($row['posttableid'], $posttableids) ? $row['posttableid'] : '0';
  245.                         $postids[$row['posttableid']][$row['tid']] = $row['tid'];
  246.                         if($tableid) {
  247.                                 $fids[$row['fid']][] = $tableid;
  248.                         }
  249.                 }
  250.                 if(!$tableid && !$ponly) {
  251.                         $threadtables[] = $threadtable;
  252.                 }
  253.         }

  254.         //更新主题、帖子的积分或用户统计
  255.         if($credit || $membercount) {
  256.                 $losslessdel = $_G['setting']['losslessdel'] > 0 ? TIMESTAMP - $_G['setting']['losslessdel'] * 86400 : 0;

  257.                 //note 从分表中得到所有的post列表
  258.                 $postlist = $uidarray = $tuidarray = $ruidarray = array();
  259.                 foreach($postids as $posttableid => $posttabletids) {
  260.                         $query = DB::query('SELECT tid, first, authorid, dateline, replycredit, invisible FROM '.DB::table(getposttable($posttableid)).' WHERE tid IN ('.dimplode($posttabletids).')');
  261.                         while($post = DB::fetch($query)) {
  262.                                 if($post['invisible'] != -1 && $post['invisible'] != -5) {
  263.                                         $postlist[] = $post;
  264.                                 }
  265.                         }
  266.                 }
  267.                 $query = DB::query("SELECT tid, extcreditstype FROM ".DB::table('forum_replycredit')." WHERE tid IN ($tids)");
  268.                 while($rule = DB::fetch($query)) {
  269.                         $rule['extcreditstype'] = $rule['extcreditstype'] ? $rule['extcreditstype'] : $_G['setting']['creditstransextra'][10] ;
  270.                         $replycredit_rule[$rule['tid']] = $rule;
  271.                 }

  272.                 //note 处理post
  273.                 foreach($postlist as $post) {
  274.                         if($post['dateline'] < $losslessdel) {
  275.                                 if($membercount) {
  276.                                         if($post['first']) {
  277.                                                 updatemembercount($post['authorid'], array('threads' => -1, 'post' => -1), false);
  278.                                         } else {
  279.                                                 updatemembercount($post['authorid'], array('posts' => -1), false);
  280.                                         }
  281.                                 }
  282.                         } else {
  283.                                 if($credit) {
  284.                                         if($post['first']) {
  285.                                                 $tuidarray[$post['fid']][] = $post['authorid'];
  286.                                         } else {
  287.                                                 $ruidarray[$post['fid']][] = $post['authorid'];
  288.                                         }
  289.                                 }
  290.                         }
  291.                         if($credit || $membercount) {
  292.                                 if($post['authorid'] > 0 && $post['replycredit'] > 0) {
  293.                                         if($replycredit_rule[$post['tid']]['extcreditstype']) {
  294.                                                 updatemembercount($post['authorid'], array($replycredit_rule[$post['tid']]['extcreditstype'] => (int)('-'.$post['replycredit'])));
  295.                                         }
  296.                                 }
  297.                         }
  298.                 }

  299.                 if($credit) {
  300.                         if($tuidarray || $ruidarray) {
  301.                                 require_once libfile('function/post');
  302.                         }
  303.                         if($tuidarray) {
  304.                                 foreach($tuidarray as $fid => $tuids) {
  305.                                         updatepostcredits('-', $tuids, 'post', $fid);
  306.                                 }
  307.                         }
  308.                         if($ruidarray) {
  309.                                 foreach($ruidarray as $fid => $ruids) {
  310.                                         updatepostcredits('-', $ruids, 'reply', $fid);
  311.                                 }
  312.                         }
  313.                         //note 处理附件积分
  314.                         $auidarray = $attachtables = array();
  315.                         foreach($atids as $tid) {
  316.                                 $attachtables[getattachtablebytid($tid)][] = $tid;
  317.                         }
  318.                         foreach($attachtables as $attachtable => $attachtids) {
  319.                                 $query = DB::query("SELECT uid, dateline FROM ".DB::table($attachtable)." WHERE tid IN (".dimplode($attachtids).")");
  320.                                 while($attach = DB::fetch($query)) {
  321.                                         if($attach['dateline'] > $losslessdel) {
  322.                                                 $auidarray[$attach['uid']] = !empty($auidarray[$attach['uid']]) ? $auidarray[$attach['uid']] + 1 : 1;
  323.                                         }
  324.                                 }
  325.                         }
  326.                         if($auidarray) {
  327.                                 $postattachcredits = !empty($_G['forum']['postattachcredits']) ? $_G['forum']['postattachcredits'] : $_G['setting']['creditspolicy']['postattach'];
  328.                                 updateattachcredits('-', $auidarray, $postattachcredits);
  329.                         }
  330.                 }
  331.         }

  332.         if($ponly) {
  333.                 if($_G['setting']['plugins'][HOOKTYPE.'_deletethread']) {
  334.                         hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletethread');
  335.                 }
  336.                 DB::query("UPDATE ".DB::table('forum_thread')." SET displayorder='-1', digest='0', moderated='1' WHERE tid IN ($tids)");
  337.                 foreach($postids as $posttableid=>$oneposttids) {
  338.                         updatepost(array('invisible' => '-1'), "tid IN ($tids)");
  339.                 }
  340.                 return $count;
  341.         }

  342.         //note 回帖奖励积分清理
  343.         DB::delete('forum_replycredit', "tid IN ($tids)");
  344.         DB::delete('common_credit_log', "operation IN ('RCT', 'RCA', 'RCB') AND relatedid IN ($tids)");

  345.         deletethreadcover($tids);
  346.         //note 删除主题
  347.         foreach($threadtables as $threadtable) {
  348.                 DB::delete($threadtable, "tid IN ($tids)");
  349.         }

  350.         //删除帖子、附件
  351.         if($atids) {
  352.                 foreach($postids as $posttableid=>$oneposttids) {
  353.                         deletepost($oneposttids, 'tid', false, $posttableid);
  354.                 }
  355.                 deleteattach($atids, 'tid');
  356.         }
  357.         //note 更新分表主题帖子数
  358.         if($fids) {
  359.                 foreach($fids as $fid => $tableids) {
  360.                         $tableids = array_unique($tableids);
  361.                         foreach($tableids as $tableid) {
  362.                                 $query = DB::query("SELECT COUNT(*) AS threads, SUM(replies)+COUNT(*) AS posts FROM ".DB::table("forum_thread_$tableid")." WHERE fid='$fid'");
  363.                                 while($row = DB::fetch($query)) {
  364.                                         DB::insert('forum_forum_threadtable', array('fid' => $fid, 'threadtableid' => $tableid, 'threads' => intval($row['threads']), 'posts' => intval($row['posts'])), false, true);
  365.                                 }
  366.                         }
  367.                 }
  368.         }

  369.         //note 处理附属表 新增主题相关表的时候要在这里添加
  370.         foreach(array('forum_forumrecommend', 'forum_polloption', 'forum_poll', 'forum_activity', 'forum_activityapply', 'forum_debate',
  371.                 'forum_debatepost', 'forum_threadmod', 'forum_relatedthread', 'forum_typeoptionvar',
  372.                 'forum_postposition', 'forum_poststick', 'forum_pollvoter', 'forum_threadimage') as $table) {
  373.                 DB::delete($table, "tid IN ($tids)");
  374.         }
  375.         DB::query("DELETE FROM ".DB::table('home_feed')." WHERE id IN ($tids) AND idtype='tid'", 'UNBUFFERED');
  376.         DB::query("DELETE FROM ".DB::table('common_tagitem')." WHERE idtype='tid' AND itemid IN ($tids)", 'UNBUFFERED');
  377.         DB::query("DELETE FROM ".DB::table('forum_threadrush')." WHERE tid IN ($tids)", 'UNBUFFERED');
  378.         if($_G['setting']['plugins'][HOOKTYPE.'_deletethread']) {
  379.                 hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletethread');
  380.         }
  381.         return $count;
  382. }

  383. /**
  384. * 删除论坛附件
  385. * @param type $ids 待删的 ID 数组
  386. * @param type $idtype uid/authorid/tid/pid
  387. */
  388. function deleteattach($ids, $idtype = 'aid') {
  389.         global $_G;
  390.         if(!$ids || !in_array($idtype, array('authorid', 'uid', 'tid', 'pid'))) {
  391.                 return;
  392.         }
  393.         $idtype = $idtype == 'authorid' ? 'uid' : $idtype;
  394.         $ids = dimplode($ids);

  395.         $pics = $attachtables = array();
  396.         $query = DB::query("SELECT aid, tableid FROM ".DB::table('forum_attachment')." WHERE $idtype IN ($ids) AND pid>0");
  397.         while($attach = DB::fetch($query)) {
  398.                 $attachtables[$attach['tableid']][] = $attach['aid'];
  399.         }

  400.         foreach($attachtables as $attachtable => $aids) {
  401.                 if($attachtable == 127) {
  402.                         continue;
  403.                 }
  404.                 $attachtable = 'forum_attachment_'.$attachtable;
  405.                 $aids = dimplode($aids);
  406.                 $query = DB::query("SELECT attachment, thumb, remote, aid, picid FROM ".DB::table($attachtable)." WHERE aid IN ($aids) AND pid>0");
  407.                 while($attach = DB::fetch($query)) {
  408.                         if($attach['picid']) {
  409.                                 $pics[] = $attach['picid'];
  410.                         }
  411.                         dunlink($attach);
  412.                 }
  413.                 DB::delete($attachtable, "aid IN ($aids) AND pid>0");
  414.         }
  415.         DB::delete('forum_attachment', "$idtype IN ($ids) AND pid>0");
  416.         if($pics) {
  417.                 $albumids = array();
  418.                 $query = DB::query("SELECT albumid FROM ".DB::table('home_pic')." WHERE picid IN (".dimplode($pics).") GROUP BY albumid");
  419.                 DB::delete('home_pic', 'picid IN ('.dimplode($pics).')', 0);
  420.                 while($album = DB::fetch($query)) {
  421.                         DB::update('home_album', array('picnum' => getcount('home_pic', array('albumid' => $album['albumid']))), array('albumid' => $album['albumid']));
  422.                 }
  423.         }
  424. }

  425. /**
  426. * 删除评论
  427. * @param array $cids 待删除的 ID 数组
  428. */
  429. function deletecomments($cids) {
  430.         global $_G;

  431.         $deltypes = $blognums = $newcids = $dels = $counts = array();
  432.         $allowmanage = checkperm('managecomment');

  433.         $query = DB::query("SELECT * FROM ".DB::table('home_comment')." WHERE cid IN (".dimplode($cids).")");
  434.         while ($value = DB::fetch($query)) {
  435.                 if($allowmanage || $value['authorid'] == $_G['uid'] || $value['uid'] == $_G['uid']) {
  436.                         $dels[] = $value;
  437.                         $newcids[] = $value['cid'];
  438.                         $deltypes[$value['idtype']] = $value['idtype'].'_cid';
  439.                         //积分
  440.                         if($value['authorid'] != $_G['uid'] && $value['uid'] != $_G['uid']) {
  441.                                 $counts[$value['authorid']]['coef'] -= 1;
  442.                         }
  443.                         if($value['idtype'] == 'blogid') {
  444.                                 $blognums[$value['id']]++;
  445.                         }
  446.                 }
  447.         }

  448.         if(empty($dels)) return array();

  449.         //数据删除
  450.         DB::delete('home_comment', "cid IN (".dimplode($newcids).")");
  451.         DB::delete('common_moderate', "id IN (".dimplode($newcids).") AND idtype IN(".dimplode($deltypes).")");

  452.         //扣除相应的积分
  453.         if($counts) {
  454.                 foreach ($counts as $uid => $setarr) {
  455.                         batchupdatecredit('comment', $uid, array(), $setarr['coef']);
  456.                 }
  457.         }
  458.         //更新统计
  459.         if($blognums) {
  460.                 $nums = renum($blognums);
  461.                 foreach ($nums[0] as $num) {
  462.                         DB::query("UPDATE ".DB::table('home_blog')." SET replynum=replynum-$num WHERE blogid IN (".dimplode($nums[1][$num]).")");
  463.                 }
  464.         }
  465.         return $dels;
  466. }

  467. /**
  468. * 删除博客
  469. * @param array $blogids 待删除的 ID 数组
  470. */
  471. function deleteblogs($blogids) {
  472.         global $_G;

  473.         //获取博客信息
  474.         $blogs = $newblogids = $counts = array();
  475.         $allowmanage = checkperm('manageblog');

  476.         $query = DB::query("SELECT * FROM ".DB::table('home_blog')." WHERE blogid IN (".dimplode($blogids).")");
  477.         while ($value = DB::fetch($query)) {
  478.                 if($allowmanage || $value['uid'] == $_G['uid']) {
  479.                         $blogs[] = $value;
  480.                         $newblogids[] = $value['blogid'];

  481.                         //积分
  482.                         if($value['uid'] != $_G['uid']) {
  483.                                 $counts[$value['uid']]['coef'] -= 1;
  484.                         }
  485.                         $counts[$value['uid']]['blogs'] -= 1;
  486.                 }
  487.         }
  488.         if(empty($blogs)) return array();

  489.         //数据删除
  490.         DB::delete('home_blog', "blogid IN (".dimplode($newblogids).")");
  491.         DB::delete('home_blogfield', "blogid IN (".dimplode($newblogids).")");
  492.         DB::delete('home_comment', "id IN (".dimplode($newblogids).") AND idtype='blogid'");
  493.         DB::delete('home_feed', "id IN (".dimplode($newblogids).") AND idtype='blogid'");
  494.         DB::delete('home_clickuser', "id IN (".dimplode($newblogids).") AND idtype='blogid'");
  495.         DB::delete('common_moderate', "id IN (".dimplode($newblogids).") AND idtype='blogid'");
  496.         DB::delete('common_moderate', "id IN (".dimplode($newblogids).") AND idtype='blogid_cid'");

  497.         //更新统计
  498.         if($counts) {
  499.                 foreach ($counts as $uid => $setarr) {
  500.                         batchupdatecredit('publishblog', $uid, array('blogs' => $setarr['blogs']), $setarr['coef']);
  501.                 }
  502.         }

  503.         //删除标签关系
  504.         DB::query("DELETE FROM ".DB::table('common_tagitem')." WHERE idtype='blogid' AND itemid IN (".dimplode($newblogids).")");

  505.         return $blogs;
  506. }

  507. /**
  508. * 删除事件
  509. * @param array $feedids 待删除的 ID 数组
  510. */
  511. function deletefeeds($feedids) {
  512.         global $_G;

  513.         $allowmanage = checkperm('managefeed');

  514.         $feeds = $newfeedids = array();
  515.         $query = DB::query("SELECT * FROM ".DB::table('home_feed')." WHERE feedid IN (".dimplode($feedids).")");
  516.         while ($value = DB::fetch($query)) {
  517.                 if($allowmanage || $value['uid'] == $_G['uid']) {//管理员/作者
  518.                         $newfeedids[] = $value['feedid'];
  519.                         $feeds[] = $value;
  520.                 }
  521.         }

  522.         if(empty($newfeedids)) return array();

  523.         DB::query("DELETE FROM ".DB::table('home_feed')." WHERE feedid IN (".dimplode($newfeedids).")");

  524.         return $feeds;
  525. }

  526. /**
  527. * 删除分享
  528. * @param array $sids 待删除的 ID 数组
  529. */
  530. function deleteshares($sids) {
  531.         global $_G;

  532.         $allowmanage = checkperm('manageshare');

  533.         $shares = $newsids = $counts = array();
  534.         $query = DB::query("SELECT * FROM ".DB::table('home_share')." WHERE sid IN (".dimplode($sids).")");
  535.         while ($value = DB::fetch($query)) {
  536.                 if($allowmanage || $value['uid'] == $_G['uid']) {//管理员/作者
  537.                         $shares[] = $value;
  538.                         $newsids[] = $value['sid'];

  539.                         //积分
  540.                         if($value['uid'] != $_G['uid']) {
  541.                                 $counts[$value['uid']]['coef'] -= 1;
  542.                         }
  543.                         $counts[$value['uid']]['sharings'] -= 1;
  544.                 }
  545.         }
  546.         if(empty($shares)) return array();

  547.         DB::delete('home_share', "sid IN (".dimplode($newsids).")");
  548.         DB::delete('home_comment', "id IN (".dimplode($newsids).") AND idtype='sid'");
  549.         DB::delete('home_feed', "id IN (".dimplode($newsids).") AND idtype='sid'");
  550.         DB::delete('common_moderate', "id IN (".dimplode($newsids).") AND idtype='sid'");
  551.         DB::delete('common_moderate', "id IN (".dimplode($newsids).") AND idtype='sid_cid'");
  552.         //TODO 举报相关
  553. //        DB::query("DELETE FROM ".DB::table('home_report')." WHERE id IN (".dimplode($newsids).") AND idtype='sid'");

  554.         //更新统计
  555.         if($counts) {
  556.                 foreach ($counts as $uid => $setarr) {
  557.                         batchupdatecredit('createshare', $uid, array('sharings' => $setarr['sharings']), $setarr['coef']);
  558.                 }
  559.         }

  560.         return $shares;
  561. }

  562. /**
  563. * 删除记录
  564. * @param array $ids 待删除的 ID 数组
  565. */
  566. function deletedoings($ids) {
  567.         global $_G;

  568.         $allowmanage = checkperm('managedoing');

  569.         $doings = $newdoids = $counts = array();
  570.         $query = DB::query("SELECT * FROM ".DB::table('home_doing')." WHERE doid IN (".dimplode($ids).")");
  571.         while ($value = DB::fetch($query)) {
  572.                 if($allowmanage || $value['uid'] == $_G['uid']) {//管理员/作者
  573.                         $doings[] = $value;
  574.                         $newdoids[] = $value['doid'];

  575.                         //积分
  576.                         if($value['uid'] != $_G['uid']) {
  577.                                 $counts[$value['uid']]['coef'] -= 1;
  578.                         }
  579.                         $counts[$value['uid']]['doings'] -= 1;
  580.                 }
  581.         }

  582.         if(empty($doings)) return array();

  583.         DB::delete('home_doing', "doid IN (".dimplode($newdoids).")");
  584.         DB::delete('home_docomment', "doid IN (".dimplode($newdoids).")");
  585.         DB::delete('home_feed', "id IN (".dimplode($newdoids).") AND idtype='doid'");
  586.         DB::delete('common_moderate', "id IN (".dimplode($newdoids).") AND idtype='doid'");

  587.         //更新统计
  588.         if($counts) {
  589.                 foreach ($counts as $uid => $setarr) {
  590.                         batchupdatecredit('doing', $uid, array('doings' => $setarr['doings']), $setarr['coef']);
  591.                 }
  592.         }

  593.         return $doings;
  594. }

  595. /**
  596. * 删除空间
  597. * @param array $uid 待删除的用户 ID
  598. */
  599. function deletespace($uid) {
  600.         global $_G;

  601.         $allowmanage = checkperm('managedelspace');

  602.         //软删除
  603.         if($allowmanage) {
  604.                 DB::query("UPDATE ".DB::table('common_member')." SET status='1' WHERE uid='$uid'");
  605.                 manyoulog('user', $uid, 'delete');
  606.                 return true;
  607.         } else {
  608.                 return false;
  609.         }
  610. }

  611. /**
  612. * 删除图片
  613. * @param array $picids 待删除的 ID 数组
  614. */
  615. function deletepics($picids) {
  616.         global $_G;

  617.         $albumids = $sizes = $pics = $newids = array();
  618.         $allowmanage = checkperm('managealbum');

  619.         $haveforumpic = false;
  620.         $query = DB::query("SELECT * FROM ".DB::table('home_pic')." WHERE picid IN (".dimplode($picids).")");
  621.         while ($value = DB::fetch($query)) {
  622.                 if($allowmanage || $value['uid'] == $_G['uid']) {
  623.                         //删除文件
  624.                         $pics[] = $value;
  625.                         $newids[] = $value['picid'];
  626.                         $sizes[$value['uid']] = $sizes[$value['uid']] + $value['size'];
  627.                         $albumids[$value['albumid']] = $value['albumid'];
  628.                         if(!$haveforumpic && $value['remote'] > 1) {
  629.                                 $haveforumpic = true;
  630.                         }
  631.                 }
  632.         }
  633.         if(empty($pics)) return array();

  634.         DB::query("DELETE FROM ".DB::table('home_pic')." WHERE picid IN (".dimplode($newids).")");
  635.         if($haveforumpic) {
  636.                 for($i = 0;$i < 10;$i++) {
  637.                         DB::query("UPDATE ".DB::table('forum_attachment_'.$i)." SET picid='0' WHERE picid IN (".dimplode($newids).")");
  638.                 }
  639.         }

  640.         DB::delete('home_comment', "id IN (".dimplode($newids).") AND idtype='picid'");
  641.         DB::delete('home_feed', "id IN (".dimplode($newids).") AND idtype='picid'");
  642.         DB::delete('home_clickuser', "id IN (".dimplode($newids).") AND idtype='picid'");
  643.         DB::delete('common_moderate', "id IN (".dimplode($newids).") AND idtype='picid'");
  644.         DB::delete('common_moderate', "id IN (".dimplode($newsids).") AND idtype='picid_cid'");

  645.         //更新统计
  646.         if($sizes) {
  647.                 foreach ($sizes as $uid => $setarr) {
  648.                         $attachsize = intval($sizes[$uid]);
  649.                         updatemembercount($uid, array('attachsize' => -$attachsize), false);
  650.                 }
  651.         }

  652.         //更新相册封面
  653.         require_once libfile('function/spacecp');
  654.         foreach ($albumids as $albumid) {
  655.                 if($albumid) {
  656.                         album_update_pic($albumid);
  657.                 }
  658.         }

  659.         //删除图片
  660.         deletepicfiles($pics);

  661.         return $pics;
  662. }

  663. /**
  664. * 删除图片文件
  665. * @param array $pics 待删除的图片数组
  666. */
  667. function deletepicfiles($pics) {
  668.         global $_G;
  669.         $remotes = array();
  670.         include_once libfile('function/home');
  671.         foreach ($pics as $pic) {
  672.                 pic_delete($pic['filepath'], 'album', $pic['thumb'], $pic['remote']);
  673.         }
  674. }

  675. /**
  676. * 删除相册
  677. * @param array $albumids 待删除的 ID 数组
  678. */
  679. function deletealbums($albumids) {
  680.         global $_G;

  681.         $sizes = $dels = $newids = $counts = array();
  682.         $allowmanage = checkperm('managealbum');

  683.         $query = DB::query("SELECT * FROM ".DB::table('home_album')." WHERE albumid IN (".dimplode($albumids).")");
  684.         while ($value = DB::fetch($query)) {
  685.                 if($allowmanage || $value['uid'] == $_G['uid']) {
  686.                         $dels[] = $value;
  687.                         $newids[] = $value['albumid'];
  688.                         if(!empty($value['pic'])) {
  689.                                 include_once libfile('function/home');
  690.                                 pic_delete($value['pic'], 'album', 0, ($value['picflag'] == 2 ? 1 : 0));
  691.                         }
  692.                 }
  693.                 $counts[$value['uid']]['albums'] -= 1;
  694.         }
  695.         if(empty($dels)) return array();

  696.         //获取积分
  697.         $pics = $picids = array();
  698.         $query = DB::query("SELECT * FROM ".DB::table('home_pic')." WHERE albumid IN (".dimplode($newids).")");
  699.         while ($value = DB::fetch($query)) {
  700.                 $pics[] = $value;
  701.                 $picids[] = $value['picid'];
  702.                 $sizes[$value['uid']] = $sizes[$value['uid']] + $value['size'];
  703.         }

  704.         DB::query("DELETE FROM ".DB::table('home_pic')." WHERE albumid IN (".dimplode($newids).")");
  705.         DB::query("DELETE FROM ".DB::table('home_album')." WHERE albumid IN (".dimplode($newids).")");
  706.         DB::query("DELETE FROM ".DB::table('home_feed')." WHERE id IN (".dimplode($newids).") AND idtype='albumid'");
  707. //        DB::query("DELETE FROM ".DB::table('home_report')." WHERE id IN (".dimplode($newids).") AND idtype='albumid'");
  708.         if($picids) DB::query("DELETE FROM ".DB::table('home_clickuser')." WHERE id IN (".dimplode($picids).") AND idtype='picid'");

  709.         //更新统计
  710.         if($sizes) {
  711.                 foreach ($sizes as $uid => $value) {
  712.                         $attachsize = intval($sizes[$uid]);
  713.                         $albumnum = $counts[$uid]['albums'] ? $counts[$uid]['albums'] : 0;
  714.                         updatemembercount($uid, array('albums' => $albumnum, 'attachsize' => -$attachsize), false);
  715.                 }
  716.         }

  717.         //删除图片
  718.         if($pics) {
  719.                 deletepicfiles($pics);//删除图片
  720.         }

  721.         return $dels;
  722. }

  723. /**
  724. * 删除投票
  725. * @param array $pids 待删除的 ID 数组
  726. */
  727. function deletepolls($pids) {
  728.         global $_G;


  729.         $counts = $polls = $newpids = array();
  730.         $allowmanage = checkperm('managepoll');

  731.         $query = DB::query("SELECT * FROM ".DB::table('home_poll')." WHERE pid IN (".dimplode($pids).")");
  732.         while ($value = DB::fetch($query)) {
  733.                 if($allowmanage || $value['uid'] == $_G['uid']) {
  734.                         $polls[] = $value;
  735.                         $newpids[] = $value['pid'];

  736.                         if($value['uid'] != $_G['uid']) {
  737.                                 $counts[$value['uid']]['coef'] -= 1;
  738.                         }
  739.                         $counts[$value['uid']]['polls'] -= 1;
  740.                 }
  741.         }
  742.         if(empty($polls)) return array();

  743.         //数据删除
  744.         DB::query("DELETE FROM ".DB::table('home_poll')." WHERE pid IN (".dimplode($newpids).")");
  745.         DB::query("DELETE FROM ".DB::table('home_pollfield')." WHERE pid IN (".dimplode($newpids).")");
  746.         DB::query("DELETE FROM ".DB::table('home_polloption')." WHERE pid IN (".dimplode($newpids).")");
  747.         DB::query("DELETE FROM ".DB::table('home_polluser')." WHERE pid IN (".dimplode($newpids).")");
  748.         DB::query("DELETE FROM ".DB::table('home_comment')." WHERE id IN (".dimplode($newpids).") AND idtype='pid'");
  749.         DB::query("DELETE FROM ".DB::table('home_feed')." WHERE id IN (".dimplode($newpids).") AND idtype='pid'");
  750. //        DB::query("DELETE FROM ".DB::table('home_report')." WHERE id IN (".dimplode($newpids).") AND idtype='pid'");

  751.         //更新统计
  752.         if($counts) {
  753.                 foreach ($counts as $uid => $setarr) {
  754.                         batchupdatecredit('createpoll', $uid, array('polls' => $setarr['polls']), $setarr['coef']);
  755.                 }
  756.         }

  757.         return $polls;

  758. }


  759. function deletetrasharticle($aids) {
  760.         global $_G;

  761.         require_once libfile('function/home');
  762.         $articles = $trashid = $pushs = $dels = array();
  763.         $query = DB::query("SELECT * FROM ".DB::table('portal_article_trash')." WHERE aid IN (".dimplode($aids).")");
  764.         while ($value = DB::fetch($query)) {
  765.                 $dels[$value['aid']] = $value['aid'];
  766.                 $article = unserialize($value['content']);
  767.                 $articles[$article['aid']] = $article;
  768.                 if(!empty($article['idtype'])) $pushs[$article['idtype']][] = $article['id'];
  769.                 if($article['pic']) {
  770.                         pic_delete($article['pic'], 'portal', $article['thumb'], $article['remote']);
  771.                 }
  772.         }

  773.         if($dels) {
  774.                 DB::query('DELETE FROM '.DB::table('portal_article_trash')." WHERE aid IN(".dimplode($dels).")", 'UNBUFFERED');
  775.                 deletearticlepush($pushs);
  776.                 deletearticlerelated($dels);
  777.         }

  778.         return $articles;
  779. }

  780. /**
  781. * 删除门户文章
  782. * @param array $aids 待删除的 ID 数组
  783. * @param boolean $istrash
  784. */
  785. function deletearticle($aids, $istrash = true) {
  786.         global $_G;

  787.         if(empty($aids)) return false;
  788.         $trasharr = $article = $bids = $dels = $attachment = $attachaid = $catids = $pushs = array();
  789.         $query = DB::query("SELECT * FROM ".DB::table('portal_article_title')." WHERE aid IN (".dimplode($aids).")");
  790.         while ($value = DB::fetch($query)) {
  791.                 $catids[] = intval($value['catid']);
  792.                 $dels[$value['aid']] = $value['aid'];
  793.                 $article[] = $value;
  794.                 if(!empty($value['idtype'])) $pushs[$value['idtype']][] = $value['id'];
  795.         }
  796.         if($dels) {
  797.                 foreach($article as $key => $value) {
  798.                         if($istrash) {
  799.                                 $valstr = daddslashes(serialize($value));
  800.                                 $trasharr[] = "('$value[aid]', '$valstr')";
  801.                         } elseif($value['pic']) {
  802.                                 //删除封面图片
  803.                                 pic_delete($value['pic'], 'portal', $value['thumb'], $value['remote']);
  804.                                 $attachaid[] = $value['aid'];
  805.                         }
  806.                 }
  807.                 if($istrash) {
  808.                         if($trasharr) {
  809.                                 DB::query("INSERT INTO ".DB::table('portal_article_trash')." (`aid`, `content`) VALUES ".implode(',', $trasharr));
  810.                         }
  811.                 } else {
  812.                         deletearticlepush($pushs);
  813.                         deletearticlerelated($dels);
  814.                 }

  815.                 DB::delete('portal_article_title', "aid IN(".dimplode($dels).")");
  816.                 DB::delete('common_moderate', "id IN (".dimplode($dels).") AND idtype='aid'");

  817.                 // 相关文章分类文章数目
  818.                 $catids = array_unique($catids);
  819.                 if($catids) {
  820.                         foreach($catids as $catid) {
  821.                                 $cnt = DB::result_first('SELECT COUNT(*) FROM '.DB::table('portal_article_title')." WHERE catid = '$catid'");
  822.                                 DB::update('portal_category', array('articles'=>$cnt), array('catid'=>$catid));
  823.                         }
  824.                 }
  825.         }
  826.         return $article;
  827. }

  828. /**
  829. * 清除生成文章的标识
  830. */
  831. function deletearticlepush($pushs) {
  832.         if(!empty($pushs) && is_array($pushs)) {
  833.                 foreach($pushs as $idtype=> $fromids) {
  834.                         switch ($idtype) {
  835.                                 case 'blogid':
  836.                                         if(!empty($fromids)) DB::update('home_blogfield',array('pushedaid'=>'0'), 'blogid IN ('.dimplode($fromids).')');
  837.                                         break;
  838.                                 case 'tid':
  839.                                         if(!empty($fromids)) $a = DB::update('forum_thread',array('pushedaid'=>'0'), 'tid IN ('.dimplode($fromids).')');
  840.                                         break;
  841.                         }
  842.                 }
  843.         }
  844. }

  845. /**
  846. * 删除文章相关的数据
  847. */
  848. function deletearticlerelated($dels) {

  849.         //统计
  850.         DB::delete('portal_article_count', "aid IN(".dimplode($dels).")");
  851.         //内容
  852.         DB::delete('portal_article_content', "aid IN(".dimplode($dels).")");

  853.         //附件
  854.         $query = DB::query("SELECT * FROM ".DB::table('portal_attachment')." WHERE aid IN (".dimplode($dels).")");
  855.         while ($value = DB::fetch($query)) {
  856.                 $attachment[] = $value;
  857.                 $attachdel[] = $value['attachid'];
  858.         }
  859.         require_once libfile('function/home');
  860.         foreach ($attachment as $value) {
  861.                 pic_delete($value['attachment'], 'portal', $value['thumb'], $value['remote']);
  862.         }
  863.         DB::delete('portal_attachment', "aid IN (".dimplode($dels).")");

  864.         //评论
  865.         DB::delete('portal_comment', "id IN(".dimplode($dels).") AND idtype='aid'");
  866.         DB::delete('common_moderate', "id IN (".dimplode($dels).") AND idtype='aid_cid'");

  867.         //相关文章
  868.         DB::delete('portal_article_related', "aid IN(".dimplode($dels).")");

  869. }

  870. function deleteportaltopic($dels) {
  871.         if(empty($dels)) return false;
  872.         //delete common_diy_data
  873.         $targettplname = array();
  874.         foreach ((array)$dels as $key => $value) {
  875.                 $targettplname[] = 'portal/portal_topic_content_'.$value;
  876.         }
  877.         DB::delete('common_diy_data', "targettplname IN (".dimplode($targettplname).")", 0, true);

  878.         //删除模块权限
  879.         require_once libfile('class/blockpermission');
  880.         $tplpermission = & template_permission::instance();
  881.         $templates = array();
  882.         $tplpermission->delete_allperm_by_tplname($targettplname);

  883.         //删除指定的域名
  884.         deletedomain($dels, 'topic');
  885.         //delete 模块和页面的关联表
  886.         DB::delete('common_template_block', 'targettplname IN ('.dimplode($targettplname).')', 0, true);

  887.         //delete portal_topic_pic
  888.         require_once libfile('function/home');

  889.         $picids = array();
  890.         $query = DB::query('SELECT * FROM '.DB::table('portal_topic').' WHERE topicid IN ('.dimplode($dels).')');
  891.         while ($value = DB::fetch($query)) {
  892.                 if($value['picflag'] != '0') pic_delete(str_replace('portal/', '', $value['cover']), 'portal', 0, $value['picflag'] == '2' ? '1' : '0');
  893.         }

  894.         $picids = array();
  895.         $query = DB::query('SELECT * FROM '.DB::table('portal_topic_pic').' WHERE topicid IN ('.dimplode($dels).')');
  896.         while ($value = DB::fetch($query)) {
  897.                 $picids[] = $value['picid'];
  898.                 //delete pic
  899.                 pic_delete($value['filepath'], 'portal', $value['thumb'], $value['remote']);
  900.         }
  901.         if (!empty($picids)) {
  902.                 DB::delete('portal_topic_pic', 'picid IN ('.dimplode($picids).')', 0, true);
  903.         }

  904.         //delete file
  905.         foreach ($targettplname as $key => $value) {
  906.                 @unlink(DISCUZ_ROOT.'./data/diy/'.$value.'.htm');
  907.                 @unlink(DISCUZ_ROOT.'./data/diy/'.$value.'.htm.bak');
  908.                 @unlink(DISCUZ_ROOT.'./data/diy/'.$value.'_preview.htm');
  909.         }

  910.         //delete topic
  911.         DB::delete('portal_topic', 'topicid IN ('.dimplode($dels).')');
  912.         //评论
  913.         DB::delete('portal_comment', "id IN(".dimplode($dels).") AND idtype='topicid'");
  914.         DB::delete('common_moderate', "id IN (".dimplode($dels).") AND idtype='topicid_cid'");

  915.         //清除模块
  916.         include_once libfile('function/block');
  917.         block_clear();

  918.         // 更新缓存
  919.         include_once libfile('function/cache');
  920.         updatecache('diytemplatename');
  921. }

  922. /**
  923. * 跟据id、idtype删除指定的域名
  924. * @param Integer $ids: 指写ids
  925. * @param String $idtype:对象类型subarea:分区、forum:版块、home:个人空间、group:群组、topic:专题、channel:频道
  926. */
  927. function deletedomain($ids, $idtype) {
  928.         if($ids && $idtype) {
  929.                 $ids = !is_array($ids) ? array($ids) : $ids;
  930.                 DB::query('DELETE FROM '.DB::table('common_domain')." WHERE id IN(".dimplode($ids).") AND idtype='$idtype'", 'UNBUFFERED');
  931.         }
  932. }

  933. ?>
复制代码



更多Discuz二次开发相关源码分析
1、discuz核心类库class_core的函数注释
http://bbs.zb7.com/thread-514094-1-1.html
2、Discuz的forum_index.php文件的分析
http://bbs.zb7.com/thread-517467-1-1.html
3、discuz x3 与通知表有关的程序源代码分析
http://bbs.zb7.com/thread-517471-1-1.html
4、discuz x3 space_notice.php分析注释
http://bbs.zb7.com/thread-517472-1-1.html
5、discuz x3 uc_client/client.php接口文件分析
http://bbs.zb7.com/thread-517473-1-1.html
6、Discuz中session机制流程图
http://bbs.zb7.com/thread-517443-1-1.html
7、class_core.php文件中核心基础类库中discuz_core类分析
http://bbs.zb7.com/thread-517538-1-1.html
8、class_core.php文件中数据库操作类DB及db_mysql分析
http://bbs.zb7.com/thread-517539-1-1.html
9、class_core.php文件中session会话类discuz_session分析
http://bbs.zb7.com/thread-517540-1-1.html
10、class_core.php文件中核心高效缓存类discuz_memory分析
http://bbs.zb7.com/thread-517542-1-1.html




上一篇:class_core.php文件中核心高效缓存类discuz_memory分析
下一篇:function_forum.php论坛模块通用函数集合分析
UC955 发表于 2015-7-1 17:32:22 来自PC
很给力,希望分享更多给力的帖子啊。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表