init
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
use App\Libraries\SMS;
|
||||
|
||||
class AdvertiserModel extends Model
|
||||
{
|
||||
public function getAdvertisers($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('(SELECT info.seq AS info_seq, adv.*, SUM(db.db_count) as db_count, SUM(db.db_count)* info.db_price as price
|
||||
FROM event_advertiser AS adv
|
||||
LEFT JOIN event_information AS info ON info.advertiser = adv.seq
|
||||
LEFT JOIN event_leads_count AS db ON db.seq = info.seq AND db.date BETWEEN LAST_DAY(NOW() - interval 1 month) + interval 1 DAY AND LAST_DAY(NOW())
|
||||
WHERE 1
|
||||
GROUP BY adv.seq, info.seq, db.seq
|
||||
ORDER BY adv.seq DESC) AS advertiser');
|
||||
$builder->select('advertiser.*, COUNT(advertiser.info_seq) AS total, SUM(advertiser.db_count) AS sum_db, SUM(advertiser.price) AS sum_price, (advertiser.account_balance - SUM(advertiser.price)) as remain_balance');
|
||||
$builder->groupBy('advertiser.seq');
|
||||
|
||||
if (!empty($srch['stx'])) {
|
||||
$builder->groupStart();
|
||||
$builder->like('advertiser.name', $srch['stx']);
|
||||
$builder->orLike('advertiser.agent', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
$orderBy = [];
|
||||
if (!empty($data['order'])) {
|
||||
foreach ($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if ($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "advertiser.seq desc";
|
||||
$builder->orderBy(implode(",", $orderBy), '', true);
|
||||
if (isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getAdvertiser($data)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data['seq']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getAdvertiserByName($data)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('*');
|
||||
$builder->where('name', $data['name']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getCompanies($stx)
|
||||
{
|
||||
$builder = $this->db->table('companies');
|
||||
$builder->select('*');
|
||||
$builder->like('name', $stx);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getOverwatchByAdvertiser($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$builder->select('*');
|
||||
$builder->where('advertiser', $seq);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getMedia($data)
|
||||
{
|
||||
$subBuilder = $this->db->table('event_information');
|
||||
$subBuilder->select('media');
|
||||
$subBuilder->where('advertiser', $data['seq']);
|
||||
$subResult = $subBuilder->getCompiledSelect();
|
||||
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('*');
|
||||
$builder->where("seq IN($subResult)");
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createAdv($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateAdv($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function evtOverwatch()
|
||||
{
|
||||
$fp = fopen(WRITEPATH.'/logs/sms_log', 'w');
|
||||
$logText = '---------------------------'."\n";
|
||||
$logText .= '요청 시간: '.date('Y-m-d H:i:s')."\n";
|
||||
|
||||
$monitor = []; // $monitor[휴대폰번호][seq] = 메세지
|
||||
$update_sql = [];
|
||||
$contact_check_by_media = []; // $contact_check_by_media[seq][media] = date('Y-m-d')
|
||||
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$builder->select("*");
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
for ($i = 0; $i < count($result); $i++) {
|
||||
$media = json_decode($result[$i]['watch_list'], true);
|
||||
$last_send = json_decode($result[$i]['last_send'] ?? '', true);
|
||||
if ($result[$i]['watch_all'] != NULL && $result[$i]['watch_all'] > 0) {
|
||||
|
||||
if ($last_send && array_key_exists('all', $last_send) && $last_send['all'] == date('Y-m-d')) continue; // 해당 당일자 알림 이력이 있으면 passvar_dump($result[$i]);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->select('seq');
|
||||
$builder->where('advertiser', $result[$i]['advertiser']);
|
||||
$ei_result = $builder->get()->getResultArray();
|
||||
|
||||
$ei_arr = array();
|
||||
for ($num = 0; $num < count($ei_result); $num++) {
|
||||
$ei_arr[$num] = $ei_result[$num]['seq'];
|
||||
}
|
||||
|
||||
$builder = $this->db->table('event_leads');
|
||||
$builder->select('event_seq, count(seq) AS count');
|
||||
$builder->whereIn('event_seq', $ei_arr);
|
||||
$builder->where('status', 1);
|
||||
$builder->where('reg_date >= ', date('Y-m-d 00:00:00'));
|
||||
$builder->where('reg_date <= ', date('Y-m-d 23:59:59'));
|
||||
$cnt = $builder->get()->getResultArray();
|
||||
|
||||
if ($cnt[0]['count'] >= $result[$i]['watch_all']) {
|
||||
$logText .= 'event_advertiser seq : '.$result[$i]['advertiser'].' === watch_all o , 목표 수량 표기 check o, count check o ==='."\n";
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('name');
|
||||
$builder->where('seq', $result[$i]['advertiser']);
|
||||
$tmp_result = $builder->get()->getResultArray();
|
||||
$message = "[{$tmp_result[0]['name']}]{$cnt[0]['count']}건으로 전체 목표 수량 도달하였습니다.\n";
|
||||
|
||||
// 전화번호 별 sms 배열
|
||||
$contact_array = explode(';', $result[$i]['contact']);
|
||||
for ($j = 0; $j < sizeof($contact_array); $j++) {
|
||||
if ($contact_array[$j]) $monitor[$contact_array[$j]][$result[$i]['seq']] = $message;
|
||||
}
|
||||
|
||||
// seq 별 발송 내역 배열
|
||||
$contact_check_by_media[$result[$i]['seq']] = $last_send;
|
||||
$contact_check_by_media[$result[$i]['seq']]['all'] = date('Y-m-d');
|
||||
}
|
||||
} else {
|
||||
foreach ($media as $key => $val) {
|
||||
if ($val == 0) continue; // 목표 DB 수량 미표기 시 pass
|
||||
if ($last_send && array_key_exists($key, $last_send) && $last_send[$key] == date('Y-m-d')) continue; // 해당 매체의 당일자 알림 이력이 있으면 pass
|
||||
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->select('seq');
|
||||
$builder->where('advertiser', $result[$i]['advertiser']);
|
||||
$builder->where('media', $key);
|
||||
$ei_result = $builder->get()->getResultArray();
|
||||
|
||||
$ei_arr = array();
|
||||
for ($num = 0; $num < count($ei_result); $num++) {
|
||||
$ei_arr[$num] = $ei_result[$num]['seq'];
|
||||
}
|
||||
|
||||
$builder = $this->db->table('event_leads');
|
||||
$builder->select('event_seq, count(seq) AS count');
|
||||
$builder->whereIn('event_seq', $ei_arr);
|
||||
$builder->where('status', 1);
|
||||
$builder->where('reg_date >= ', date('Y-m-d 00:00:00'));
|
||||
$builder->where('reg_date <= ', date('Y-m-d 23:59:59'));
|
||||
$cnt = $builder->get()->getResultArray();
|
||||
|
||||
if ($cnt[0]['count'] >= $val) {
|
||||
$logText .= 'event_advertiser seq : '.$result[$i]['advertiser'].'watch_all x , 목표 수량 표기 check o, count check o'."\n";
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('name');
|
||||
$builder->where('seq', $result[$i]['advertiser']);
|
||||
$tmp_result = $builder->get()->getResultArray();
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('media');
|
||||
$builder->where('seq', $key);
|
||||
$med = $builder->get()->getResultArray();
|
||||
$message = "[{$tmp_result[0]['name']}][{$med[0]['media']}][{$cnt[0]['count']}]\n";
|
||||
|
||||
// 전화번호 별 sms 배열
|
||||
$contact_array = explode(';', $result[$i]['contact']);
|
||||
for ($j = 0; $j < sizeof($contact_array); $j++) {
|
||||
if ($contact_array[$j]) $monitor[$contact_array[$j]][$result[$i]['seq']] = $message;
|
||||
}
|
||||
// seq 별 발송 내역 배열
|
||||
$contact_check_by_media[$result[$i]['seq']] = $last_send;
|
||||
$contact_check_by_media[$result[$i]['seq']][$key] = date('Y-m-d');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$logText .= '생성 리스트: '.json_encode($monitor, JSON_UNESCAPED_UNICODE)."\n";
|
||||
|
||||
$l = 0;
|
||||
foreach ($monitor as $key => $val) {
|
||||
$msg = '';
|
||||
foreach ($val as $k => $v) {
|
||||
$last_send_txt = json_encode($contact_check_by_media[$k]);
|
||||
$builder = $this->db->table('event_overwatch');
|
||||
$setData = [
|
||||
'last_contact' => date('Y-m-d H:i:s'),
|
||||
'last_send' => $last_send_txt,
|
||||
];
|
||||
$builder->set($setData);
|
||||
$builder->where('seq', $k);
|
||||
$upd = $builder->getCompiledUpdate();
|
||||
|
||||
$data[$l] = [
|
||||
'last_contact' => date('Y-m-d H:i:s'),
|
||||
'last_send' => $last_send_txt,
|
||||
'seq' => $k,
|
||||
];
|
||||
|
||||
if (array_search($upd, $update_sql) === false) array_push($update_sql, $upd);
|
||||
$msg .= $v;
|
||||
$l++;
|
||||
$logText .= "문자 내용[{$l}]: ".$msg."\n";
|
||||
}
|
||||
|
||||
$strDest = array($key); // 문자 수신번호 배열
|
||||
$nCount = 1; // 문자 수신번호 갯수
|
||||
// 문자 발송에 필요한 항목을 배열에 추가
|
||||
$sms_result = SMS::Add($strDest, '01040010000', '', '', '', $msg, '', $nCount);
|
||||
// 패킷이 정상적이라면 발송에 시도합니다.
|
||||
if (!$sms_result = SMS::Send()) {
|
||||
$logText .= '문자전송 실패: '.date('Y-m-d H:i:s').PHP_EOL."\n";
|
||||
}
|
||||
}
|
||||
if (isset($data)) {
|
||||
$builder->updateBatch($data, 'seq');
|
||||
}
|
||||
|
||||
$logText .= 'update sql: '.json_encode($update_sql, JSON_UNESCAPED_UNICODE)."\n";
|
||||
$logText .= '데이터: '.json_encode($data, JSON_UNESCAPED_UNICODE)."\n";
|
||||
$logText .= '요청 종료 시간: '.date('Y-m-d H:i:s')."\n";
|
||||
fwrite($fp, print_r($logText,true).PHP_EOL);
|
||||
fclose($fp);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class BlackListModel extends Model
|
||||
{
|
||||
public function getBlackLists($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->select('*');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->like('data', $srch['stx']);
|
||||
$builder->orLike('memo', $srch['stx']);
|
||||
}
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "datetime desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getBlackList($data)
|
||||
{
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createBlackList($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function deleteBlackList($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_blacklist');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->delete();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ChangeModel extends Model
|
||||
{
|
||||
public function getChanges($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->select('*, COUNT(id) AS total');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('id', $srch['stx']);
|
||||
$builder->orLike('name', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('id');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "ec_datetime desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getChange($id)
|
||||
{
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->select('*');
|
||||
$builder->where('id', $id);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createChange($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->insert($data);
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateChange($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_conversion');
|
||||
$builder->set('id', $data['id']);
|
||||
$builder->set('name', $data['name']);
|
||||
$builder->set('token', $data['token']);
|
||||
if($data['old_id'] != $data['id']){
|
||||
$builder->where('id', $data['old_id']);
|
||||
}else{
|
||||
$builder->where('id', $data['id']);
|
||||
}
|
||||
$builder->update();
|
||||
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class EventModel extends Model
|
||||
{
|
||||
protected $facebook, $google, $kakao;
|
||||
public function __construct()
|
||||
{
|
||||
$this->db = \Config\Database::connect();
|
||||
$this->facebook = \Config\Database::connect('facebook');
|
||||
$this->google = \Config\Database::connect('google');
|
||||
$this->kakao = \Config\Database::connect('kakao');
|
||||
}
|
||||
|
||||
public function getInformation($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('IFNULL(db.db_count, 0) AS db, adv.name AS advertiser_name, med.media AS media_name, SUM(imp.impressions) AS impressions, info.*');
|
||||
$builder->join('event_advertiser AS adv', 'info.advertiser = adv.seq', 'left');
|
||||
$builder->join('event_media AS med', 'info.media = med.seq', 'left');
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->join('event_keyword_idx AS eki', 'eki.ei_seq = info.seq', 'left');
|
||||
$builder->join('event_keyword AS ek', 'ek.seq = eki.ek_seq', 'left');
|
||||
}
|
||||
$builder->join('(SELECT seq, SUM(db_count) AS db_count FROM event_leads_count GROUP BY seq) AS db', 'info.seq = db.seq', 'left');
|
||||
$builder->join('event_impressions_history AS imp', 'info.seq = imp.seq', 'left');
|
||||
|
||||
if(!empty($srch['sdate']) && !empty($srch['edate'])){
|
||||
$builder->where('info.ei_datetime >=', $srch['sdate']);
|
||||
$builder->where('info.ei_datetime <', date('Y-m-d', strtotime($srch['edate'].' + 1day')));
|
||||
}
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$stx[] = $srch['stx'];
|
||||
if(preg_match('/\s/', $srch['stx']))
|
||||
$stx = @explode(" ", $srch['stx']);
|
||||
foreach($stx as $v) {
|
||||
$builder->orLike('ek.keyword', trim($v));
|
||||
$builder->orLike('info.title', trim($v));
|
||||
$builder->orLike('adv.name', trim($v));
|
||||
$builder->orLike('med.media', trim($v));
|
||||
$builder->orLike('info.description', trim($v));
|
||||
$builder->orLike('info.seq', trim($v));
|
||||
}
|
||||
$builder->groupEnd();
|
||||
}
|
||||
|
||||
$builder->groupBy('info.seq');
|
||||
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "info.seq DESC";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if($data['length'] > 0) $builder->limit($data['length'], $data['start']);
|
||||
// exit($builder->getCompiledSelect());
|
||||
// 결과 반환
|
||||
$_result = $builder->get();
|
||||
$result = $_result->getResultArray();
|
||||
//->getResultArray();
|
||||
// var_dump($builderNoLimit->countAll()); exit;
|
||||
$resultNoLimit = $builderNoLimit->countAll();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getInformationAll()
|
||||
{
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('*');
|
||||
$builder->where('(designer IS NULL OR designer = "") OR (developer IS NULL OR developer = "")');
|
||||
$builder->orderBy('seq', 'desc');
|
||||
$builder->limit(200);
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getIssuesFromMantis()
|
||||
{
|
||||
$builder = $this->db->table('mantis.mantis_bug_table AS A');
|
||||
$builder->select('A.id, B.text, D.realname AS developer, C.value AS designer');
|
||||
$builder->join('mantis.mantis_custom_field_string_table AS B', 'A.id = B.bug_id AND B.field_id = "20" AND B.text LIKE "%//%"', 'left');
|
||||
$builder->join('mantis.mantis_custom_field_string_table AS C', 'A.id = C.bug_id AND C.field_id = "10"', 'left');
|
||||
$builder->join('mantis.mantis_user_table AS D', 'A.handler_id = D.id', 'left');
|
||||
$builder->where('B.text IS NOT NULL');
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEnabledAds()
|
||||
{
|
||||
// if($this->facebook->getConnection() == false || $this->google->getConnection() == false || $this->kakao->getConnection() == false) return false;
|
||||
if(null === ($result = cache("getEnabledAds"))) {
|
||||
$fbSubQuery = $this->db->table('z_facebook.fb_ad AS ad');
|
||||
$fbSubQuery->select('ad.ad_name AS name, cr.link AS link');
|
||||
$fbSubQuery->join('z_facebook.fb_adcreative AS cr', 'cr.ad_id = ad.ad_id', 'left');
|
||||
$fbSubQuery->where('ad.effective_status', 'ACTIVE');
|
||||
$fbSubQuery->groupStart();
|
||||
$fbSubQuery->like('ad.ad_name', '#');
|
||||
$fbSubQuery->orLike('ad.code', '#');
|
||||
$fbSubQuery->orGroupStart();
|
||||
$fbSubQuery->where('cr.link !=', '');
|
||||
$fbSubQuery->groupEnd();
|
||||
$fbSubQuery->groupEnd();
|
||||
|
||||
$awSubQuery = $this->db->table('z_adwords.aw_ad AS ad');
|
||||
$awSubQuery->select("IF(INSTR(code, '#')>0, ad.code, ad.name) AS name, ad.finalUrl AS link");
|
||||
$awSubQuery->join('z_adwords.aw_adgroup AS ag', 'ad.adgroupId = ag.id', 'left');
|
||||
$awSubQuery->join('z_adwords.aw_campaign AS ac', 'ag.campaignId = ac.id', 'left');
|
||||
$awSubQuery->where('ad.status', 'ENABLED');
|
||||
$awSubQuery->where('ag.status', 'ENABLED');
|
||||
$awSubQuery->where('ac.status', 'ENABLED');
|
||||
$awSubQuery->groupStart();
|
||||
$awSubQuery->like('ad.name', '#');
|
||||
$awSubQuery->orLike('ad.code', '#');
|
||||
$awSubQuery->orGroupStart();
|
||||
$awSubQuery->where('ad.finalUrl !=', '');
|
||||
$awSubQuery->groupEnd();
|
||||
$awSubQuery->groupEnd();
|
||||
|
||||
$mmSubQuery = $this->db->table('z_moment.mm_creative AS ad');
|
||||
$mmSubQuery->select('ad.name, ad.landingUrl AS link');
|
||||
$mmSubQuery->join('z_moment.mm_adgroup AS ag', 'ad.adgroup_id = ag.id', 'left');
|
||||
$mmSubQuery->join('z_moment.mm_campaign AS ac', 'ag.campaign_id = ac.id', 'left');
|
||||
$mmSubQuery->where('ad.config', 'ON');
|
||||
$mmSubQuery->where('ag.config', 'ON');
|
||||
$mmSubQuery->where('ac.config', 'ON');
|
||||
$mmSubQuery->groupStart();
|
||||
$mmSubQuery->like('ad.name', '#');
|
||||
$mmSubQuery->orLike('ad.code', '#');
|
||||
$mmSubQuery->orGroupStart();
|
||||
$mmSubQuery->where('ad.landingUrl !=', '');
|
||||
$mmSubQuery->groupEnd();
|
||||
$mmSubQuery->groupEnd();
|
||||
|
||||
$fbSubQuery->union($awSubQuery)->union($mmSubQuery);
|
||||
$resultQuery = $this->db->newQuery()->fromSubquery($fbSubQuery, 'tb');
|
||||
$resultQuery->where("tb.name REGEXP('^.*#([0-9]+).*') OR tb.link REGEXP('.+(kr|com|event)\/([0-9]+)')");
|
||||
$result = $resultQuery->get()->getResultArray();
|
||||
cache()->save("getEnabledAds", $result, 1800); //save to cache
|
||||
}
|
||||
|
||||
foreach($result as $row) {
|
||||
if(preg_match('/^.+(kr|com|event)\/([0-9]{3,6})(\?.+)?$/', $row['link'])) {
|
||||
$data[] = preg_replace('/^.+(kr|com|event)\/([0-9]{3,6})(\?.+)?/', '$2', $row['link']);
|
||||
} else if(preg_match('/^.*\#([0-9]+).*/', $row['name'])) {
|
||||
$data[] = preg_replace('/^.*\#([0-9]+).*/', '$1', $row['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$data = array_unique($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getAdv($stx)
|
||||
{
|
||||
$builder = $this->db->table('event_advertiser');
|
||||
$builder->select('seq as id, name as value');
|
||||
if(!empty($stx)){
|
||||
$builder->like('name', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getMedia($stx)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('seq as id, media as value');
|
||||
if(!empty($stx)){
|
||||
$builder->like('media', $stx);
|
||||
}
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createEvent($data)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$keyword = $data['keyword'];
|
||||
unset($data['keyword']);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->insert($data);
|
||||
$seq = $this->db->insertID();
|
||||
$event = $builder->getWhere(['seq' => $seq])->getRowArray();
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
if(!empty($event)){
|
||||
$this->syncKeyword($keyword, $event['seq']);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateEvent($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$keyword = $data['keyword'];
|
||||
unset($data['keyword']);
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
if($result){
|
||||
$this->syncKeyword($keyword, $seq);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function updateEventWorker($data, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
$result = $this->db->transComplete();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function copyEvent($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$data = $this->db->table('event_information')->select('advertiser, media, lead, title, description, subtitle, object, object_items, interlock, partner_id, partner_name, paper_code, paper_name, pixel_id, view_script, done_script, db_price, check_gender, check_age_min, check_age_max, duplicate_term, check_phone, check_name, check_cookie, custom')
|
||||
->where('seq', $seq)
|
||||
->get()->getRowArray();
|
||||
|
||||
$data['is_stop'] = 0;
|
||||
$data['username'] = auth()->user()->nickname;
|
||||
$data['ei_datetime'] = date('Y-m-d H:i:s');
|
||||
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->insert($data);
|
||||
$insert_id = $this->db->insertID();
|
||||
$result = $this->db->transComplete();
|
||||
if($result) {
|
||||
return $insert_id;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEvent($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_information AS info');
|
||||
$builder->select('info.*, adv.name AS advertiser_name, med.media AS media_name, GROUP_CONCAT(ek.keyword) AS keywords');
|
||||
$builder->join('event_advertiser AS adv', 'info.advertiser = adv.seq', 'left');
|
||||
$builder->join('event_media AS med', 'info.media = med.seq', 'left');
|
||||
$builder->join('event_keyword_idx AS ki', 'info.seq = ki.ei_seq', 'left');
|
||||
$builder->join('event_keyword AS ek', 'ki.ek_seq = ek.seq', 'left');
|
||||
$builder->where('info.seq', $seq);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getEventImpressions($seq)
|
||||
{
|
||||
$builder = $this->db->table('event_impressions_history');
|
||||
$builder->select('seq, code, site, SUM(impressions) AS impressions');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->groupBy(['seq', 'code', 'site']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function deleteEvent($seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder = $this->db->table('event_information');
|
||||
$builder->where('seq', $seq);
|
||||
$result = $builder->delete();
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function syncKeyword($keywords, $seq)
|
||||
{
|
||||
$this->db->transStart();
|
||||
$builder_3 = $this->db->table('event_keyword_idx');
|
||||
$builder_3->where('ei_seq', $seq);
|
||||
$builder_3->delete();
|
||||
if(!empty($keywords)){
|
||||
$keywords = explode(',', $keywords);
|
||||
foreach ($keywords as $keyword) {
|
||||
$builder_1 = $this->db->table('event_keyword');
|
||||
$builder_1->select('seq, keyword');
|
||||
$builder_1->where('keyword', $keyword);
|
||||
$existRow = $builder_1->get()->getRowArray();
|
||||
|
||||
if(empty($existRow)){
|
||||
$builder_2 = $this->db->table('event_keyword');
|
||||
$builder_2->set('keyword', $keyword);
|
||||
$builder_2->insert();
|
||||
$existRow = $builder_2->getWhere(['seq' => $this->db->insertID()])->getRowArray();
|
||||
}
|
||||
|
||||
$builder_4 = $this->db->table('event_keyword_idx');
|
||||
$builder_4->set('ei_seq', $seq);
|
||||
$builder_4->set('ek_seq', $existRow['seq']);
|
||||
$builder_4->insert();
|
||||
|
||||
}
|
||||
}
|
||||
$result = $this->db->transComplete();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ExcelModel extends Model
|
||||
{
|
||||
public function status_check($name, $phone, $landing_no)
|
||||
{
|
||||
$status = 1;
|
||||
$msg = '';
|
||||
|
||||
// NAME CHECK
|
||||
if (preg_match('/(테스트|테스트|test)/i', $name)) { //테스트 체크
|
||||
$status = 7;
|
||||
$msg = '테스트';
|
||||
} else {
|
||||
$builder = $this->db->table('app_subscribe');
|
||||
$builder->select('eid');
|
||||
$builder->where('group_id', $landing_no);
|
||||
$builder->where('name', $name);
|
||||
$builder->where('deleted', 0);
|
||||
$builder->where('status !=', 0);
|
||||
|
||||
$name_result = $$builder->get();
|
||||
|
||||
if ($name_result->getNumRows()) {
|
||||
$status = 2;
|
||||
$msg = '이름 중복';
|
||||
}
|
||||
}
|
||||
// RESULT CHECK
|
||||
if ($status != 1) {
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
return $data;
|
||||
}
|
||||
|
||||
//PHONE CHECK
|
||||
$number = substr($phone, 3, 8);
|
||||
if (!preg_match('/^[\d]{11}$/', $phone)) {
|
||||
$status = 6;
|
||||
$msg = '전화번호 길이 불량';
|
||||
} else if (in_array($number, ['00000000', '11111111', '22222222', '33333333', '44444444', '55555555', '66666666', '77777777', '88888888', '99999999'])) {
|
||||
$status = 6;
|
||||
$msg = '8자리 같은번호';
|
||||
} else {
|
||||
$phone_sql = "SELECT eid FROM app_subscribe WHERE group_id = '$landing_no' AND phone = enc_data('$phone') AND deleted = 0 AND status <> 0 ";
|
||||
$phone_result = $this->db->query($phone_sql);
|
||||
if ($phone_result->db->num_rows) {
|
||||
$status = 2;
|
||||
$msg = '전화번호 중복';
|
||||
}
|
||||
}
|
||||
// RESULT CHECK
|
||||
if ($status != 1) {
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
return $data;
|
||||
}
|
||||
|
||||
$data = ['status' => $status, 'status_memo' => $msg];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\EventManage;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class MediaModel extends Model
|
||||
{
|
||||
public function getMedias($data)
|
||||
{
|
||||
$srch = $data['searchData'];
|
||||
$builder = $this->db->table('event_media AS med');
|
||||
$builder->select('med.*, COUNT(info.seq) AS total');
|
||||
$builder->join('event_information AS info', 'info.media = med.seq', 'left');
|
||||
|
||||
if(!empty($srch['stx'])){
|
||||
$builder->groupStart();
|
||||
$builder->like('med.media', $srch['stx']);
|
||||
$builder->orLike('med.target', $srch['stx']);
|
||||
$builder->groupEnd();
|
||||
}
|
||||
$builder->groupBy('med.seq');
|
||||
// limit 적용하지 않은 쿼리
|
||||
$builderNoLimit = clone $builder;
|
||||
|
||||
$orderBy = [];
|
||||
if(!empty($data['order'])) {
|
||||
foreach($data['order'] as $row) {
|
||||
$col = $data['columns'][$row['column']]['data'];
|
||||
if($col) $orderBy[] = "{$col} {$row['dir']}";
|
||||
}
|
||||
}
|
||||
$orderBy[] = "med.seq desc";
|
||||
$builder->orderBy(implode(",", $orderBy),'',true);
|
||||
if(isset($data['length']) && !isset($data['noLimit']) && ($data['length'] != -1)) $builder->limit($data['length'], $data['start']);
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
$resultNoLimit = $builderNoLimit->countAllResults();
|
||||
|
||||
return [
|
||||
'data' => $result,
|
||||
'allCount' => $resultNoLimit
|
||||
];
|
||||
}
|
||||
|
||||
public function getMedia($data)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->select('*');
|
||||
$builder->where('seq', $data['seq']);
|
||||
|
||||
$result = $builder->get()->getRowArray();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function createMedia($data)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->insert($data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function updateMedia($data, $seq)
|
||||
{
|
||||
$builder = $this->db->table('event_media');
|
||||
$builder->where('seq', $seq);
|
||||
$builder->update($data);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user