Exemple #1
0
 /**
  * 签到功能核心入口函数
  */
 public function sign($member_id, $todaysay, $qdxq)
 {
     if (empty($member_id)) {
         return array('status' => 0, 'msg' => array('ErrorCode' => '0x0005', 'ErrorText' => '会员id不能为空'));
         //会员id不正确
     }
     $member_sign_set = $this->get_setting();
     if (empty($member_sign_set['is_on'])) {
         return array('status' => -1, 'msg' => array('ErrorCode' => '0x0089', 'ErrorText' => '签到功能未开启'));
         //签到功能未开启
     }
     if (empty($member_sign_set['is_qdxq'])) {
         if (empty($qdxq)) {
             return array('status' => -5, 'msg' => array('ErrorCode' => '0x0093', 'ErrorText' => '你选择的心情不正确,请重新选择签到心情!'));
         }
     } else {
         $qdxq = 'no_mood';
         //如果未开启心情功能则重置心情为默认无心情选项
     }
     if ($member_sign_set['is_timeopen']) {
         $htime = hg_get_format_date(TIMENOW, 14);
         //本次时间
         if ($htime < $member_sign_set['limit_time']['start']) {
             return array('status' => -7, 'msg' => array('ErrorCode' => '0x0095', 'ErrorText' => '签到时间还未开始!'));
         } elseif ($htime > $member_sign_set['limit_time']['end']) {
             return array('status' => -8, 'msg' => array('ErrorCode' => '0x0096', 'ErrorText' => '已经过了签到时间!'));
         }
     }
     if (!$member_sign_set['is_todaysay']) {
         if ($member_sign_set['is_todaysayxt']) {
             $todaysay = $todaysay ? $todaysay : '该会员没有填写最想说内容';
         } elseif (empty($member_sign_set['is_todaysayxt']) && empty($todaysay)) {
             //今日最想说内容未填写
             return array('status' => -6, 'msg' => array('ErrorCode' => '0x0092', 'ErrorText' => '今日最想说内容未填写!'));
         }
     } else {
         $todaysay = '该会员没有填写最想说内容';
     }
     $checkdata = $this->Members->checkuser($member_id);
     if (!$checkdata) {
         return array('status' => -4, 'msg' => array('ErrorCode' => '0x0006', 'ErrorText' => '会员不存在'));
     }
     $today = strtotime(date('Y-m-d', TIMENOW));
     //今天起始时间
     $sign_info = $this->db->query_first('SELECT * FROM ' . DB_PREFIX . 'sign WHERE member_id=' . intval($member_id));
     $num = $this->db->query_first("SELECT COUNT(*) as count FROM " . DB_PREFIX . "sign WHERE time >= {$today} ");
     $signnum = $num['count'];
     $stats = $this->db->query_first("SELECT * FROM " . DB_PREFIX . "sign_count WHERE id='1'");
     $credit_type = array();
     $credit_type_info = $this->Members->get_credit_type();
     //获取已启用的积分类型
     $credit_type = array_keys($credit_type_info);
     if (empty($credit_type)) {
         return array('status' => -2, 'msg' => array('ErrorCode' => '0x0090', 'ErrorText' => '未设置可用奖励积分.'));
     }
     $credits = array();
     $credits = $member_sign_set['credits'];
     $new_credits = array();
     $updatecredit = false;
     if (empty($sign_info)) {
         $logarr = array('member_id' => $member_id, 'time' => TIMENOW, 'days' => 1, 'lasted' => 1, 'mdays' => 1, 'qdxq' => $qdxq, 'todaysay' => $todaysay);
         $lastreward = 0;
         //最后增加积分值数量之和
         if ($credits && is_array($credits)) {
             foreach ($credits as $k => $v) {
                 if ($k == 'base' && is_array($v) && $v) {
                     foreach ($v as $kk => $vv) {
                         if (in_array($kk, $credit_type)) {
                             $credit_num = intval($vv);
                             $lastreward += $credit_num;
                             $new_credits[$kk] = $credit_num;
                             $logarr[$kk] = $credit_num;
                             $logarr['reward_' . $kk] = $credit_num;
                         }
                     }
                 }
                 if ($k == 'lastedop' && is_array($v) && $v && $member_sign_set['is_lastedop']) {
                     if ($member_sign_set['lastedop']) {
                         $credit_d = $v[1];
                         foreach ($credit_d as $kk => $vv) {
                             if (in_array($kk, $credit_type)) {
                                 $credit_num = intval($vv);
                                 $lastreward += $credit_num;
                                 $new_credits[$kk] += $credit_num;
                                 $logarr[$kk] += $credit_num;
                                 $logarr['reward_' . $kk] += $credit_num;
                             }
                         }
                     }
                 }
             }
         }
         $logarr['reward'] = $lastreward;
         $ret_log = $this->membersql->create('sign', $logarr);
         if ($ret_log) {
             $updatecredit = true;
         }
     } else {
         if ($sign_info['time'] > $today) {
             return array('status' => -3, 'msg' => array('ErrorCode' => '0x0091', 'ErrorText' => '今天已经签过到!'));
         }
         $lasted = 1;
         if ($today - $sign_info['time'] < 86400) {
             $lasted = $sign_info['lasted'] + 1;
         }
         $lastmonth = hg_get_format_date($sign_info['time'], 12);
         //上次签到月
         $nowmonth = hg_get_format_date(TIMENOW, 11);
         //本次时间
         $mdays = 1;
         if ($nowmonth == $lastmonth) {
             //是否在同一个月,在同一个月+1;
             $mdays = $sign_info['mdays'] + 1;
         }
         $logarr = array('member_id' => $member_id, 'time' => TIMENOW, 'days' => $sign_info['days'] + 1, 'lasted' => $lasted, 'mdays' => $mdays, 'qdxq' => $qdxq, 'todaysay' => $todaysay);
         $lastreward = 0;
         //最后增加积分值数量之和
         if ($credits && is_array($credits)) {
             $credit_d = array();
             foreach ($credits as $k => $v) {
                 if ($k == 'base' && is_array($v) && $v) {
                     foreach ($v as $kk => $vv) {
                         if (in_array($kk, $credit_type)) {
                             $credit_num = intval($vv);
                             $lastreward += $credit_num;
                             $new_credits[$kk] = $credit_num;
                             $logarr[$kk] = $credit_num;
                             $logarr['reward_' . $kk] = $sign_info['reward_' . $kk] + $credit_num;
                         }
                     }
                 }
                 if ($k == 'lastedop' && is_array($v) && $v && $member_sign_set['is_lastedop']) {
                     if ($member_sign_set['lastedop'] >= $lasted) {
                         $credit_d = $v[$lasted];
                         foreach ($credit_d as $kk => $vv) {
                             if (in_array($kk, $credit_type)) {
                                 $credit_num = intval($vv);
                                 $lastreward += $credit_num;
                                 $new_credits[$kk] += $credit_num;
                                 $logarr[$kk] += $credit_num;
                                 $logarr['reward_' . $kk] += $credit_num;
                             }
                         }
                     }
                 }
                 if ($k == 'final' && is_array($v) && $v && $member_sign_set['is_lastedop']) {
                     if ($member_sign_set['lastedop'] < $lasted && $member_sign_set['lastedop']) {
                         $credit_d = $v;
                         foreach ($credit_d as $kk => $vv) {
                             if (in_array($kk, $credit_type)) {
                                 $credit_num = mt_rand(intval($vv['min']), intval($vv['max']));
                                 $lastreward += $credit_num;
                                 $new_credits[$kk] += $credit_num;
                                 $logarr[$kk] += $credit_num;
                                 $logarr['reward_' . $kk] += $credit_num;
                             }
                         }
                     }
                 }
             }
         }
         $logarr['reward'] = $sign_info['reward'] + $lastreward;
         $ret_log = $this->membersql->update('sign', $logarr, array('member_id' => $member_id));
         if ($ret_log) {
             $updatecredit = true;
         }
     }
     if ($updatecredit) {
         if ($signnum == 0) {
             if ($stats['todayq'] > $stats['highestq']) {
                 $this->db->query("UPDATE " . DB_PREFIX . "sign_count SET highestq='{$stats['todayq']}' WHERE id='1'");
             }
             $this->db->query("UPDATE " . DB_PREFIX . "sign_count SET yesterdayq='{$stats['todayq']}',todayq=1 WHERE id='1'");
             $this->db->query("UPDATE " . DB_PREFIX . "sign_emot SET count=0");
         } else {
             $this->db->query("UPDATE " . DB_PREFIX . "sign_count SET todayq=todayq+1 WHERE id='1'");
         }
         if ($qdxq) {
             $this->db->query("UPDATE " . DB_PREFIX . "sign_emot" . " SET count=count+1 WHERE qdxq='" . trim($qdxq) . "'");
         }
         $this->db->query("UPDATE " . DB_PREFIX . "sign_count SET total=total+1 WHERE id='1'");
         $credit_log = array('app_uniqueid' => APP_UNIQUEID, 'mod_uniqueid' => MOD_UNIQUEID, 'action' => 'sign', 'method' => 'sign', 'relatedid' => $member_id, 'title' => '签到', 'remark' => '签到成功');
         $members_info = $this->Members->credits($new_credits, $member_id, $coef = 1, true, true, true, $credit_type, array(), $credit_log);
         $logarr['member_info'] = $members_info;
     }
     $logarr['updatecredit'] = $updatecredit;
     $logarr['status'] = 1;
     $logarr['credit_type'] = $credit_type_info;
     $logarr['copywriting_credit'] = copywriting_credit(array($logarr));
     unset($logarr['credit_type']);
     $logarr['copywriting'] = '签到成功';
     return $logarr;
 }
Exemple #2
0
 function audit()
 {
     $status = intval($this->input['status']);
     $thread_id = intval($this->input['id']);
     $thread_data = $this->db->query_first('SELECT id,tid FROM ' . DB_PREFIX . 'thread WHERE id=' . $thread_id);
     if (!$thread_data) {
         $this->errorOutput("帖子不存在或已经被删除");
     }
     $tid = $thread_data['tid'];
     $sql = 'UPDATE ' . DB_PREFIX . 'thread set status = ' . $status . ' where id =' . $thread_id;
     $this->db->query($sql);
     //冗余数据
     $sql = 'SELECT * FROM ' . DB_PREFIX . 'thread WHERE tid = ' . $tid . ' AND status = 1 ORDER BY create_time DESC limit 0,' . REDUN_LATEST_NUM;
     $query = $this->db->query($sql);
     $latest = $material = array();
     while ($row = $this->db->fetch_array($query)) {
         $latest[] = array('content' => $row['content'], 'create_time' => hg_get_format_date($row['create_time'], 8), 'user_name' => $row['user_name'], 'user_id' => $row['user_id'], 'material' => $row['aid'] ? explode(',', $row['aid']) : array());
         $material[] = $row['aid'];
     }
     if ($material) {
         $material = @array_filter(array_unique(explode(',', implode(',', $material))));
         if ($material) {
             $material = $this->attachlib->get_attach_by_aid(implode(',', $material), true);
         }
     }
     if ($latest && $material && $tid) {
         foreach ($latest as $key => $val) {
             $latest[$key]['material'] = !empty($val['material']) ? array_intersect($material, $val['material']) : array();
         }
         $sql = 'UPDATE ' . DB_PREFIX . 'topic SET latest="' . addslashes(json_encode($latest)) . '" WHERE id = ' . $tid;
         $this->db->query($sql);
     }
     //重新计算更新总数
     $total = $this->db->query_first('SELECT COUNT(*) AS total FROM ' . DB_PREFIX . 'thread WHERE status=1 and tid=' . $tid);
     $this->db->query('UPDATE ' . DB_PREFIX . 'topic set total = ' . $total['total'] . ' where id=' . $tid);
     $this->addItem(array($thread_id));
     $this->output();
 }
Exemple #3
0
/**
 * 格式化时间输出
 * @param $date unix时间戳
 * @param $method 显示格式
 * @param $type 是否强制格式化输出
 * @return unknown_type
 */
function hg_get_date($date = 0, $method = 4, $type = 0)
{
    if (!$date) {
        return '';
    }
    if ($type) {
        return hg_get_format_date($date, $method);
    }
    $seconds = TIMENOW - $date;
    $minutes = $seconds / 60;
    if ($minutes < 60) {
        if ($minutes < 1) {
            if ($seconds <= 10) {
                $showtime = '刚刚';
            } else {
                $showtime = $seconds . '秒前';
            }
        } else {
            $showtime = intval($minutes) . '分钟前';
        }
    } elseif ($minutes < 1440) {
        $showtime = intval($minutes / 60) . '小时前';
    } elseif ($minutes < 14400) {
        $showtime = intval($minutes / 1440) . '天前';
    } else {
        $showtime = hg_get_format_date($date, $method);
    }
    return $showtime;
}
Exemple #4
0
/**
 * 格式化时间输出
 * @param $date unix时间戳
 * @param $method 显示格式
 * @param $type 是否强制格式化输出
 * @return unknown_type
 */
function hg_get_date($date = 0, $method = 4, $type = 0)
{
    if (!$date) {
        return '';
    }
    if ($type) {
        return hg_get_format_date($date, $method);
    }
    $seconds = TIMENOW - $date;
    $minutes = $seconds / 60;
    $d = date('d', $date);
    $cd = date('d');
    $m = date('m', $date);
    $cm = date('m');
    $y = date('Y', $date);
    $cy = date('Y');
    if ($minutes < 60) {
        if ($minutes < 1) {
            if ($seconds <= 10) {
                $showtime = '刚刚';
            } else {
                $showtime = $seconds . '秒前';
            }
        } else {
            $showtime = intval($minutes) . '分钟前';
        }
    } elseif ($cd == $d && $cm == $m && $cy == $y) {
        //$showtime = intval ( $minutes / 60 ) . '小时前';
        $showtime = '今天 ' . hg_get_format_date($date, 5);
    } elseif ($cy == $y) {
        //$showtime = intval ( $minutes / 1440 ) . '天前';
        $showtime = hg_get_format_date($date, $method);
    } else {
        $showtime = hg_get_format_date($date, 3);
    }
    return $showtime;
}