function_feed.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  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: function_feed.php 28299 2012-02-27 08:48:36Z svn_project_zhangjie $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. function feed_add($icon, $title_template='', $title_data=array(), $body_template='', $body_data=array(), $body_general='', $images=array(), $image_links=array(), $target_ids='', $friend='', $appid='', $returnid=0, $id=0, $idtype='', $uid=0, $username='') {
  12. global $_G;
  13. if(!helper_access::check_module('feed')) {
  14. return false;
  15. }
  16. $title_template = $title_template?lang('feed', $title_template):'';
  17. $body_template = $body_template?lang('feed', $body_template):'';
  18. $body_general = $body_general?lang('feed', $body_general):'';
  19. if(empty($uid) || empty($username)) {
  20. $uid = $username = '';
  21. }
  22. $feedarr = array(
  23. 'appid' => $appid,
  24. 'icon' => $icon,
  25. 'uid' => $uid ? intval($uid) : $_G['uid'],
  26. 'username' => $username ? $username : $_G['username'],
  27. 'dateline' => $_G['timestamp'],
  28. 'title_template' => $title_template,
  29. 'body_template' => $body_template,
  30. 'body_general' => $body_general,
  31. 'image_1' => empty($images[0])?'':$images[0],
  32. 'image_1_link' => empty($image_links[0])?'':$image_links[0],
  33. 'image_2' => empty($images[1])?'':$images[1],
  34. 'image_2_link' => empty($image_links[1])?'':$image_links[1],
  35. 'image_3' => empty($images[2])?'':$images[2],
  36. 'image_3_link' => empty($image_links[2])?'':$image_links[2],
  37. 'image_4' => empty($images[3])?'':$images[3],
  38. 'image_4_link' => empty($image_links[3])?'':$image_links[3],
  39. 'target_ids' => $target_ids,
  40. 'friend' => $friend,
  41. 'id' => $id,
  42. 'idtype' => $idtype
  43. );
  44. $feedarr['title_data'] = serialize($title_data);
  45. $feedarr['body_data'] = serialize($body_data);
  46. $feedarr['hash_data'] = empty($title_data['hash_data'])?'':$title_data['hash_data'];
  47. if(is_numeric($icon)) {
  48. $feed_table = 'home_feed_app';
  49. unset($feedarr['id'], $feedarr['idtype']);
  50. } else {
  51. if($feedarr['hash_data']) {
  52. $oldfeed = C::t('home_feed')->fetch_feedid_by_hashdata($feedarr['uid'], $feedarr['hash_data']);
  53. if($oldfeed) {
  54. return 0;
  55. }
  56. }
  57. $feed_table = 'home_feed';
  58. }
  59. return C::t($feed_table)->insert($feedarr, $returnid);
  60. }
  61. function mkfeed($feed, $actors=array()) {
  62. global $_G;
  63. $feed['title_data'] = empty($feed['title_data'])?array():(is_array($feed['title_data'])?$feed['title_data']:@dunserialize($feed['title_data']));
  64. if(!is_array($feed['title_data'])) $feed['title_data'] = array();
  65. $feed['body_data'] = empty($feed['body_data'])?array():(is_array($feed['body_data'])?$feed['body_data']:@dunserialize($feed['body_data']));
  66. if(!is_array($feed['body_data'])) $feed['body_data'] = array();
  67. $searchs = $replaces = array();
  68. if($feed['title_data']) {
  69. foreach (array_keys($feed['title_data']) as $key) {
  70. $searchs[] = '{'.$key.'}';
  71. $replaces[] = $feed['title_data'][$key];
  72. }
  73. }
  74. $searchs[] = '{actor}';
  75. $replaces[] = empty($actors)?"<a href=\"home.php?mod=space&uid=$feed[uid]\" target=\"_blank\">$feed[username]</a>":implode(lang('core', 'dot'), $actors);
  76. $feed['title_template'] = str_replace($searchs, $replaces, $feed['title_template']);
  77. $feed['title_template'] = feed_mktarget($feed['title_template']);
  78. $searchs = $replaces = array();
  79. $searchs[] = '{actor}';
  80. $replaces[] = empty($actors)?"<a href=\"home.php?mod=space&uid=$feed[uid]\" target=\"_blank\">$feed[username]</a>":implode(lang('core', 'dot'), $actors);
  81. if($feed['body_data'] && is_array($feed['body_data'])) {
  82. foreach (array_keys($feed['body_data']) as $key) {
  83. $searchs[] = '{'.$key.'}';
  84. $replaces[] = $feed['body_data'][$key];
  85. }
  86. }
  87. $feed['magic_class'] = '';
  88. if(!empty($feed['body_data']['magic_thunder'])) {
  89. $feed['magic_class'] = 'magicthunder';
  90. }
  91. $feed['body_template'] = str_replace($searchs, $replaces, $feed['body_template']);
  92. $feed['body_template'] = feed_mktarget($feed['body_template']);
  93. $feed['body_general'] = feed_mktarget($feed['body_general']);
  94. if(is_numeric($feed['icon'])) {
  95. $feed['icon_image'] = "http://appicon.manyou.com/icons/{$feed['icon']}";
  96. } else {
  97. $feed['icon_image'] = STATICURL."image/feed/{$feed['icon']}.gif";
  98. }
  99. $feed['new'] = 0;
  100. if($_G['cookie']['home_readfeed'] && $feed['dateline']+300 > $_G['cookie']['home_readfeed']) {
  101. $feed['new'] = 1;
  102. }
  103. return $feed;
  104. }
  105. function feed_mktarget($html) {
  106. global $_G;
  107. if($html && $_G['setting']['feedtargetblank']) {
  108. $html = preg_replace("/target\=([\'\"]?)[\w]+([\'\"]?)/i", '', $html);
  109. $html = preg_replace("/<a(.+?)href=([\'\"]?)([^>\s]+)\\2([^>]*)>/i", '<a href="\\3" target="_blank" \\1 \\4>', $html);
  110. }
  111. return $html;
  112. }
  113. function feed_publish($id, $idtype, $add=0) {
  114. global $_G;
  115. $id = intval($id);
  116. if(empty($id)) {
  117. return;
  118. }
  119. if(!helper_access::check_module('feed')) {
  120. return false;
  121. }
  122. $setarr = array();
  123. switch ($idtype) {
  124. case 'blogid':
  125. $value = array_merge(
  126. C::t('home_blog')->fetch($id),
  127. C::t('home_blogfield')->fetch($id)
  128. );
  129. if($value) {
  130. if($value['friend'] != 3) {
  131. $setarr['icon'] = 'blog';
  132. $setarr['id'] = $value['blogid'];
  133. $setarr['idtype'] = $idtype;
  134. $setarr['uid'] = $value['uid'];
  135. $setarr['username'] = $value['username'];
  136. $setarr['dateline'] = $value['dateline'];
  137. $setarr['target_ids'] = $value['target_ids'];
  138. $setarr['friend'] = $value['friend'];
  139. $setarr['hot'] = $value['hot'];
  140. $status = $value['status'];
  141. $url = "home.php?mod=space&uid=$value[uid]&do=blog&id=$value[blogid]";
  142. if($value['friend'] == 4) {
  143. $setarr['title_template'] = 'feed_blog_password';
  144. $setarr['title_data'] = array('subject' => "<a href=\"$url\">$value[subject]</a>");
  145. } else {
  146. if($value['pic']) {
  147. $setarr['image_1'] = pic_cover_get($value['pic'], $value['picflag']);
  148. $setarr['image_1_link'] = $url;
  149. }
  150. $setarr['title_template'] = 'feed_blog_title';
  151. $setarr['body_template'] = 'feed_blog_body';
  152. $value['message'] = preg_replace("/&[a-z]+\;/i", '', $value['message']);
  153. $setarr['body_data'] = array(
  154. 'subject' => "<a href=\"$url\">$value[subject]</a>",
  155. 'summary' => getstr($value['message'], 150, 0, 0, 0, -1)
  156. );
  157. }
  158. }
  159. }
  160. break;
  161. case 'albumid':
  162. $key = 1;
  163. if($id > 0) {
  164. $query = C::t('home_pic')->fetch_all_by_sql('p.'.DB::field('albumid', $id), 'a.dateline DESC', 0, 4);
  165. foreach($query as $value) {
  166. if($value['friend'] <= 2) {
  167. if(empty($setarr['icon'])) {
  168. $setarr['icon'] = 'album';
  169. $setarr['id'] = $value['albumid'];
  170. $setarr['idtype'] = $idtype;
  171. $setarr['uid'] = $value['uid'];
  172. $setarr['username'] = $value['username'];
  173. $setarr['dateline'] = $value['dateline'];
  174. $setarr['target_ids'] = $value['target_ids'];
  175. $setarr['friend'] = $value['friend'];
  176. $status = $value['status'];
  177. $setarr['title_template'] = 'feed_album_title';
  178. $setarr['body_template'] = 'feed_album_body';
  179. $setarr['body_data'] = array(
  180. 'album' => "<a href=\"home.php?mod=space&uid=$value[uid]&do=album&id=$value[albumid]\">$value[albumname]</a>",
  181. 'picnum' => $value['picnum']
  182. );
  183. }
  184. $setarr['image_'.$key] = pic_get($value['filepath'], 'album', $value['thumb'], $value['remote']);
  185. $setarr['image_'.$key.'_link'] = "home.php?mod=space&uid=$value[uid]&do=album&picid=$value[picid]";
  186. $key++;
  187. } else {
  188. break;
  189. }
  190. }
  191. }
  192. break;
  193. case 'picid':
  194. $plussql = $id>0 ? 'p.'.DB::field('picid', $id) : 'p.'.DB::field('uid', $_G[uid]).' ORDER BY dateline DESC LIMIT 1';
  195. $query = C::t('home_pic')->fetch_all_by_sql($plussql);
  196. if($value = $query[0]) {
  197. if(empty($value['friend'])) {
  198. $setarr['icon'] = 'album';
  199. $setarr['id'] = $value['picid'];
  200. $setarr['idtype'] = $idtype;
  201. $setarr['uid'] = $value['uid'];
  202. $setarr['username'] = $value['username'];
  203. $setarr['dateline'] = $value['dateline'];
  204. $setarr['target_ids'] = $value['target_ids'];
  205. $setarr['friend'] = $value['friend'];
  206. $setarr['hot'] = $value['hot'];
  207. $status = $value['status'];
  208. $url = "home.php?mod=space&uid=$value[uid]&do=album&picid=$value[picid]";
  209. $setarr['image_1'] = pic_get($value['filepath'], 'album', $value['thumb'], $value['remote']);
  210. $setarr['image_1_link'] = $url;
  211. $setarr['title_template'] = 'feed_pic_title';
  212. $setarr['body_template'] = 'feed_pic_body';
  213. $setarr['body_data'] = array('title' => $value['title']);
  214. }
  215. }
  216. break;
  217. }
  218. if($setarr['icon']) {
  219. $setarr['title_template'] = $setarr['title_template']?lang('feed', $setarr['title_template']):'';
  220. $setarr['body_template'] = $setarr['body_template']?lang('feed', $setarr['body_template']):'';
  221. $setarr['body_general'] = $setarr['body_general']?lang('feed', $setarr['body_general']):'';
  222. $setarr['title_data']['hash_data'] = "{$idtype}{$id}";
  223. $setarr['title_data'] = serialize($setarr['title_data']);
  224. $setarr['body_data'] = serialize($setarr['body_data']);
  225. $feedid = 0;
  226. if(!$add && $setarr['id']) {
  227. $feedid = C::t('home_feed')->fetch($id, $idtype);
  228. $feedid = $feedid['feedid'];
  229. }
  230. if($status == 0) {
  231. if($feedid) {
  232. C::t('home_feed')->update('', $setarr, '', '', $feedid);
  233. } else {
  234. C::t('home_feed')->insert($setarr);
  235. }
  236. }
  237. }
  238. }
  239. ?>