cloudsearch.inc.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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: cloudsearch.inc.php 29366 2012-04-09 03:00:26Z zhouxiaobo $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. if($_GET['formhash'] != FORMHASH) {
  12. showmessage('undefined_action');
  13. }
  14. if(!$_G['uid']) {
  15. showmessage('undefined_action');
  16. }
  17. if($_G['cookie']['ffids' . $_G['uid']]) {
  18. showmessage('get_forbidden_formula_forum_already');
  19. }
  20. require_once libfile('function/forum');
  21. $forbiddenFids = array();
  22. foreach(C::t('#cloudsearch#forum_forum_plugin')->fetch_all_forum_by_formula_for_plugin() as $forum) {
  23. if (check_formula_forum_isforbidden($forum['formulaperm'])) {
  24. $forbiddenFids[] = $forum['fid'];
  25. }
  26. }
  27. dsetcookie('ffids' . $_G['uid'], authcode(implode('D', $forbiddenFids), 'ENCODE'), 86400);
  28. function check_formula_forum_isforbidden($formula) {
  29. global $_G;
  30. $formula = dunserialize($formula);
  31. $medalperm = $formula['medal'];
  32. $permusers = $formula['users'];
  33. $permmessage = $formula['message'];
  34. $formulatext = $formula[0];
  35. $formula = $formula[1];
  36. if($_G['adminid'] == 1 || $_G['forum']['ismoderator'] || in_array($_G['groupid'], explode("\t", $_G['forum']['spviewperm']))) {
  37. return FALSE;
  38. }
  39. if($permusers) {
  40. $permusers = str_replace(array("\r\n", "\r"), array("\n", "\n"), $permusers);
  41. $permusers = explode("\n", trim($permusers));
  42. if(!in_array($_G['member']['username'], $permusers)) {
  43. return TRUE;
  44. }
  45. }
  46. if(!$formula) {
  47. return FALSE;
  48. }
  49. if(strexists($formula, '$memberformula[')) {
  50. preg_match_all("/\\\$memberformula\['(\w+?)'\]/", $formula, $a);
  51. $profilefields = array();
  52. foreach($a[1] as $field) {
  53. switch($field) {
  54. case 'regdate':
  55. $formula = preg_replace("/\{(\d{4})\-(\d{1,2})\-(\d{1,2})\}/e", "'\'\\1-'.sprintf('%02d', '\\2').'-'.sprintf('%02d', '\\3').'\''", $formula);
  56. case 'regday':
  57. break;
  58. case 'regip':
  59. case 'lastip':
  60. $formula = preg_replace("/\{([\d\.]+?)\}/", "'\\1'", $formula);
  61. $formula = preg_replace('/(\$memberformula\[\'(regip|lastip)\'\])\s*=+\s*\'([\d\.]+?)\'/', "strpos(\\1, '\\3')===0", $formula);
  62. case 'buyercredit':
  63. case 'sellercredit':
  64. space_merge($_G['member'], 'status');break;
  65. case substr($field, 0, 5) == 'field':
  66. space_merge($_G['member'], 'profile');
  67. $profilefields[] = $field;break;
  68. }
  69. }
  70. $memberformula = array();
  71. if($_G['uid']) {
  72. $memberformula = $_G['member'];
  73. if(in_array('regday', $a[1])) {
  74. $memberformula['regday'] = intval((TIMESTAMP - $memberformula['regdate']) / 86400);
  75. }
  76. if(in_array('regdate', $a[1])) {
  77. $memberformula['regdate'] = date('Y-m-d', $memberformula['regdate']);
  78. }
  79. $memberformula['lastip'] = $memberformula['lastip'] ? $memberformula['lastip'] : $_G['clientip'];
  80. } else {
  81. if(isset($memberformula['regip'])) {
  82. $memberformula['regip'] = $_G['clientip'];
  83. }
  84. if(isset($memberformula['lastip'])) {
  85. $memberformula['lastip'] = $_G['clientip'];
  86. }
  87. }
  88. }
  89. @eval("\$formulaperm = ($formula) ? TRUE : FALSE;");
  90. if(!$formulaperm) {
  91. if(!$permmessage) {
  92. $language = lang('forum/misc');
  93. $search = array('regdate', 'regday', 'regip', 'lastip', 'buyercredit', 'sellercredit', 'digestposts', 'posts', 'threads', 'oltime');
  94. $replace = array($language['formulaperm_regdate'], $language['formulaperm_regday'], $language['formulaperm_regip'], $language['formulaperm_lastip'], $language['formulaperm_buyercredit'], $language['formulaperm_sellercredit'], $language['formulaperm_digestposts'], $language['formulaperm_posts'], $language['formulaperm_threads'], $language['formulaperm_oltime']);
  95. for($i = 1; $i <= 8; $i++) {
  96. $search[] = 'extcredits'.$i;
  97. $replace[] = $_G['setting']['extcredits'][$i]['title'] ? $_G['setting']['extcredits'][$i]['title'] : $language['formulaperm_extcredits'].$i;
  98. }
  99. if($profilefields) {
  100. loadcache(array('fields_required', 'fields_optional'));
  101. foreach($profilefields as $profilefield) {
  102. $search[] = $profilefield;
  103. $replace[] = !empty($_G['cache']['fields_optional']['field_'.$profilefield]) ? $_G['cache']['fields_optional']['field_'.$profilefield]['title'] : $_G['cache']['fields_required']['field_'.$profilefield]['title'];
  104. }
  105. }
  106. $i = 0;$_G['forum_usermsg'] = '';
  107. foreach($search as $s) {
  108. if(in_array($s, array('digestposts', 'posts', 'threads', 'oltime', 'extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8'))) {
  109. $_G['forum_usermsg'] .= strexists($formulatext, $s) ? '<br />&nbsp;&nbsp;&nbsp;'.$replace[$i].': '.(@eval('return intval(getuserprofile(\''.$s.'\'));')) : '';
  110. } elseif(in_array($s, array('regdate', 'regip', 'regday'))) {
  111. $_G['forum_usermsg'] .= strexists($formulatext, $s) ? '<br />&nbsp;&nbsp;&nbsp;'.$replace[$i].': '.(@eval('return $memberformula[\''.$s.'\'];')) : '';
  112. }
  113. $i++;
  114. }
  115. $search = array_merge($search, array('and', 'or', '>=', '<=', '=='));
  116. $replace = array_merge($replace, array('&nbsp;&nbsp;<b>'.$language['formulaperm_and'].'</b>&nbsp;&nbsp;', '&nbsp;&nbsp;<b>'.$language['formulaperm_or'].'</b>&nbsp;&nbsp;', '&ge;', '&le;', '='));
  117. $_G['forum_formulamessage'] = str_replace($search, $replace, $formulatext);
  118. } else {
  119. $_G['forum_formulamessage'] = $permmessage;
  120. }
  121. return TRUE;
  122. }
  123. return FALSE;
  124. }