load->model('authentication_model'); } /** * @api {get} api/contacts/:customer_id/:contact_id List all Contacts of a Customer * @apiVersion 0.1.0 * @apiName GetContact * @apiGroup Contacts * * @apiHeader {String} authtoken Authentication token, generated from admin area * * @apiParam {Number} customer_id Mandatory Customer unique ID * @apiParam {Number} contact_id Optional Contact unique ID
Note : if you don't pass Contact id then it will list all contacts of the customer * * @apiSuccess {Object} Contact Contact information * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * "id": "6", * "userid": "1", * "company": "xyz", * "vat": "", * "phonenumber": "1234567890", * "country": "0", * "city": "", * "zip": "360005", * "state": "", * "address": "", * "website": "", * "datecreated": "2020-08-19 20:07:49", * "active": "1", * "leadid": null, * "billing_street": "", * "billing_city": "", * "billing_state": "", * "billing_zip": "", * "billing_country": "0", * "shipping_street": "", * "shipping_city": "", * "shipping_state": "", * "shipping_zip": "", * "shipping_country": "0", * "longitude": null, * "latitude": null, * "default_language": "english", * "default_currency": "0", * "show_primary_contact": "0", * "stripe_id": null, * "registration_confirmed": "1", * "addedfrom": "1" * } * * @apiError {Boolean} status Request status * @apiError {String} message No data were found * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * "status": false, * "message": "No data were found" * } */ public function data_get($customer_id = '', $contact_id = '') { // If the id parameter doesn't exist return all the if (empty($contact_id) && !empty($customer_id)) { $data = $this->Api_model->get_table('all_contacts', $customer_id); } if (!empty($contact_id) && !empty($customer_id)) { $data = $this->Api_model->get_table('contacts', $contact_id); } if (empty($contact_id) && empty($customer_id)) { // Set the response and exit $this->response(['status' => FALSE, 'message' => 'No data were found'], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } // Check if the data store contains if ($data) { $data = $this->Api_model->get_api_custom_data($data, "contacts", $contact_id); // Set the response and exit $this->response($data, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code } else { // Set the response and exit $this->response(['status' => FALSE, 'message' => 'No data were found'], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } } /** * @api {get} api/contacts/search/:keysearch Search Contact Information * @apiVersion 0.1.0 * @apiName GetContactSearch * @apiGroup Contacts * * @apiHeader {String} authtoken Authentication token, generated from admin area * * @apiParam {String} keysearch Search Keywords * * @apiSuccess {Object} Contact Contact information * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * "id": "8", * "userid": "1", * "is_primary": "0", * "firstname": "chirag", * "lastname": "jagani", * "email": "useremail@gmail.com", * "phonenumber": "", * "title": null, * "datecreated": "2020-05-19 20:07:49", * "password": "$2a$08$6DLJFalqvJGVymCwW2ppNe9HOG5YUP04vzthXZjOFFUQknxfG6QHe", * "new_pass_key": null, * "new_pass_key_requested": null, * "email_verified_at": "2020-08-28 21:36:06", * "email_verification_key": null, * "email_verification_sent_at": null, * "last_ip": null, * "last_login": null, * "last_password_change": null, * "active": "1", * "profile_image": null, * "direction": null, * "invoice_emails": "0", * "estimate_emails": "0", * "credit_note_emails": "0", * "contract_emails": "0", * "task_emails": "0", * "project_emails": "0", * "ticket_emails": "0", * "company": "trueline", * "vat": "", * "country": "0", * "city": "", * "zip": "", * "state": "", * "address": "", * "website": "", * "leadid": null, * "billing_street": "", * "billing_city": "", * "billing_state": "", * "billing_zip": "", * "billing_country": "0", * "shipping_street": "", * "shipping_city": "", * "shipping_state": "", * "shipping_zip": "", * "shipping_country": "0", * "longitude": null, * "latitude": null, * "default_language": "english", * "default_currency": "0", * "show_primary_contact": "0", * "stripe_id": null, * "registration_confirmed": "1", * "addedfrom": "1" * } * * @apiError {Boolean} status Request status * @apiError {String} message No data were found * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * "status": false, * "message": "No data were found" * } */ public function data_search_get($key = '') { // If the id parameter doesn't exist return all the $data = $this->Api_model->search('contacts', $key); // Check if the data store contains if ($data) { $data = $this->Api_model->get_api_custom_data($data, "contacts"); // Set the response and exit $this->response($data, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code } else { // Set the response and exit $this->response(['status' => FALSE, 'message' => 'No data were found'], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } } /** * @api {post} api/contacts/ Add New Contact * @apiVersion 0.1.0 * @apiName PostContact * @apiGroup Contacts * * @apiHeader {String} authtoken Authentication token, generated from admin area * * @apiParam {Number} customer_id Mandatory Customer id. * @apiParam {String} firstname Mandatory First Name * @apiParam {String} lastname Mandatory Last Name * @apiParam {String} email Mandatory E-mail * @apiParam {String} [title] Optional Position * @apiParam {String} [phonenumber] Optional Phone Number * @apiParam {String} [direction = 'rtl'] Optional Direction (rtl or ltr) * @apiParam {String} [password] Optional password (only required if you pass send_set_password_email parameter) * @apiParam {String} [is_primary = 'on'] Optional Primary Contact (set on or don't pass it) * @apiParam {String} [donotsendwelcomeemail] Optional Do Not Send Welcome Email (set on or don't pass it) * @apiParam {String} [send_set_password_email] Optional Send Set Password Email (set on or don't pass it) * @apiParam {Array} [permissions] Optional Permissions for this contact(["1", "2", "3", "4", "5", "6" ])
* [
* "1", // Invoices permission
* "2", // Estimates permission
* "3", // Contracts permission
* "4", // Proposals permission
* "5", // Support permission
* "6" // Projects permission
* ] * @apiParam {String} [invoice_emails = "invoice_emails"] Optional E-Mail Notification for Invoices (set value same as name or don't pass it) * @apiParam {String} [estimate_emails = "estimate_emails"] Optional E-Mail Notification for Estimate (set value same as name or don't pass it) * @apiParam {String} [credit_note_emails = "credit_note_emails"] Optional E-Mail Notification for Credit Note (set value same as name or don't pass it) * @apiParam {String} [project_emails = "project_emails"] Optional E-Mail Notification for Project (set value same as name or don't pass it) * @apiParam {String} [ticket_emails = "ticket_emails"] Optional E-Mail Notification for Tickets (set value same as name or don't pass it) * @apiParam {String} [task_emails = "task_emails"] Optional E-Mail Notification for Task (set value same as name or don't pass it) * @apiParam {String} [contract_emails ="contract_emails"] Optional E-Mail Notification for Contract (set value same as name or don't pass it) * * @apiSuccess {Boolean} status Request status. * @apiSuccess {String} message Contact added successfully. * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * "status": true, * "message": "Contact added successfully" * } * * @apiError {Boolean} status Request status * @apiError {String} message Contact add fail * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * "status": false, * "message": "Contact add fail" * } * * @apiError {String} email This Email is already exists * * @apiErrorExample Error-Response: * HTTP/1.1 409 Conflict * { * "status": false, * "error": { * "email":"This Email is already exists" * }, * "message": "This Email is already exists" * } */ public function data_post() { $data = $this->input->post(); $send_set_password_email = isset($data['send_set_password_email']) ? true : false; if ($send_set_password_email) { unset($data['password']); } $this->form_validation->set_rules('firstname', 'First Name', 'trim|required|max_length[255]'); $this->form_validation->set_rules('lastname', 'Last Name', 'trim|required|max_length[255]'); $this->form_validation->set_rules('email', 'Email', 'trim|required|max_length[255]|is_unique[' . db_prefix() . 'contacts.email]', array('is_unique' => 'This %s is already exists')); if ($send_set_password_email) { $this->form_validation->set_rules('password', 'Password', 'trim|required|max_length[255]'); } $this->form_validation->set_rules('customer_id', 'Customer Id', 'trim|required|numeric|callback_client_id_check'); if ($this->form_validation->run() == FALSE) { $message = array('status' => FALSE, 'error' => $this->form_validation->error_array(), 'message' => validation_errors()); $this->response($message, REST_Controller::HTTP_CONFLICT); } else { $customer_id = $data['customer_id']; unset($data['customer_id']); $id = $this->clients_model->add_contact($data, $customer_id); if ($id > 0 && !empty($id)) { $message = array( 'status' => TRUE, 'message' => 'Contact added successfully.', 'record_id' => $id ); $this->response($message, REST_Controller::HTTP_OK); } else { // error $message = array('status' => FALSE, 'message' => 'Contact add fail.'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } } } /** * @api {delete} api/delete/contacts/:id Delete Contact * @apiVersion 0.1.0 * @apiName DeleteContact * @apiGroup Contacts * * @apiHeader {String} authtoken Authentication token, generated from admin area * * @apiParam {Number} customer_id unique Customer id * * @apiSuccess {String} status Request status. * @apiSuccess {String} message Contact Deleted Successfully * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * "status": true, * "message": "Contact Deleted Successfully" * } * * @apiError {Boolean} status Request status * @apiError {String} message Contact Delete Fail * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * "status": false, * "message": "Contact Delete Fail" * } */ public function data_delete($customer_id = '') { $id = $this->security->xss_clean($customer_id); if (empty($id) && !is_numeric($id)) { $message = array('status' => FALSE, 'message' => 'Invalid Contact ID'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } else { $is_exist = $this->clients_model->get_contact($id); if (is_object($is_exist)) { $output = $this->clients_model->delete_contact($id); if ($output === TRUE) { // success $message = array('status' => TRUE, 'message' => 'Contact Deleted Successfuly.'); $this->response($message, REST_Controller::HTTP_OK); } else { // error $message = array('status' => FALSE, 'message' => 'Contact Delete Fail.'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } } else { $message = array('status' => FALSE, 'message' => 'Invalid Contact ID'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } } } /** * @api {put} api/contacts/:id Update Contact Information * @apiVersion 0.1.0 * @apiName PutContact * @apiGroup Contacts * * @apiHeader {String} authtoken Authentication token, generated from admin area * * @apiParam {Number} id Mandatory Customer Contact id. * @apiParam {String} firstname Mandatory First Name * @apiParam {String} lastname Mandatory Last Name * @apiParam {String} email Mandatory E-mail * @apiParam {String} [title] Optional Position * @apiParam {String} [phonenumber] Optional Phone Number * @apiParam {String} [direction = 'rtl'] Optional Direction (rtl or ltr) * @apiParam {String} [password] Optional password (only required if you pass send_set_password_email parameter) * @apiParam {String} [is_primary = 'on'] Optional Primary Contact (set on or don't pass it) * @apiParam {String} [donotsendwelcomeemail] Optional Do Not Send Welcome Email (set on or don't pass it) * @apiParam {String} [send_set_password_email] Optional Send Set Password Email (set on or don't pass it) * @apiParam {Array} [permissions] Optional Permissions for this contact(["1", "2", "3", "4", "5", "6" ])
* [
* "1", // Invoices permission
* "2", // Estimates permission
* "3", // Contracts permission
* "4", // Proposals permission
* "5", // Support permission
* "6" // Projects permission
* ] * @apiParam {String} [invoice_emails = "invoice_emails"] Optional E-Mail Notification for Invoices (set value same as name or don't pass it) * @apiParam {String} [estimate_emails = "estimate_emails"] Optional E-Mail Notification for Estimate (set value same as name or don't pass it) * @apiParam {String} [credit_note_emails = "credit_note_emails"] Optional E-Mail Notification for Credit Note (set value same as name or don't pass it) * @apiParam {String} [project_emails = "project_emails"] Optional E-Mail Notification for Project (set value same as name or don't pass it) * @apiParam {String} [ticket_emails = "ticket_emails"] Optional E-Mail Notification for Tickets (set value same as name or don't pass it) * @apiParam {String} [task_emails = "task_emails"] Optional E-Mail Notification for Task (set value same as name or don't pass it) * @apiParam {String} [contract_emails ="contract_emails"] Optional E-Mail Notification for Contract (set value same as name or don't pass it) * * @apiParamExample {json} Request-Example: * { * "firstname":"new first name", * "lastname":"new last name", * "email":"dummy@gmail.com", * "title":"", * "phonenumber":"9909999099", * "direction":"rtl", * "password":"123456", * "is_primary":"on", * "send_set_password_email":"on", * "permissions":["1", "2", "3", "4", "5", "6" ], * "invoice_emails":"invoice_emails", * "estimate_emails":"estimate_emails", * "credit_note_emails":"credit_note_emails", * "project_emails":"project_emails", * "ticket_emails":"ticket_emails", * "task_emails":"task_emails", * "contract_emails":"contract_emails" * } * * @apiSuccess {Boolean} status Request status * @apiSuccess {String} message Contact updated successful * * @apiSuccessExample Success-Response: * HTTP/1.1 200 OK * { * "status": true, * "message": "Contact Updated Successfully" * } * * @apiError {String} email This Email is already exists * * @apiErrorExample Error-Response: * HTTP/1.1 409 Conflict * { * "status": false, * "error": { * "email":"This Email is already exists" * }, * "message": "This Email is already exists" * } * @apiError {Boolean} status Request status * @apiError {String} message Contact add fail * * @apiErrorExample Error-Response: * HTTP/1.1 404 Not Found * { * "status": false, * "message": "Contact Update fail" * } * */ public function data_put($id = '') { // JSON data is now automatically parsed in REST_Controller if (empty($_POST) || !isset($_POST)) { $message = array('status' => FALSE, 'message' => 'Data Not Acceptable OR Not Provided'); $this->response($message, REST_Controller::HTTP_NOT_ACCEPTABLE); } if (empty($id) && !is_numeric($id)) { $message = array('status' => FALSE, 'message' => 'Invalid Client ID'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } else { $this->load->model('authentication_model'); $data = $this->input->post(); $is_exist = $this->clients_model->get_contact($id); if (!is_object($is_exist)) { $message = array('status' => FALSE, 'message' => 'Contact ID Doesn\'t Not Exist.'); $this->response($message, REST_Controller::HTTP_CONFLICT); } $_current_email = $this->db->where('id', $id)->get(db_prefix() . 'contacts')->row(); if ($_current_email->email == $this->input->post('email')) { $this->form_validation->set_rules('email', 'Email', 'trim|required|max_length[255]'); } else { $this->form_validation->set_rules('email', 'Email', 'trim|required|max_length[255]|is_unique[' . db_prefix() . 'contacts.email]', array('is_unique' => 'This %s is already exists')); } if ($this->form_validation->run() == FALSE) { $message = array('status' => FALSE, 'error' => $this->form_validation->error_array(), 'message' => validation_errors()); $this->response($message, REST_Controller::HTTP_CONFLICT); } $success = $this->clients_model->update_contact($data, $id); $updated = false; if (is_array($success)) { if (isset($success['set_password_email_sent'])) { $message_str = _l('set_password_email_sent_to_client'); } elseif (isset($success['set_password_email_sent_and_profile_updated'])) { $updated = true; $message_str = _l('set_password_email_sent_to_client_and_profile_updated'); } } else { if ($success == true) { $updated = true; $message_str = "Contact Updated Successfully"; } } if ($updated == true) { $message = array('status' => TRUE, 'message' => $message_str); $this->response($message, REST_Controller::HTTP_OK); } else { // error $message = array('status' => FALSE, 'message' => 'Client Update Fail.'); $this->response($message, REST_Controller::HTTP_NOT_FOUND); } } } public function client_id_check($customer_id) { $this->form_validation->set_message('client_id_check', 'The {field} is Invalid'); if (empty($customer_id)) { return FALSE; } $query = $this->db->get_where(db_prefix() . 'clients', array('userid' => $customer_id)); return $query->num_rows() > 0; } }