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'); }
public function beforeRoute($f3) { parent::beforeRoute($f3); // 用户没有登陆,让用户去登陆 if (!AuthHelper::isAuthUser()) { // 如果已经记录了一个回跳 URL ,则不要再覆盖这个记录了 RouteHelper::reRoute($this, '/User/Login', !RouteHelper::hasRememberUrl()); } }
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()); }
/** * 由于 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); }
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 信息 }
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()); } }
/** * * 为 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; }
/** * 判读 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(); }