soso.class.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. /**
  3. * [Discuz! X] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: soso.class.php 36278 2016-12-09 07:52:35Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class plugin_soso_smilies_base {
  12. function _soso_smiles($smilieid = '', $maxsmilies = -1, $pid = 0, $imgcode = 0) {
  13. static $smiliecount;
  14. $imgsrc = '';
  15. $pid = intval($pid);
  16. $maxsmilies = intval($maxsmilies);
  17. $smilieid = $smiliekey = (string) $smilieid;
  18. $imgid = "soso_{$smilieid}";
  19. if($maxsmilies == 0) {
  20. return "{:soso_$smilieid:}";
  21. }
  22. if(strpos($smilieid, '_') === 0) {
  23. $realsmilieid = $smiliekey = substr($smilieid, 1, -2);
  24. $serverid = intval(substr($smilieid, -1));
  25. $imgsrc = "http://imgstore0{$serverid}.cdn.sogou.com/app/a/100520032/{$realsmilieid}";
  26. } elseif(strpos($smilieid, 'e') === 0) {
  27. $imgsrc = "http://imgstore01.cdn.sogou.com/app/a/100520032/{$smilieid}";
  28. } else {
  29. return "{:soso_$smilieid:}";
  30. }
  31. if($maxsmilies > 0) {
  32. if(!isset($smiliecount)) {
  33. $smiliecount = array();
  34. }
  35. $smiliekey = "{$pid}_{$smiliekey}";
  36. if(empty($smiliecount[$smiliekey])) {
  37. $smiliecount[$smiliekey] = 1;
  38. } else {
  39. $smiliecount[$smiliekey]++;
  40. }
  41. if($smiliecount[$smiliekey] > $maxsmilies) {
  42. return "{:soso_$smilieid:}";
  43. }
  44. }
  45. if($imgcode) {
  46. return "[img]{$imgsrc}[/img]";
  47. } else {
  48. return "<img class=\"s\" src=\"{$imgsrc}\" smilieid=\"{$imgid}\" border=\"0\" alt=\"\" />";
  49. }
  50. }
  51. }
  52. class plugin_soso_smilies extends plugin_soso_smilies_base {
  53. function global_footer() {
  54. global $_G;
  55. if(CURSCRIPT == 'home' && !empty($_G['uid'])) {
  56. if($_GET['ac'] == 'pm' && $_GET['mod'] == 'spacecp') {
  57. if(empty($_GET['op'])) {
  58. return $this->_soso_script('send');
  59. } elseif($_GET['op'] == 'showmsg') {
  60. return $this->_soso_script('pm');
  61. }
  62. } elseif($_GET['subop'] == 'view' && $_GET['do'] == 'pm' && $_GET['mod'] == 'space') {
  63. return $this->_soso_script('reply');
  64. }
  65. }
  66. return '';
  67. }
  68. function discuzcode($param) {
  69. global $_G;
  70. if($param['caller'] == 'discuzcode') {
  71. $smileyoff = $param['param'][1];
  72. $allowsmilies = $param['param'][4];
  73. $pid = $param['param'][12];
  74. $this->discuzcode_callback_soso_smiles_1($pid, 1);
  75. if(!$smileyoff && $allowsmilies && strpos($_G['discuzcodemessage'], '{:soso_') !== false) {
  76. $_G['discuzcodemessage'] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'discuzcode_callback_soso_smiles_1'), $_G['discuzcodemessage'], $_G['setting']['maxsmilies']);
  77. }
  78. } else {
  79. $_G['discuzcodemessage'] = preg_replace("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", '', $_G['discuzcodemessage']);
  80. }
  81. }
  82. function discuzcode_callback_soso_smiles_1($matches, $action = 0) {
  83. static $pid = 0;
  84. if($action == 1) {
  85. $pid = $matches;
  86. } else {
  87. global $_G;
  88. return $this->_soso_smiles($matches[1], $_G['setting']['maxsmilies'], $pid);
  89. }
  90. }
  91. function _soso_script($textareaid) {
  92. return '<script type="text/javascript" src="source/plugin/soso_smilies/js/soso_smilies.js?'.VERHASH.'" charset="utf-8"></script>'.
  93. '<script type="text/javascript" charset="utf-8">SOSO_EXP_CHECK("'.$textareaid.'");</script>';
  94. }
  95. }
  96. class plugin_soso_smilies_forum extends plugin_soso_smilies {
  97. function forumdisplay_bottom_output($template = array()) {
  98. global $_G;
  99. if(!empty($_G['uid'])) {
  100. return $this->_soso_script('fastpost');
  101. }
  102. }
  103. function viewthread_fastpost_content_output($template = array()) {
  104. global $_G;
  105. if(!empty($_G['uid'])) {
  106. return $this->_soso_script('fastpost');
  107. }
  108. }
  109. function post_smileyoff() {
  110. global $_G;
  111. if(!empty($_GET['message'])) {
  112. $_G['cache']['smileycodes'][] = '{:soso_';
  113. }
  114. return '';
  115. }
  116. function post_bottom_output($template = array()) {
  117. global $_G;
  118. if(!empty($_G['uid'])) {
  119. return $this->_soso_script('newthread');
  120. }
  121. }
  122. }
  123. class plugin_soso_smilies_home extends plugin_soso_smilies {
  124. function spacecp_profile_bottom_output() {
  125. global $_G;
  126. if(!empty($_G['uid'])) {
  127. return $this->_soso_script('sightml');
  128. }
  129. }
  130. function spacecp_profile_sightml() {
  131. global $_G;
  132. if($_GET['ac'] == 'profile' && submitcheck('profilesubmitbtn') && !empty($_POST['sightml'])) {
  133. $_POST['sightml'] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'spacecp_profile_sightml_callback_soso_smiles_1'), $_POST['sightml'], $_G['setting']['maxsmilies']);
  134. }
  135. }
  136. function spacecp_profile_sightml_callback_soso_smiles_1($matches) {
  137. return $this->_soso_smiles($matches[1], -1, 0, 1);
  138. }
  139. function spacecp_pm_output() {
  140. global $_G;
  141. if(!empty($GLOBALS['msglist'])) {
  142. foreach($GLOBALS['msglist'] as $day => $result) {
  143. foreach($result as $key => $value) {
  144. $GLOBALS['msglist'][$day][$key]['message'] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'spacecp_pm_output_space_pm_output_follow_soso_output_callback_soso_smiles_1'), $GLOBALS['msglist'][$day][$key]['message'], $_G['setting']['maxsmilies']);
  145. }
  146. }
  147. } elseif($_GET['op'] == 'showchatmsg' && $GLOBALS['list']) {
  148. foreach($GLOBALS['list'] as $key => $value) {
  149. $GLOBALS['list'][$key]['message'] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'spacecp_pm_output_space_pm_output_follow_soso_output_callback_soso_smiles_1'), $GLOBALS['list'][$key]['message'], $_G['setting']['maxsmilies']);
  150. }
  151. }
  152. }
  153. function space_pm_output() {
  154. global $_G;
  155. if(!empty($GLOBALS['list'])) {
  156. foreach($GLOBALS['list'] as $key => $value) {
  157. if(!empty($_GET['subop'])) {
  158. $GLOBALS['list'][$key] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'spacecp_pm_output_space_pm_output_follow_soso_output_callback_soso_smiles_1'), $GLOBALS['list'][$key], $_G['setting']['maxsmilies']);
  159. } else {
  160. $GLOBALS['list'][$key] = preg_replace("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", '', $GLOBALS['list'][$key], $_G['setting']['maxsmilies']);
  161. }
  162. }
  163. }
  164. }
  165. function follow_soso_output() {
  166. global $_G;
  167. if(!empty($GLOBALS['list']['content'])) {
  168. foreach($GLOBALS['list']['content'] as $key => $value) {
  169. $GLOBALS['list']['content'][$key]['content'] = preg_replace_callback("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", array($this, 'spacecp_pm_output_space_pm_output_follow_soso_output_callback_soso_smiles_1'), $GLOBALS['list']['content'][$key]['content'], $_G['setting']['maxsmilies']);
  170. }
  171. }
  172. }
  173. function spacecp_pm_output_space_pm_output_follow_soso_output_callback_soso_smiles_1($matches) {
  174. return $this->_soso_smiles($matches[1], -1, 0, 0);
  175. }
  176. }
  177. class mobileplugin_soso_smilies extends plugin_soso_smilies_base {
  178. function discuzcode($param) {
  179. global $_G;
  180. $_G['discuzcodemessage'] = preg_replace("/\{\:soso_((e\d+)|(_\d+_\d))\:\}/", '', $_G['discuzcodemessage']);
  181. }
  182. }