| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | 
							- <?php
 - 
 - namespace App\Http\Controllers\Backend\DataManagement;
 - 
 - use Illuminate\Http\Request;
 - use App\Http\Services\Backend\DataManagement\SubmitManagementService;
 - use App\Http\Controllers\Controller;
 - use App\Http\Services\ConstDef\GeneralConst;
 - use App\Http\Services\CheckParamService;
 - use Redirect;
 - use ZipArchive;
 - 
 - class SubmitManagementController
 - {
 -     // 相關私有服務層調用器宣告
 -     private $submitManagementSv;
 -     private $checkParamSv;
 -     
 -     public function __construct()
 -     {
 -         // 建構服務層調用器
 -         $this->submitManagementSv = new SubmitManagementService();
 -         $this->checkParamSv = new CheckParamService();
 -         // 時區調整
 -         date_default_timezone_set("Asia/Taipei");
 -     }
 -     
 -     public function index()
 -     {
 -         // 渲染
 -         return view('admin.DataManagement.SubmitManagement', [
 -             'duplicate' => GeneralConst::$duplicateMap,
 -             'events'    => $this->submitManagementSv->getEvents(),
 -         ]);
 -     }
 -     
 -     public function grid()
 -     {
 -         // 取得參數
 -         $param = $_GET;
 -         if ($param == null) exit();
 -         $draw = $param["draw"]; //客戶端傳來的查詢次數,無條件回傳用以核對
 -         $orderColumn = $param["order"][0]["column"] + 1; //前端從 0 開始送,但 mysql 從 1 開始算
 -         $orderDir = $param["order"][0]["dir"];
 -         $start = $param["start"];   // 頁碼
 -         $length = $param["length"]; // 一頁多大
 -         $searchValue = $param["search"]["value"];
 -         //客製化搜尋欄位
 -         $submitDate = explode("\n", $param["columns"][1]["search"]["value"]);
 -         $submitDateStart = $submitDate[0] ?? null;
 -         $submitDateFinal = $submitDate[1] ?? null;
 -         $iid = $param["columns"][2]["search"]["value"];
 -         $searchcol = $param["columns"][3]["search"]["value"];
 -         $duplicate = $param["columns"][4]["search"]["value"];
 -         // 驗證
 -         if ($submitDateStart == "") $submitDateStart = "1900-01-01";
 -         if ($submitDateFinal == "") $submitDateFinal = "2050-12-31";
 -         if ($iid == "") $iid = 0;
 -         if (!$this->checkParamSv->validateDate($submitDateStart, 'Y-m-d')) $submitDateStart = "1900-01-01";
 -         if (!$this->checkParamSv->validateDate($submitDateFinal, 'Y-m-d')) $submitDateFinal = "2050-12-31";
 -         if ($searchcol != filter_var($searchcol, FILTER_SANITIZE_SPECIAL_CHARS)) $searchcol = "___CANNOT_FIND_STRING___";
 -         if (!$this->checkParamSv->LenMToN($searchcol, 0, 128)) $searchcol = "___CANNOT_FIND_STRING___";
 -         //資料庫
 -         $recordsTotal = 0;
 -         $result = $this->submitManagementSv->getSubmits(
 -             $recordsTotal,
 -             $orderColumn,
 -             $orderDir,
 -             $start,
 -             $length,
 -             $searchValue,
 -             $submitDateStart,
 -             $submitDateFinal,
 -             $iid,
 -             $searchcol,
 -             $duplicate
 -         );
 -         // 整理返回資料
 -         $data = array();
 -         for ($i = 0; $i < count($result); $i++) {
 -             $data[] = array(
 -                 //一般資料
 -                 $result[ $i ]["id"],
 -                 $result[ $i ]["event_name"],
 -                 $result[ $i ]["item_name"],
 -                 $result[ $i ]["name"],
 -                 $result[ $i ]["identity"],
 -                 $result[ $i ]["add_host"],
 -                 $result[ $i ]["add_contact"],
 -                 $result[ $i ]["tel"],
 -                 $result[ $i ][ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['sql'] ],
 -                 $result[ $i ][ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['sql'] ],
 -                 $result[ $i ][ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['sql'] ],
 -                 $result[ $i ][ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['sql'] ],
 -                 $result[ $i ]["cdate"],
 -             );
 -         }
 -         $json = array(
 -             "draw"            => $draw,
 -             "recordsTotal"    => $recordsTotal,
 -             "recordsFiltered" => $recordsTotal, //其實還是填入所有筆數,本次筆數可從陣列取得
 -             "data"            => $data,
 -         );
 -         
 -         // 返回
 -         return json_decode(json_encode($json, JSON_NUMERIC_CHECK), true);
 -     }
 -     
 -     public function getItems($eid)
 -     {
 -         $json = $this->submitManagementSv->getItems($eid);
 -         
 -         // 整理返回值並返回
 -         return json_decode(json_encode($json, JSON_NUMERIC_CHECK), true);
 -     }
 -     
 -     public function getZip($param)
 -     {
 -         // 取得參數
 -         if ($param == null) exit();
 -         $param = explode('|', $param);
 -         //客製化搜尋欄位
 -         $submitDateStart = $param[0];
 -         $submitDateFinal = $param[1];
 -         $iid = $param[2];
 -         $searchcol = $param[3];
 -         $duplicate = $param[4];
 -         // 驗證
 -         if ($submitDateStart == "") $submitDateStart = "1900-01-01";
 -         if ($submitDateFinal == "") $submitDateFinal = "2050-12-31";
 -         if (!$this->checkParamSv->validateDate($submitDateStart, 'Y-m-d')) $submitDateStart = "1900-01-01";
 -         if (!$this->checkParamSv->validateDate($submitDateFinal, 'Y-m-d')) $submitDateFinal = "2050-12-31";
 -         if ($iid == "") $iid = 0;
 -         if ($searchcol != filter_var($searchcol, FILTER_SANITIZE_SPECIAL_CHARS)) $searchcol = "___CANNOT_FIND_STRING___";
 -         if (!$this->checkParamSv->LenMToN($searchcol, 0, 128)) $searchcol = "___CANNOT_FIND_STRING___";
 -         // 路徑命名
 -         $dirname = 'working';
 -         $date = date("YmdHis");
 -         if (!file_exists($dirname)) mkdir($dirname, 0777, true);
 -         if (!file_exists($dirname . '/' . $date)) mkdir($dirname . '/' . $date, 0777, true);
 -         $basepath = $dirname . '/' . $date . '/';
 -         $excel_name = 'REPORT.xlsx';
 -         $zip_name = 'REPORT' . $date . '.zip';
 -         $report_files = [];
 -         // 製作 EXCEL
 -         $title = [
 -             'ID',
 -             '活動名稱',
 -             '獎別',
 -             '申請人姓名',
 -             '身分證號',
 -             '戶籍地址',
 -             '通訊地址',
 -             '電話',
 -             '建立時間',
 -         ];
 -         $submits = $this->submitManagementSv->getExportSubmits(
 -             $submitDateStart,
 -             $submitDateFinal,
 -             $iid,
 -             $searchcol,
 -             $duplicate
 -         );
 -         $excels = [];
 -         foreach ($submits as $s) {
 -             $excels[] = [
 -                 'id'          => $s['id'],
 -                 'event_name'  => $s['event_name'],
 -                 'item_name'   => $s['item_name'],
 -                 'name'        => $s['name'],
 -                 'identity'    => $s['identity'],
 -                 'add_host'    => $s['add_host'],
 -                 'add_contact' => $s['add_contact'],
 -                 'tel'         => $s['tel'],
 -                 'cdate'       => $s['cdate'],
 -             ];
 -         }
 -         $this->submitManagementSv->getExcel($title, $excels, $basepath . $excel_name);
 -         $report_files[] = $basepath . $excel_name;
 -         // 取得相關素材
 -         foreach ($submits as $s) {
 -             // 依照該身分證字號創建資料夾
 -             $mypath = $basepath . $s['identity'] . '/';
 -             if (!file_exists($mypath)) mkdir($mypath, 0777, true);
 -             // 逐一拷貝
 -             if (file_exists($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['sql'] ])) {
 -                 copy($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['sql'] ], $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['ext']);
 -                 $report_files[] = $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['ext'];
 -             }
 -             if (file_exists($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['sql'] ])) {
 -                 copy($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['sql'] ], $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['ext']);
 -                 $report_files[] = $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['ext'];
 -             }
 -             if (file_exists($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['sql'] ])) {
 -                 copy($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['sql'] ], $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['ext']);
 -                 $report_files[] = $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['ext'];
 -             }
 -             if (file_exists($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['sql'] ])) {
 -                 copy($s[ GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['sql'] ], $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['ext']);
 -                 $report_files[] = $mypath . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['zip_file'] . substr($date, 2, 6) . '-' . $s['id'] . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_DECLARE_PDF ]['ext'];
 -             }
 -         }
 -         // 製作壓縮檔
 -         foreach (glob($dirname . '/*.zip') as $f) if (is_file($f)) unlink($f); // 殺掉前幾次的舊匯出檔案
 -         $zip = new ZipArchive;
 -         if ($zip->open($dirname . '/' . $zip_name, ZipArchive::CREATE) === true) {
 -             foreach ($report_files as $f) $zip->addFile($f, str_replace($dirname . '/', '', $f));
 -             $zip->close();
 -         }
 -         $headers = array(
 -             'Content-Type' => 'application/octet-stream',
 -         );
 -         // 刪除文件夾
 -         $this->rrmdir($basepath);
 -         
 -         return response()->download($dirname . '/' . $zip_name, $zip_name, $headers);
 -     }
 -     
 -     public function rrmdir($dir)
 -     {
 -         if (is_dir($dir)) {
 -             $objects = scandir($dir);
 -             foreach ($objects as $object) {
 -                 if ($object != "." && $object != "..") {
 -                     if (is_dir($dir . DIRECTORY_SEPARATOR . $object) && !is_link($dir . "/" . $object))
 -                         $this->rrmdir($dir . DIRECTORY_SEPARATOR . $object);
 -                     else
 -                         unlink($dir . DIRECTORY_SEPARATOR . $object);
 -                 }
 -             }
 -             rmdir($dir);
 -         }
 -     }
 -     
 - }
 
 
  |