'required', ]; protected $validationMessages = [ 'name' => [ 'required' => '이름은 필수 입력사항입니다.', ], ]; protected $skipValidation = false; protected $cleanValidationRules = true; public function __construct() { $this->zenith = \Config\Database::connect(); $this->facebook = \Config\Database::connect('facebook'); $this->google = \Config\Database::connect('google'); $this->kakao = \Config\Database::connect('kakao'); } public function getCompanies($data) { $srch = $data['searchData']; $builder = $this->zenith->table('companies AS c'); $builder->select('c.*, ci.company_parent_id as p_id, parent_c.name as p_name'); $builder->join('companies_idx AS ci', 'c.id = ci.company_id', 'left'); $builder->join('companies AS parent_c', 'parent_c.id = ci.company_parent_id', 'left'); $builder->where('c.status !=', 0); if(isset($srch['sdate']) && isset($srch['edate'])){ $builder->where('c.created_at >=', $srch['sdate']); $builder->where('c.created_at <=', date('Y-m-d', strtotime($srch['edate'].' + 1day'))); } if(!empty($srch['stx'])){ $builder->groupStart(); $builder->like('c.type', $srch['stx']); $builder->orLike('c.name', $srch['stx']); $builder->orLike('c.nickname', $srch['stx']); $builder->orLike('parent_c.name', $srch['stx']); $builder->groupEnd(); } $builder->groupBy('c.id'); // limit 적용하지 않은 쿼리 $builderNoLimit = clone $builder; // limit 적용한 쿼리 $orderBy = []; if(!empty($data['order'])) { foreach($data['order'] as $row) { $col = $data['columns'][$row['column']]['data']; if($col) $orderBy[] = "{$col} {$row['dir']}"; } } $orderBy[] = "id DESC"; $builder->orderBy(implode(",", $orderBy),'',true); if($data['length'] > 0){ $builder->limit($data['length'], $data['start']); } $result = $builder->get()->getResultArray(); $resultNoLimit = $builderNoLimit->countAllResults(); return [ 'data' => $result, 'allCount' => $resultNoLimit ]; } public function getCompany($id) { $builder = $this->zenith->table('companies AS c'); $builder->select('c.*, GROUP_CONCAT(DISTINCT u.username) as username, ci.company_parent_id as p_id, parent_c.name as p_name'); $builder->join('companies_users as cu', 'c.id = cu.company_id', 'left'); $builder->join('users as u', 'cu.user_id = u.id', 'left'); $builder->join('companies_idx as ci', 'c.id = ci.company_id', 'left'); $builder->join('companies as parent_c', 'ci.company_parent_id = parent_c.id', 'left'); $builder->where('c.id', $id); $builder->where('c.status !=', 0); $result = $builder->get()->getRowArray(); return $result; } public function getSearchCompanies($stx = NULL) { $builder = $this->zenith->table('companies'); $builder->select('id, name'); $builder->where('status !=', 0); if(!empty($stx)){ $builder->like('name', $stx); } $result = $builder->get()->getResultArray(); return $result; } public function getSearchAgencies($stx = NULL) { $builder = $this->zenith->table('companies'); $builder->select('id, name'); $builder->where('type', '광고대행사'); $builder->where('status !=', 0); if(!empty($stx)){ $builder->like('name', $stx); } $result = $builder->get()->getResultArray(); return $result; } public function getAgencyByName($p_name) { if(empty($p_name)){ return false; } $builder = $this->zenith->table('companies'); $builder->select('id, name'); $builder->where('type', '광고대행사'); $builder->where('status !=', 0); $builder->where('name', $p_name); $result = $builder->get()->getRowArray(); return $result; } public function getCompanyByName($p_name) { $builder = $this->zenith->table('companies'); $builder->select('id, name'); $builder->where('status !=', 0); if(!empty($p_name)){ $builder->where('name', $p_name); } $result = $builder->get()->getRowArray(); return $result; } public function getCompaniesByName($names) { $builder = $this->zenith->table('companies'); $builder->select('id'); $builder->where('status !=', 0); $builder->whereIn('name', $names); $result = $builder->get()->getResultArray(); return $result; } public function createCompany($data, $agency) { $this->zenith->transStart(); $builder_1 = $this->zenith->table('companies'); $builder_1->set('type', $data['type']); $builder_1->set('name', $data['name']); $builder_1->set('nickname', auth()->user()->nickname ?? ''); $builder_1->set('status', 1); $result_1 = $builder_1->insert(); if(!empty($agency)){ $insertId = $this->zenith->insertID(); $builder_2 = $this->zenith->table('companies_idx'); $newRecord = [ 'company_id' => $insertId, 'company_parent_id' => $agency['id'] ]; $builder_2->insert($newRecord); } $result = $this->zenith->transComplete(); // sql error 구문이 찍히지 않아서 select if($result===false){ $builder = $this->zenith->table('companies'); $builder->select('name'); $builder->set('name', $data['name']); $cnt = $builder->get()->getNumRows(); if($cnt>0) $result = "duplicate"; } return $result; } public function setCompany($data, $agency) { $this->zenith->transStart(); $builder_1 = $this->zenith->table('companies'); $builder_1->set('name', $data['name']); $builder_1->where('id', $data['id']); $builder_1->update(); $builder_2 = $this->zenith->table('companies_idx'); $builder_2->where('company_id', $data['id']); $result = $builder_2->get()->getResult(); if(!empty($agency)){ if (empty($result)) { $newRecord = [ 'company_id' => $data['id'], 'company_parent_id' => $agency['id'] ]; $result_2 = $builder_2->insert($newRecord); } else { $builder_2->set('company_parent_id', $agency['id']); $builder_2->where('company_id', $data['id']); $result_2 = $builder_2->update(); } } $result = $this->zenith->transComplete(); return $result; } public function deleteCompany($data) { $this->zenith->transStart(); $builder = $this->zenith->table('companies'); $builder->where('id', $data['id']); $builder->delete(); $builder = $this->zenith->table('company_adaccounts'); $builder->where('company_id', $data['id']); $builder->delete(); $result = $this->zenith->transComplete(); return $result; } public function getSearchAdAccounts($stx = NULL) { if(!$this->facebook->tableExists('fb_ad_account') || !$this->google->tableExists('aw_ad_account') || !$this->kakao->tableExists('mm_ad_account')){ return false; } $facebookBuilder = $this->facebook->table('fb_ad_account'); $kakaoBuilder = $this->kakao->table('mm_ad_account'); $googleBuilder = $this->google->table('aw_ad_account'); $facebookBuilder->select('"facebook" AS media, name, ad_account_id AS account_id, status AS status'); $facebookBuilder->like('name', $stx); $facebookResult = $facebookBuilder->get()->getResultArray(); $kakaoBuilder->select('"kakao" AS media, name, id AS account_id, config AS status'); $kakaoBuilder->like('name', $stx); $kakaoResult = $kakaoBuilder->get()->getResultArray(); $googleBuilder->select('"google" AS media, name, , customerId AS account_id, status AS status'); $googleBuilder->like('name', $stx); $googleResult = $googleBuilder->get()->getResultArray(); $mergedResults = array_merge($facebookResult, $kakaoResult, $googleResult); return $mergedResults; } public function getCompanyAdAccounts($data) { if(!$this->facebook->tableExists('fb_ad_account') || !$this->google->tableExists('aw_ad_account') || !$this->kakao->tableExists('mm_ad_account')){ return false; } $zenithBuilder = $this->zenith->table('company_adaccounts AS ca'); $facebookBuilder = clone $zenithBuilder; $facebookBuilder->join('z_facebook.fb_ad_account AS fa', 'ca.ad_account_id = fa.ad_account_id'); $facebookBuilder->select('ca.ad_account_id AS accountId, "facebook" AS media, fa.name AS name, fa.status AS status'); $facebookBuilder->where('ca.company_id', $data['company_id']); $facebookResult = $facebookBuilder->get()->getResultArray(); $kakaoBuilder = clone $zenithBuilder; $kakaoBuilder->join('z_moment.mm_ad_account AS ma', 'ca.ad_account_id = ma.id'); $kakaoBuilder->select('ca.ad_account_id AS accountId, "kakao" AS media, ma.name AS name, ma.config AS status'); $kakaoBuilder->where('ca.company_id', $data['company_id']); $kakaoResult = $kakaoBuilder->get()->getResultArray(); $googleBuilder = clone $zenithBuilder; $googleBuilder->join('z_adwords.aw_ad_account AS awa', 'ca.ad_account_id = awa.customerId'); $googleBuilder->select('ca.ad_account_id AS accountId, "google" AS media, awa.name AS name, awa.status AS status'); $googleBuilder->where('ca.company_id', $data['company_id']); $googleResult = $googleBuilder->get()->getResultArray(); $mergedResults = array_merge($facebookResult, $kakaoResult, $googleResult); return $mergedResults; } public function getCompanyAdAccount($data) { $builder = $this->zenith->table('company_adaccounts'); $builder->where('company_id', $data['company_id']); $builder->where('ad_account_id', $data['ad_account_id']); $builder->where('media', $data['media']); $result = $builder->get()->getResult(); return $result; } public function setCompanyAdAccount($data) { $this->zenith->transStart(); $builder = $this->zenith->table('company_adaccounts'); $newRecord = [ 'company_id' => $data['company_id'], 'ad_account_id' => $data['ad_account_id'], 'media' => $data['media'] ]; $builder->insert($newRecord); $result = $this->zenith->transComplete(); return $result; } public function exceptCompanyAdAccount($data) { $this->zenith->transStart(); $builder = $this->zenith->table('company_adaccounts'); $builder->where('company_id', $data['company_id']); $builder->where('ad_account_id', $data['ad_account_id']); $builder->where('media', $data['media']); $builder->delete(); $result = $this->zenith->transComplete(); return $result; } }