国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

301 lignes
9.6KB

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