topicadmin_split.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: topicadmin_split.php 30872 2012-06-27 10:11:44Z liulanbo $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. if(!$_G['group']['allowsplitthread']) {
  12. showmessage('no_privilege_splitthread');
  13. }
  14. $thread = C::t('forum_thread')->fetch($_G['tid']);
  15. $posttableid = $thread['posttableid'];
  16. if(!submitcheck('modsubmit')) {
  17. require_once libfile('function/discuzcode');
  18. $replies = $thread['replies'];
  19. if($replies <= 0) {
  20. showmessage('admin_split_invalid');
  21. }
  22. $postlist = array();
  23. foreach(C::t('forum_post')->fetch_all_by_tid('tid:'.$_G['tableid'], $_G['tid'], 'ASC') as $post) {
  24. $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], sprintf('%00b', $post['htmlon']), $_G['forum']['allowsmilies'], $_G['forum']['allowbbcode'], $_G['forum']['allowimgcode'], $_G['forum']['allowhtml']);
  25. $postlist[] = $post;
  26. }
  27. include template('forum/topicadmin_action');
  28. } else {
  29. if(!trim($_GET['subject'])) {
  30. showmessage('admin_split_subject_invalid');
  31. } elseif(!($nos = explode(',', $_GET['split']))) {
  32. showmessage('admin_split_new_invalid');
  33. }
  34. sort($nos);
  35. foreach(C::t('forum_post')->fetch_all_by_tid_position($thread['posttableid'], $_G['tid'], $nos) as $post) {
  36. $pids[] = $post['pid'];
  37. }
  38. if(!($pids = implode(',',$pids))) {
  39. showmessage('admin_split_new_invalid');
  40. }
  41. $modaction = 'SPL';
  42. $reason = checkreasonpm();
  43. $subject = dhtmlspecialchars($_GET['subject']);
  44. $newtid = C::t('forum_thread')->insert(array('fid'=>$_G['fid'], 'posttableid'=>$posttableid, 'subject'=>$subject), true);
  45. C::t('forum_post')->update('tid:'.$_G['tid'], explode(',', $pids), array('tid' => $newtid));
  46. updateattachtid('pid', (array)explode(',', $pids), $_G['tid'], $newtid);
  47. $splitauthors = array();
  48. foreach(C::t('forum_post')->fetch_all_visiblepost_by_tid_groupby_authorid('tid:'.$_G['tid'], $newtid) as $splitauthor) {
  49. $splitauthor['subject'] = $subject;
  50. $splitauthors[] = $splitauthor;
  51. }
  52. C::t('forum_post')->update('tid:'.$_G['tid'], $splitauthors[0]['pid'], array('first' => 1, 'subject' => $subject), true);
  53. $query = C::t('forum_post')->fetch_all_by_tid('tid:'.$_G['tid'], $_G['tid'], false, 'ASC', 0, 1);
  54. foreach($query as $row) {
  55. $fpost = $row;
  56. }
  57. C::t('forum_thread')->update($_G['tid'], array('author'=>$fpost['author'], 'authorid'=>$fpost['authorid'],'dateline'=>$fpost['dateline'], 'moderated'=>1));
  58. C::t('forum_post')->update('tid:'.$_G['post'], $fpost['pid'], array('subject' => $thread['subject']));
  59. $query = C::t('forum_post')->fetch_all_by_tid('tid:'.$_G['tid'], $newtid, false, 'ASC', 0, 1);
  60. foreach($query as $row) {
  61. $fpost = $row;
  62. }
  63. $maxposition = 1;
  64. foreach(C::t('forum_post')->fetch_all_by_tid('tid:'.$_G['tid'], $_G['tid'], false, 'ASC') as $row) {
  65. if($row['position'] != $maxposition) {
  66. C::t('forum_post')->update('tid:'.$_G['tid'], $row['pid'], array('position' => $maxposition));
  67. }
  68. $maxposition ++;
  69. }
  70. C::t('forum_thread')->update($_G['tid'], array('maxposition' => $maxposition));
  71. $maxposition = 1;
  72. foreach(C::t('forum_post')->fetch_all_by_tid('tid:'.$_G['tid'], $newtid, false, 'ASC') as $row) {
  73. if($row['position'] != $maxposition) {
  74. C::t('forum_post')->update('tid:'.$_G['tid'], $row['pid'], array('position' => $maxposition));
  75. }
  76. $maxposition ++;
  77. }
  78. C::t('forum_thread')->update($newtid, array('author'=>$fpost['author'], 'authorid'=>$fpost['authorid'], 'dateline'=>$fpost['dateline'], 'rate'=>intval(@($fpost['rate'] / abs($fpost['rate']))), 'maxposition' => $maxposition));
  79. updatethreadcount($_G['tid']);
  80. updatethreadcount($newtid);
  81. updateforumcount($_G['fid']);
  82. $_G['forum']['threadcaches'] && deletethreadcaches($thread['tid']);
  83. $modpostsnum++;
  84. $resultarray = array(
  85. 'redirect' => "forum.php?mod=forumdisplay&fid=$_G[fid]",
  86. 'reasonpm' => ($sendreasonpm ? array('data' => $splitauthors, 'var' => 'thread', 'item' => 'reason_moderate', 'notictype' => 'post') : array()),
  87. 'reasonvar' => array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'modaction' => $modaction, 'reason' => $reason),
  88. 'modtids' => $thread['tid'].','.$newtid,
  89. 'modlog' => array($thread, array('tid' => $newtid, 'subject' => $subject))
  90. );
  91. }
  92. ?>