Example #1
0
 /**
  * Store a cluster
  *
  * @param type
  * @return Response
  */
 public function store($type = null)
 {
     if (!Input::has('category') && !Input::has('tag')) {
         return new JSend('error', (array) Input::all(), 'Tidak ada data cluster.');
     }
     $errors = new MessageBag();
     DB::beginTransaction();
     //1. Validate Cluster Parameter
     if ($type == 'category') {
         $cluster = Input::get('category');
         $cluster_data = \App\Models\Category::findornew($cluster['id']);
     } else {
         $cluster = Input::get('tag');
         $cluster_data = \App\Models\Tag::findornew($cluster['id']);
     }
     //1a. Get original data
     if (is_null($cluster['id'])) {
         $is_new = true;
     } else {
         $is_new = false;
     }
     $cluster_rules = ['category_id' => 'numeric|exists:categories,id', 'name' => 'required|max:255', 'slug' => 'max:255|unique:categories,slug,' . (!is_null($cluster['id']) ? $cluster['id'] : '')];
     //1b. Validate Basic Cluster Parameter
     $validator = Validator::make($cluster, $cluster_rules);
     if (!$validator->passes()) {
         $errors->add('Cluster', $validator->errors());
     } else {
         //if validator passed, save cluster
         $cluster_data = $cluster_data->fill(['name' => $cluster['name'], 'type' => $cluster_data->type, 'category_id' => isset($cluster['category_id']) ? $cluster['category_id'] : 0]);
         if (!$cluster_data->save()) {
             $errors->add('Cluster', $cluster_data->getError());
         }
     }
     //End of validate cluster
     if ($errors->count()) {
         DB::rollback();
         return new JSend('error', (array) Input::all(), $errors);
     }
     DB::commit();
     $final_cluster = \App\Models\Cluster::id($cluster_data['id'])->with(['category', 'products'])->first()->toArray();
     return new JSend('success', (array) $final_cluster);
 }