123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
-
- namespace App\Http\Services\Backend\DataManagement;
-
- use App\Http\Services\ConstDef\GeneralConst;
- use App\Models\Web\Settings;
-
- class SettingManagementService
- {
-
- private $settingManagementDb;
- private $basedir;
-
- public function __construct()
- {
- date_default_timezone_set("Asia/Taipei");
- $this->settingManagementDb = new Settings();
- $this->basedir = preg_replace('/\/app\/.*/', '/public/', __DIR__);
- }
-
- public function getSettings(
- &$cnt = 0,
- $orderColumn,
- $orderDir,
- $start,
- $length,
- $searchValue,
- $name,
- $cDateStart,
- $cDateFinal,
- $active
- )
- {
- // 選欄位
- $activeStr = '';
- foreach (GeneralConst::$activeMap as $k => $v) {
- $activeStr .= ' when \'' . $k . '\' then \'' . $v . '\'';
- }
- $settings = $this->settingManagementDb
- ->select([
- 'id',
- \DB::raw("CONCAT('<a href=\"settingManagement/edit/', id, '\">', name, '</a>') as name"),
- 'k',
- 'v',
- \DB::raw("(case active $activeStr end) as active"),
- 'cdate',
- 'mdate',
- \DB::raw("(select name from users where id=settings.oid) as oid"),
- ]);
- // 過濾搜尋條件
- $settings = $settings
- ->where('name', 'LIKE', '%' . $name . '%');
- if ($active != '') $settings = $settings->where('active', '=', $active);
- $settings = $settings->where('cdate', '>=', $cDateStart . ' 00:00:00');
- $settings = $settings->where('cdate', '<=', $cDateFinal . ' 23:59:59');
- // 取總筆數
- $cnt = $settings->count();
- // 排序
- $settings = $settings
- ->orderByRaw((int)$orderColumn . ' ' . $orderDir);
- // 彙整
- // 分頁
- $settings = $settings
- ->skip($start)->take($length);
- // 實際取資料
- $settings = $settings
- ->get()
- ->toArray();
-
- // 整理返回值並返回
- return $settings;
- }
-
- public function getSettingById($id)
- {
- // 取得參數
- // 調用資料庫(或者其他業務邏輯)
- $setting = $this->settingManagementDb->select([
- 'id',
- 'name',
- 'k',
- 'v',
- 'active',
- 'cdate',
- 'mdate',
- \DB::raw("(select name from users where id=settings.oid) as oid"),
- ])
- ->where('id', $id)
- ->first()
- ->toArray();
-
- // 整理返回值並返回
- return $setting;
- }
-
- public function insertSetting($name, $k, $v, $active, $oid)
- {
- // 取得參數
- // 調用資料庫(或者其他業務邏輯)
- $this->settingManagementDb
- ->insert([
- 'name' => $name,
- 'k' => $k,
- 'v' => $v,
- 'active' => $active,
- 'cdate' => date('Y-m-d H:i:s'),
- 'mdate' => date('Y-m-d H:i:s'),
- 'oid' => $oid,
- ]);
- $id = \DB::getPdo()->lastInsertId();
-
- // 整理返回值並返回
- return $id;
- }
-
- public function modifySetting($id, $name, $k, $v, $active, $oid)
- {
- // 取得參數
- // 調用資料庫(或者其他業務邏輯)
- $res = $this->settingManagementDb
- ->where('id', $id)
- ->update([
- 'name' => $name,
- 'k' => $k,
- 'v' => $v,
- 'active' => $active,
- 'mdate' => date('Y-m-d H:i:s'),
- 'oid' => $oid,
- ]);
-
- // 整理返回值並返回
- return $res;
- }
-
- // 外部服務取得設定
- public function getSetting()
- {
- $res = $this->settingManagementDb->select(['k', 'v'])->where('active', GeneralConst::ACTIVE_YES)->get()->toArray();
- $setting = [];
- foreach ($res as $r) $setting[ $r['k'] ] = $r['v'];
-
- return $setting;
- }
-
- // 外部服務取得設定
- public function setSetting($k, $v)
- {
- $this->settingManagementDb
- ->where('k', $k)
- ->where('active', GeneralConst::ACTIVE_YES)
- ->update([
- 'v' => $v,
- 'mdate' => date('Y-m-d H:i:s'),
- 'oid' => 1, // 腳本更改視為管理員更改
- ]);
-
- return true;
- }
-
- // 外部服務取得設定
- public function syncSettingToS3()
- {
- $res = $this->settingManagementDb
- ->select(['k', 'v'])
- ->where('active', GeneralConst::ACTIVE_YES)
- ->where('k', 'like', 'MASHUP_SETTING_%')
- ->get()
- ->toArray();
- $setting = [];
- foreach ($res as $r) $setting[ $r['k'] ] = json_decode($r['v'], true);
- // 寫入 S3 (不保存在本地)
- $s3 = new \Aws\S3\S3Client([
- 'credentials' => [
- 'key' => env('AWS_APP_KEY'),
- 'secret' => env('AWS_APP_SECRET'),
- ],
- 'region' => env('AWS_S3_REGION'),
- 'version' => 'latest',
- ]);
- $s3->putObject([
- 'ACL' => 'public-read',
- 'Body' => json_encode($setting, JSON_UNESCAPED_UNICODE),
- 'Bucket' => env('AWS_S3_BUCKET'),
- 'ContentType' => 'application/json; charset=utf-8',
- 'Key' => env('AWS_S3_NAMESPACE') . '/' . substr(GeneralConst::JSON_BASE_SETTING, 2),
- ]);
- unset($s3);
-
- return true;
- }
-
- }
|