Example #1
0
 public function transport_post()
 {
     $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array());
     try {
         set_time_limit(0);
         //$profiler = new Profiler;
         //* 初始化返回数据 */
         $return_data = array();
         //* 收集请求数据 ==根据业务逻辑定制== */
         $request_data = $this->input->post();
         //* 权限验证 */
         $site_id = site::id();
         if ($site_id == 0) {
             throw new MyRuntimeException(Kohana::lang('o_global.select_site'), 400);
         }
         role::check('product_classify', $site_id, 0);
         //数据验证
         if (!isset($request_data['classify_id']) or !preg_match('/^\\d+$/', $request_data['classify_id'])) {
             throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404);
         }
         if (!isset($request_data['argument_group']) or !is_array($request_data['argument_group'])) {
             throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404);
         }
         if (!isset($request_data['argument']) or !is_array($request_data['argument'])) {
             throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404);
         }
         // 调用底层服务
         $classify = ClassifyService::get_instance()->get($request_data['classify_id']);
         if ($classify['site_id'] != $site_id) {
             throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404);
         }
         $categorys = CategoryService::get_instance()->query_assoc(array('where' => array('site_id' => $site_id, 'classify_id' => $classify['id'])));
         $arguments = empty($classify['argument_relation_struct']) ? array() : json_decode($classify['argument_relation_struct'], TRUE);
         $features = ClassifyService::get_instance()->get_features_by_classify_id($classify['id']);
         $transport = array();
         if (!empty($features)) {
             foreach ($features as $feature) {
                 if (!empty($request_data['argument_group'][$feature['id']]) and !empty($request_data['argument'][$feature['id']])) {
                     $gname = trim($request_data['argument_group'][$feature['id']]);
                     $aname = trim($request_data['argument'][$feature['id']]);
                     foreach ($arguments as $group) {
                         if ($gname === $group['name']) {
                             foreach ($group['items'] as $argument) {
                                 if ($aname === $argument['name']) {
                                     $transport[$feature['id']] = array($gname, $aname);
                                     break;
                                 }
                             }
                             break;
                         }
                     }
                     if (!isset($transport[$feature['id']])) {
                         throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 404);
                     }
                 }
             }
         }
         if (!empty($transport)) {
             if (!empty($categorys)) {
                 $category_ids = array();
                 foreach ($categorys as $category) {
                     $category_ids[] = $category['id'];
                 }
                 $products = ProductService::get_instance()->query_assoc(array('where' => array('site_id' => $site_id, 'category_id' => $category_ids)));
                 foreach ($products as $product) {
                     $product = coding::decode_product($product);
                     $product_argument_record = Product_argumentService::get_instance()->query_row(array('where' => array('product_id' => $product['id'])));
                     $product_argument = empty($product_argument_record) ? array() : json_decode($product_argument_record['arguments'], TRUE);
                     foreach ($transport as $feature_id => $argument) {
                         if (!empty($product['product_feature_relation_struct']['items'])) {
                             $key = array_search($feature_id, $product['product_feature_relation_struct']['items']);
                             if ($key !== FALSE) {
                                 unset($product['product_feature_relation_struct']['items'][$key]);
                             }
                         }
                         if (!empty($product['product_featureoption_relation_struct']['items'][$feature_id])) {
                             $option_id = $product['product_featureoption_relation_struct']['items'][$feature_id];
                             if (isset($features[$feature_id]['options'][$option_id])) {
                                 if (!isset($product_argument[$argument[0]])) {
                                     $product_argument[$argument[0]] = array();
                                 }
                                 $product_argument[$argument[0]][$argument[1]] = $features[$feature_id]['options'][$option_id]['name'];
                             }
                             unset($product['product_featureoption_relation_struct']['items'][$feature_id]);
                         }
                     }
                     ProductService::get_instance()->set($product['id'], coding::encode_product($product));
                     if (!empty($product_argument)) {
                         if (empty($product_argument_record)) {
                             Product_argumentService::get_instance()->create(array('product_id' => $product['id'], 'arguments' => json_encode($product_argument)));
                         } else {
                             Product_argumentService::get_instance()->set($product_argument_record['id'], array('arguments' => json_encode($product_argument)));
                         }
                     }
                     ORM::factory('product_featureoption_relation')->where('product_id', $product['id'])->delete_all();
                 }
             }
             ORM::factory('classify_feature_relation')->where('classify_id', $classify['id'])->in('feature_id', array_keys($transport))->delete_all();
         }
         //* 补充&修改返回结构体 */
         $return_struct['status'] = 1;
         $return_struct['code'] = 200;
         $return_struct['msg'] = '';
         $return_struct['content'] = $return_data;
         //* 请求类型 */
         if ($this->is_ajax_request()) {
             // ajax 请求
             // json 输出
             $this->template->content = $return_struct;
         } else {
             // html 输出
             //* 模板输出 */
             $content = new View($this->package . '/' . $this->class_name . '/' . __FUNCTION__);
             //* 变量绑定 */
             $this->template->title = Kohana::config('site.name');
             $this->template->content = $content;
             //* 请求结构数据绑定 */
             $this->template->content->request_data = $request_data;
             //* 返回结构体绑定 */
             $this->template->content->return_struct = $return_struct;
             //:: 当前应用专用数据
         }
         // end of request type determine
     } catch (MyRuntimeException $ex) {
         $return_struct['status'] = 0;
         $return_struct['code'] = $ex->getCode();
         $return_struct['msg'] = $ex->getMessage();
         //TODO 异常处理
         //throw $ex;
         if ($this->is_ajax_request()) {
             $this->template->content = $return_struct;
         } else {
             $this->template->return_struct = $return_struct;
             $content = new View('info');
             $this->template->content = $content;
             //* 请求结构数据绑定 */
             $this->template->content->request_data = $request_data;
             //* 返回结构体绑定 */
             $this->template->content->return_struct = $return_struct;
         }
     }
 }