示例#1
0
文件: Show.php 项目: jackycgq/bzfshop
 public function post($f3)
 {
     // 用户没有登陆,让用户去登陆
     if (!AuthHelper::isAuthUser()) {
         // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了
         RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl());
     }
     // 首先做参数合法性验证
     $validator = new Validator($f3->get('POST'));
     $addressInfo = array();
     $addressInfo['consignee'] = $validator->required('姓名不能为空')->validate('consignee');
     $addressInfo['address'] = $validator->required('地址不能为空')->validate('address');
     $addressInfo['mobile'] = $validator->required('手机号码不能为空')->digits('手机号码格式不正确')->validate('mobile');
     $addressInfo['tel'] = $validator->validate('tel');
     $addressInfo['zipcode'] = $validator->digits('邮编格式不正确')->validate('zipcode');
     $postScript = $validator->validate('postscript');
     // 订单附言
     if (!$this->validate($validator)) {
         goto out_fail;
     }
     $cartBasicService = new CartBasicService();
     $cartBasicService->loadFromStorage();
     // 加载购物车的数据
     $cartContext =& $cartBasicService->getCartContextRef();
     if ($cartContext->isEmpty()) {
         $this->addFlashMessage('购物车为空');
         goto out_fail;
     }
     // 做一次购物车计算
     $cartBasicService->calcOrderPrice();
     // 如果购物车里面有错误消息,我们需要显示它
     if ($cartContext->hasError()) {
         $this->addFlashMessageArray($cartContext->getAndClearErrorMessageArray());
     }
     // 更新用户的地址信息
     $userInfo = AuthHelper::getAuthUser();
     $userAddressService = new UserAddressService();
     $userAddressService->updateUserFirstAddress($userInfo['user_id'], $addressInfo);
     // 地址信息放入购物车结构
     $cartContext->setAddressInfo($addressInfo);
     // 订单附言放入购物车
     $cartContext->setValue('postscript', $postScript);
     // 创建或者更新订单
     $orderInfo = $cartBasicService->saveOrder($userInfo['user_id'], '买家:' . $userInfo['user_name']);
     if (!$orderInfo || $orderInfo->isEmpty()) {
         //订单创建失败,报错
         $this->addFlashMessage('订单创建失败,请联系客服');
         goto out_fail;
     }
     //订单创建成功,清空购物车
     $cartBasicService->clearStorage();
     // 跳转到支付页面
     RouteHelper::reRoute($this, RouteHelper::makeUrl('/Cart/Pay', array('order_id' => $orderInfo['order_id']), true));
     return;
     out_fail:
     RouteHelper::reRoute($this, '/Cart/Show');
 }
示例#2
0
 public function beforeRoute($f3)
 {
     parent::beforeRoute($f3);
     // 用户没有登陆,让用户去登陆
     if (!AuthHelper::isAuthUser()) {
         // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了
         RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl());
     }
 }
示例#3
0
 public function beforeRoute($f3)
 {
     global $smarty;
     parent::beforeRoute($f3);
     // 用户没有登陆,让用户去登陆
     if (!AuthHelper::isAuthUser()) {
         // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了
         RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl());
         return;
     }
     //把认证用户放入到 smarty 中
     $smarty->assign('authSupplierUser', AuthHelper::getAuthUser());
 }
示例#4
0
 /**
  * 由于 KindEditor, UEditor 使用了 swfupload 用于文件上传,而 swfupload 无法使用 Session 认证
  * 我们这里只能使用 Post 来自己做认证了
  */
 public function beforeRoute($f3)
 {
     global $smarty;
     parent::beforeRoute($f3);
     // 用户没有登陆,让用户去登陆
     if (!AuthHelper::isAuthUser() && !AuthHelper::isPostCookieAuth()) {
         // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了
         RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl());
         return;
     }
     //把认证用户放入到 smarty 中
     $smarty->assign('authAdminUser', AuthHelper::getAuthUser());
     $smarty->assign('WEB_COOKIE_AUTH_KEY', AuthHelper::$cookieAuthKey);
 }
示例#5
0
 public function beforeRoute($f3)
 {
     parent::beforeRoute($f3);
     //设置 SEO 信息
     global $smarty;
     $smarty->assign('seo_title', MobileThemePlugin::getOptionValue('seo_title'));
     $smarty->assign('seo_description', MobileThemePlugin::getOptionValue('seo_description'));
     $smarty->assign('seo_keywords', MobileThemePlugin::getOptionValue('seo_keywords'));
     // 设置页面显示用户名
     if (AuthHelper::isAuthUser()) {
         global $smarty;
         $authUser = AuthHelper::getAuthUser();
         $smarty->assign('USER_NAME_DISPLAY', $authUser['user_name']);
     }
     // 记录用户从什么来源到达网站的
     ReferHelper::setOrderRefer($f3);
     //设置 order_refer 信息
 }
示例#6
0
 public function beforeRoute($f3)
 {
     parent::beforeRoute($f3);
     // 由于我们使用 GET 来传递 session id,出于安全性考虑,我们需要检查来源 IP
     $userSessionIP = $f3->get('SESSION[user_session_ip]');
     if (empty($userSessionIP)) {
         $f3->set('SESSION[user_session_ip]', $f3->get('IP'));
     } else {
         if ($userSessionIP !== $f3->get('IP')) {
             // IP 非法,清空当前 session 数据
             $f3->clear('SESSION');
             session_destroy();
             session_write_close();
         }
     }
     // 用户没有登陆,让用户去登陆
     if (!AuthHelper::isAuthUser()) {
         // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了
         RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl());
     }
 }
示例#7
0
 /**
  *
  * 为 mobile 系统设置运行环境
  *
  * @return bool
  */
 private function doMobileAction()
 {
     global $f3;
     // 获取当前插件的根地址
     $currentThemeBasePath = dirname(__FILE__);
     // 通用的加载
     $this->doOtherAction();
     // mobile 目录加入到 auto load 的路径中,这样系统就能自动做 class 加载
     SystemHelper::addAutoloadPath($currentThemeBasePath . '/mobile/Code', true);
     // 设置路由,这样用户就能访问到我们的程序了
     $f3->config($currentThemeBasePath . '/mobile/route.cfg');
     $f3->config($currentThemeBasePath . '/mobile/route-rewrite.cfg');
     // 记录用户从什么来源到达网站的
     ReferHelper::addReferItem('HostRefer', new HostRefer());
     // 记录来源的 refer_host 和 refer_url
     // 注册 Asset 模块
     \Core\Asset\ManagerHelper::registerModule(MobileThemePlugin::pluginGetUniqueId(), $this->pluginGetVersion(), $currentThemeBasePath . '/mobile/Asset');
     // 发布必要的资源文件
     \Core\Asset\ManagerHelper::publishAsset(MobileThemePlugin::pluginGetUniqueId(), 'jquery-mobile');
     \Core\Asset\ManagerHelper::publishAsset(MobileThemePlugin::pluginGetUniqueId(), 'css');
     \Core\Asset\ManagerHelper::publishAsset(MobileThemePlugin::pluginGetUniqueId(), 'js');
     \Core\Asset\ManagerHelper::publishAsset(MobileThemePlugin::pluginGetUniqueId(), 'img');
     // 增加 smarty 模板搜索路径
     global $smarty;
     $smarty->addTemplateDir($currentThemeBasePath . '/mobile/Tpl/');
     // 加载 smarty 的扩展,里面有一些我们需要用到的函数
     require_once $currentThemeBasePath . '/mobile/Code/smarty_helper.php';
     // 注册 smarty 函数
     smarty_helper_register($smarty);
     global $f3;
     // 设置网站的 Base 路径,给 JavaScript 使用
     $smarty->assign("WEB_ROOT_HOST", $f3->get('sysConfig[webroot_schema_host]'));
     $smarty->assign("WEB_ROOT_BASE", $f3->get('BASE'));
     $smarty->assign("WEB_ROOT_BASE_RES", smarty_helper_function_get_asset_url(array('asset' => ''), null));
     $smarty->assign("IS_USER_AUTH", \Core\Helper\Utility\Auth::isAuthUser());
     // jQuery Mobile 根据当前页面的 URL 来决定是否缓存,我们对某些不希望缓存的页面在这里需要特殊处理,
     // 确保它的 url 是一直变化的
     $currentPageUrl = \Core\Helper\Utility\Route::getRequestURL();
     //  下面的操作页面不要缓存,因为每次可能都不一样,比如有验证码,或者有新订单
     if (false !== strpos($currentPageUrl, '/User/') || false !== strpos($currentPageUrl, '/My/') || false !== strpos($currentPageUrl, '/Cart/')) {
         $currentPageUrl = \Core\Helper\Utility\Route::addParam($currentPageUrl, array('_no_cache_page' => time()));
     }
     $smarty->assign("CURRENT_PAGE_URL", $currentPageUrl);
     return true;
 }
示例#8
0
文件: Auth.php 项目: jackycgq/bzfshop
 /**
  * 判读 POST 认证是否有效,解决 flash 无法传输 Session 的 bug
  *
  * @return boolean
  */
 public static function isPostCookieAuth()
 {
     // 没有开启 CookieAuth
     if (!Auth::$enableCookieAuth) {
         return false;
     }
     global $f3;
     $cookieAuthValue = $f3->get('POST.' . Auth::$cookieAuthKey);
     if (empty($cookieAuthValue)) {
         return false;
     }
     // 关闭旧的 session
     session_write_close();
     //打开新的 session
     session_id($cookieAuthValue);
     session_start();
     return Auth::isAuthUser();
 }