festval.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: songlintao
  5. * Date: 2017/9/25
  6. * Time: 下午3:30
  7. */
  8. defined( 'InShopNC' ) or exit( 'Access Invalid!' );
  9. require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
  10. use bonus\account;
  11. use user_session\storage;
  12. class festvalControl extends mobileControl
  13. {
  14. const RELATIVE_UPLOAD = "/upfile";
  15. const UPFILE_PATH = BASE_UPLOAD_PATH . self::RELATIVE_UPLOAD;
  16. private $mod_activity_image;
  17. public function __construct() {
  18. parent::__construct();
  19. $this->mod_activity_image = Model('activity_image');
  20. }
  21. public function indexOp()
  22. {
  23. $this->topup();
  24. $url = BASE_SITE_URL . "/hfive/festval/index.html";
  25. if(session_helper::need_wechat_author())
  26. {
  27. $author = new thrid_author\wxauthor();
  28. $url = $author->enter($url);
  29. }
  30. return self::outsuccess(['direct_uri' => $url],"redirect");
  31. }
  32. private function from_base64($base_input, &$file_name)
  33. {
  34. if(empty($base_input)) {
  35. return false;
  36. }
  37. $regx = '/^(data:\s*image\/(\w+);base64,)/';
  38. if (preg_match($regx, $base_input, $result))
  39. {
  40. $file_type = $result[2];
  41. $content = str_replace( $result[1], '', $base_input);
  42. $file_name = md5($content) .'.'. $file_type;
  43. return base64_decode($content);
  44. } else {
  45. return false;
  46. }
  47. }
  48. function add_imageOp()
  49. {
  50. $image_content = $this->from_base64($_POST['image_data'],$file_name);
  51. $act_id = intval($_POST['act_id']);
  52. if ($image_content == false || $act_id <= 0) {
  53. return self::outerr( errcode::ErrParamter, "参数错误", "festval/error" );
  54. }
  55. $file_path = self::UPFILE_PATH . "/{$file_name}";
  56. if(file_put_contents($file_path,$image_content) == false) {
  57. return self::outerr( errcode::ErrParamter, "保存文件失败", "festval/error" );
  58. }
  59. $datas = [];
  60. {
  61. if(session_helper::logined()) {
  62. $datas['member_id'] = session_helper::memberid();
  63. } else {
  64. $datas['member_id'] = 0;
  65. }
  66. if(session_helper::unionid() != false) {
  67. $datas['unionid'] = session_helper::unionid();
  68. } else {
  69. $datas['unionid'] = "";
  70. }
  71. $datas['act_id'] = $act_id;
  72. $datas['image_path'] = self::RELATIVE_UPLOAD . "/" . $file_name;
  73. $datas['add_time'] = time();
  74. $datas['likes'] = 0;
  75. }
  76. $ret = $this->mod_activity_image->insert($datas);
  77. if($ret > 0) {
  78. return self::outsuccess(null);
  79. } else {
  80. return self::outerr( errcode::ErrParamter, "保存文件失败", "festval/error" );
  81. }
  82. }
  83. function likeOp()
  84. {
  85. $act_id = $_GET['act_id'];
  86. $image_id = $_GET['image_id'];
  87. if($act_id < 0 || $image_id < 0) {
  88. return self::outerr(errcode::ErrParamter,"参数错误");
  89. }
  90. $supporter = new festval_support($act_id,$image_id);
  91. if($supporter->supported()) {
  92. $supporter->unsupport();
  93. $supported = false;
  94. } else {
  95. $supporter->support();
  96. $supported = true;
  97. }
  98. $ret = $this->mod_activity_image->likes($image_id,true);
  99. return self::outsuccess(['supported' => $supported,'likes' => intval($ret['likes'])]);
  100. }
  101. function listOp()
  102. {
  103. $act_id = intval($_POST['act_id']);
  104. if ($act_id <= 0) {
  105. return self::outerr( errcode::ErrParamter, "参数错误", "festval/error" );
  106. }
  107. $items = $this->mod_activity_image->image_list(['act_id' => $act_id],'*',$this->page_size());
  108. $pages = $this->mod_activity_image->gettotalpage();
  109. $result = [];
  110. foreach ($items as $item) {
  111. $result[] = $this->format($item);
  112. }
  113. return self::outsuccess(['blocks' => $result,'mobile_page' => mobile_page($pages)]);
  114. }
  115. private function format($item)
  116. {
  117. $result = [];
  118. $image_id = intval($item['image_id']);
  119. $act_id = intval($item['act_id']);
  120. $result['image_id'] = $image_id;
  121. $supporter = new festval_support($act_id,$image_id);
  122. $result['supported'] = $supporter->supported();
  123. $result['act_id'] = $item['act_id'];
  124. $result['member_id'] = $item['member_id'];
  125. $result['image'] = $this->img_url($item['image_path']);
  126. $result['likes'] = intval($item['likes']);
  127. $result['add_time'] = intval($item['add_time']);
  128. return $result;
  129. }
  130. private function img_url($path)
  131. {
  132. if(strncasecmp($path,"http://",strlen("http://")) == 0) {
  133. $url = $path;
  134. } else {
  135. $url = UPLOAD_SITE_URL . $path;
  136. }
  137. return $url;
  138. }
  139. private function topup()
  140. {
  141. if(session_helper::logined()) {
  142. $pred = new account($_SESSION['member_id'],true);
  143. $pred->topup_bonus($_SESSION['member_mobile']);
  144. }
  145. }
  146. }
  147. class festval_support extends storage
  148. {
  149. private $act_id;
  150. private $image_id;
  151. public function __construct($act_id, $image_id)
  152. {
  153. $this->act_id = intval($act_id);
  154. $this->image_id = intval($image_id);
  155. parent::__construct();
  156. }
  157. public function is_act() {
  158. return ($this->act_id > 0 && $this->image_id <= 0);
  159. }
  160. public function limit_type()
  161. {
  162. return storage::NORMAL_SUPPORT;
  163. }
  164. public function storage_tag()
  165. {
  166. if($this->is_act()) {
  167. return "festval_support";
  168. } else {
  169. return "festval_image_{$this->act_id}";
  170. }
  171. }
  172. public function supported()
  173. {
  174. if($this->is_act()) {
  175. return parent::base_supported($this->act_id);
  176. } else {
  177. return parent::base_supported($this->image_id);
  178. }
  179. }
  180. public function support()
  181. {
  182. if($this->is_act())
  183. {
  184. $ret = parent::base_support($this->act_id);
  185. if($ret) {
  186. $this->add_act_likes();
  187. }
  188. }
  189. else
  190. {
  191. $ret = parent::base_support($this->image_id);
  192. if($ret) {
  193. $this->add_image_likes();
  194. }
  195. }
  196. return $ret;
  197. }
  198. public function unsupport()
  199. {
  200. if($this->is_act())
  201. {
  202. $ret = parent::base_unsupport($this->act_id);
  203. if($ret) {
  204. $this->sub_act_likes();
  205. }
  206. }
  207. else
  208. {
  209. $ret = parent::base_unsupport($this->image_id);
  210. if($ret) {
  211. $this->sub_image_likes();
  212. }
  213. }
  214. return $ret;
  215. }
  216. private function add_act_likes()
  217. {
  218. }
  219. private function sub_act_likes()
  220. {
  221. }
  222. private function add_image_likes()
  223. {
  224. $mod_image = Model('activity_image');
  225. $mod_image->where(['image_id' => $this->image_id])->update([ 'likes' => ['exp', 'likes + 1'] ]);
  226. }
  227. private function sub_image_likes()
  228. {
  229. $mod_image = Model('activity_image');
  230. $mod_image->where(['image_id' => $this->image_id])->update([ 'likes' => ['exp', 'likes - 1'] ]);
  231. }
  232. }