request->is('ajax')) { $this->autoRender = false; $response = [ 'status' => false, 'message' => 'Failed' ]; $request = $this->basicRequest(); $user_id = $this->Session->read('userData.id'); $profile_id = $this->Session->read('userData.profile_id'); $request["expense_id"] = $this->data["expense_id"]; $request["unique_url"] = $this->data["unique_url"]; $request["user_id"] = $user_id; $request["profile_id"] = $profile_id; $request["addPermissions"] = []; $request["modifyPermissions"] = []; $request["deletePermissions"] = []; $operation = [ "email" => $this->data["email"], "name" => $this->data["name"], "role" => $this->data["permission"] ]; if ($this->data["operation_type"] == $this->operation_type['ADD']) { $request["addPermissions"][] = $operation; } else if ($this->data["operation_type"] == $this->operation_type['EDIT']) { $request["modifyPermissions"][] = $operation; } else if ($this->data["operation_type"] == $this->operation_type['DELETE']) { $request["deletePermissions"][] = $operation; } $apiResponse = $this->callAPI(HTTP_SITE_URL . "/Expense/permissions.json", 'POST', json_encode($request)); $apiResponseArr = json_decode($apiResponse, true); if (isset($apiResponseArr['response']['status']) && ($apiResponseArr['response']['status'] == '+000')) { $response['status'] = true; $response['message'] = 'Saved successfully.'; $response['permissions'] = $apiResponseArr['response']['data']['settings']['permissions']; }else{ $response['message'] = isset($apiResponseArr['response']['status_desc']) ? $apiResponseArr['response']['status_desc'] : $response['message']; } header('Content-Type: application/json'); echo json_encode($response); exit; } else { throw new BadRequestException('Invalid request method'); } } public function addRestriction() { if ($this->request->is('ajax')) { $this->autoRender = false; $profile_id = $this->Session->read('userData.profile_id'); $user_id = $this->Session->read('userData.id'); $response = [ 'status' => false, 'message' => 'Failed' ]; $request = $this->basicRequest(); $request["expense_id"] = $this->data["expense_id"]; $request["unique_url"] = $this->data["unique_url"]; $request["user_id"] = $user_id; $request["profile_id"] = $profile_id; $request["is_restricted_mode"] = $this->data["mode"]; $apiResponse = $this->callAPI(HTTP_SITE_URL . "/Expense/restriction.json", 'POST', json_encode($request)); $apiResponseArr = json_decode($apiResponse, true); if (isset($apiResponseArr['response']['status'])) { $response['restricted_mode'] = false; $response['status'] = true; if ($apiResponseArr['response']['status'] == '+000') { $response['message'] = "Restricted Mode saved successfully."; if($apiResponseArr['response']['GroupSetting']['is_restricted_mode'] == 1) { $response['restricted_mode'] = true; } } if($apiResponseArr['response']['status'] == '-1') { $response['message'] = $apiResponseArr['response']['status_desc']; } } header('Content-Type: application/json'); echo json_encode($response); exit; } else { throw new BadRequestException('Invalid request method'); } } public function fixed_price() { $object = $this->request->input('json_decode'); if (!empty($object)) { $data = $this->objectToArray($object); } if (!isset($data['skip_process_validation'])) { list($data, $status, $status_desc, $error) = $this->processValidation(); } if (!empty($data) && empty($status)) { list($status, $status_desc, $error) = $this->requestValidate($data); } if (empty($status)) { $object = json_decode(json_encode($object), true); list($status, $status_desc, $expObj) = $this->validateUniqueUrl($object['unique_url']); } $input = array(); if (empty($status)) { $status_message = [ 'code' => "061", 'message' => 'Error: Expense not found.' ]; $status = $status_message['code']; $status_desc = $status_message['message']; $expense = $this->Expense->find('first', array( 'conditions' => array('Expense.id' => $object['expense_id'], 'Expense.unique_url' => $object['unique_url']) )); $this->loadModel('GroupSettings'); //check expense_id and unique_url is exist or not $groupSettings = $this->GroupSetting->find('first', array( 'conditions' => array('GroupSetting.expense_id' => $object['expense_id'], 'GroupSetting.unique_url' => $object['unique_url']) )); if (!empty($expense['Expense']) && !empty($groupSettings['GroupSetting'])) { $is_add_possible = false; if(!empty($expense['Expense']['user_id']) || $expense['Expense']['create_user'] != 'system') { if($expense['Expense']['user_id'] == $object['user_id'] && $groupSettings['GroupSetting']['is_restricted_mode'] == 1){ $is_add_possible = true; // only owner can add the fixed price } if($groupSettings['GroupSetting']['is_restricted_mode'] == 0){ $is_add_possible = true; // anyone can add the fixed price } } if($is_add_possible){ $data['id'] = $groupSettings['GroupSetting']['id']; $data['version'] = $groupSettings['GroupSetting']['version'] + 1; $data['is_fixed_price'] = (isset($object['is_fixed_price']) && $object['is_fixed_price'] >0) ? true : false; $data['expense_id'] = $groupSettings['GroupSetting']['expense_id']; $data['unique_url'] = $groupSettings['GroupSetting']['unique_url']; if (!empty($expense['Expense'])) { $expense['Expense']['version'] = $expense['Expense']['version'] + 1; } $this->GroupSetting->save($data); $this->Expense->save($expense); $groupSettings['GroupSetting']['is_fixed_price'] = $object['is_fixed_price']; $status_desc = "SUCCESS"; $status = "+000"; $input['GroupSetting'] = $groupSettings['GroupSetting']; } } } if ($status != "+000") { $this->processResponse($input, $data, $status, $status_desc); } else { $this->updateFirebase($object['unique_url']); $input["status"] = $status; $input["status_desc"] = $status_desc; $input["api_version"] = 3; $this->set(array( 'response' => $input, '_serialize' => array('response') )); } } public function requestValidate($object) { //check validity $error = ""; $error_desc = ""; $expObj = array(); if (empty($object['expense_id'])) { $error = $this->validation_status; $error_desc = "expense_id must be provided!"; $expObj['expense_id'] = $error_desc; } if (empty($object['unique_url'])) { $error = $this->validation_status; $error_desc = "unique_url must be provided!"; $expObj['unique_url'] = $error_desc; } if (!empty($object['user_id']) && !is_numeric($object['user_id'])) { $error = $this->validation_status; $error_desc = 'user_id must be provided as numeric.'; } if (!isset($object['is_fixed_price'])) { $error = $this->validation_status; $error_desc = "is_fixed_price must be provided!"; $expObj['is_fixed_price'] = $error_desc; } return array($error, $error_desc, $expObj); } private function basicRequest(){ $deviceData = $this->deviceData(); $request = [ "platform" => $this->platform, // 1 = Android, 2 = iPhone, 3 = Web "app_version" => $this->app_version, // optional "version" => $this->version, // optional "application_version" => $this->application_version, // optional "device_id" => $deviceData['device_id'], "random_number" => $deviceData['random_number'], "access_token" => $deviceData['access_token'], ]; return $request; } }