festval.php 7.1 KB

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