EventManagementController.php 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace App\Http\Controllers\Backend\DataManagement;
  3. use Illuminate\Http\Request;
  4. use App\Http\Services\Backend\DataManagement\EventManagementService;
  5. use App\Http\Controllers\Controller;
  6. use App\Http\Services\ConstDef\GeneralConst;
  7. use App\Http\Services\CheckParamService;
  8. use Redirect;
  9. class EventManagementController
  10. {
  11. // 相關私有服務層調用器宣告
  12. private $eventManagementSv;
  13. private $checkParamSv;
  14. public function __construct()
  15. {
  16. // 建構服務層調用器
  17. $this->eventManagementSv = new EventManagementService();
  18. $this->checkParamSv = new CheckParamService();
  19. // 時區調整
  20. date_default_timezone_set("Asia/Taipei");
  21. }
  22. public function index()
  23. {
  24. // 渲染
  25. return view('admin.DataManagement.EventManagement', [
  26. 'archive' => GeneralConst::$archiveMap,
  27. ]);
  28. }
  29. public function grid()
  30. {
  31. // 取得參數
  32. $param = $_GET;
  33. if ($param == null) exit();
  34. $draw = $param["draw"]; //客戶端傳來的查詢次數,無條件回傳用以核對
  35. $orderColumn = $param["order"][0]["column"] + 1; //前端從 0 開始送,但 mysql 從 1 開始算
  36. $orderDir = $param["order"][0]["dir"];
  37. $start = $param["start"]; // 頁碼
  38. $length = $param["length"]; // 一頁多大
  39. $searchValue = $param["search"]["value"];
  40. //客製化搜尋欄位
  41. $name = $param["columns"][1]["search"]["value"];
  42. $eventDate = explode("\n", $param["columns"][2]["search"]["value"]);
  43. $eventDateStart = $eventDate[0] ?? null;
  44. $eventDateFinal = $eventDate[1] ?? null;
  45. $archive = $param["columns"][3]["search"]["value"];
  46. // 驗證
  47. if ($name != filter_var($name, FILTER_SANITIZE_SPECIAL_CHARS)) $name = "___CANNOT_FIND_STRING___";
  48. if (!$this->checkParamSv->LenMToN($name, 0, 16)) $name = "___CANNOT_FIND_STRING___";
  49. if ($eventDateStart == "") $eventDateStart = "1900-01-01";
  50. if ($eventDateFinal == "") $eventDateFinal = "2050-12-31";
  51. if (!$this->checkParamSv->validateDate($eventDateStart, 'Y-m-d')) $eventDateStart = "1900-01-01";
  52. if (!$this->checkParamSv->validateDate($eventDateFinal, 'Y-m-d')) $eventDateFinal = "2050-12-31";
  53. //資料庫
  54. $recordsTotal = 0;
  55. $result = $this->eventManagementSv->getEvents(
  56. $recordsTotal,
  57. $orderColumn,
  58. $orderDir,
  59. $start,
  60. $length,
  61. $searchValue,
  62. $name,
  63. $eventDateStart,
  64. $eventDateFinal,
  65. $archive
  66. );
  67. // 整理返回資料
  68. $data = array();
  69. for ($i = 0; $i < count($result); $i++) {
  70. $data[] = array(
  71. //一般資料
  72. $result[ $i ]["chk"],
  73. $result[ $i ]["id"],
  74. $result[ $i ]["name"],
  75. $result[ $i ]["cnt"],
  76. $result[ $i ]["date_begin"],
  77. $result[ $i ]["date_final"],
  78. $result[ $i ]["cdate"],
  79. $result[ $i ]["mdate"],
  80. $result[ $i ]["oid"],
  81. );
  82. }
  83. $json = array(
  84. "draw" => $draw,
  85. "recordsTotal" => $recordsTotal,
  86. "recordsFiltered" => $recordsTotal, //其實還是填入所有筆數,本次筆數可從陣列取得
  87. "data" => $data,
  88. );
  89. // 返回
  90. return json_decode(json_encode($json, JSON_NUMERIC_CHECK), true);
  91. }
  92. public function archive(Request $request)
  93. {
  94. // 取得參數
  95. $grp = $request->input('grp', []);
  96. // 執行
  97. if (count($grp) > 0) $this->eventManagementSv->archive($grp);
  98. // 返回
  99. return response()->json(["succ" => true, "err" => '']);
  100. }
  101. public function unarchive(Request $request)
  102. {
  103. // 取得參數
  104. $grp = $request->input('grp', []);
  105. // 執行
  106. if (count($grp) > 0) $this->eventManagementSv->unarchive($grp);
  107. // 返回
  108. return response()->json(["succ" => true, "err" => '']);
  109. }
  110. public function clear(Request $request)
  111. {
  112. // 取得參數
  113. $grp = $request->input('grp', []);
  114. // 執行
  115. if (count($grp) > 0) $this->eventManagementSv->clear($grp);
  116. // 返回
  117. return response()->json(["succ" => true, "err" => '']);
  118. }
  119. public function create()
  120. {
  121. // 渲染
  122. return view('admin.DataManagement.EventManagementEdit', [
  123. 'operdata' => "",
  124. ]);
  125. }
  126. public function edit($id)
  127. {
  128. // 取得參數與驗證
  129. // 服務層取得資料(以及實現各種業務上的邏輯)
  130. $event = $this->eventManagementSv->getEventById($id);
  131. // 渲染
  132. return view('admin.DataManagement.EventManagementEdit', [
  133. 'operdata' => $event,
  134. ]);
  135. }
  136. public function saveImg(Request $request)
  137. {
  138. $arrayBuffer = $request->image;
  139. $dirname = 'kv';
  140. // 圖片還原
  141. $binary = "";
  142. for ($index = 0; $index < count($arrayBuffer); $index++) $binary = $binary . pack("C*", $arrayBuffer[ $index ]);
  143. // 路徑命名
  144. $date = date('Y-m-d');
  145. if (!file_exists($dirname)) mkdir($dirname, 0777, true);
  146. if (!file_exists($dirname . '/' . $date)) mkdir($dirname . '/' . $date, 0777, true);
  147. // 保存圖片
  148. $time = time();
  149. $fp = fopen($dirname . '/' . $date . '/' . $time . '.jpg', 'w');
  150. fwrite($fp, $binary);
  151. fclose($fp);
  152. // 返回
  153. $json = array(
  154. "url" => env('APP_URL') . $dirname . '/' . $date . '/' . $time . '.jpg',
  155. "kv" => $dirname . '/' . $date . '/' . $time . '.jpg',
  156. );
  157. return json_decode(json_encode($json, JSON_NUMERIC_CHECK), true);
  158. }
  159. public function store(Request $request)
  160. {
  161. // 取得參數與驗證
  162. $mode = $request->mode;
  163. $id = ($request->mode == 'insert') ? '' : $request->id;
  164. $name = $request->name;
  165. $kv = $request->kv ?? '';
  166. $date_begin = $request->date_begin;
  167. $date_final = $request->date_final;
  168. $email = $request->email;
  169. $tel = $request->tel;
  170. $items = $request->items ?? [];
  171. if ($kv == '') {
  172. return Redirect::back()->withErrors("需要上傳主視覺");
  173. }
  174. if (count($items) == 0) {
  175. return Redirect::back()->withErrors("需要有獎項");
  176. }
  177. // 服務層設置(以及實現各種業務上的邏輯)
  178. if ($mode == "insert") {
  179. // 新增模式
  180. $id = $this->eventManagementSv->insertEvent($name, $kv, $date_begin, $date_final, $email, $tel, $request->user()->id);
  181. foreach ($items['new'] as $item) $this->eventManagementSv->insertItem($id, $item['name'], $item['is_ide'] ?? 'N', $item['id_acc'] ?? 'N');
  182. } else {
  183. // 編輯模式
  184. $this->eventManagementSv->modifyEvent($id, $name, $kv, $date_begin, $date_final, $email, $tel, $request->user()->id);
  185. foreach ($items['new'] as $item) $this->eventManagementSv->insertItem($id, $item['name'], $item['is_ide'] ?? 'N', $item['id_acc'] ?? 'N');
  186. foreach ($items['edit'] as $k => $item) $this->eventManagementSv->modifyItem($k, $id, $item['name']);
  187. }
  188. // 跳轉
  189. return redirect('/backend/dataManagement/eventManagement/edit/' . $id);
  190. }
  191. public function getItems($eid)
  192. {
  193. $json = $result = $this->eventManagementSv->getItems($eid);
  194. // 返回
  195. return json_decode(json_encode($json, JSON_NUMERIC_CHECK), true);
  196. }
  197. }