PageRenderTime 53ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/source/class/extend/extend_thread_replycredit.php

https://github.com/jinbo51/DiscuzX
PHP | 148 lines | 125 code | 17 blank | 6 comment | 44 complexity | ab5861473f332d5d77521557a1aa9ec7 MD5 | raw file
Possible License(s): BSD-3-Clause
  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: extend_thread_replycredit.php 33418 2013-06-08 08:46:32Z andyzheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class extend_thread_replycredit extends extend_thread_base {
  12. public $replycredit_real;
  13. public function before_newthread($parameters) {
  14. if($this->group['allowreplycredit']) {
  15. $_GET['replycredit_extcredits'] = intval($_GET['replycredit_extcredits']);
  16. $_GET['replycredit_times'] = intval($_GET['replycredit_times']);
  17. $_GET['replycredit_membertimes'] = intval($_GET['replycredit_membertimes']);
  18. $_GET['replycredit_random'] = intval($_GET['replycredit_random']);
  19. $_GET['replycredit_random'] = $_GET['replycredit_random'] < 0 || $_GET['replycredit_random'] > 99 ? 0 : $_GET['replycredit_random'] ;
  20. $this->replycredit_real = 0;
  21. $this->param['replycredit'] = 0;
  22. if($_GET['replycredit_extcredits'] > 0 && $_GET['replycredit_times'] > 0) {
  23. $this->replycredit_real = ceil(($_GET['replycredit_extcredits'] * $_GET['replycredit_times']) + ($_GET['replycredit_extcredits'] * $_GET['replycredit_times'] * $this->setting['creditstax']));
  24. if($this->replycredit_real > getuserprofile('extcredits'.$this->setting['creditstransextra']['10'])) {
  25. showmessage('replycredit_morethan_self');
  26. } else {
  27. $this->param['replycredit'] = ceil($_GET['replycredit_extcredits'] * $_GET['replycredit_times']);
  28. }
  29. }
  30. }
  31. }
  32. public function after_newthread() {
  33. if($this->group['allowreplycredit']) {
  34. if($this->param['replycredit'] > 0 && $this->replycredit_real > 0) {
  35. updatemembercount($this->member['uid'], array('extcredits'.$this->setting['creditstransextra']['10'] => -$this->replycredit_real), 1, 'RCT', $this->tid);
  36. $insertdata = array(
  37. 'tid' => $this->tid,
  38. 'extcredits' => $_GET['replycredit_extcredits'],
  39. 'extcreditstype' => $this->setting['creditstransextra']['10'],
  40. 'times' => $_GET['replycredit_times'],
  41. 'membertimes' => $_GET['replycredit_membertimes'],
  42. 'random' => $_GET['replycredit_random']
  43. );
  44. C::t('forum_replycredit')->insert($insertdata);
  45. }
  46. }
  47. }
  48. public function after_newreply() {
  49. if($this->thread['replycredit'] > 0 && !$this->param['modnewreplies'] && $this->thread['authorid'] != $this->member['uid'] && $this->member['uid']) {
  50. $replycredit_rule = C::t('forum_replycredit')->fetch($this->thread['tid']);
  51. if(!empty($replycredit_rule['times'])) {
  52. $have_replycredit = C::t('common_credit_log')->count_by_uid_operation_relatedid($this->member['uid'], 'RCA', $this->thread['tid']);
  53. if($replycredit_rule['membertimes'] - $have_replycredit > 0 && $this->thread['replycredit'] - $replycredit_rule['extcredits'] >= 0) {
  54. $creditstransextra = $this->setting['creditstransextra'];
  55. $replycredit_rule['extcreditstype'] = $replycredit_rule['extcreditstype'] ? $replycredit_rule['extcreditstype'] : $creditstransextra[10];
  56. if($replycredit_rule['random'] > 0) {
  57. $rand = rand(1, 100);
  58. $rand_replycredit = $rand <= $replycredit_rule['random'] ? true : false ;
  59. } else {
  60. $rand_replycredit = true;
  61. }
  62. if($rand_replycredit) {
  63. updatemembercount($this->member['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $this->thread['tid']);
  64. C::t('forum_post')->update('tid:'.$this->thread['tid'], $this->pid, array('replycredit' => $replycredit_rule['extcredits']));
  65. C::t('forum_thread')->update($this->thread['tid'], (array)DB::field('replycredit', $this->thread['replycredit'] - $replycredit_rule['extcredits']), false, false, 0, true);
  66. }
  67. }
  68. }
  69. }
  70. }
  71. public function before_editpost($parameters) {
  72. $isfirstpost = $this->post['first'] ? 1 : 0;
  73. $isorigauthor = $this->member['uid'] && $this->member['uid'] == $this->post['authorid'];
  74. if($isfirstpost) {
  75. if($isorigauthor && $this->group['allowreplycredit']) {
  76. $replycredit_rule = isset($parameters['replycredit_rule']) && $parameters['replycredit_rule'] ? $parameters['replycredit_rule'] : array();
  77. $_POST['replycredit_extcredits'] = intval($_POST['replycredit_extcredits']);
  78. $_POST['replycredit_times'] = intval($_POST['replycredit_times']);
  79. $_POST['replycredit_membertimes'] = intval($_POST['replycredit_membertimes']) > 0 ? intval($_POST['replycredit_membertimes']) : 1;
  80. $_POST['replycredit_random'] = intval($_POST['replycredit_random']) < 0 || intval($_POST['replycredit_random']) > 99 ? 0 : intval($_POST['replycredit_random']) ;
  81. if($_POST['replycredit_extcredits'] > 0 && $_POST['replycredit_times'] > 0) {
  82. $replycredit = $_POST['replycredit_extcredits'] * $_POST['replycredit_times'];
  83. $replycredit_diff = $replycredit - $this->thread['replycredit'];
  84. if($replycredit_diff > 0) {
  85. $replycredit_diff = ceil($replycredit_diff + ($replycredit_diff * $this->setting['creditstax']));
  86. if(!$replycredit_rule) {
  87. if($this->setting['creditstransextra']['10']) {
  88. $replycredit_rule['extcreditstype'] = $this->setting['creditstransextra']['10'];
  89. }
  90. }
  91. if($replycredit_diff > getuserprofile('extcredits'.$replycredit_rule['extcreditstype'])) {
  92. showmessage('post_edit_thread_replaycredit_nocredit');
  93. }
  94. }
  95. if($replycredit_diff) {
  96. updatemembercount($this->thread['authorid'], array($replycredit_rule['extcreditstype'] => ($replycredit_diff > 0 ? -$replycredit_diff : abs($replycredit_diff))), 1, ($replycredit_diff > 0 ? 'RCT' : 'RCB'), $this->thread['tid']);
  97. }
  98. } elseif(($_POST['replycredit_extcredits'] == 0 || $_POST['replycredit_times'] == 0) && $this->thread['replycredit'] > 0) {
  99. $replycredit = 0;
  100. C::t('forum_replycredit')->delete($this->thread['tid']);
  101. updatemembercount($this->thread['authorid'], array($replycredit_rule['extcreditstype'] => $this->thread['replycredit']), 1, 'RCB', $this->thread['tid']);
  102. $this->param['threadupdatearr']['replycredit'] = 0;
  103. } else {
  104. $replycredit = $this->thread['replycredit'];
  105. }
  106. if($replycredit) {
  107. $this->param['threadupdatearr']['replycredit'] = $replycredit;
  108. $replydata = array(
  109. 'tid' => $this->thread['tid'],
  110. 'extcredits' => $_POST['replycredit_extcredits'],
  111. 'extcreditstype' => $replycredit_rule['extcreditstype'],
  112. 'times' => $_POST['replycredit_times'],
  113. 'membertimes' => $_POST['replycredit_membertimes'],
  114. 'random' => $_POST['replycredit_random']
  115. );
  116. C::t('forum_replycredit')->insert($replydata, false, true);
  117. }
  118. }
  119. }
  120. }
  121. public function before_deletepost() {
  122. global $replycredit_rule;
  123. $isfirstpost = $this->post['first'] ? 1 : 0;
  124. if($this->thread['replycredit'] && $isfirstpost && !$this->param['isanonymous']) {
  125. updatemembercount($this->post['authorid'], array($replycredit_rule['extcreditstype'] => $this->thread['replycredit']), true, 'RCB', $this->thread['tid']);
  126. C::t('forum_replycredit')->delete($this->thread['tid']);
  127. $this->param['handlereplycredit'] = true;
  128. }
  129. }
  130. }
  131. ?>