This commit is contained in:
Jaybe
2025-03-05 14:02:29 +09:00
commit 247a7808d3
357 changed files with 161196 additions and 0 deletions
+114
View File
@@ -0,0 +1,114 @@
<?php
namespace App\Models\Api;
use CodeIgniter\Database\RawSql;
use CodeIgniter\Model;
class AdLeadModel extends Model
{
protected $facebook, $google, $kakao, $zenith;
public function __construct()
{
$this->facebook = \Config\Database::connect('facebook');
$this->google = \Config\Database::connect('google');
$this->kakao = \Config\Database::connect('kakao');
$this->zenith = \Config\Database::connect();
}
public function getBizFormUserResponse()
{
$sql = "SELECT ur.*, mc.code, mc.name, mc.id
FROM mm_creative AS mc
JOIN mm_bizform_user_response AS ur ON mc.id = ur.creative_id
WHERE ur.send_time IS NULL
ORDER BY ur.create_time ASC";
$result = $this->kakao->query($sql);
return $result;
}
public function getFBAdLead()
{
$sql = "SELECT * FROM fb_ad AS ad
JOIN fb_ad_lead as LE on ad.ad_id = LE.ad_id
WHERE LE.created_time >= '2018-05-03 10:20:00' and ad.ad_name REGEXP '#[0-9]+' and (LE.send_time IS NULL)
ORDER BY LE.created_time ";
$result = $this->facebook->query($sql)->getResultArray();
return $result;
}
public function getGoogleAdLead()
{
}
public function insertEventLeadFacebook($row)
{
$is_added = false;
$age = (integer)$row['age'] ?? (integer)0;
$sql = "SELECT * FROM event_leads WHERE event_seq = '{$row['event_seq']}' AND site='{$row['site']}' AND name='{$row['name']}' AND gender='{$row['gender']}' AND age='{$age}' AND phone=enc_data('{$row['phone']}') AND add1='{$row['add1']}' AND add2='{$row['add2']}' AND add3='{$row['add3']}' AND add4='{$row['add4']}' AND add5='{$row['add5']}' AND addr='{$row['addr']}' AND lead_id='{$row['id']}'";
$result = $this->zenith->query($sql);
$is_added = count($result->getResultArray());
if (!$is_added) {
$row['name'] = $this->zenith->escape($row['name']);
$sql = "INSERT INTO event_leads SET event_seq = '{$row['event_seq']}', site='{$row['site']}', name={$row['name']}, gender='{$row['gender']}', age='{$age}', phone=ENC_DATA('{$row['phone']}'), add1='{$row['add1']}', add2='{$row['add2']}', add3='{$row['add3']}', add4='{$row['add4']}', add5='{$row['add5']}', addr='{$row['addr']}', reg_date='{$row['reg_date']}', is_deleted=0, lead_id='{$row['id']}', status=0, is_encryption=1, reg_timestamp=UNIX_TIMESTAMP(NOW())";
$result = $this->zenith->query($sql);
if ($result) {
$sql = "UPDATE fb_ad_lead SET send_time=now() WHERE id='{$row['id']}'";
$result = $this->facebook->query($sql);
}
}
}
public function insertEventLeadKakao($row)
{
$data = [
'event_seq' => $row['event_seq'],
'site' => $row['site'],
'name' => $row['name'],
'phone' => new RawSql("enc_data('{$row['phone']}')"),
'gender' => $row['gender'],
'age' => $row['age'],
'addr' => $row['addr'],
'email' => $row['email'],
'agree' => 'Y',
'add1' => $row['add1'],
'add2' => $row['add2'],
'add3' => $row['add3'],
'add4' => $row['add4'],
'add5' => $row['add5'],
'status' => 0,
'is_encryption' => 1,
'lead_id' => $row['lead_id'],
'reg_date' => date('Y-m-d H:i:s', $row['reg_timestamp']),
'reg_timestamp' => new RawSql("UNIX_TIMESTAMP(NOW())")
];
$builder = $this->zenith->table('event_leads');
$builder->set($data);
$result = $builder->insert();
if ($result) {
$builder = $this->kakao->table('mm_bizform_user_response');
$builder->set('send_time', new RawSql('NOW()'));
$builder->where(['encUserId'=>$row['encUserId'], 'bizFormId'=>$row['bizFormId']]);
$builder->update();
}
}
public function insertEventLeadGoogle($row)
{
}
public function getBizformQuestion($bizformId, $itemId)
{
$sql = "SELECT bizform_id, id, title FROM mm_bizform_items WHERE bizform_id = '{$bizformId}' AND id = '{$itemId}'";
$result = $this->kakao->query($sql)->getRowArray();
if (!$result) return null;
return $result;
}
}
+342
View File
@@ -0,0 +1,342 @@
<?php
namespace App\Models\Api;
use CodeIgniter\Model;
class CompanyModel extends Model
{
protected $zenith, $facebook, $google, $kakao;
protected $allowedFields = [
'type',
'name',
'nickname',
'status',
'created_at',
'updated_at',
'deleted_at',
];
protected $validationRules = [
'name' => '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;
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Models\Api;
use CodeIgniter\Shield\Models\UserIdentityModel as ShieldUserIdentityModelModel;
class IdentityModel extends ShieldUserIdentityModelModel
{
protected $allowedFields = [
'user_id',
'type',
'name',
'secret',
'secret2',
'expires',
'extra',
'force_reset',
'password_changed_at',
'last_used_at',
];
public function setPasswordChangedAt($id, $date)
{
$this->db->transStart();
$builder = $this->db->table('auth_identities');
$builder->set('password_changed_at', $date);
$builder->where('user_id', $id);
$builder->where('type', 'email_password');
$builder->update();
$result = $this->db->transComplete();
return $result;
}
}
+247
View File
@@ -0,0 +1,247 @@
<?php
namespace App\Models\Api;
use App\Models\BaseModel;
use CodeIgniter\Shield\Models\UserModel as ShieldUserModel;
class UserModel extends ShieldUserModel
{
protected $table = 'users';
protected $primaryKey = 'id';
protected $useTimestaps = true;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
protected $allowedFields = [
'username',
'active',
'last_active',
'deleted_at',
];
// Validation
protected $validationRules = [
'username' => 'required',
'groups' => 'required',
'permission' => 'required',
];
protected $validationMessages = [
'username' => [
'required' => '이름은 필수 입력사항입니다.',
],
'groups' => [
'required' => '그룹은 필수 선택사항입니다.',
],
'permission' => [
'required' => '세부 권한은 필수 선택사항입니다.',
],
];
protected $skipValidation = false;
protected $cleanValidationRules = true;
public function getUsers($data)
{
$srch = $data['searchData'];
$builder = $this->db->table('users AS u');
$builder->select('c.name AS belong, u.id AS user_id, u.username, u.nickname, ai.secret AS email, u.active as active, GROUP_CONCAT(DISTINCT agu.group) as `groups`, u.created_at');
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
$builder->join('companies as c', 'c.id = cu.company_id', 'left');
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
$builder->where('u.deleted_at =', NULL);
if(isset($srch['sdate']) && isset($srch['edate'])){
$builder->where('u.created_at >=', $srch['sdate']);
$builder->where('u.created_at <=', date('Y-m-d', strtotime($srch['edate'].' + 1day')));
}
if(!empty($srch['stx'])){
$builder->groupStart();
$builder->like('u.username', $srch['stx']);
$builder->orLike('c.name', $srch['stx']);
$builder->orLike('u.nickname', $srch['stx']);
$builder->orLike('ai.secret', $srch['stx']);
$builder->groupEnd();
}
$builder->groupBy('u.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[] = "created_at 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 getUser($data)
{
$builder = $this->db->table('users AS u');
$builder->select('cu.company_id AS company_id, c.name AS belong, u.id AS user_id, u.username, u.nickname, up.division, up.team, up.position, ai.secret AS email, u.active, GROUP_CONCAT(DISTINCT agu.group) AS `groups`, GROUP_CONCAT(DISTINCT apu.permission) AS permissions, u.created_at');
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
$builder->join('companies as c', 'c.id = cu.company_id', 'left');
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
$builder->join('auth_permissions_users as apu', 'u.id = apu.user_id', 'left');
$builder->join('users_department AS up', 'u.id = up.user_id', 'left');
$builder->where('u.id', $data['user_id']);
$result = $builder->get()->getRowArray();
return $result;
}
public function getSearchUsers($data)
{
$builder = $this->db->table('users');
$builder->select('id, username, nickname');
if(!empty($data['stx'])){
$builder->like('username', $data['stx']);
$builder->orLike('nickname', $data['stx']);
$builder->limit(10);
}
$result = $builder->get()->getResultArray();
return $result;
}
public function getBelongUsers($companyId)
{
$builder = $this->db->table('users AS u');
$builder->select('u.id, u.username, u.nickname, u.created_at');
$builder->join('companies_users as cu', 'u.id = cu.user_id', 'left');
$builder->where('cu.company_id', $companyId);
$result = $builder->get()->getResultArray();
return $result;
}
public function getBelongUser($data)
{
$builder = $this->db->table('companies_users');
$builder->select('company_id, user_id');
$builder->where('user_id', $data['user_id']);
$builder->where('company_id', $data['company_id']);
$result = $builder->get()->getResult();
return $result;
}
public function setUser($data)
{
$user = $this->findById($data['user_id']);
$this->db->transStart();
if(isset($data['active'])){
$builder_1 = $this->db->table('users');
$builder_1->set('active', $data['active']);
$builder_1->where('id', $data['user_id']);
$builder_1->update();
}
if(!empty($data['company_id'])){
$builder_2 = $this->db->table('companies_users');
$builder_2->where('company_id', $data['company_id']);
$builder_2->where('user_id', $data['user_id']);
$result = $builder_2->get()->getResult();
if(empty($result)){
$newRecord = [
'company_id' => $data['company_id'],
'user_id' => $data['user_id']
];
$builder_2->insert($newRecord);
}
$builder_2->set('company_id', $data['company_id']);
$builder_2->where('company_id', $data['company_id']);
$builder_2->where('user_id', $data['user_id']);
$builder_2->update();
}
if(empty($data['company_name'])){
$builder_2 = $this->db->table('companies_users');
$builder_2->where('user_id', $data['user_id']);
$builder_2->delete();
}
if(!empty($data['group'])){
if ($user->inGroup('superadmin')) {
array_push($data['group'], 'superadmin');
}
$user->syncGroups(...$data['group']);
}else{
$groups = array_values($user->getGroups());
if ($user->inGroup('superadmin')) {
$user->removeGroup('admin', 'developer', 'user', 'agency', 'advertiser', 'guest');
}else{
$user->removeGroup(...$groups);
}
}
if(!empty($data['permission'])){
$user->syncPermissions(...$data['permission']);
}else{
$permissions = array_values($user->getPermissions());
$user->removePermission(...$permissions);
}
$result = $this->db->transComplete();
return $result;
}
public function setBelongUser($data)
{
$this->db->transStart();
$builder = $this->db->table('companies_users');
$newRecord = [
'company_id' => $data['company_id'],
'user_id' => $data['user_id'],
];
$builder->insert($newRecord);
$result = $this->db->transComplete();
return $result;
}
public function exceptBelongUser($data)
{
$this->db->transStart();
$builder = $this->db->table('companies_users');
$builder->where('user_id', $data['user_id']);
$builder->where('company_id', $data['company_id']);
$builder->delete();
$result = $this->db->transComplete();
return $result;
}
public function getUserByName($name)
{
$builder = $this->db->table('users AS u');
$builder->select('u.id, u.username, u.nickname, ai.secret as email, u.created_at');
$builder->join('auth_identities as ai', 'u.id = ai.user_id', 'left');
$builder->join('auth_groups_users as agu', 'u.id = agu.user_id', 'left');
$builder->where('u.nickname', $name);
$builder->where('ai.type', 'email_password');
$builder->where('agu.`group`', 'user');
$result = $builder->get()->getRowArray();
return $result;
}
}