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
+279
View File
@@ -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);
}
}
+71
View File
@@ -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;
}
}
+81
View File
@@ -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;
}
}
+326
View File
@@ -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;
}
}
+65
View File
@@ -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;
}
}
+72
View File
@@ -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;
}
}