해피정님 출석부에 더미회원으로 자동 출석체크를 해봅시다! > 그누보드5 팁자료실

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누보드5 팁자료실

해피정님 출석부에 더미회원으로 자동 출석체크를 해봅시다! 정보

해피정님 출석부에 더미회원으로 자동 출석체크를 해봅시다!

본문

의뢰받던중 더미회원으로 출석부 자동출석체크를 처리해달라는 문의가 들어와서
곰곰히 생각해보다가 아래와 같이 하면 되지않을까 싶어서 작성해봅니다.

 

실질적으로 출석하는 회원이 많지 않을때 사용하시면 도움되실만한 팁입니다.


제가 커스텀한 소스는 많지 않고 많은 부분을 인용하였습니다.
문제가 된다면 자삭하겠습니다.

 

https://sir.kr/g5_plugin/3063?sfl=wr_subject&stx=%EC%B6%9C%EC%84%9D%EB%B6%80
해피정님의 출석부 플러그인과

 

https://sir.kr/g5_plugin/11483?sfl=wr_subject&stx=%EB%8D%94%EB%AF%B8
리자님의 더미회원 생성 플러그인을 사용한다는 가정하에 작성합니다.


더미회원은 분류하기 쉽게 해당 더미회원 플러그인의
dummy_member_update.php 25번 라인을 아래와 같이 수정했습니다.

$user_id = "dm_".chr(rand(97, 122));

 

-------------------------------------------------------------------


해피정님 출석부 변수를 인용해야하므로 출석부 플러그인 설치폴더에 접근하여

파일을 생성하고 아래의 소스를 넣습니다.

 

저는 /plugin/attendance/ 안에 curl_auto_attendance.php 라고 넣었습니다.

 


<?php
include_once('./_common.php');
$dm = sql_fetch("SELECT mb_id FROM `g5_member` WHERE `mb_id` LIKE 'dm_%' order by rand() limit 1"); // 더미회원 리스트중 한놈을 잡음
$att_c = sql_fetch("SELECT count(*) as cnt FROM `g5_attendance` WHERE `mb_id` LIKE '".$dm['mb_id']."' AND `datetime` BETWEEN '".date("Y-m-d",time())." 00:00:00' AND '".G5_TIME_YMDHIS."'"); // 출석여부 쿼리
$total = sql_fetch("SELECT count(*) as cnt FROM `g5_attendance` WHERE `mb_id` LIKE 'dm_%' AND `datetime` BETWEEN '".date("Y-m-d",time())." 00:00:00' AND '".G5_TIME_YMDHIS."'"); // 더미회원 출석 총 갯수 쿼리
$subject = explode(",","출석체크,출첵,출근완료,출석도장,출첵가즈아"); // 입력할 내용
$sj_rd = $subject[mt_rand(0,4)]; // 위에 입력할 내용에서 임의로 1개 뽑는다
// 총출석일수
$sql = " select sumday from {$g5['attendance_table']} where mb_id = '{$dm['mb_id']}' order by datetime desc ";
$row = sql_fetch($sql);
// 총출석일
$sumday = $row['sumday'] + 1;
// 오늘 출석했나?
$sql = " select * from {$g5['attendance_table']} where mb_id = '{$dm['mb_id']}' and substring(datetime,1,10) = '".G5_TIME_YMD."' ";
$check = sql_fetch($sql);
// 출석했다면.
if ($check['mb_id']) {
   exit; // 정지
}
// 1일 뺀다.
$day = date("Y-m-d", G5_SERVER_TIME - (1 * 86400));
// 어제 출석했나?
$sql = " select * from {$g5['attendance_table']} where mb_id = '{$dm['mb_id']}' and substring(datetime,1,10) = '{$day}' ";
$row = sql_fetch($sql);
// 1일 포인트
$sql_point = $att_day_point;
    
// 어제 출석했다면
if ($row['mb_id']) {
    // 전체 개근에 오늘 합산
    $sql_day = $row['day'] + 1;
    // 지난 개근체크에 오늘 합산
    $sql_reset = $row['reset'] + 1;
    $sql_reset2 = $row['reset2'] + 1;
    $sql_reset3 = $row['reset3'] + 1;
    
    if ($sql_reset == 7) { // 7일 개근
        $sql_reset  = "0"; 
        $sql_point  = $sql_point + $att_week_point;
    }
    
    if ($sql_reset2 == 30) { // 30일 개근
        $sql_reset2 = "0"; 
        $sql_point  = $sql_point + $att_month_point;
    }
    
    if ($sql_reset3 == 365) {  // 365일 개근
        $sql_reset3 = "0"; 
        $sql_point  = $sql_point + $att_year_point;
    }
} else { // 출석하지 않았다면
    // 전체 개근 설정
    $sql_day = "1";
    // 리셋
    $sql_reset  = "1";
    $sql_reset2 = "1";
    $sql_reset3 = "1";
}
$random_number = mt_rand(60,600);
$total_cnt = "100"; // 더미회원 총 갯수
// 첫출근
$sql = " select count(*) as cnt, rank from {$g5['attendance_table']} where substring(datetime,1,10) = '".G5_TIME_YMD."' ";
$first = sql_fetch($sql);
// 아무도 없다면..
$rank = "";
if (!$first['cnt'] && $first['rank'] != 1) { // 1등 포인트
    $sql_point = $sql_point + $att_first_point;
    $rank = 1;
} elseif ($first['cnt'] == 1 && $first['rank'] != 2) { // 2등 포인트 
    $sql_point = $sql_point + $att_second_point; 
    $rank = 2;
} elseif ($first['cnt'] == 2 && $first['rank'] != 3) { // 3등 포인트 
    $sql_point = $sql_point + $att_third_point; 
    $rank = 3;
}
if($att_c['cnt'] == "0") { // 금일 00:00부터 현재까지 해당 아이디로 출석한적이 없고
    if($total['cnt'] <= $total_cnt) { // 설정된 횟수보다 g5_attendance 에 있는 더미회원이 적을 경우
        sleep($random_number); // php 실행후 작동할 시간을 조정해준다    
        $sql = " insert into {$g5['attendance_table']}
                    set mb_id = '{$dm['mb_id']}',
                        subject = '{$sj_rd}',
                        day = '{$sumday}',
                        sumday = '{$sumday}',
                        reset = '{$sql_reset}',
                        reset2 = '{$sql_reset2}',
                        reset3 = '{$sql_reset3}',
                        point = '{$sql_point}',
                        rank = '{$rank}',
                        datetime = '".date("Y-m-d H:i:s",time()+$random_number)."'"; // 실행시간 기준이 되면 안되므로 랜덤처리
        sql_query($sql);
    }
}
?>

 

만약 실회원으로 하고 싶으시다면 아래와 같이 4번 라인 소스를 수정해주세요.

$dm = sql_fetch("SELECT mb_id FROM `g5_member` order by rand() limit 1");

 

이후 리눅스 crontab 을 사용하시거나 웹크론탭을 사용하셔도 됩니다.
크론탭을 사용하실경우 아래와 같이 크론탭을 설정하시면 됩니다.

*/20 * * * * /usr/bin/curl https://domain/plugin/attendance/curl_auto_attendance.php

크론탭 시간이나 파일명은 적절히 수정하셔서 사용해주시면 됩니다.

 

리눅스 크론탭 사용이 불가능하신 일반 웹호스팅 이용자 분들은 
https://cron-job.org/ 를 이용해보시기 바랍니다.

------------------------------------------------------

조예가 깊으신 분들은 파악되셨겠지만 중복 출석이면 그냥 지나갑니다.

그래서 20분이 지났는데 중복이면 20분은 그냥 지나가고 이후 20분뒤에 다시 돌아갑니다.

 

초보분들도 적용할 수 있게 주석이나 설명을 최대한 자세하게 했는데 잘 되실려나 모르겠습니다.
우선 해당 소스로 가동중인데 잘 작동하고 있습니다 :)

소스에 관련하여 딴지나 반박시 님말이 맞음
 

추천
3

댓글 9개

추가로 첨언 드리면

 

크론탭 이용이 불가능한 일반 호스팅의 경우는 extend를 이용할 수 있습니다.

 

다만 크론탭 처럼 "내가 원하는 시간"은 안되지만

하루 한번 실행은 가능합니다

@미니님a 원래는 몇줄 안됐는데 제대로 만들려다보니 확 늘었네요 ㅋㅋ
설명도 겁나 첨부되고.. 초보분들이 잘 적용하실수 있으려나 모르겠습니다 ㅎ

문득 생각해보니 엄청 좋은 아이디어를 제공한 것 같네요 ㅎ

 

다양하게 응용 가능할만한 내용입니다.

 

엄지척 !

 

naboojang-6.png

전체 2,431 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT