示例#1
0
 /**
  * @brief 设置数据库读写分离并且执行SQL语句
  * @param string $sql 要执行的SQL语句
  * @return int or bool SQL语句执行的结果
  */
 public function query($sql)
 {
     //取得SQL类型
     self::$sqlType = $this->getSqlType($sql);
     //读方式
     if (self::$sqlType == 'select' || self::$sqlType == 'show') {
         if (self::$rTarget == NULL || !is_resource(self::$rTarget)) {
             //多数据库支持并且读写分离
             if (isset(IWeb::$app->config['DB']['read'])) {
                 //获取ip地址
                 $ip = IClient::getIP();
                 $this->connect(IHash::hash(IWeb::$app->config['DB']['read'], $ip));
             } else {
                 $this->connect(IWeb::$app->config['DB']);
             }
             self::$rTarget = $this->linkRes;
         }
     } else {
         if (self::$wTarget == NULL || !is_resource(self::$wTarget)) {
             //多数据库支持并且读写分离
             if (isset(IWeb::$app->config['DB']['write'])) {
                 $this->connect(IWeb::$app->config['DB']['write']);
             } else {
                 $this->connect(IWeb::$app->config['DB']);
             }
             self::$wTarget = $this->linkRes;
         }
     }
     if (is_resource($this->linkRes)) {
         return $this->doSql($sql);
     } else {
         return false;
     }
 }
示例#2
0
 /**
  * @brief 设置数据库读写分离并且执行SQL语句
  * @param string $sql 要执行的SQL语句
  * @return int or bool SQL语句执行的结果
  */
 public function query($sql)
 {
     //取得SQL类型
     self::$sqlType = $this->getSqlType($sql);
     //读方式
     if (self::$sqlType == 'select' || self::$sqlType == 'show') {
         if (self::$rTarget == NULL) {
             //多数据库支持并且读写分离
             if (isset(IWeb::$app->config['DB']['read'])) {
                 //获取ip地址
                 $ip = IClient::getIP();
                 self::$rTarget = $this->connect(IHash::hash(IWeb::$app->config['DB']['read'], $ip));
             } else {
                 self::$rTarget = $this->connect(IWeb::$app->config['DB']);
             }
         }
         $this->switchLink("r");
         $result = $this->doSql($sql);
         if ($result === false) {
             throw new IException("{$sql}\n -- " . $this->linkRes->error, 1000);
             return false;
         }
         return $result;
     } else {
         if (self::$wTarget == NULL) {
             //多数据库支持并且读写分离
             if (isset(IWeb::$app->config['DB']['write'])) {
                 self::$wTarget = $this->connect(IWeb::$app->config['DB']['write']);
             } else {
                 self::$wTarget = $this->connect(IWeb::$app->config['DB']);
             }
             //写链接启用事务
             $this->switchLink("w");
             $this->autoCommit();
         }
         $this->switchLink("w");
         $result = $this->doSql($sql);
         if ($result === false) {
             $errorMsg = $this->linkRes->error;
             $this->rollback();
             throw new IException("{$sql}\n -- " . $errorMsg, 1000);
             return false;
         }
         return $result;
     }
 }
示例#3
0
 /**
  * @brief 邮箱找回密码进行
  */
 function find_password_email()
 {
     $username = IReq::get('username');
     if ($username === null || !Util::is_username($username)) {
         IError::show(403, "请输入正确的用户名");
     }
     $email = IReq::get("email");
     if ($email === null || !IValidate::email($email)) {
         IError::show(403, "请输入正确的邮箱地址");
     }
     $tb_user = new IModel("user");
     $username = IFilter::act($username);
     $email = IFilter::act($email);
     $user = $tb_user->getObj(" username='******' AND email='{$email}' ");
     if (!$user) {
         IError::show(403, "对不起,用户不存在");
     }
     $hash = IHash::md5(microtime(true) . mt_rand());
     //重新找回密码的数据
     $tb_find_password = new IModel("find_password");
     $tb_find_password->setData(array('hash' => $hash, 'user_id' => $user['id'], 'addtime' => time()));
     if ($tb_find_password->query("`hash` = '{$hash}'") || $tb_find_password->add()) {
         $url = IUrl::getHost() . IUrl::creatUrl("/simple/restore_password/hash/{$hash}");
         $content = mailTemplate::findPassword(array("{url}" => $url));
         $smtp = new SendMail();
         $result = $smtp->send($user['email'], "您的密码找回", $content);
         if ($result === false) {
             IError::show(403, "发信失败,请重试!或者联系管理员查看邮件服务是否开启");
         }
     } else {
         IError::show(403, "生成HASH重复,请重试");
     }
     $message = "恭喜您,密码重置邮件已经发送!请到您的邮箱中去激活";
     $this->redirect("/site/success/message/" . urlencode($message));
 }
示例#4
0
 function trade_ticket()
 {
     $ticketId = IFilter::act(IReq::get('ticket_id', 'post'), 'int');
     $message = '';
     if (intval($ticketId) == 0) {
         $message = '请选择要兑换的代金券';
     } else {
         $nowTime = ITime::getDateTime();
         $ticketObj = new IModel('ticket');
         $ticketRow = $ticketObj->getObj('id = ' . $ticketId . ' and point > 0 and start_time <= "' . $nowTime . '" and end_time > "' . $nowTime . '"');
         if (empty($ticketRow)) {
             $message = '对不起,此代金券不能兑换';
         } else {
             $memberObj = new IModel('member');
             $where = 'user_id = ' . $this->user['user_id'];
             $memberRow = $memberObj->getObj($where, 'point');
             if ($ticketRow['point'] > $memberRow['point']) {
                 $message = '对不起,您的积分不足,不能兑换此类代金券';
             } else {
                 //生成红包
                 $dataArray = array('condition' => $ticketRow['id'], 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1);
                 $propObj = new IModel('prop');
                 $propObj->setData($dataArray);
                 $insert_id = $propObj->add();
                 //用户prop字段值null时
                 $memberArray = array('prop' => ',' . $insert_id . ',');
                 $memberObj->setData($memberArray);
                 $result = $memberObj->update('user_id = ' . $this->user["user_id"] . ' and ( prop is NULL or prop = "" )');
                 //用户prop字段值非null时
                 if (!$result) {
                     $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")');
                     $memberObj->setData($memberArray);
                     $result = $memberObj->update('user_id = ' . $this->user["user_id"], 'prop');
                 }
                 //代金券成功
                 if ($result) {
                     $pointConfig = array('user_id' => $this->user['user_id'], 'point' => '-' . $ticketRow['point'], 'log' => '积分兑换代金券,扣除了 -' . $ticketRow['point'] . '积分');
                     $pointObj = new Point();
                     $pointObj->update($pointConfig);
                 }
             }
         }
     }
     //展示
     if ($message != '') {
         $this->integral();
         Util::showMessage($message);
     } else {
         $this->redirect('redpacket');
     }
 }
示例#5
0
 function ticket_excel_pack()
 {
     if (class_exists('ZipArchive')) {
         //获取要打包的文件数组
         $fileArray = IFilter::act(IReq::get('id'));
         if (!empty($fileArray)) {
             $fileName = 'T_' . date('YmdHis') . IHash::random(8) . '.zip';
             $zip = new ZipArchive();
             $zip->open($this->ticketDir . '/' . $fileName, ZIPARCHIVE::CREATE);
             foreach ($fileArray as $file) {
                 $attachfile = $this->ticketDir . '/' . $file;
                 $zip->addFile($attachfile, basename($attachfile));
             }
             $zip->close();
             $this->ticket_excel_download($fileName);
             @unlink($this->ticketDir . '/' . $fileName);
         } else {
             $this->ticket_excel_list();
             Util::showMessage('请选择要打包的文件');
         }
     } else {
         $this->ticket_excel_list();
         Util::showMessage('您的php环境没有打包工具类库');
     }
 }
示例#6
0
 /**
  * @brief 赠品促销规则奖励操作
  * @param array 赠品促销规则奖励信息
  */
 private function giftAction($giftArray, $user_id)
 {
     foreach ($giftArray as $key => $val) {
         $award_type = $val['award_type'];
         $award_value = $val['award_value'];
         switch ($award_type) {
             //积分
             case "3":
                 $pointConfig = array('user_id' => $user_id, 'point' => $award_value, 'log' => '促销奖励,消费满' . $this->sum . '元,奖励' . $award_value . '积分');
                 $pointObj = new Point();
                 $pointObj->update($pointConfig);
                 break;
                 //代金券
             //代金券
             case "4":
                 /*(1)修改prop表*/
                 $ticketObj = new IModel('ticket');
                 $where = 'id = ' . $award_value;
                 $ticketRow = $ticketObj->getObj($where);
                 //奖励的红包没有过期
                 $time = ITime::getDateTime();
                 if ($time > $ticketRow['start_time'] && $time < $ticketRow['end_time']) {
                     $dataArray = array('condition' => $award_value, 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1);
                     $propObj = new IModel('prop');
                     $propObj->setData($dataArray);
                     $insert_id = $propObj->add();
                     /*(2)修改member表*/
                     $memberObj = new IModel('member');
                     //用户prop字段值null时
                     $memberArray = array('prop' => ',' . $insert_id . ',');
                     $memberObj->setData($memberArray);
                     $result = $memberObj->update('user_id = ' . $user_id . ' and ( prop is NULL or prop = "" )');
                     //用户prop字段值非null时
                     if (!$result) {
                         $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")');
                         $memberObj->setData($memberArray);
                         $memberObj->update('user_id = ' . $user_id, 'prop');
                     }
                 }
                 break;
                 //赠送经验
             //赠送经验
             case "5":
                 $memberObj = new IModel('member');
                 $memberArray = array('exp' => 'exp' + $award_value);
                 $memberObj->setData($memberArray);
                 $memberObj->update('user_id = ' . $user_id, 'exp');
                 break;
         }
     }
 }
示例#7
0
 /**
  * 用户报名参加团购
  *
  * 用户可以参加本次团购的条件:
  * 1.本次团购还没有满员
  * 2.一小时二十五分钟内,用户在本次团购中没有未完成的交易
  *
  * regiment_user_relation表中的is_over:0代表着还没有完成,1代表着已经完成交易了
  * 如果用户没有登录便参加团购,会生成一个hash存在cookie里,名字为regiment_100,其中100是相应团购的id
  * 并将此hash保存在regiment_user_relation表的hash字段里。在用户付账需要登录的时候应该查询这个hash并更新相应的user_id
  *
  * @static
  */
 public static function join($id, $user_id = null)
 {
     $id = intval($id);
     $now = time();
     $regiment = self::getRegimentById($id);
     $time_limit = self::time_limit();
     if ($regiment === false || 0 != $regiment['store_nums'] && $regiment['user_num'] >= $regiment['store_nums'] || strtotime($regiment['end_time']) < $now || strtotime($regiment['start_time']) > $now) {
         return array('flag' => 'msg', 'data' => '本次团购已过期或者人满');
     }
     $tb = new IModel("regiment_user_relation");
     $data = array('user_id' => "", 'hash' => "", 'regiment_id' => $id, 'join_time' => date("Y-m-d H:i:s", $now), 'is_over' => 0);
     if ($user_id !== null) {
         $user_id = intval($user_id);
         $re = $tb->query("regiment_id={$id} AND user_id={$user_id} AND is_over=0");
         $data['user_id'] = $user_id;
     } else {
         $hash = ICookie::get("regiment_{$id}");
         if ($hash === null) {
             $hash = IHash::md5(serialize($_SERVER) . microtime(1));
             ICookie::set("regiment_{$id}", $hash, $time = $time_limit * 60);
         }
         $re = $tb->query("regiment_id={$id} AND hash='{$hash}' AND is_over=0");
         $data['hash'] = $hash;
     }
     if ($re) {
         $re = end($re);
     }
     if (count($re) == 0 || strtotime($re['join_time']) < $now - $time_limit * 60) {
         $tb->setData($data);
         //$relation_id是关系表的主键
         if ($re) {
             $tb->update("id={$re['id']}");
             $relation_id = $re['id'];
         } else {
             $relation_id = $tb->add();
         }
         return array('flag' => true, 'data' => '参与成功', 'relation_id' => $relation_id);
     } else {
         return array('flag' => false, 'data' => '本次团购您存在未完成交易');
     }
 }
示例#8
0
 function ticket_create()
 {
     $propObj = new IModel('prop');
     $prop_num = intval(IReq::get('num'));
     $ticket_id = intval(IReq::get('ticket_id'));
     if ($prop_num && $ticket_id) {
         $prop_num = $prop_num > 5000 ? 5000 : $prop_num;
         $ticketObj = new IModel('ticket');
         $where = 'id = ' . $ticket_id;
         $ticketRow = $ticketObj->getObj($where);
         for ($item = 0; $item < intval($prop_num); $item++) {
             $dataArray = array('condition' => $ticket_id, 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time']);
             //判断code码唯一性
             $where = 'card_name = \'' . $dataArray['card_name'] . '\'';
             $isSet = $propObj->getObj($where);
             if (!empty($isSet)) {
                 $item--;
                 continue;
             }
             $propObj->setData($dataArray);
             $propObj->add();
         }
         $logObj = new Log('db');
         $logObj->write('operation', array("管理员:" . $this->admin['admin_name'], "生成了代金券", "面值:" . $ticketRow['value'] . "元,数量:" . $prop_num . "张"));
     }
     $this->redirect('ticket_list');
 }
示例#9
0
 function do_find_password()
 {
     $username = IReq::get('username');
     if ($username === null || !Util::is_username($username)) {
         die("请输入正确的用户名");
     }
     $useremail = IReq::get("useremail");
     if ($useremail === null || !IValidate::email($useremail)) {
         die("请输入正确的邮箱地址");
     }
     $captcha = IReq::get("captcha");
     if ($captcha != ISafe::get('Captcha')) {
         die('验证码输入不正确');
     }
     $tb_user = new IModel("user");
     $username = IFilter::act($username);
     $useremail = IFilter::act($useremail);
     $user = $tb_user->query("username='******' AND email='{$useremail}'");
     if (!$user) {
         die("没有这个用户");
     }
     $user = end($user);
     $hash = IHash::md5(microtime(true) . mt_rand());
     $tb_find_password = new IModel("find_password");
     //重新生成
     $tb_find_password->setData(array('hash' => $hash, 'user_id' => $user['id'], 'addtime' => time()));
     $sendMail = true;
     if ($tb_find_password->query("`hash` = '{$hash}'") || $tb_find_password->add()) {
         $smtp = new SendMail();
         $url = IUrl::creatUrl("/simple/restore_password/hash/{$hash}");
         $url = IUrl::getHost() . $url;
         $content = "请你点击下面这个链接修改密码:<a href='{$url}'>{$url}</a>。<br />如果不能点击,请您把它复制到地址栏中打开。<br />本链接在3天后将自动失效。";
         $re = $smtp->send($user['email'], "您的密码找回", $content);
         if ($re === false) {
             die("发信失败");
         }
         die("success");
     }
     die("找回密码失败");
 }
示例#10
0
 /**
  * Performs the hashing of a value using a hashing algorithm
  * @param string $value The value to be hashed
  * @param IHash $method The IHash object that represents the hash algorithm
  * <br>All hashing methods implements de IHash interface
  * @return string Generated hash
  */
 public static function generateHash($value, $method)
 {
     return $method->hashValue($value);
 }