PageRenderTime 56ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 1ms

/core/service/share.service.php

https://github.com/alin40404/FanweShare
PHP | 2590 lines | 1981 code | 273 blank | 336 comment | 296 complexity | a8b4fc1e44a6080785522861da0e2b83 MD5 | raw file
Possible License(s): Apache-2.0

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 方维购物分享网站系统 (Build on ThinkPHP)
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. /**
  8. * share.service.php
  9. *
  10. * 分享服务类
  11. *
  12. * @package service
  13. * @author awfigq <awfigq@qq.com>
  14. */
  15. class ShareService
  16. {
  17. /*===========分享列表、详细 Begin==============*/
  18. /**
  19. * 检测分享中的敏感词
  20. * @param string $content 分享内容
  21. * @param string $type content,title,tag 检测类型
  22. * @return array(
  23. * 'error_code' => '错误代码'
  24. * 'error_msg' => 错误描述
  25. * )
  26. */
  27. public function checkWord(&$content,$type)
  28. {
  29. $result = array('error_code'=>0,'error_msg'=>'');
  30. $server = FS("ContentCheck");
  31. if($server->check($content) > 0)
  32. {
  33. $words_found = implode(",", $server->words_found);
  34. $tt_str = lang('share','word_'.$type);
  35. $result['error_code'] = $server->result;
  36. $result['error_msg'] = sprintf(lang('share','word_tips_'. $server->result),$tt_str,$words_found);
  37. }
  38. return $result;
  39. }
  40. /**
  41. * 通过的分享提交表单的数据处理
  42. * @param mix $_POST 为标准分享表单 $_POST['type'] default:默认,bar:主题,ershou:二手,ask:问答
  43. * $_POST['share_data'] = photo 有图 goods 有产品 goods_photo:有图有商品 default:都没有
  44. * * 返回
  45. * array(
  46. * 'status' => xxx 状态 bool
  47. * 'share_id' => share_id
  48. * 'error_code' => '错误代码'
  49. * 'error_msg' => 错误描述
  50. * )
  51. */
  52. public function submit($_POST,$is_check = true,$is_score = true)
  53. {
  54. //创建分享数据
  55. global $_FANWE;
  56. $share_content = htmlspecialchars(trim($_POST['content']));
  57. $share_data = array();
  58. $share_data['content'] = $share_content;
  59. $share_data['uid'] = intval($_FANWE['uid']);
  60. $share_data['parent_id'] = intval($_POST['parent_id']); //分享的转发
  61. $share_data['rec_id'] = intval($_POST['rec_id']); //关联的编号
  62. $share_data['base_id'] = intval($_POST['base_id']);
  63. $share_data['albumid'] = intval($_POST['albumid']);
  64. if($is_check)
  65. {
  66. $check_result = ShareService::checkWord($share_data['content'],'content');
  67. if($check_result['error_code'] == 1)
  68. {
  69. $check_result['status'] = false;
  70. return $check_result;
  71. }
  72. }
  73. /*//当为转发的时候,获取原创ID
  74. if($share_data['parent_id'] > 0 && $share_data['base_id'] == 0)
  75. {
  76. $base_id = intval(FDB::resultFirst('SELECT base_id
  77. FROM '.FDB::table("share").'
  78. WHERE share_id = '.$share_data['parent_id']));
  79. $share_data['base_id'] = $base_id == 0 ? $share_data['parent_id'] : $base_id;
  80. }*/
  81. if(isset($_POST['type']))
  82. $share_data['type'] = $_POST['type'];
  83. $share_data['title'] = isset($_POST['title']) ? htmlspecialchars(trim($_POST['title'])) : '';
  84. if(!empty($share_data['title']) && $is_check)
  85. {
  86. $check_result = ShareService::checkWord($share_data['title'],'title');
  87. if($check_result['error_code'] == 1)
  88. {
  89. $check_result['status'] = false;
  90. return $check_result;
  91. }
  92. }
  93. $data['share'] = $share_data;
  94. //创建分享商品数据
  95. $share_goods_data = array();
  96. if(isset($_POST['goods']) && is_array($_POST['goods']) && count($_POST['goods']) > 0)
  97. {
  98. $share_goods = $_POST['goods'];
  99. foreach($share_goods as $goods)
  100. {
  101. $goods = unserialize(authcode($goods,'DECODE'));
  102. $gkey = $goods['item']['key'];
  103. $c_data = array();
  104. $c_data['img'] = $goods['item']['img'];
  105. $c_data['server_code'] = $goods['item']['server_code'];
  106. $c_data['goods_key'] = $gkey;
  107. $c_data['name'] = addslashes(htmlspecialchars($goods['item']['name']));
  108. $c_data['url'] = $goods['item']['url'];
  109. $c_data['taoke_url'] = $goods['item']['taoke_url'];
  110. $c_data['price'] = $goods['item']['price'];
  111. $c_data['sort'] = isset($_POST['goods_sort'][$gkey]) ? intval($_POST['goods_sort'][$gkey]) : 10;
  112. $c_data['shop_name'] = addslashes(htmlspecialchars($goods['shop']['name']));
  113. $c_data['shop_logo'] = $goods['shop']['logo'];
  114. $c_data['shop_server_code'] = $goods['shop']['server_code'];
  115. $c_data['shop_url'] = $goods['shop']['url'];
  116. $c_data['shop_taoke_url'] = $goods['shop']['taoke_url'];
  117. array_push($share_goods_data,$c_data);
  118. }
  119. }
  120. $data['share_goods'] = $share_goods_data;
  121. //创建图库数据
  122. $share_photos_data = array();
  123. if(isset($_POST['pics']) && is_array($_POST['pics']) && count($_POST['pics']) > 0)
  124. {
  125. $share_photos = $_POST['pics'];
  126. foreach($share_photos as $pkey => $photo)
  127. {
  128. $photo = authcode($photo,'DECODE');
  129. $photo = unserialize($photo);
  130. $c_data = array();
  131. $c_data['img'] = $photo['path'];
  132. $c_data['server_code'] = $photo['server_code'];
  133. $type = $photo['type'];
  134. if(empty($type) || !in_array($type,array('default', 'dapei', 'look')))
  135. $type = 'default';
  136. $c_data['type'] = $type;
  137. $c_data['sort'] = isset($_POST['pics_sort'][$pkey]) ? intval($_POST['pics_sort'][$pkey]) : 10;
  138. array_push($share_photos_data,$c_data);
  139. }
  140. }
  141. $data['share_photo'] = $share_photos_data;
  142. if($share_data['albumid'] > 0 && count($share_photos_data) == 0 && count($share_goods_data) == 0)
  143. exit;
  144. $data['share_tag'] = array();
  145. if(isset($_POST['tags']) && trim($_POST['tags']) != '')
  146. {
  147. $tags = htmlspecialchars(trim($_POST['tags']));
  148. if($is_check)
  149. {
  150. $check_result = ShareService::checkWord($tags,'tag');
  151. if($check_result['error_code'] == 1)
  152. {
  153. $check_result['status'] = false;
  154. return $check_result;
  155. }
  156. }
  157. $tags = str_replace(' ',' ',$tags);
  158. $data['share_tag'] = explode(' ',$tags);
  159. }
  160. $data['pub_out_check'] = intval($_POST['pub_out_check']); //发送到外部微博
  161. $result = ShareService::save($data,$is_score);
  162. return $result;
  163. }
  164. /**
  165. * 保存分享数据
  166. * 注:所有图片地址经处理过并转存过的临时图片或远程图片
  167. * $data = array( //分享的基本数据
  168. * 'share'=>array(
  169. * 'uid'=> xxx, //分享的会员ID
  170. * 'parent_id' => xxx //转发的分享ID
  171. * 'content' => xxx //分享的内容
  172. * 'type'=> xxx //分享的来源,默认为default
  173. * 'title' => xxx //分享的标题
  174. * 'base_id' => xxx //原创ID
  175. * ),
  176. *
  177. * 'share_photo'=>array( //图库 #可选#
  178. * array( //多张图
  179. * 'img' => xxx //原图
  180. * )
  181. * ),
  182. * 'share_goods'=>array( //分享的商品 #可选#
  183. * array(
  184. * 'img' => xxx //商品图
  185. * 'name' => xxx //品名
  186. * 'url' => xxx //商品地址
  187. * 'price' => xxx //价格
  188. * 'shop_name' => xxx //商户名称
  189. * 'shop_logo' => xxx //商户的logo
  190. * 'shop_url' => xxx //商户地址
  191. * ) //多个商品
  192. * ),
  193. * 'share_tag' => array(xxx,xxx,xxx), //该分享的标签
  194. * );
  195. *
  196. * 返回
  197. * array(
  198. * 'status' => xxx 状态 bool
  199. * 'share_id' => share_id
  200. * )
  201. */
  202. public function save($data,$is_score = true)
  203. {
  204. global $_FANWE;
  205. //保存分享数据
  206. $share_data = $data['share'];
  207. $share_album_id = (int)$share_data['albumid'];
  208. unset($share_data['albumid']);
  209. $share_data['create_time'] = TIME_UTC;
  210. $share_data['day_time'] = getTodayTime();
  211. $share_id = FDB::insert('share',$share_data,true);
  212. if(intval($share_id)>0)
  213. {
  214. $share_data_now_type = $share_data['type'];
  215. $share_data_rec_id = $share_data['rec_id'];
  216. $share_server_code = array();
  217. if(empty($share_data_now_type))
  218. $share_data_now_type = 'default';
  219. /*//是否是回复 是的 话 添加评论消息提示
  220. if(intval($share_data['parent_id']) > 0)
  221. {
  222. $base_share_id = FDB::resultFirst("select uid from ".FDB::table('share')." where share_id = ".$share_data['parent_id']);
  223. $result = FDB::query("INSERT INTO ".FDB::table('user_notice')."(uid, type, num, create_time) VALUES('$base_share_id',3,1,'".TIME_UTC."')", 'SILENT');
  224. if(!$result)
  225. FDB::query("UPDATE ".FDB::table('user_notice')." SET num = num + 1, create_time='".TIME_UTC."' WHERE uid='$base_share_id' AND type=3");
  226. }*/
  227. //保存话题
  228. $is_event = false;
  229. $event_list = array();
  230. $pattern = "/#([^\f\n\r\t\v]{1,80}?)#/";
  231. preg_match_all($pattern,$share_data['content'],$event_list);
  232. if(!empty($event_list[1]))
  233. {
  234. array_unique($event_list[1]);
  235. foreach($event_list[1] as $v)
  236. {
  237. $event_id = (int)FDB::resultFirst("select id from ".FDB::table("event")." where `title`='".$v."'");
  238. if($event_id == 0)
  239. {
  240. $event_data = array();
  241. $event_data['uid'] = $share_data['uid'];
  242. $event_data['title'] = $v;
  243. $event_data['share_id'] = $share_id;
  244. $event_data['create_time'] = TIME_UTC;
  245. $event_data['last_share'] = $share_id;
  246. $event_data['last_time'] = TIME_UTC;
  247. FDB::insert("event",$event_data);
  248. }
  249. else
  250. {
  251. $event_data = array();
  252. $event_data['event_id'] = $event_id;
  253. $event_data['uid'] = $share_data['uid'];
  254. $event_data['share_id'] = $share_id;
  255. FDB::insert("event_share",$event_data);
  256. FDB::query("update ".FDB::table("event")." set thread_count = thread_count+1,last_share=".$share_id.",last_time=".TIME_UTC." where id = $event_id");
  257. }
  258. }
  259. }
  260. $share_cates = array();
  261. $result['status'] = true;
  262. $result['share_id'] = $share_id;
  263. /*$content_match = FS('Words')->segment(clearExpress($share_data['content']),100);
  264. $title_tags = FS('Words')->segment($share_data['title'],100);
  265. if(!empty($title_tags))
  266. $content_match = array_merge($content_match, $title_tags);*/
  267. $content_match = clearExpress($share_data['content']);
  268. $content_match .= $share_data['title'];
  269. $is_rel_imgage = false;
  270. $weibo_img = '';
  271. $weibo_img_sort = 100000;
  272. $photo_count = 0;
  273. $server_args = array();
  274. FS("Image")->getImageArgs(&$server_args);
  275. //保存分享图片
  276. $share_photo = $data['share_photo'];
  277. foreach($share_photo as $k=>$photo)
  278. {
  279. if($photo_count >= $_FANWE['setting']['share_pic_count'])
  280. break;
  281. $o_img = false;
  282. if(FS("Image")->getIsServer() && !empty($photo['server_code']))
  283. {
  284. $server = FS("Image")->getServer($photo['server_code']);
  285. if(!empty($server))
  286. {
  287. $server_args['share_id'] = $share_id;
  288. $server_args['img_path'] = $photo['img'];
  289. $server = FS("Image")->getImageUrlToken($server_args,$server,1);
  290. $body = FS("Image")->sendRequest($server,'saveshare',true);
  291. if(!empty($body))
  292. {
  293. $o_img = unserialize($body);
  294. FS("Image")->setServerUploadCount($o_img['server_code']);
  295. $share_server_code[] = $o_img['server_code'];
  296. $o_img['url'] = str_replace('./','./'.$o_img['server_code'].'/',$o_img['url']);
  297. $weibo_img_url = FS("Image")->getImageUrl($o_img['url'],1);
  298. }
  299. }
  300. }
  301. else
  302. {
  303. $o_img = copyImage($photo['img'],array(),'share',true,$share_id);
  304. $weibo_img_url = FS("Image")->getImageUrl($o_img['url'],1);
  305. }
  306. if(!empty($o_img))
  307. {
  308. if($photo['sort'] < $weibo_img_sort)
  309. {
  310. $weibo_img = $weibo_img_url;
  311. $weibo_img_sort = $photo['sort'];
  312. }
  313. $share_photo_data['uid'] = $_FANWE['uid'];
  314. $share_photo_data['share_id'] = $share_id;
  315. $share_photo_data['img'] = $o_img['url'];
  316. $share_photo_data['type'] = $photo['type'];
  317. $share_photo_data['sort'] = $photo['sort'];
  318. $share_photo_data['img_width'] = $o_img['width'];
  319. $share_photo_data['img_height'] = $o_img['height'];
  320. $share_photo_data['server_code'] = $photo['server_code'];
  321. FDB::insert('share_photo',$share_photo_data,true);
  322. $photo_count++;
  323. }
  324. }
  325. //保存引用图片
  326. if(isset($data['rel_photo']))
  327. {
  328. $share_photo = $data['rel_photo'];
  329. foreach($share_photo as $share_photo_data)
  330. {
  331. if($photo_count >= $_FANWE['setting']['share_pic_count'])
  332. break;
  333. $is_rel_imgage = true;
  334. if($share_photo_data['sort'] < $weibo_img_sort)
  335. {
  336. $weibo_img = FS("Image")->getImageUrl($share_photo_data['img'],1);
  337. $weibo_img_sort = $share_photo_data['sort'];
  338. }
  339. $share_photo_data['uid'] = $_FANWE['uid'];
  340. $share_photo_data['share_id'] = $share_id;
  341. FDB::insert('share_photo',$share_photo_data,true);
  342. $photo_count++;
  343. }
  344. }
  345. $shop_ids = array();
  346. $goods_count = 0;
  347. //保存分享的商品
  348. if(isset($data['share_goods']))
  349. {
  350. $share_goods = $data['share_goods'];
  351. foreach($share_goods as $goods)
  352. {
  353. if($goods_count >= $_FANWE['setting']['share_goods_count'])
  354. break;
  355. $shop_id = 0;
  356. if(!empty($goods['shop_url']))
  357. {
  358. $shop_id = FDB::resultFirst('SELECT shop_id
  359. FROM '.FDB::table('shop').'
  360. WHERE shop_url = \''.$goods['shop_url'].'\'');
  361. if(intval($shop_id) == 0)
  362. {
  363. $content_match .= $goods['shop_name'];
  364. $shop_logo['url'] = '';
  365. if(!empty($goods['shop_logo']))
  366. {
  367. if(FS("Image")->getIsServer() && !empty($goods['shop_server_code']))
  368. {
  369. $server = FS("Image")->getServer($goods['shop_server_code']);
  370. if(!empty($server))
  371. {
  372. $args = array();
  373. $args['pic_url'] = $goods['shop_logo'];
  374. $server = FS("Image")->getImageUrlToken($args,$server,1);
  375. $body = FS("Image")->sendRequest($server,'saveshop',true);
  376. if(!empty($body))
  377. {
  378. $shop_logo = unserialize($body);
  379. FS("Image")->setServerUploadCount($shop_logo['server_code']);
  380. $shop_logo['url'] = str_replace('./','./'.$shop_logo['server_code'].'/',$shop_logo['url']);
  381. }
  382. }
  383. }
  384. else
  385. $shop_logo = copyFile($goods['shop_logo'],'shop',true);
  386. }
  387. $shop_data['shop_name'] = $goods['shop_name'];
  388. $shop_data['shop_logo'] = $shop_logo['url'];
  389. $shop_data['server_code'] = $goods['shop_server_code'];
  390. $shop_data['shop_url'] = $goods['shop_url'];
  391. $shop_data['taoke_url'] = $goods['shop_taoke_url'];
  392. $shop_id = FDB::insert('shop',$shop_data,true);
  393. }
  394. if($shop_id > 0)
  395. $shop_ids[] = $shop_id;
  396. }
  397. if(FS("Image")->getIsServer() && !empty($goods['server_code']))
  398. {
  399. $server = FS("Image")->getServer($goods['server_code']);
  400. if(!empty($server))
  401. {
  402. $server_args['share_id'] = $share_id;
  403. $server_args['img_path'] = $goods['img'];
  404. $server = FS("Image")->getImageUrlToken($server_args,$server,1);
  405. $body = FS("Image")->sendRequest($server,'saveshare',true);
  406. if(!empty($body))
  407. {
  408. $goods_img = unserialize($body);
  409. FS("Image")->setServerUploadCount($goods_img['server_code']);
  410. $share_server_code[] = $goods_img['server_code'];
  411. $goods_img['url'] = str_replace('./','./'.$goods_img['server_code'].'/',$goods_img['url']);
  412. $weibo_img_url = FS("Image")->getImageUrl($goods_img['url'],1);
  413. }
  414. }
  415. }
  416. else
  417. {
  418. $goods_img = copyImage($goods['img'],array(),'share',true,$share_id);
  419. $weibo_img_url = FS("Image")->getImageUrl($goods_img['url'],1);
  420. }
  421. if(!empty($goods_img))
  422. {
  423. if($goods['sort'] < $weibo_img_sort)
  424. {
  425. $weibo_img = $weibo_img_url;
  426. $weibo_img_sort = $goods['sort'];
  427. }
  428. $shop_id = intval($shop_id);
  429. //开始保存分享的商品
  430. $share_goods_data['uid'] = $_FANWE['uid'];
  431. $share_goods_data['share_id'] = $share_id;
  432. $share_goods_data['shop_id'] = $shop_id;
  433. $share_goods_data['img'] = $goods_img['url'];
  434. $share_goods_data['name'] = $goods['name'];
  435. $share_goods_data['url'] = $goods['url'];
  436. $share_goods_data['price'] = $goods['price'];
  437. $share_goods_data['sort'] = $goods['sort'];
  438. $share_goods_data['taoke_url'] = $goods['taoke_url'];
  439. $share_goods_data['goods_key'] = $goods['goods_key'];
  440. $share_goods_data['img_width'] = $goods_img['width'];
  441. $share_goods_data['img_height'] = $goods_img['height'];
  442. $share_goods_data['server_code'] = $goods['server_code'];
  443. FDB::insert('share_goods',$share_goods_data,true);
  444. $goods_tags = FS('Words')->segment($goods['name'],10);
  445. if(!empty($goods_tags))
  446. {
  447. $share_cates[] = ShareService::getCateByTags($goods_tags);
  448. }
  449. $content_match .= $goods['name'];
  450. $goods_count++;
  451. }
  452. }
  453. }
  454. //保存引用商品
  455. if(isset($data['rel_goods']))
  456. {
  457. $share_goods = $data['rel_goods'];
  458. foreach($share_goods as $share_goods_data)
  459. {
  460. if($goods_count >= $_FANWE['setting']['share_goods_count'])
  461. break;
  462. $is_rel_imgage = true;
  463. $shop_ids[] = $share_goods_data['shop_id'];
  464. if($share_goods_data['sort'] < $weibo_img_sort)
  465. {
  466. $weibo_img = $weibo_img = FS("Image")->getImageUrl($share_goods_data['img'],1);
  467. $weibo_img_sort = $share_goods_data['sort'];
  468. }
  469. $share_goods_data['uid'] = $_FANWE['uid'];
  470. $share_goods_data['share_id'] = $share_id;
  471. FDB::insert('share_goods',$share_goods_data,true);
  472. $goods_tags = FS('Words')->segment($goods['name'],10);
  473. if(!empty($goods_tags))
  474. {
  475. $share_cates[] = ShareService::getCateByTags($goods_tags);
  476. }
  477. $content_match .= $goods['name'];
  478. $goods_count++;
  479. }
  480. }
  481. if($goods_count > 0 && $photo_count > 0)
  482. $share_data_type = 'goods_photo';
  483. elseif($goods_count > 0)
  484. $share_data_type = 'goods';
  485. elseif($photo_count > 0)
  486. $share_data_type = 'photo';
  487. else
  488. $share_data_type = 'default';
  489. $update_share = array();
  490. $update_share['share_data'] = $share_data_type;
  491. if(count($share_server_code) > 0)
  492. {
  493. $share_server_code = array_unique($share_server_code);
  494. $update_share['server_code'] = implode(',',$share_server_code);
  495. }
  496. if($share_album_id > 0 && in_array($share_data_type,array('goods','photo','goods_photo')))
  497. {
  498. $album = FDB::fetchFirst('SELECT cid,id,title FROM '.FDB::table('album').' WHERE id = '.$share_album_id);
  499. if($album)
  500. {
  501. $update_share['type'] = 'album_item';
  502. $share_data_now_type = 'album_item';
  503. $share_data_rec_id = $album['id'];
  504. $share_data_rec_cate = $album['cid'];
  505. $update_share['rec_id'] = $album['id'];
  506. $update_share['title'] = addslashes($album['title']);
  507. }
  508. else
  509. {
  510. $update_share['rec_id'] = 0;
  511. $share_data_rec_id = 0;
  512. }
  513. }
  514. else
  515. $share_data_rec_id = 0;
  516. FDB::update("share",$update_share,"share_id=".$share_id);
  517. //更新会员统计
  518. FDB::query('UPDATE '.FDB::table('user_count').'
  519. SET shares = shares + 1,goods = goods + '.$goods_count.',photos = photos + '.$photo_count.'
  520. WHERE uid = '.$share_data['uid']);
  521. FS('Medal')->runAuto($share_data['uid'],'shares');
  522. FS('User')->medalBehavior($share_data['uid'],'continue_share');
  523. switch($share_data_type)
  524. {
  525. case 'goods_photo':
  526. FS('Medal')->runAuto($share_data['uid'],'goods');
  527. FS('User')->medalBehavior($share_data['uid'],'continue_goods');
  528. FS('Medal')->runAuto($share_data['uid'],'photos');
  529. FS('User')->medalBehavior($share_data['uid'],'continue_photo');
  530. break;
  531. case 'goods':
  532. FS('Medal')->runAuto($share_data['uid'],'goods');
  533. FS('User')->medalBehavior($share_data['uid'],'continue_goods');
  534. break;
  535. case 'photo':
  536. FS('Medal')->runAuto($share_data['uid'],'photos');
  537. FS('User')->medalBehavior($share_data['uid'],'continue_photo');
  538. break;
  539. }
  540. if(in_array($share_data_type,array('goods','photo','goods_photo')))
  541. {
  542. //更新会员发布的有图分享编号
  543. //FS('User')->setShareIds($share_data['uid'],$share_id);
  544. if(!empty($share_cates))
  545. {
  546. $cids = ShareService::getCidsByCates($share_cates);
  547. }
  548. if(!empty($data['share_tag']))
  549. {
  550. if(empty($cids))
  551. {
  552. $share_cates = array();
  553. $share_cates[] = ShareService::getCateByTags($data['share_tag']);
  554. $cids = ShareService::getCidsByCates($share_cates);
  555. }
  556. //$content_match = array_merge($content_match, $data['share_tag']);
  557. }
  558. //保存标签
  559. $share_tags = array();
  560. foreach($data['share_tag'] as $tag)
  561. {
  562. if(trim($tag) != '' && !in_array($tag,$share_tags))
  563. {
  564. array_push($share_tags,$tag);
  565. //为已存在的tags更新统计
  566. FDB::query('UPDATE '.FDB::table('goods_tags').'
  567. SET count = count + 1
  568. WHERE tag_name = \''.$tag.'\'');
  569. //数量大于100时为热门标签
  570. FDB::query('UPDATE '.FDB::table('goods_tags').'
  571. SET is_hot = 1
  572. WHERE tag_name = \''.$tag.'\' AND count >= 100');
  573. $content_match.=$tag;
  574. $tag_data = array();
  575. $tag_data['share_id'] = $share_id;
  576. $tag_data['tag_name'] = $tag;
  577. FDB::insert('share_tags',$tag_data);
  578. }
  579. }
  580. unset($share_tags);
  581. if(!empty($cids))
  582. {
  583. foreach($cids as $cid)
  584. {
  585. $cate_data = array();
  586. $cate_data['share_id'] = $share_id;
  587. $cate_data['cate_id'] = $cid;
  588. FDB::insert('share_category',$cate_data);
  589. }
  590. }
  591. //保存匹配查询
  592. $share_match['share_id'] = $share_id;
  593. $share_match['content_match'] = segmentToUnicode(clearSymbol($content_match));
  594. FDB::insert("share_match",$share_match);
  595. }
  596. ShareService::updateShareCache($share_id);
  597. if($share_data_rec_id > 0)
  598. {
  599. $album_share = array();
  600. $album_share['album_id'] = $share_data_rec_id;
  601. $album_share['share_id'] = $share_id;
  602. $album_share['cid'] = $share_data_rec_cate;
  603. $album_share['create_day'] = getTodayTime();
  604. FDB::insert("album_share",$album_share);
  605. FS('Album')->updateAlbumByShare($share_data_rec_id,$share_id);
  606. FS('Album')->updateAlbum($share_data_rec_id);
  607. }
  608. if(count($shop_ids) > 0)
  609. FS("Shop")->updateShopStatistic($shop_ids);
  610. //保存提到我的
  611. $atme_share_type = FDB::resultFirst("select `type` from ".FDB::table("share")." where `share_id`='".$share_id."'");
  612. if($atme_share_type != "fav")
  613. {
  614. $atme_list = array();
  615. $pattern = "/@([^\f\n\r\t\v@ ]{2,20}?)(?:\:| )/";
  616. preg_match_all($pattern,$share_data['content'],$atme_list);
  617. if(!empty($atme_list[1]))
  618. {
  619. $atme_list[1] = array_unique($atme_list[1]);
  620. $users = array();
  621. foreach($atme_list[1] as $user)
  622. {
  623. if(!empty($user))
  624. {
  625. $users[] = $user;
  626. }
  627. }
  628. $res = FDB::query('SELECT uid
  629. FROM '.FDB::table('user').'
  630. WHERE user_name '.FDB::createIN($users));
  631. while($data = FDB::fetch($res))
  632. {
  633. FS("User")->setUserTips($data['uid'],4,$share_id);
  634. }
  635. }
  636. }
  637. if($is_score && !in_array($share_data_now_type,array('fav','album_best','album_rec')))
  638. {
  639. if(!$is_rel_imgage && in_array($share_data_type,array('goods','photo','goods_photo')))
  640. FS("User")->updateUserScore($share_data['uid'],'share','image',$share_data['content'],$share_id);
  641. else
  642. FS("User")->updateUserScore($share_data['uid'],'share','default',$share_data['content'],$share_id);
  643. }
  644. if($data['pub_out_check'])
  645. {
  646. $weibo = array();
  647. $weibo['content'] = $share_data['content'];
  648. $weibo['img'] = $weibo_img;
  649. $weibo['ip'] = $_FANWE['client_ip'];
  650. $weibo['url'] = $_FANWE['site_url'].FU('note/index',array('sid'=>$share_id));
  651. $weibo['url'] = str_replace('//','/',$weibo['url']);
  652. $weibo['url'] = str_replace(':/','://',$weibo['url']);
  653. $weibo = base64_encode(serialize($weibo));
  654. if(empty($share_data['type']))
  655. $share_data['type'] = 'default';
  656. //转发到外部微博
  657. $uid = $_FANWE['uid'];
  658. $user_binds = FS("User")->getUserBindList($uid);
  659. $is_open = false;
  660. foreach($user_binds as $class => $bind)
  661. {
  662. if($bind['sync'] && file_exists(FANWE_ROOT."login/".$class.".php"))
  663. {
  664. $check_field = "";
  665. if(in_array($share_data['type'],array('bar','ask')))
  666. $check_field = "topic";
  667. elseif($share_data['type'] == 'default')
  668. $check_field = "weibo";
  669. if($bind['sync'][$check_field] == 1)
  670. {
  671. $is_open = true;
  672. //开始推送
  673. $schedule['uid'] = $uid;
  674. $schedule['type'] = $class;
  675. $schedule['data'] = $weibo;
  676. $schedule['pub_time'] = TIME_UTC;
  677. FDB::insert('pub_schedule',$schedule,true);
  678. }
  679. }
  680. }
  681. if($is_open)
  682. {
  683. if(function_exists('fsockopen'))
  684. $fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5);
  685. elseif(function_exists('pfsockopen'))
  686. $fp=pfsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5);
  687. if($fp)
  688. {
  689. $request = "GET ".SITE_URL."login.php?loop=true&uid=".$uid." HTTP/1.0\r\n";
  690. $request .= "Host: ".$_SERVER['HTTP_HOST']."\r\n";
  691. $request .= "Connection: Close\r\n\r\n";
  692. fwrite($fp, $request);
  693. while(!feof($fp))
  694. {
  695. fgets($fp, 128);
  696. break;
  697. }
  698. fclose($fp);
  699. }
  700. }
  701. }
  702. }
  703. else
  704. {
  705. $result['status'] = false;
  706. }
  707. return $result;
  708. }
  709. /*根据标签获取所属分类*/
  710. public function getCateByTags($tags)
  711. {
  712. static $tag_cates = array();
  713. $tags = array_unique($tags);
  714. $cates = array();
  715. foreach($tags as $tag)
  716. {
  717. if(!empty($tag))
  718. {
  719. if(isset($tag_cates[$tag]))
  720. {
  721. foreach($tag_cates[$tag] as $data)
  722. {
  723. if(isset($cates[$data['cate_id']]))
  724. $cates[$data['cate_id']] += $data['weight'];
  725. else
  726. $cates[$data['cate_id']] = $data['weight'];
  727. }
  728. continue;
  729. }
  730. $is_bln = true;
  731. $res = FDB::query('SELECT gct.cate_id,gct.weight
  732. FROM '.FDB::table('goods_tags').' AS gt
  733. LEFT JOIN '.FDB::table('goods_category_tags')." AS gct ON gct.tag_id = gt.tag_id
  734. WHERE gt.tag_name = '$tag'");
  735. while($data = FDB::fetch($res))
  736. {
  737. if($data['weight'] < 1)
  738. $data['weight'] = 1;
  739. if(isset($cates[$data['cate_id']]))
  740. $cates[$data['cate_id']] += $data['weight'];
  741. else
  742. $cates[$data['cate_id']] = $data['weight'];
  743. $tag_cates[$tag][] = $data;
  744. $is_bln = false;
  745. }
  746. if($is_bln)
  747. {
  748. $like_tag = fMysqlLikeQuote($tag);
  749. $res = FDB::query('SELECT gct.cate_id,gct.weight
  750. FROM '.FDB::table('goods_tags').' AS gt
  751. LEFT JOIN '.FDB::table('goods_category_tags')." AS gct ON gct.tag_id = gt.tag_id
  752. WHERE gt.tag_name LIKE '%".$like_tag."%' OR INSTR('$tag',gt.tag_name) > 0");
  753. while($data = FDB::fetch($res))
  754. {
  755. if($data['weight'] < 1)
  756. $data['weight'] = 1;
  757. if(isset($cates[$data['cate_id']]))
  758. $cates[$data['cate_id']] += $data['weight'];
  759. else
  760. $cates[$data['cate_id']] = $data['weight'];
  761. $tag_cates[$tag] = $data;
  762. }
  763. }
  764. }
  765. }
  766. if(empty($cates))
  767. return array();
  768. $cids = array();
  769. foreach($cates as $cate_id => $weight)
  770. {
  771. $cids[$weight][] = $cate_id;
  772. }
  773. krsort($cids);
  774. return each($cids);
  775. }
  776. public function getCidsByCates($cates)
  777. {
  778. $list = array();
  779. $cids = array();
  780. foreach($cates as $cate)
  781. {
  782. foreach($cate['value'] as $cid)
  783. {
  784. if(isset($cids[$cid]))
  785. $cids[$cid] = $cate['key'];
  786. else
  787. $cids[$cid] += $cate['key'];
  788. }
  789. }
  790. foreach($cates as $cate)
  791. {
  792. $id = 0;
  793. $weight = 0;
  794. foreach($cate['value'] as $cid)
  795. {
  796. if($cids[$cid] > $weight)
  797. $id = $cid;
  798. }
  799. if($id > 0)
  800. $list[] = $id;
  801. }
  802. return array_unique($list);
  803. }
  804. public function deleteShare($share_id,$is_score = true)
  805. {
  806. $share = ShareService::getShareById($share_id);
  807. if(!empty($share))
  808. {
  809. $goods_count = FDB::resultFirst('SELECT COUNT(goods_id) FROM '.FDB::table('share_goods').' WHERE share_id = '.$share_id);
  810. $photo_count = FDB::resultFirst('SELECT COUNT(photo_id) FROM '.FDB::table('share_photo').' WHERE share_id = '.$share_id);
  811. $collect_count = FDB::resultFirst('SELECT COUNT(c_uid) FROM '.FDB::table('user_collect').' WHERE share_id = '.$share_id);
  812. $shop_list = array();
  813. $res = FDB::query('SELECT shop_id FROM '.FDB::table('share_goods').' WHERE share_id = '.$share_id.' GROUP BY shop_id');
  814. while($shop = FDB::fetch($res))
  815. {
  816. $shop_list[] = $shop['shop_id'];
  817. }
  818. FDB::delete('share','share_id = '.$share_id);
  819. FDB::delete('share_goods','share_id = '.$share_id);
  820. FDB::delete('share_photo','share_id = '.$share_id);
  821. FDB::delete('share_category','share_id = '.$share_id);
  822. FDB::delete('share_comment','share_id = '.$share_id);
  823. FDB::delete('share_match','share_id = '.$share_id);
  824. FDB::delete('share_tags','share_id = '.$share_id);
  825. FDB::delete('user_collect','share_id = '.$share_id);
  826. if(count($shop_list) > 0)
  827. {
  828. FS('Shop')->updateShopStatistic($shop_list);
  829. }
  830. $pattern = "/#([^\f\n\r\t\v]{1,80}?)#/";
  831. if(preg_match($pattern,$share['content']))
  832. {
  833. FS("Event")->deleteEvent($share_id);
  834. }
  835. $pattern = "/@([^\f\n\r\t\v@ ]{2,20}?)(?:\:| )/";
  836. if(preg_match($pattern,$share['content']))
  837. {
  838. FDB::delete('atme','share_id = '.$share_id);
  839. }
  840. if(defined('MANAGE_HANDLER') && MANAGE_HANDLER && $is_score)
  841. {
  842. if(!in_array($share['type'],array('fav','album_best','album_rec')))
  843. {
  844. if($share['rec_uid'] == 0 && in_array($share['share_data'],array('goods','photo','goods_photo')))
  845. FS("User")->updateUserScore($share['uid'],'delete_share','image',$share['content'],$share_id);
  846. else
  847. FS("User")->updateUserScore($share['uid'],'delete_share','default',$share['content'],$share_id);
  848. }
  849. }
  850. FDB::query('UPDATE '.FDB::table('user_count').' SET
  851. shares = shares - 1,
  852. photos = photos - '.$photo_count.',
  853. goods = goods - '.$goods_count.',
  854. collects = collects - '.$collect_count.' WHERE uid = '.$share['uid']);
  855. $key = getDirsById($share_id);
  856. clearCacheDir('share/'.$key);
  857. $count = (int)FDB::resultFirst('SELECT COUNT(share_id) FROM '.FDB::table('share_rec').' WHERE share_id = '.$share_id);
  858. if($count == 0)
  859. ShareService::deleteShareImages($share_id,$share['server_code']);
  860. }
  861. }
  862. public function deleteShareImages($share_id,$server_code)
  863. {
  864. if(empty($server_code))
  865. {
  866. $key = getDirsById($share_id);
  867. clearDir(PUBLIC_ROOT.'./upload/share/'.$key,true);
  868. }
  869. else
  870. {
  871. $server = FS("Image")->getServer($server_code);
  872. if($server)
  873. {
  874. $args = array();
  875. $args['share_id'] = $share_id;
  876. $server = FS("Image")->getImageUrlToken($args,$server,1);
  877. FS("Image")->sendRequest($server,'removeshare');
  878. }
  879. }
  880. }
  881. public function deleteShareCache()
  882. {
  883. }
  884. /**
  885. * 根据编号获取分享
  886. * @param int $share_id 分享编号
  887. * @return array
  888. */
  889. public function getShareById($share_id)
  890. {
  891. $share_id = (int)$share_id;
  892. if(!$share_id)
  893. return false;
  894. static $list = array();
  895. if(!isset($list[$share_id]))
  896. {
  897. $share = FDB::fetchFirst('SELECT * FROM '.FDB::table('share').' WHERE share_id = '.$share_id);
  898. if($share)
  899. $share['url'] = FU('note/index',array('sid'=>$share_id));
  900. $list[$share_id] = $share;
  901. }
  902. return $list[$share_id];
  903. }
  904. /**
  905. * 更新分享内容
  906. * @param int $share_id 分享编号
  907. * @return void
  908. */
  909. public function updateShare($share_id,$title,$content)
  910. {
  911. if(empty($title) && empty($content))
  912. return;
  913. $data = array();
  914. if(!empty($title))
  915. $data['title'] = $title;
  916. if(!empty($content))
  917. $data['content'] = $content;
  918. FDB::update('share',$data,"share_id = '$share_id'");
  919. ShareService::updateShareMatch($share_id);
  920. }
  921. /**
  922. * 获取分享详细
  923. * @param int $share_id 分享编号
  924. * @return array
  925. */
  926. public function getShareDetail($share_id,$is_collect = false,$is_tag = false,$collect_count = 20)
  927. {
  928. $share = ShareService::getShareById($share_id);
  929. if($share)
  930. {
  931. $share['cache_data'] = fStripslashes(unserialize($share['cache_data']));
  932. $share['authoritys'] = ShareService::getIsEditShare($share);
  933. $share['time'] = getBeforeTimelag($share['create_time']);
  934. ShareService::shareImageFormat($share);
  935. }
  936. return $share;
  937. }
  938. /**
  939. * 获取分享的动态数据
  940. * @param int $share_id 分享编号
  941. * @return array
  942. */
  943. public function getShareDynamic($share_id)
  944. {
  945. $dynamic = FDB::fetchFirst('SELECT collect_count,comment_count,relay_count,click_count
  946. FROM '.FDB::table('share').'
  947. WHERE share_id = '.$share_id);
  948. return $dynamic;
  949. }
  950. /**
  951. * 分享列表详细数据
  952. * @param array $list 分享列表
  953. * @param bool $is_parent 是否获取转发信息
  954. * @param bool $is_collect 是否获取喜欢的会员
  955. * @param bool $is_parent 是否获取分享标签
  956. * @return array
  957. */
  958. public function getShareDetailList($list,$is_parent = false,$is_collect = false,$is_tag = false,$is_comment = false,$comment_count = 10,$collect_count = 20,$is_user = false)
  959. {
  960. global $_FANWE;
  961. $shares = array();
  962. $share_ids = array();
  963. $rec_shares_ids = array();
  964. $share_users = array();
  965. $share_collects = array();
  966. $share_comments = array();
  967. $share_follows = array();
  968. foreach($list as $item)
  969. {
  970. $share_id = $item['share_id'];
  971. $share_ids[] = $share_id;
  972. $item['cache_data'] = fStripslashes(unserialize($item['cache_data']));
  973. $item['authoritys'] = ShareService::getIsEditShare($item);
  974. $item['time'] = getBeforeTimelag($item['create_time']);
  975. $item['url'] = FU('note/index',array('sid'=>$share_id));
  976. ShareService::shareImageFormat($item);
  977. $shares[$share_id] = $item;
  978. unset($shares[$share_id]['cache_data']);
  979. //分享会员
  980. if($is_user)
  981. {
  982. $shares[$share_id]['user'] = &$share_users[$item['uid']];
  983. if($item['rec_uid'] > 0)
  984. $shares[$share_id]['rec_user'] = &$share_users[$item['rec_uid']];
  985. }
  986. //分享评论
  987. if($is_comment)
  988. {
  989. $shares[$share_id]['comments'] = array();
  990. if(!empty($item['cache_data']['comments']))
  991. {
  992. $comment_ids = array_slice($item['cache_data']['comments'],0,$comment_count);
  993. foreach($comment_ids as $comment_id)
  994. {
  995. $shares[$share_id]['comments'][$comment_id] = &$share_comments[$comment_id];
  996. }
  997. }
  998. }
  999. //喜欢分享的会员
  1000. if($is_collect)
  1001. {
  1002. $shares[$share_id]['collects'] = array();
  1003. if(!empty($item['cache_data']['collects']))
  1004. {
  1005. $collect_ids = array_slice($item['cache_data']['collects'],0,$collect_count);
  1006. foreach($collect_ids as $collect_uid)
  1007. {
  1008. if($is_user)
  1009. $shares[$share_id]['collects'][$collect_uid] = &$share_users[$collect_uid];
  1010. else
  1011. $shares[$share_id]['collects'][$collect_uid] = $collect_uid;
  1012. }
  1013. }
  1014. }
  1015. if($is_tag)
  1016. {
  1017. $shares[$share_id]['is_eidt_tag'] = ShareService::getIsEditTag($item);
  1018. $shares[$share_id]['tags'] = $item['cache_data']['tags'];
  1019. ShareService::tagsFormat($shares[$share_id]['tags']['user']);
  1020. }
  1021. $shares[$share_id]['is_relay'] = false;
  1022. $shares[$share_id]['is_parent'] = false;
  1023. if($is_parent)
  1024. {
  1025. if($item['base_id'] > 0)
  1026. {
  1027. $shares[$share_id]['is_relay'] = true;
  1028. $rec_shares_ids[$item['base_id']] = false;
  1029. $shares[$share_id]['relay_share'] = &$rec_shares_ids[$item['base_id']];
  1030. if($item['parent_id'] > 0 && $item['parent_id'] != $item['base_id'])
  1031. {
  1032. $shares[$share_id]['is_parent'] = true;
  1033. $rec_shares_ids[$item['parent_id']] = false;
  1034. $shares[$share_id]['parent_share'] = &$rec_shares_ids[$item['parent_id']];
  1035. }
  1036. }
  1037. }
  1038. }
  1039. $rec_ids = array_keys($rec_shares_ids);
  1040. if(count($rec_ids) > 0)
  1041. {
  1042. $intersects = array_intersect($share_ids,$rec_ids);
  1043. $temp_ids = array();
  1044. foreach($intersects as $share_id)
  1045. {
  1046. $rec_shares_ids[$share_id] = $shares[$share_id];
  1047. $temp_ids[] = $share_id;
  1048. }
  1049. $diffs = array_diff($rec_ids,$temp_ids);
  1050. if(count($diffs) > 0)
  1051. {
  1052. $res = FDB::query('SELECT * FROM '.FDB::table('share').' WHERE share_id IN ('.implode(',',$diffs).')');
  1053. while($item = FDB::fetch($res))
  1054. {
  1055. $share_id = $item['share_id'];
  1056. $share_ids[] = $share_id;
  1057. $item['cache_data'] = fStripslashes(unserialize($item['cache_data']));
  1058. $item['authoritys'] = ShareService::getIsEditShare($item);
  1059. $item['time'] = getBeforeTimelag($item['create_time']);
  1060. $item['url'] = FU('note/index',array('sid'=>$share_id));
  1061. ShareService::shareImageFormat($item);
  1062. $rec_shares_ids[$share_id] = $item;
  1063. unset($rec_shares_ids[$share_id]['cache_data']);
  1064. //分享会员
  1065. if($is_user)
  1066. {
  1067. $rec_shares_ids[$share_id]['user'] = &$share_users[$item['uid']];
  1068. if($item['rec_uid'] > 0)
  1069. $rec_shares_ids[$share_id]['rec_user'] = &$share_users[$item['rec_uid']];
  1070. }
  1071. //分享评论
  1072. if($is_comment)
  1073. {
  1074. $rec_shares_ids[$share_id]['comments'] = array();
  1075. if(!empty($item['cache_data']['comments']))
  1076. {
  1077. $comment_ids = array_slice($item['cache_data']['comments'],0,$comment_count);
  1078. foreach($comment_ids as $comment_id)
  1079. {
  1080. $rec_shares_ids[$share_id]['comments'][$comment_id] = &$share_comments[$comment_id];
  1081. }
  1082. }
  1083. }
  1084. //喜欢分享的会员
  1085. if($is_collect)
  1086. {
  1087. $rec_shares_ids[$share_id]['collects'] = array();
  1088. if(!empty($item['cache_data']['collects']))
  1089. {
  1090. $collect_ids = array_slice($item['cache_data']['collects'],0,$collect_count);
  1091. foreach($collect_ids as $collect_uid)
  1092. {
  1093. if($is_user)
  1094. $rec_shares_ids[$share_id]['collects'][$collect_uid] = &$share_users[$collect_uid];
  1095. else
  1096. $rec_shares_ids[$share_id]['collects'][$collect_uid] = $collect_uid;
  1097. }
  1098. }
  1099. }
  1100. if($is_tag)
  1101. {
  1102. $rec_shares_ids[$share_id]['is_eidt_tag'] = ShareService::getIsEditTag($item);
  1103. $rec_shares_ids[$share_id]['tags'] = $item['cache_data']['tags'];
  1104. ShareService::tagsFormat($rec_shares_ids[$share_id]['tags']['user']);
  1105. }
  1106. }
  1107. }
  1108. }
  1109. $comment_ids = array_keys($share_comments);
  1110. if(count($comment_ids) > 0)
  1111. {
  1112. $res = FDB::query("SELECT * FROM ".FDB::table('share_comment').' WHERE comment_id IN ('.implode(',',$comment_ids).')');
  1113. while($item = FDB::fetch($res))
  1114. {
  1115. $item['time'] = getBeforeTimelag($item['create_time']);
  1116. $share_comments[$item['comment_id']] = $item;
  1117. if($is_user)
  1118. $share_comments[$item['comment_id']]['user'] = &$share_users[$item['uid']];
  1119. }
  1120. }
  1121. if($is_user)
  1122. FS('User')->usersFormat($share_users);
  1123. return $shares;
  1124. }
  1125. /**
  1126. * 获取分享的图片
  1127. */
  1128. public function getShareImage($share_id,$data_type)
  1129. {
  1130. $share_id = (int)$share_id;
  1131. $list = array();
  1132. switch($data_type)
  1133. {
  1134. case 'goods':
  1135. $sql = 'SELECT share_id,goods_id AS id,img,\'g\' AS type,name,url,price,taoke_url,server_code,img_width,img_height
  1136. FROM '.FDB::table('share_goods').'
  1137. WHERE share_id = '.$share_id.' ORDER BY sort ASC';
  1138. $res = FDB::query($sql);
  1139. while($data = FDB::fetch($res))
  1140. {
  1141. $data['name'] = addslashes($data['name']);
  1142. $data['url'] = addslashes($data['url']);
  1143. $pkey = $data['type'].$data['id'];
  1144. $list['all'][$pkey] = $data;
  1145. }
  1146. break;
  1147. case 'photo':
  1148. $sql = 'SELECT share_id,photo_id AS id,img,type AS ptype,\'m\' AS type,\'\' AS name,\'\' AS url,0 AS price,server_code,img_width,img_height
  1149. FROM '.FDB::table('share_photo').'
  1150. WHERE share_id = '.$share_id.' ORDER BY sort ASC';
  1151. $res = FDB::query($sql);
  1152. while($data = FDB::fetch($res))
  1153. {
  1154. $pkey = $data['type'].$data['id'];
  1155. $ptype = $data['ptype'];
  1156. unset($data['ptype']);
  1157. $list['all'][$pkey] = $data;
  1158. if($ptype != 'default')
  1159. {
  1160. $list[$ptype][] = $pkey;
  1161. }
  1162. }
  1163. break;
  1164. case 'goods_photo':
  1165. $sql = '(SELECT share_id,goods_id AS id,img,\'default\' AS ptype,\'g\' AS type,name,url,price,taoke_url,sort,server_code,img_width,img_height
  1166. FROM '.FDB::table('share_goods').'
  1167. WHERE share_id = '.$share_id.')
  1168. UNION
  1169. (SELECT share_id,photo_id AS id,img,type AS ptype,\'m\' AS type,\'\' AS name,\'\' AS url,0 AS price,\'\' AS taoke_url,sort,server_code,img_width,img_height
  1170. FROM '.FDB::table('share_photo').'
  1171. WHERE share_id = '.$share_id.')
  1172. ORDER BY sort ASC';
  1173. $res = FDB::query($sql);
  1174. while($data = FDB::fetch($res))
  1175. {
  1176. $data['name'] = addslashes($data['name']);
  1177. $data['url'] = addslashes($data['url']);
  1178. $pkey = $data['type'].$data['id'];
  1179. $ptype = $data['ptype'];
  1180. unset($data['ptype']);
  1181. unset($data['sort']);
  1182. $list['all'][$pkey] = $data;
  1183. if($ptype != 'default')
  1184. {
  1185. $list[$ptype][] = $pkey;
  1186. }
  1187. }
  1188. break;
  1189. }
  1190. return $list;
  1191. }
  1192. /**
  1193. * 获取分享的图片集合
  1194. */
  1195. public function getShareImages(&$share_datas)
  1196. {
  1197. foreach($share_datas as $share_data => $share_ids)
  1198. {
  1199. if($share_data == 'default' || count($share_ids) == 0)
  1200. continue;
  1201. $share_ids = array_keys($share_ids);
  1202. $list = array();
  1203. switch($share_data)
  1204. {
  1205. case 'goods':
  1206. $sql = 'SELECT share_id,goods_id AS id,img,\'g\' AS type,name,url,price,taoke_url,server_code,img_width,img_height
  1207. FROM '.FDB::table('share_goods').'
  1208. WHERE share_id IN ('.implode(',',$share_ids).') ORDER BY sort ASC';
  1209. $res = FDB::query($sql);
  1210. while($data = FDB::fetch($res))
  1211. {
  1212. $list[$data['share_id']]['all'][] = $data;
  1213. }
  1214. break;
  1215. case 'photo':
  1216. $sql = 'SELECT share_id,photo_id AS id,img,type AS ptype,\'m\' AS type,\'\' AS name,\'\' AS url,0 AS price,server_code,img_width,img_height
  1217. FROM '.FDB::table('share_photo').'
  1218. WHERE share_id IN ('.implode(',',$share_ids).') ORDER BY sort ASC';
  1219. $res = FDB::query($sql);
  1220. while($data = FDB::fetch($res))
  1221. {
  1222. $pkey = $data['type'].$data['id'];
  1223. $ptype = $data['ptype'];
  1224. unset($data['ptype']);
  1225. $list[$data['share_id']]['all'][$pkey] = $data;
  1226. if($ptype != 'default')
  1227. {
  1228. $list[$data['share_id']][$ptype][] = $pkey;
  1229. }
  1230. }
  1231. break;
  1232. case 'goods_photo':
  1233. $sql = '(SELECT share_id,goods_id AS id,img,\'default\' AS ptype,\'g\' AS type,name,url,price,taoke_url,sort,server_code,img_width,img_height
  1234. FROM '.FDB::table('share_goods').'
  1235. WHERE share_id IN ('.implode(',',$share_ids).'))
  1236. UNION
  1237. (SELECT share_id,photo_id AS id,img,type AS ptype,\'m\' AS type,\'\' AS name,\'\' AS url,0 AS price,\'\' AS taoke_url,sort,server_code,img_width,img_height
  1238. FROM '.FDB::table('share_photo').'
  1239. WHERE share_id IN ('.implode(',',$share_ids).'))
  1240. ORDER BY sort ASC';
  1241. $res = FDB::query($sql);
  1242. while($data = FDB::fetch($res))
  1243. {
  1244. $pkey = $data['type'].$data['id'];
  1245. $ptype = $data['ptype'];
  1246. unset($data['ptype']);
  1247. unset($data['sort']);
  1248. $list[$data['share_id']]['all'][$pkey] = $data;
  1249. if($ptype != 'default')
  1250. {
  1251. $list[$data['share_id']][$ptype][] = $pkey;
  1252. }
  1253. }
  1254. break;
  1255. }
  1256. foreach($list as $share_id => $item)
  1257. {
  1258. foreach($item['all'] as $ik => $img)
  1259. {
  1260. if($img['type'] == 'g')
  1261. {
  1262. $img['goods_url'] = $img['url'];
  1263. if(empty($img['taoke_url']))
  1264. $img['to_url'] = FU('tgo',array('url'=>$img['url']));
  1265. else
  1266. $img['to_url'] = FU('tgo',array('url'=>$img['taoke_url']));
  1267. $img['price_format'] = priceFormat($img['price']);
  1268. }
  1269. $img['url'] = FU('note/'.$img['type'],array('sid'=>$img['share_id'],'id'=>$img['id']));
  1270. $item['all'][$ik] = $img;
  1271. }
  1272. $share_datas[$share_data][$share_id] = $item;
  1273. }
  1274. }
  1275. }
  1276. public function shareImageFormat(&$share,$pic_num = 0)
  1277. {
  1278. $images = $share['cache_data']['imgs'];
  1279. foreach($images['all'] as $ik => $img)
  1280. {
  1281. if($img['type'] == 'g')
  1282. {
  1283. $img['goods_url'] = $img['url'];
  1284. if(empty($img['taoke_url']))
  1285. $img['to_url'] = FU('tgo',array('url'=>$img['url']));
  1286. else
  1287. $img['to_url'] = FU('tgo',array('url'=>$img['taoke_url']));
  1288. $img['price_format'] = priceFormat($img['price']);
  1289. }
  1290. $img['url'] = FU('note/'.$img['type'],array('sid'=>$img['share_id'],'id'=>$img['id']));
  1291. $images['all'][$ik] = $img;
  1292. $share['imgs'][] = $img;
  1293. }
  1294. foreach($images['dapei'] as $ik)
  1295. {
  1296. $share['dapei_imgs'][] = $images['all'][$ik];
  1297. }
  1298. foreach($images['look'] as $ik)
  1299. {
  1300. $share['look_imgs'][] = $images['all'][$ik];
  1301. }
  1302. if($pic_num > 0 && count($share['imgs']) > $pic_num)
  1303. $share['imgs'] = array_slice($share['imgs'],0,$pic_num);
  1304. unset($images);
  1305. }
  1306. /**
  1307. * 获取会员的上一个和下一个有图片分享
  1308. * @param array $_POST 提交的数据
  1309. * @return array(
  1310. 'prev'=>上一个分享,
  1311. 'next'=>下一个分享,
  1312. )
  1313. */
  1314. public function getPrevNextShares($uid,$share_id)
  1315. {
  1316. $arr = array('prev'=>0,'next'=>0);
  1317. $share_ids = FS('User')->getShareIds($uid);
  1318. $key = array_search($share_id,$share_ids);
  1319. if($key !== false)
  1320. {
  1321. $count = count($share_ids);
  1322. if($count > 1)
  1323. {
  1324. if($key == 0)
  1325. $arr['prev'] = $share_ids[1];
  1326. elseif($key == $count - 1)
  1327. $arr['next'] = $share_ids[$key - 1];
  1328. else
  1329. {
  1330. $arr['next'] = $share_ids[$key - 1];
  1331. if(isset($share_ids[$key + 1]))
  1332. $arr['prev'] = $share_ids[$key + 1];
  1333. }
  1334. }
  1335. }
  1336. return $arr;
  1337. }
  1338. public function updateShareCache($share_id,$type = 'all')
  1339. {
  1340. $share_id = (int)$share_id;
  1341. if(!$share_id)
  1342. return;
  1343. $share = FDB::fetchFirst('SELECT cache_data,share_data FROM '.FDB::table('share').' WHERE share_id = '.$share_id);
  1344. if(!$share)
  1345. return;
  1346. $cache_data = fStripslashes(unserialize($share['cache_data']));
  1347. switch($type)
  1348. {
  1349. case 'tags':
  1350. $cache_data['tags'] = ShareService::getShareTags($share_id,true);
  1351. break;
  1352. case 'collects':
  1353. $cache_data['collects'] = ShareService::getShareCollectUser($share_id,50);
  1354. break;
  1355. case 'comments':
  1356. $cache_data['comments'] = ShareService::getNewCommentIdsByShare($share_id,10);
  1357. break;
  1358. case 'imgs':
  1359. $cache_data['imgs'] = ShareService::getShareImage($share_id,$share['share_data']);
  1360. break;
  1361. case 'all':
  1362. $cache_data['tags'] = ShareService::getShareTags($share_id,true);
  1363. $cache_data['collects'] = ShareService::getShareCollectUser($share_id,50);
  1364. $cache_data['comments'] = ShareService::getNewCommentIdsByShare($share_id,10);
  1365. $cache_data['imgs'] = ShareService::getShareImage($share_id,$share['share_data']);
  1366. break;
  1367. }
  1368. unset($share['share_data']);
  1369. $share['cache_data'] = addslashes(serialize($cache_data));
  1370. FDB::update("share",$share,'share_id = '.$share_id);
  1371. }
  1372. public function updateShareMatch($share_id)
  1373. {
  1374. $share = ShareService::getShareById($share_id);
  1375. if(!in_array($share['share_data'],array('goods','photo','goods_photo')))
  1376. return;
  1377. $share['cache_data'] = fStripslashes(unserialize($share['cache_data']));
  1378. $content_match = clearExpress($share['content']);
  1379. $content_match .= $share['title'];
  1380. if(isset($share['cache_data']['tags']['user']))
  1381. {
  1382. foreach($share['cache_data']['tags']['user'] as $tag)
  1383. {
  1384. $content_match.=$tag['tag_name'];
  1385. }
  1386. }
  1387. if(isset($share['cache_data']['tags']['admin']))
  1388. {
  1389. foreach($share['cache_data']['tags']['admin'] as $tag)
  1390. {
  1391. $content_match.=$tag['tag_name'];
  1392. }
  1393. }
  1394. if(isset($share['cache_data']['imgs']['all']))
  1395. {
  1396. foreach($share['cache_data']['imgs']['all'] as $img)
  1397. {
  1398. if(!empty($img['name']))
  1399. {
  1400. $content_match.=$img['name'];
  1401. }
  1402. }
  1403. }
  1404. //保存匹配查询
  1405. $share_match = array();
  1406. $share_match['share_id'] = $share_id;
  1407. $share_match['content_match'] = segmentToUnicode(clearSymbol($content_match));
  1408. FDB::insert("share_match",$share_match,false,true);
  1409. }
  1410. /**
  1411. * 获取是否可编辑分享
  1412. * @param int $share 分享
  1413. * @return array
  1414. */
  1415. public function getIsEditShare(&$share)
  1416. {
  1417. static $edits = array();
  1418. if(!isset($edits[$share['share_id']]))
  1419. {
  1420. global $_FANWE;
  1421. $type = array('ask','bar');
  1422. $is_edit = 0;
  1423. $post = array('ask_post','bar_post');
  1424. if(in_array($share['type'],$post))
  1425. {
  1426. if($share['uid'] == $_FANWE['uid'])
  1427. $is_edit = 1;
  1428. if($share['type'] == 'ask_post')
  1429. $thread = FS('ask')->getTopicById($share['rec_id']);
  1430. else
  1431. $thread = FS('Topic')->getTopicById($share['rec_id']);
  1432. if($thread['uid'] == $_FANWE['uid'])
  1433. $is_edit = 2;
  1434. }
  1435. else
  1436. {
  1437. if(!in_array($share['type'],$type) && $share['uid'] == $_FANWE['uid'])
  1438. $is_edit = 1;
  1439. }
  1440. $edits[$share['share_id']] = $is_edit;
  1441. }
  1442. return $edits[$share['share_id']];
  1443. }
  1444. /*===========分享列表、详细 END ==============*/
  1445. /*===========分享标签 BEGIN ==============*/
  1446. /**
  1447. * 获取是否可编辑分享标签
  1448. * @param int $share 分享
  1449. * @return array
  1450. */
  1451. public function getIsEditTag(&$share)
  1452. {
  1453. global $_FANWE;
  1454. $_img_data = array('goods','photo','goods_photo');
  1455. $is_edit_tag = false;
  1456. if(in_array($share['share_data'],$_img_data) && $share['uid'] == $_FANWE['uid'])
  1457. $is_edit_tag = true;
  1458. return $is_edit_tag;
  1459. }
  1460. /**
  1461. * 获取分享标签
  1462. * @param int $share_id 分享编号
  1463. * @return array
  1464. */
  1465. public function getShareTags($share_id,$is_update = false)
  1466. {
  1467. $share_id = (int)$share_id;
  1468. if(!$share_id)
  1469. return array();
  1470. static $list = array();
  1471. if(!isset($list[$share_id]) || $is_update)
  1472. {
  1473. $res = FDB::query('SELECT tag_name,is_admin
  1474. FROM '.FDB::table('share_tags').'
  1475. WHERE share_id = '.$share_id);
  1476. while($data = FDB::fetch($res))
  1477. {
  1478. $data['tag_name'] = addslashes($data['tag_name']);
  1479. if($data['is_admin'] == 0)
  1480. $list[$share_id]['user'][] = $data;
  1481. else
  1482. $list[$share_id]['admin'][] = $data;
  1483. }
  1484. }
  1485. return $list[$share_id];
  1486. }
  1487. public function tagsFormat(&$tags)
  1488. {
  1489. foreach($tags as $tk => $tag)
  1490. {
  1491. $tags[$tk]['url'] = FU('book/shopping',array('tag'=>urlencode($tag['tag_name'])));
  1492. }
  1493. }
  1494. /**
  1495. * 更新分享标签缓存
  1496. * @param int $share_id 分享编号
  1497. * @param array $tags = array(
  1498. 'user'=>会员设置标签,
  1499. 'admin'=>管理员…

Large files files are truncated, but you can click here to view the full file