public function post_create() { $val = Validation::forge(); $val->add_callable('MyRules'); $val->add_field('category_ids', Lang::get('label.category'), 'required'); $val->add_field('product_name', Lang::get('label.product_name'), 'required|max_length[255]'); $val->add_field('product_description', Lang::get('label.description'), 'trim|max_length[1024]'); $val->add_field('product_info', Lang::get('label.information'), 'trim|max_length[10000]'); if ($val->run()) { DB::start_transaction(); $category_ids = $val->validated('category_ids'); $category_name = Model_Service_Util::mb_trim($val->validated('product_name')); $product_description = Model_Service_Util::mb_trim($val->validated('product_description')); $product_info = $val->validated('product_info'); $product_props = array('product_name' => $category_name, 'product_description' => $product_description, 'product_info' => $product_info); $product_id = Model_Base_Product::insert($product_props); if ($product_id && Model_Base_ProductCategory::insert($product_id, $category_ids)) { $photo_props = array('type' => 'main_photo', 'product_id' => $product_id); $upload = Model_Service_Upload::run('product', $photo_props); if (empty($upload['error'])) { DB::commit_transaction(); $this->data['success'] = true; $this->data['product']['id'] = $product_id; $this->data['msg'] = Lang::get('notice.upload.save_product_success'); } else { DB::rollback_transaction(); $this->data['msg'] = $upload['error']; } } else { DB::rollback_transaction(); $this->data['msg'] = Lang::get($this->controller . '.' . $this->action . '.error'); } } else { $this->data['errors'] = $val->error_message(); } return $this->response($this->data); }