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; } } }