国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

287 lines
9.2KB

  1. <?php
  2. /**
  3. *
  4. * 评论
  5. *
  6. * @version $Id: feedback.php$
  7. * @package DedeBIZ.Site
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license
  10. * @link https://www.dedebiz.com
  11. */
  12. require_once(dirname(__FILE__) . "/../include/common.inc.php");
  13. if ($cfg_feedback_forbid == 'Y') {
  14. echo json_encode(array(
  15. "code" => -1,
  16. "msg" => "系统已经禁止评论功能",
  17. "data" => null,
  18. ));
  19. exit();
  20. }
  21. require_once(DEDEINC . "/filter.inc.php");
  22. if (!isset($action)) {
  23. $action = '';
  24. }
  25. $msg = isset($msg) ? $msg : "";
  26. $feedbacktype = isset($feedbacktype) ? $feedbacktype : "";
  27. $validate = isset($validate) ? $validate : "";
  28. $pwd = isset($pwd) ? $pwd : "";
  29. $comtype = isset($comtype) ? $comtype : "";
  30. $good = isset($good) ? intval($good) : 0;
  31. $cfg_formmember = isset($cfg_formmember) ? true : false;
  32. $ischeck = $cfg_feedbackcheck == 'Y' ? 0 : 1;
  33. $aid = isset($aid) ? intval($aid) : 0;
  34. $fid = isset($fid) ? intval($fid) : 0; // 用来标记回复评论的变量
  35. if (empty($aid) && empty($fid)) {
  36. echo json_encode(array(
  37. "code" => -1,
  38. "msg" => "文档ID不能为空",
  39. "data" => null,
  40. ));
  41. exit();
  42. }
  43. include_once(DEDEINC . "/memberlogin.class.php");
  44. $cfg_ml = new MemberLogin();
  45. //查看评论
  46. /*
  47. function __ViewFeedback(){ }
  48. */
  49. //-----------------------------------
  50. if ($action == '' || $action == 'show') {
  51. //读取文档信息
  52. $arcRow = GetOneArchive($aid);
  53. if (empty($arcRow['aid'])) {
  54. echo json_encode(array(
  55. "code" => -1,
  56. "msg" => "无法查看未知文档的评论",
  57. "data" => null,
  58. ));
  59. exit();
  60. }
  61. $where_sql = "WHERE 1=1";
  62. if (!empty($fid)) {
  63. $where_sql .= " AND fb.fid={$fid}";
  64. }
  65. if (!empty($aid)) {
  66. $where_sql .= " AND fb.aid={$aid}";
  67. }
  68. // 调用20条热评
  69. $querystring = "SELECT fb.*,mb.userid,mb.face as mface,mb.spacesta,mb.scores,mb.sex FROM `#@__feedback` fb
  70. LEFT JOIN `#@__member` mb on mb.mid = fb.mid $where_sql AND fb.ischeck='1' ORDER BY fb.good DESC";
  71. $dsql->Execute('fb', $querystring . " LIMIT 20 ");
  72. $data = array();
  73. while ($row = $dsql->GetArray('fb')) {
  74. $row['face'] = empty($row['mface']) ? $GLOBALS['cfg_cmspath'] . '/static/img/avatar.png' : $row['mface'];
  75. $row['dtimestr'] = MyDate('Y-m-d', $row['dtime']);
  76. unset($row['ip']);
  77. $data[] = $row;
  78. }
  79. echo json_encode(array(
  80. "code" => 200,
  81. "msg" => "",
  82. "data" => $data,
  83. ));
  84. exit;
  85. }
  86. //发表评论
  87. //------------------------------------
  88. /*
  89. function __SendFeedback(){ }
  90. */ else if ($action == 'send') {
  91. //读取文档信息
  92. $arcRow = GetOneArchive($aid);
  93. if ((empty($arcRow['aid']) || $arcRow['notpost'] == '1') && empty($fid)) {
  94. echo json_encode(array(
  95. "code" => -1,
  96. "msg" => "无法对该文档发表评论",
  97. "data" => null,
  98. ));
  99. exit();
  100. }
  101. //如果没有登录,则需要检查验证码
  102. if (!$cfg_ml->IsLogin()) {
  103. if ($feedbacktype === 'good') {
  104. // 未登录点good不进行数据库记录
  105. echo json_encode(array(
  106. "code" => 200,
  107. "msg" => "",
  108. "data" => $good + 1,
  109. ));
  110. exit();
  111. }
  112. $svali = GetCkVdValue();
  113. if (strtolower($validate) != $svali || $svali == '') {
  114. // ResetVdValue();
  115. echo json_encode(array(
  116. "code" => -1,
  117. "msg" => "验证码错误",
  118. "data" => null,
  119. ));
  120. exit();
  121. }
  122. }
  123. //检查用户登录
  124. if (empty($notuser)) {
  125. $notuser = 0;
  126. }
  127. if ($cfg_feedback_guest == 'N' && $cfg_ml->M_ID < 1) {
  128. echo json_encode(array(
  129. "code" => -1,
  130. "msg" => "管理员禁用了游客评论",
  131. "data" => null,
  132. ));
  133. exit();
  134. }
  135. //匿名发表评论
  136. if ($notuser == 1) {
  137. $username = $cfg_ml->M_ID > 0 ? '匿名' : '游客';
  138. }
  139. //已登录的用户
  140. else if ($cfg_ml->M_ID > 0) {
  141. $username = $cfg_ml->M_UserName;
  142. }
  143. //用户身份验证
  144. else {
  145. if ($username != '' && $pwd != '') {
  146. $rs = $cfg_ml->CheckUser($username, $pwd);
  147. if ($rs == 1) {
  148. $dsql->ExecuteNoneQuery("UPDATE `#@__member` SET logintime='" . time() . "',loginip='" . GetIP() . "' WHERE mid='{$cfg_ml->M_ID}'; ");
  149. } else {
  150. $username = '游客';
  151. }
  152. } else {
  153. $username = '游客';
  154. }
  155. }
  156. $ip = GetIP();
  157. $dtime = time();
  158. //检查评论间隔时间;
  159. if (!empty($cfg_feedback_time)) {
  160. //检查最后发表评论时间,如果未登录判断当前IP最后评论时间
  161. if ($cfg_ml->M_ID > 0) {
  162. $where = "WHERE `mid` = '$cfg_ml->M_ID'";
  163. } else {
  164. $where = "WHERE `ip` = '$ip'";
  165. }
  166. $row = $dsql->GetOne("SELECT dtime FROM `#@__feedback` $where ORDER BY `id` DESC ");
  167. if (is_array($row) && $dtime - $row['dtime'] < $cfg_feedback_time) {
  168. ResetVdValue();
  169. echo json_encode(array(
  170. "code" => -1,
  171. "msg" => "管理员设置了评论间隔时间,请稍等休息一下",
  172. "data" => null,
  173. ));
  174. exit();
  175. }
  176. }
  177. if (empty($face)) {
  178. $face = 0;
  179. }
  180. $face = intval($face);
  181. $typeid = (isset($typeid) && is_numeric($typeid)) ? intval($typeid) : 0;
  182. extract($arcRow, EXTR_SKIP);
  183. $msg = cn_substrR(TrimMsg($msg), $cfg_feedback_msglen);
  184. $username = cn_substrR(HtmlReplace($username, 2), 20);
  185. if (empty($feedbacktype) || !in_array($feedbacktype, array('good', 'bad'))) {
  186. $feedbacktype = 'feedback';
  187. }
  188. //保存评论内容
  189. if ($comtype == 'comments' || $comtype == 'reply') {
  190. $arctitle = empty($title) ? "" : addslashes($title);
  191. $typeid = intval($typeid);
  192. $ischeck = intval($ischeck);
  193. $feedbacktype = preg_replace("#[^0-9a-z]#i", "", $feedbacktype);
  194. if ($msg != '') {
  195. $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`fid`, `username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)
  196. VALUES ('$aid','$typeid','$fid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); ";
  197. $rs = $dsql->ExecuteNoneQuery($inquery);
  198. if (!$rs) {
  199. echo json_encode(array(
  200. "code" => -1,
  201. "msg" => "发表评论错误",
  202. "data" => null,
  203. ));
  204. //echo $dsql->GetError();
  205. exit();
  206. }
  207. }
  208. }
  209. if ($feedbacktype == 'bad') {
  210. $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores-{cfg_feedback_sub},badpost=badpost+1,lastpost='$dtime' WHERE id='$aid' ");
  211. } else if ($feedbacktype == 'good') {
  212. $row = $dsql->GetOne("SELECT COUNT(*) as dd FROM `#@__feedback_goodbad` WHERE fid={$fid} AND mid={$cfg_ml->M_ID} AND fgtype=0");
  213. if (intval($row['dd']) <= 0) {
  214. $dsql->ExecuteNoneQuery("INSERT INTO `#@__feedback_goodbad` (`mid`, `fid`, `fgtype`) VALUES ('$cfg_ml->M_ID', '$fid', '0');");
  215. $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores+{$cfg_feedback_add},goodpost=goodpost+1,lastpost='$dtime' WHERE id='$aid' ");
  216. } else {
  217. $dsql->ExecuteNoneQuery("DELETE FROM `#@__feedback_goodbad` WHERE mid='{$cfg_ml->M_ID}' AND fid={$fid} AND fgtype=0");
  218. $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores-{$cfg_feedback_add},goodpost=goodpost-1,lastpost='$dtime' WHERE id='$aid' ");
  219. }
  220. $rr = $dsql->GetOne("SELECT COUNT(*) as dd FROM `#@__feedback_goodbad` WHERE fid={$fid}");
  221. $dsql->ExecuteNoneQuery("UPDATE `#@__feedback` SET good='{$rr['dd']}' WHERE id={$fid}");
  222. echo json_encode(array(
  223. "code" => 200,
  224. "msg" => "",
  225. "data" => $rr['dd'],
  226. ));
  227. exit;
  228. } else {
  229. $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores+1,lastpost='$dtime' WHERE id='$aid' ");
  230. }
  231. if ($cfg_ml->M_ID > 0) {
  232. $dsql->ExecuteNoneQuery("UPDATE `#@__member` SET scores=scores+{$cfg_sendfb_scores} WHERE mid='{$cfg_ml->M_ID}' ");
  233. }
  234. //统计用户发出的评论
  235. if ($cfg_ml->M_ID > 0) {
  236. $row = $dsql->GetOne("SELECT COUNT(*) AS nums FROM `#@__feedback` WHERE `mid`='" . $cfg_ml->M_ID . "'");
  237. $dsql->ExecuteNoneQuery("UPDATE `#@__member_tj` SET `feedback`='$row[nums]' WHERE `mid`='" . $cfg_ml->M_ID . "'");
  238. }
  239. $_SESSION['sedtime'] = time();
  240. if (empty($uid) && isset($cmtuser)) $uid = $cmtuser;
  241. if ($ischeck == 0) {
  242. echo json_encode(array(
  243. "code" => 200,
  244. "msg" => "成功发表评论,但需审核后才会显示你的评论",
  245. "data" => "ok",
  246. ));
  247. } else {
  248. echo json_encode(array(
  249. "code" => 200,
  250. "msg" => "成功发表评论,现在转到评论页面",
  251. "data" => "ok",
  252. ));
  253. }
  254. exit();
  255. }