동봉된 crontab.php 파일이 라이믹스 2.0에서만 지원이 된다고 하셔서 새로 커스텀해서 만들어 보려고 합니다.
관리자가 메달동기화 하는 함수 자체를 옮겨 봤는데요.
https://github.com/bjrambo/experience/blob/master/experience.admin.controller.php#L179
여기 함수 전체를 corntab_custom.php 로 만들었습니다.
<?php define('__XE__', true); require_once('../../config/config.inc.php'); //XE config.inc.php 주소 $oContext = Context::getInstance(); $oContext->init(); @set_time_limit(0); $config=getModel('experience')->getConfig(); $output = executeQuery('experience.deleteAllMedal'); debugPrint($output); // 무조건 지난달. $toMonthFirstDay = mktime(0, 0, 0, date("m"), 1, date("Y")); $prev_month = strtotime("-1 month", $toMonthFirstDay); $prevMonth = date('Ym', $prev_month); /** @var experienceModel $oExperienceModel */ $oExperienceModel = getModel('experience'); $args = new stdClass(); $args->regdate = $prevMonth; $args->exception_member = $config->exception_member; $MonthOutput = executeQuery('experience.getMonthRank', $args); $rankCount = 1; foreach ($MonthOutput->data as $monthDatum) { $medalString = "없음"; if ($rankCount == intval($config->medal_diamond)) { $medal = 'diamond'; $medalString = '다이아몬드'; } elseif ($rankCount > intval($config->medal_diamond) && $rankCount <= intval($config->medal_platinum)) { $medal = 'platinum'; $medalString = '플레티넘'; } elseif ($rankCount > intval($config->medal_platinum) && $rankCount <= intval($config->medal_gold)) { $medal = 'gold'; $medalString = '골드'; } elseif ($rankCount > intval($config->medal_gold) && $rankCount <= intval($config->medal_silver)) { $medal = 'silver'; $medalString = '실버'; } elseif ($rankCount > intval($config->medal_silver) && $rankCount <= intval($config->medal_bronze)) { $medal = 'bronze'; $medalString = '브론즈'; } $args = new stdClass(); $args->member_srl = $monthDatum->member_srl; $args->medal = $medal; $args->update_regdate = $prevMonth; $medas = $oExperienceModel->getMedalByMemberSrl($monthDatum->member_srl); if ($medas) { $output = executeQuery('experience.updateMedal', $args); } else { $output = executeQuery('experience.insertMedal', $args); } $rankCount++; //메달 흭득 알림(알림센터) if (is_dir('../../modules/ncenterlite')) { $oNcenterliteController = getController('ncenterlite'); $body = new stdClass; $body->medal = $medalString; $args = new stdClass; $args->member_srl = $monthDatum->member_srl; $args->srl = 1; $args->target_srl = 1; $args->target_p_srl = 1; $args->type = 'U'; $args->target_type = 'U'; $args->notify_type = $config->medal_update_ntype; $args->target_body = serialize($body); $args->target_url = getUrl(''); $args->regdate = date('YmdHis'); $args->notify = $oNcenterliteController->_getNotifyId($args); $output = $oNcenterliteController->_insertNotify($args); } } echo "Success";
위와 같이 작성해서 저 경로 파일을 서버에서 한번 실행하는 것으로 하려고 하는데
/usr/bin/curl -s "https://도메인경로/modules/experience/crontab.php" > /dev/null 2>&1
이런식으로 하면 저 파일이 제대로 동작을 하는 것을 확인했습니다.
제가 시도한 것 중 고쳐야 하거나 하는 부분이 있을지 문의 드립니다.
PS. 무작위로 파일이 실행되는 것을 방지하기 위해 상단에 저희 서버 아이피만 동작되도록 코드를 추가할 생각입니다.
- 알림센터 알림이 발생하기 때문에..