generator.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/7/5
  6. * Time: 下午6:24
  7. */
  8. namespace ugc;
  9. use Exception;
  10. use Log;
  11. use errcode;
  12. class special_object
  13. {
  14. private $special_id;
  15. private $share_title;
  16. private $share_image;
  17. private $mb_special;
  18. private $contents;
  19. public function __construct()
  20. {
  21. $this->mb_special = Model('mb_special');
  22. $this->contents = [];
  23. }
  24. public function set_share($special_id,$title,$image) {
  25. $this->special_id = $special_id;
  26. $this->share_title = empty($title) ? '' : $title;
  27. $this->share_image = empty($image) ? '' : $image;
  28. }
  29. public function add_item(UGContent $item)
  30. {
  31. $this->contents[] = $item;
  32. }
  33. public function count() {
  34. return count($this->contents);
  35. }
  36. public function save($user_id,$origin_content)
  37. {
  38. $sp_id = $this->save_special($user_id,$origin_content);
  39. if($sp_id == false) return false;
  40. $this->del_items($sp_id);
  41. $questions = [];
  42. $vote = [];
  43. $vote_result = [];
  44. $item_sort = 0;
  45. $qindex = 0;
  46. $desc = '';
  47. $fDesc = false;
  48. foreach ($this->contents as $item)
  49. {
  50. $data = $item->format_block();
  51. if($data == false) {
  52. continue;
  53. }
  54. $data['special_id'] = $sp_id;
  55. $data['item_sort'] = $item_sort;
  56. $item_id = $this->save_item($data);
  57. $item_sort++;
  58. if($item_id == false) continue;
  59. $cur_type = $item->type();
  60. if($cur_type == 'text' && $fDesc == false)
  61. {
  62. $fDesc = true;
  63. $text = $item->text();
  64. $desc = mb_substr($text,0,128);
  65. if(!empty($desc)) {
  66. $desc .= '>>>';
  67. }
  68. }
  69. elseif($cur_type == 'vote')
  70. {
  71. $vote_result[] = $item->vote_result();
  72. $vote[] = $item->vote_param();
  73. }
  74. elseif ($cur_type == 'question')
  75. {
  76. $question['question'] = $item->question();
  77. $question['answer'] = $item->answer();
  78. $questions[$qindex] = $question;
  79. $qindex++;
  80. }
  81. else {
  82. }
  83. }
  84. $params = ['vote' => $vote,'questions' => $questions];
  85. $this->mb_special->editUserSpecial($this->special_id,['member_id' => $user_id,'special_id' => $sp_id],['params' => serialize($params),
  86. 'vote_result' => serialize($vote_result),'description' => $desc]);
  87. return $sp_id;
  88. }
  89. private function del_items($special_id)
  90. {
  91. $this->mb_special->delMbSpecialItem(['special_id' => $special_id],$special_id);
  92. }
  93. private function save_special($user_id,$origin_content)
  94. {
  95. $param['share_title'] = $this->share_title;
  96. $param['special_desc'] = $this->share_title;
  97. $param['share_image'] = $this->share_image;
  98. $param['member_id'] = $user_id;
  99. $param['origin_data'] = serialize($origin_content);
  100. $param['editime'] = time();
  101. $param['state'] = 1;
  102. $param['from_user'] = 1;
  103. if($this->special_id > 0)
  104. {
  105. $result = $this->mb_special->editUserSpecial($this->special_id,['member_id' => $user_id,'special_id' => $this->special_id],$param);
  106. if($result == true) {
  107. return $this->special_id;
  108. } else {
  109. return false;
  110. }
  111. }
  112. else
  113. {
  114. $param['addtime'] = time();
  115. $result = $this->mb_special->addMbSpecial($param);
  116. return $result;
  117. }
  118. }
  119. private function save_item($data)
  120. {
  121. $result = $this->mb_special->addUserSpecialItem($data);
  122. if($result == false) return false;
  123. return $result['item_id'];
  124. }
  125. public function insert_divider($special_id,$item_sort)
  126. {
  127. $param['special_id'] = $special_id;
  128. $param['item_sort'] = $item_sort;
  129. $param['item_type'] = 'divider';
  130. $param['bg_type'] = content_config::def_item_bg_type;
  131. $param['bg_data'] = content_config::def_item_bg_color;
  132. $param['has_margin'] = 0;
  133. $param['bg_image'] = '';
  134. return $this->save_item($param);
  135. }
  136. }
  137. class generator
  138. {
  139. private $mVotePos;
  140. private $mQuestionPos;
  141. public function __construct()
  142. {
  143. $this->mVotePos = 0;
  144. $this->mQuestionPos = 0;
  145. }
  146. public function crate_special($data,&$err)
  147. {
  148. if(empty($data)) {
  149. $err = ['code' => errcode::ErrParamter,'msg' => "参数不能为空"];
  150. return false;
  151. }
  152. $spobj = new special_object();
  153. $share_title = $data['share_title'];
  154. $share_image = $data['share_image'];
  155. $sp_id = $data['special_id'];
  156. $spobj->set_share($sp_id,$share_title,$share_image);
  157. $items = $data['items'];
  158. $index = 0;
  159. foreach ($items as $item)
  160. {
  161. $index++;
  162. try
  163. {
  164. $type = $item['type'];
  165. if($type == 'images') {
  166. $obj_item = new images_item($item);
  167. }
  168. elseif($type == 'text') {
  169. $obj_item = new text_item($item);
  170. }
  171. elseif($type == 'video') {
  172. $obj_item = new video_item($item);
  173. }
  174. elseif ($type == 'goods') {
  175. $obj_item = new goods_item($item);
  176. }
  177. elseif($type == 'vote') {
  178. $obj_item = new vote_item($item,$this->mVotePos);
  179. $this->mVotePos++;
  180. }
  181. elseif($type == 'question') {
  182. $obj_item = new question_item($item);
  183. $this->mQuestionPos++;
  184. }
  185. else {
  186. continue;
  187. }
  188. $spobj->add_item($obj_item);
  189. }
  190. catch (Exception $ex) {
  191. $msg = "第{$index}项,{$ex->getMessage()}";
  192. $err = ['code' => errcode::ErrUGC,'msg' => $msg];
  193. }
  194. }
  195. if($spobj->count() > 0) {
  196. return $spobj;
  197. } else {
  198. return false;
  199. }
  200. }
  201. }