// Topup management toosl #include "clog.h" #include "cgi.h" #include "input.h" #include "mermsemr_api.h" #include "safestring.h" #include #include "pgsql.h" #include "pgsql_wrapper.h" #include #include "medTEmails.h" /* -- */ #include "function_agents.h" #include "medTrTransporter.h" //#include "function_driver.h" void GenerateSeed( char * number, int sz, int seed ); long medTrDeviceList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[30]; try { OPTIONAL(in, "limit") REQ_LONG(in, "limit", 0, -1); REQ_LONG(in, "agent_id", 0, -1); REQ_LONG(in, "location_id", 0, -1); OPTIONAL(in, "device_id") REQ_LONG(in, "device_id", 0, -1); out["total_record"] = "0"; const PGresult *res; if (in["device_id"].Long() > 0) { res = pgsql_query("SELECT * FROM transport_devices " "WHERE agent_id = %lu AND transporter_id = %lu " "AND id=%ly", in["agent_id"].Long(), in["location_id"].Long(), in["device_id"].Long() ); } else { res = pgsql_query("SELECT * FROM transport_devices " "WHERE agent_id = %lu AND transporter_id = %lu " "ORDER BY description ASC", in["agent_id"].Long(), in["location_id"].Long() ); } if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "description_id_%05d", i); out[vname] = rec["description"]; snprintf(vname, sizeof (vname), "lic_number_%05d", i); out[vname] = rec["lic_number"]; snprintf(vname, sizeof (vname), "lic_state_%05d", i); out[vname] = rec["lic_state"]; snprintf(vname, sizeof (vname), "expr_month_%05d", i); out[vname] = rec["expr_month"]; snprintf(vname, sizeof (vname), "expr_year_%05d", i); out[vname] = rec["expr_year"]; snprintf(vname, sizeof (vname), "state_%05d", i); out[vname] = rec["state"]; snprintf(vname, sizeof (vname), "country_%05d", i); out[vname] = rec["country"]; snprintf(vname, sizeof (vname), "agent_id_%05d", i); out[vname] = rec["agent_id"]; snprintf(vname, sizeof (vname), "transporter_id_%05d", i); out[vname] = rec["transporter_id"]; } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrDeviceList(CVars in, CVars &out)"); } return ret; } long medAssignTranspoter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; REQ_LONG(in, "pid", 0, -1); REQ_LONG(in, "service_id", 0, -1); REQ_LONG(in, "driver_id", 0, -1); const char * loc = getenv("REMOTE_ADDR"); CVars x; const PGresult *res; res = pgsql_query("SELECT * FROM members_service_request WHERE id=%lu AND status= 1 AND flags = %lu", in["service_id"].Long(), CONFIRMED); if (res != NULL && pgsql_num_rows(res) > 0) { if (load_db_record(out, "SELECT id AS driver_id FROM providers WHERE id= %lu ", in["driver_id"].Long()) > 0) { if (out["driver_id"].Long() > 0) { pgsql_exec("UPDATE members_service_request SET flags = %lu, provider =%lu WHERE id = %lu AND flags=%lu AND status = 1 ", ASSIGNED, out["driver_id"].Long(), in["service_id"].Long(), CONFIRMED); ret = PHP_API_OK; provider_email_calls( in["action"].Long(), in, out ); agent_email_calls(in["action"].Long(), in, out); } } } else { out["status"] = "Valid driver not found"; } return ret; } long medTrInterpreterLangList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[30]; try { REQ_LONG(in, "limit", 0, -1); REQ_LONG(in, "agent_id", 0, -1); REQ_LONG(in, "interpreter_id", 0, -1); REQ_LONG(in, "language_id", 0, -1); out["total_record"] = "0"; const PGresult *res; if (in["language_id"].Long() > 0) { res = pgsql_query("SELECT i.id as language_id,i.*,l.language FROM interpreters_language i " "LEFT JOIN languages l ON l.code=i.lang_code " "WHERE i.agent_id = %lu " "AND i.interpreter_id = %lu AND i.id= %lu", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long()); } else { res = pgsql_query("SELECT i.id as language_id,i.*,l.language FROM interpreters_language i " "LEFT JOIN languages l ON l.code=i.lang_code " "WHERE i.agent_id = %lu AND i.interpreter_id = %lu " "ORDER BY l.language ASC LIMIT %lu", in["agent_id"].Long(), in["interpreter_id"].Long(), in["limit"].Long()); } if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "language_id_%05d", i); out[vname] = rec["language_id"]; snprintf(vname, sizeof (vname), "lang_code_%05d", i); out[vname] = rec["lang_code"]; snprintf(vname, sizeof (vname), "agent_id_%05d", i); out[vname] = rec["agent_id"]; snprintf(vname, sizeof (vname), "interpreter_id_%05d", i); out[vname] = rec["interpreter_id"]; snprintf(vname, sizeof (vname), "flags_%05d", i); out[vname] = rec["flags"]; snprintf(vname, sizeof (vname), "status_%05d", i); out[vname] = rec["status"]; snprintf(vname, sizeof (vname), "language_%05d", i); out[vname] = rec["language"]; snprintf(vname, sizeof (vname), "weekend_%05d", i); out[vname] = rec["weekend"]; snprintf(vname, sizeof (vname), "document_%05d", i); out[vname] = rec["document"]; snprintf(vname, sizeof (vname), "document_id_%05d", i); out[vname] = rec["document_id"]; // | } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrInterpreterLangList(CVars in, CVars &out)"); } return ret; } long medTrAgentLangList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[30]; try { REQ_LONG(in, "agent_id", 0, -1); REQ_LONG(in, "language_id", 0, -1); out["total_record"] = "0"; const PGresult *res; if (in["language_id"].Long() > 0) { res = pgsql_query("SELECT t.firstname,t.lastname,t.phone,t.city,t.zipcode, i.lang_code,l.language,i.interpreter_id,i.id AS language_id,i.agent_id,i.flags,i.weekend,t.street,t.state,t.city " "FROM interpreters_language i " "LEFT JOIN languages l ON l.code=i.lang_code " "LEFT JOIN interpreters t ON t.id=i.interpreter_id WHERE i.agent_id=%lu", in["agent_id"].Long(), in["language_id"].Long()); } else { res = pgsql_query("SELECT t.firstname,t.lastname,t.phone,t.city,t.zipcode, i.lang_code,l.language,i.interpreter_id,i.id AS language_id,i.agent_id,i.flags,i.weekend,t.street,t.state,t.city " "FROM interpreters_language i " "LEFT JOIN languages l ON l.code=i.lang_code " "LEFT JOIN interpreters t ON t.id=i.interpreter_id WHERE i.agent_id=%lu", in["agent_id"].Long()); } if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "language_id_%05d", i); out[vname] = rec["language_id"]; snprintf(vname, sizeof (vname), "lang_code_%05d", i); out[vname] = rec["lang_code"]; snprintf(vname, sizeof (vname), "agent_id_%05d", i); out[vname] = rec["agent_id"]; snprintf(vname, sizeof (vname), "firstname_%05d", i); out[vname] = rec["firstname"]; snprintf(vname, sizeof (vname), "lastname_%05d", i); out[vname] = rec["lastname"]; snprintf(vname, sizeof (vname), "state_%05d", i); out[vname] = rec["state"]; snprintf(vname, sizeof (vname), "street_%05d", i); out[vname] = rec["street"]; snprintf(vname, sizeof (vname), "flags_%05d", i); out[vname] = rec["flags"]; snprintf(vname, sizeof (vname), "phone_%05d", i); out[vname] = rec["phone"]; snprintf(vname, sizeof (vname), "language_%05d", i); out[vname] = rec["language"]; snprintf(vname, sizeof (vname), "weekend_%05d", i); out[vname] = rec["weekend"]; snprintf(vname, sizeof (vname), "zipcode_%05d", i); out[vname] = rec["zipcode"]; snprintf(vname, sizeof (vname), "city_%05d", i); out[vname] = rec["city"]; snprintf(vname, sizeof (vname), "interpreter_id_%05d", i); out[vname] = rec["interpreter_id"]; // | } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrInterpreterLangList(CVars in, CVars &out)"); } return ret; } /* mermsemr=> SELECT i.*,l.language FROM interpreters_language i LEFT JOIN languages l ON l.code=i.lang_code WHERE agent_id=8; id | pid | agent_id | interpreter_id | lang_code | document | document_id | weekend | flags | status | added | loc | language ----+-----+----------+----------------+-----------+----------+-------------+---------+-------+--------+----------------------------+-----------------+----------------- 71 | | 8 | 5 | L0019 | | 0 | 0 | 0 | 1 | 2017-10-14 20:05:29.179305 | 104.238.127.115 | Bislama 65 | | 8 | 5 | L0023 | | 0 | 0 | 0 | 1 | 2017-10-14 20:04:51.771004 | 104.238.127.115 | Burmese */ long medTrInterpreterLanguage(CVars in, CVars &out) { logfmt(FLOG_MAX, "long medTrInterpreterLanguage(CVars in, CVars &out)"); long ret = PHP_API_BAD_PARAM; const char * loc = getenv("REMOTE_ADDR"); try { long mode = REQ_LONG(in, "mode", 0, -1); REQ_LONG(in, "agent_id", 0, -1); // Always needed if (mode == MODE_ADD) { REQ_LONG(in, "interpreter_id", 0, -1); REQ_STRING(in, "lang_code", 4, 6, "(.*)"); const PGresult *res = pgsql_query("SELECT * FROM interpreters_language WHERE agent_id = %lu AND interpreter_id=%lu AND lang_code='%s' ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["lang_code"].c_str()); if (res != NULL && pgsql_num_rows(res) > 0) { logfmt(FLOG_MAX, "*** Interpreter's language already exists ***"); mapf = pgsql_fetch_assoc(res, 0); if (f.empty()) { logfmt(FLOG_MAX, "Record is empty"); } else { CVars rec; map_to_cvars(f, rec); rec["status"] = 1; rec["status"].set_valid(true); update_db_record( DBS_VALID, "interpreters_language", rec, rec["id"].Long()); ret = PHP_API_OK; } } else { CVars x; x["interpreter_id"] = in["interpreter_id"]; x["interpreter_id"].set_valid(true); x["agent_id"] = in["agent_id"]; x["agent_id"].set_valid(true); x["lang_code"] = in["lang_code"]; x["lang_code"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); out["language_id"] = insert_db_record(DBS_VALID, "interpreters_language", "interpreters_language_id_seq", x); if (out["language_id"].Long() > 0) { ret = PHP_API_OK; load_db_record(out, "SELECT i.*,l.language FROM interpreters_language i LEFT JOIN languages l ON l.code=i.lang_code WHERE i.id= %lu ", out["language_id"].Long()); agent_email_calls(in["action"].Long(), in, out); } } }//end of if ( mode == MODE_ADD ) if (mode == MODE_UPDATE) { REQ_LONG(in, "interpreter_id", 0, -1); REQ_STRING(in, "lang_code", 4, 6, "(.*)"); REQ_LONG(in, "language_id", 0, -1); REQ_LONG(in, "flags", 0, -1); const PGresult *res1 = pgsql_query("SELECT * FROM interpreters_language WHERE status = 1 AND agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long()); if (res1 != NULL && pgsql_num_rows(res1) > 0) { pgsql_exec("UPDATE interpreters_language SET flags = %lu WHERE agent_id = %lu AND interpreter_id=%lu AND id=%lu ",in["flags"].Long(), in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long()); ret = PHP_API_OK; } else { out["status"] ="Error - Applicable entry not found"; } } if (mode == MODE_DELETE) { REQ_LONG(in, "interpreter_id", 0, -1); REQ_STRING(in, "lang_code", 4, 6, "(.*)"); REQ_LONG(in, "language_id", 0, -1); const PGresult *res1 = pgsql_query("SELECT * FROM interpreters_language WHERE status = 1 AND agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long()); if (res1 != NULL && pgsql_num_rows(res1) > 0) { pgsql_exec("UPDATE interpreters_language SET status = 0 WHERE agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long()); ret = PHP_API_OK; } else { out["status"] ="Error - Applicable entry not found"; } } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrInterpreterLanguage(CVars in, CVars &out)"); } logfmt(FLOG_MAX, "/long medTrInterpreterLanguage(CVars in, CVars &out)"); return ret; } long medTrTransporterTranslatortList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[20]; try { REQ_LONG(in, "limit", 0, -1); REQ_LONG(in, "agent_id", 0, -1); out["total_record"] = "0"; const PGresult *res = pgsql_query("SELECT * FROM interpreters WHERE agent_id = %lu ORDER BY id DESC LIMIT %lu", in["agent_id"].Long(), in["limit"].Long()); // const PGresult *res = pgsql_query("SELECT * FROM interpreters WHERE agent_id >0 ORDER BY id DESC LIMIT %lu", in["limit"].Long()); if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "firstname_%05d", i); out[vname] = rec["firstname"]; snprintf(vname, sizeof (vname), "lastname_%05d", i); out[vname] = rec["lastname"]; snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["id"]; snprintf(vname, sizeof (vname), "agent_id_%05d", i); out[vname] = rec["agent_id"]; snprintf(vname, sizeof (vname), "street_%05d", i); out[vname] = rec["street"]; snprintf(vname, sizeof (vname), "city_%05d", i); out[vname] = rec["city"]; snprintf(vname, sizeof (vname), "zipcode_%05d", i); out[vname] = rec["zipcode"]; snprintf(vname, sizeof (vname), "state_%05d", i); out[vname] = rec["state"]; } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)"); } return ret; } long medTrTransporterLocationtList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[20]; try { REQ_LONG(in, "limit", 0, -1); REQ_LONG(in, "agent_id", 0, -1); out["total_record"] = "0"; const PGresult *res = pgsql_query("SELECT * FROM transporter WHERE agent_id = %lu ORDER BY id DESC LIMIT %lu",in["agent_id"].Long(), in["limit"].Long()); if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["id"]; snprintf(vname, sizeof (vname), "agent_id_%05d", i); out[vname] = rec["agent_id"]; snprintf(vname, sizeof (vname), "street_%05d", i); out[vname] = rec["street"]; snprintf(vname, sizeof (vname), "city_%05d", i); out[vname] = rec["city"]; snprintf(vname, sizeof (vname), "zipcode_%05d", i); out[vname] = rec["zipcode"]; snprintf(vname, sizeof (vname), "state_%05d", i); out[vname] = rec["state"]; snprintf(vname, sizeof (vname), "loc_name_%05d", i); out[vname] = rec["loc_name"]; } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)"); } return ret; } long medTrLoadTransporter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrLoadTransporter()"); try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); long transporter_id = REQ_LONG(in, "transporter_id", 0, -1); ret = load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id=%lu AND agent_id=%lu",transporter_id, agent_id); logfmt(logINFO, "~~~~ **** medTrLoadTransporter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { if (transporter_id>0) { load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", transporter_id); if (out["transporter_id"].Long()>0) { ret = PHP_API_OK; out["status"] = "1"; } else { out["status"] = "Transporter is not found"; } } else { out["status"] = "Invalid transporter id"; } } else { out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrLoadTransporter(CVars in, CVars &out)"); out["status"] = "Invalid input"; } logfmt(logINFO, "/medTrLoadTransporter()"); return ret; } long medTrCreateTransporter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrCreateTransporter()"); try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); REQ_STRING(in, "street", 5, 49, "(.*)"); REQ_STRING(in, "zipcode", 3, 12, "(.*)"); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)"); REQ_STRING(in, "city", 5, 49, "(.*)"); REQ_STRING(in, "state", 2, 25, "(.*)"); REQ_STRING(in, "loc_name", 1, 49, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id=%lu AND agent_type IN (1,3) ", agent_id); logfmt(logINFO, "~~~~ **** medTrCreateIntepreter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { // LETS CREATE THE REQUEST NOW CVars x; x["pid"] = in["pid"]; x["pid"].set_valid(true); x["agent_id"] = in["agent_id"]; x["agent_id"].set_valid(true); x["loc_name"] = in["loc_name"]; x["loc_name"].set_valid(true); x["street"] = in["street"]; x["street"].set_valid(true); x["zipcode"] = in["zipcode"]; x["zipcode"].set_valid(true); x["phone"] = in["phone"]; x["phone"].set_valid(true); x["city"] = in["city"]; x["city"].set_valid(true); x["state"] = in["state"]; x["state"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); x["country"] = "US"; x["country"].set_valid(true); out["transporter_id"] = insert_db_record(DBS_VALID, "transporter", "transporter_id_seq", x); if (out["interpreter_id"].Long() > 0) { ret = PHP_API_OK; load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", out["transporter_id"].Long()); agent_email_calls(in["action"].Long(), in, out); } } else { ret = PHP_API_BAD_PARAM; out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrCreateTransporter(CVars in, CVars &out)"); } logfmt(logINFO, "/medTrCreateTransporter()"); return ret; } // transport_date::time long medTrTransporterTransportList(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; char vname[30]; try { REQ_LONG(in, "limit", 0, -1); REQ_LONG(in, "agent_id", 0, -1); REQ_LONG(in, "transport_id", 0, -1); out["total_record"] = "0"; const PGresult *res; if (in["transport_id"].Long() > 0) { // res = pgsql_query("SELECT *,transport_date::time AS transport_time FROM members_transport_request WHERE id = %lu", in["transport_id"].Long()); res = pgsql_query("SELECT r.*,r.transport_date::time AS transport_time,a.added AS assign_date FROM members_transport_request r LEFT JOIN transport_assignment a ON a.transport_id = r.id WHERE a.agent_id=%lu AND r.id =%lu", in["agent_id"].Long(), in["transport_id"].Long()); } else { res = pgsql_query("SELECT r.*,r.transport_date::time AS transport_time,a.added AS assign_date FROM members_transport_request r LEFT JOIN transport_assignment a ON a.transport_id = r.id WHERE a.agent_id=%lu AND a.flags IN (0,2,4,5) ORDER BY r.id DESC LIMIT %lu", in["agent_id"].Long(), in["limit"].Long()); } if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "transport_date_%05d", i); out[vname] = rec["transport_date"]; snprintf(vname, sizeof (vname), "firstname_%05d", i); out[vname] = rec["firstname"]; snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["id"]; snprintf(vname, sizeof (vname), "lastname_%05d", i); out[vname] = rec["lastname"]; snprintf(vname, sizeof (vname), "from_street_%05d", i); out[vname] = rec["from_street"]; snprintf(vname, sizeof (vname), "to_street_%05d", i); out[vname] = rec["to_street"]; snprintf(vname, sizeof (vname), "from_city_%05d", i); out[vname] = rec["from_city"]; snprintf(vname, sizeof (vname), "to_city_%05d", i); out[vname] = rec["to_city"]; snprintf(vname, sizeof (vname), "from_state_%05d", i); out[vname] = rec["from_state"]; snprintf(vname, sizeof (vname), "to_state_%05d", i); out[vname] = rec["to_state"]; snprintf(vname, sizeof (vname), "from_zipcode_%05d", i); out[vname] = rec["from_zipcode"]; snprintf(vname, sizeof (vname), "to_zipcode_%05d", i); out[vname] = rec["to_zipcode"]; snprintf(vname, sizeof (vname), "flags_%05d", i); out[vname] = rec["flags"]; snprintf(vname, sizeof (vname), "from_phone_%05d", i); out[vname] = rec["from_phone"]; //"20.7 ml"; snprintf(vname, sizeof (vname), "distance_%05d", i); out[vname] = rec["miles"]; //"20.7 ml"; snprintf(vname, sizeof (vname), "transport_%05d", i); out[vname] = rec["transport"]; //"20.7 ml"; snprintf(vname, sizeof (vname), "translate_%05d", i); out[vname] = rec["translate"]; //"20.7 ml"; snprintf(vname, sizeof (vname), "transport_time_%05d", i); out[vname] = rec["transport_time"]; snprintf(vname, sizeof (vname), "lang_code_%05d", i); out[vname] = rec["lang_code"]; // snprintf(vname, sizeof (vname), "status_%05d", i); out[vname] = rec["status"]; // snprintf(vname, sizeof (vname), "assign_date_%05d", i); out[vname] = rec["assign_date"]; // snprintf(vname, sizeof (vname), "dist_mode_%05d", i); out[vname] = rec["dist_mode"]; // } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)"); } return ret; } long TranspLoginAdmin(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; try { REQ_STRING(in, "username", 2, 49, "(.*)"); REQ_STRING(in, "password", 2, 49, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); ret = load_db_record(out, "SELECT UPPER( md5( now()::text) ) AS sessionid,m.*,m.id AS agent_id FROM agents m \ WHERE m.status=1 AND LOWER(m.username)=LOWER('%s') AND m.password= md5('%s')", in["username"].c_str(), in["password"].c_str()); if (ret && out["agent_id"].Long() > 0) { // remove all existing session if ( out["folder"].length() < 5 ) // backward compatibility - you all need folder path { char folder[15] = ""; GenerateAgentFolder(out["agent_id"].Long(), folder, sizeof (folder)); } pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld ", out["agent_id"].Long()); // Create New Session Now if (TransporterSessionCheck(out["id"].Long(), out["sessionid"].c_str(), 1) > 0) { out["stauts"] = "OK"; /*LOAD THE SESSION INTO OUT now */ load_db_record(out, "SELECT session FROM agents_session WHERE agent_id=%lu ORDER BY id DESC LIMIT 1", out["agent_id"].Long()); //=============================================================================================================================== pgsql_query("UPDATE agents SET last_login = now() WHERE id = %lu", out["agent_id"].Long()); // account_email(ACCOUNT_LOGIN_ALERT,out,out); // ALERT CUSTOMER OF LOGIN ret = PHP_LOGIN_OK; } else { out["status"] = "Session check failed"; } } else { out["status_message"] = "Invalid Username/Password"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)"); } return ret; } long TransporterSessionCheck(long uid, const char *sessionid, int create) { logfmt(logINFO, "long TransporterSessionCheck(long uid, const char *sessionid, int create )"); // Sanity check if (uid < 1 || sessionid == NULL || strlen(sessionid) < 4) { return -1L; // Invalif parameters } if (create == 1) // Clean Previous session by force { pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld", uid); } long session_expired_minutes = 15; // load in the global // Clean old sessions pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld AND updated < (now() - interval '%lu minutes')", uid, session_expired_minutes); // Update/check existing session if (create == 0) { pgsql_exec("UPDATE agents_session SET updated=NOW() WHERE agent_id=%ld AND session='%s'", uid, sessionid); const PGresult *res = pgsql_query("SELECT * FROM agents_session WHERE agent_id=%ld AND session='%s'", uid, sessionid); if (res != NULL && pgsql_num_rows(res) > 0) { logfmt(logINFO, "VALID SESSION *****"); return 1L; // Session updated } else { logfmt(logINFO, "INVALID SESSION *****"); //INVALID SESSION DETECTED return -1L; // Invalid parameters } } if (create > 0) { // Check session i? const PGresult *res = pgsql_query("SELECT * FROM agents_session WHERE agent_id=%ld AND session<>'%s'", uid, sessionid); if (res != NULL && pgsql_num_rows(res) > 0) { return -2L; // Active sessions found } CVars sess; // Do we have the same session already? if (load_db_record(sess, "SELECT * FROM agents_session WHERE agent_id=%lu AND session='%s'", uid, sessionid) > 0) { pgsql_exec("UPDATE agents_session SET updated=NOW() WHERE agent_id=%lu AND session='%s'", uid, sessionid); return sess["id"].Long(); } // Create a new session const char * loc = getenv("REMOTE_ADDR"); sess["loc"] = loc; sess["loc"].set_valid(true); sess["agent_id"] = uid; sess["agent_id"].set_valid(true); sess["session"] = sessionid; sess["session"].set_valid(true); long sid = insert_db_record(DBS_VALID, "agents_session", "agents_session_id_seq", sess); //agents_session_id_seq if (sid > 0) { return sid; // New session created } return -3L; // Failed to create new session } logfmt(logINFO, "/long TransporterSessionCheck(long uid, const char *sessionid, int create )"); return 0L; // No route } long medTrCreateAgent(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrCreateAgent()"); try { REQ_LONG(in, "pid", 0, -1); long agent_type = REQ_LONG(in, "agent_type", 0, -1); REQ_STRING(in, "agent_name", 2, 49, "(.*)"); REQ_STRING(in, "firstname", 2, 49, "(.*)"); REQ_STRING(in, "lastname", 2, 49, "(.*)"); REQ_STRING(in, "username", 2, 49, "(.*)"); // note same as email REQ_STRING(in, "password", 2, 15, "(.*)"); OPTIONAL(in, "login") REQ_LONG(in, "login", 0, -1); REQ_STRING(in, "street", 5, 49, "(.*)"); REQ_STRING(in, "zipcode", 3, 12, "(.*)"); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)"); REQ_STRING(in, "city", 5, 49, "(.*)"); REQ_STRING(in, "state", 2, 25, "(.*)"); //REQ_STRING (in, "sessionid", 4, 40, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); long login = 0 + in["login"].Long(); ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE lower(username)=lower('%s') ", in["username"].c_str()); logfmt(logINFO, "~~~~ **** medTrCreateAgent(CVars in, CVars &out) ret==>%d", ret); if (ret <= 0 && agent_type > 0) { // LETS CREATE THE REQUEST NOW CVars x; x["pid"] = in["pid"]; x["pid"].set_valid(true); // x["agent_type"] = in["agent_type"]; // x["agent_type"].set_valid(true); x["username"] = in["username"]; x["username"].set_valid(true); x["email"] = in["username"]; x["email"].set_valid(true); x["firstname"] = in["firstname"]; x["firstname"].set_valid(true); x["lastname"] = in["lastname"]; x["lastname"].set_valid(true); x["street"] = in["street"]; x["street"].set_valid(true); x["agent_name"] = in["agent_name"]; x["agent_name"].set_valid(true); x["zipcode"] = in["zipcode"]; x["zipcode"].set_valid(true); x["phone"] = in["phone"]; x["phone"].set_valid(true); x["city"] = in["city"]; x["city"].set_valid(true); x["state"] = in["state"]; x["state"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); x["country"] = "US"; x["country"].set_valid(true); out["agent_id"] = insert_db_record(DBS_VALID, "agents", "agents_id_seq", x); if (out["agent_id"].Long() > 0) { pgsql_query("UPDATE agents SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), out["agent_id"].Long()); // setting the password MD5 now char folder[15] = ""; GenerateAgentFolder(out["agent_id"].Long(), folder, sizeof (folder)); // this stamp the offer code directly in that call /* if (agent_type == 1 || agent_type == 3) { CVars y; y["street"] = in["street"]; y["street"].set_valid(true); y["agent_id"] = out["agent_id"]; y["agent_id"].set_valid(true); y["zipcode"] = in["zipcode"]; y["zipcode"].set_valid(true); y["phone"] = in["phone"]; y["phone"].set_valid(true); y["city"] = in["city"]; y["city"].set_valid(true); y["state"] = in["state"]; y["state"].set_valid(true); y["loc_name"] = "Main Branch"; y["loc_name"].set_valid(true); y["loc"] = loc; y["loc"].set_valid(true); y["country"] = "US"; y["country"].set_valid(true); out["agent_id"] = insert_db_record(DBS_VALID, "transporter", "transporter_id_seq", y); } */ // Now Send Email // ============== } if (login == 1) { return TranspLoginAdmin(in, out); } else { load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id= %lu ", out["agent_id"].Long()); } } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrCreateAgent(CVars in, CVars &out)"); } logfmt(logINFO, "/medTrCreateAgent()"); return 0; } void GenerateSeed( char * number, int sz, int seed ) { char chars[] = "WRB01234WRB56789WRB"; int n = sizeof(chars); int i; srand((unsigned int)time((time_t *)NULL)); for ( i=0; i<10 && i1 && k==i) { number[i] = chars[n-k]; } else { number[i] = chars[ (int) ( (n-1.0)*rand()/(RAND_MAX+1.0)) ]; } } number[i] = 0; } void GenerateAgentFolder(unsigned long agent_id, char * number, int sz) { SQLINTEGER rows; char confirmation[11]; // Lock table to prevent generation of two identical confirmation numbers pgsql_exec("BEGIN; LOCK TABLE agents;"); int i = 0; do { GenerateSeed(confirmation, sizeof (confirmation), i++); //st.CloseCursor(); rows = 0; const PGresult *res = pgsql_query("SELECT id FROM agents WHERE folder='%s'", confirmation); if (res != NULL) { rows = pgsql_num_rows(res); } } while (rows > 0 && i < 100); pgsql_exec("UPDATE agents SET folder='%s' WHERE id=%lu AND folder IS NULL", confirmation, agent_id); pgsql_exec("COMMIT"); // Unlock table 'data' strsafecpy(number, confirmation, sz); } long medTrCreateIntepreter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrCreateIntepreter()"); try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); REQ_STRING(in, "firstname", 2, 49, "(.*)"); REQ_STRING(in, "lastname", 2, 49, "(.*)"); REQ_STRING(in, "email", 5, 49, "(.*)"); REQ_STRING(in, "street", 5, 49, "(.*)"); REQ_STRING(in, "zipcode", 3, 12, "(.*)"); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)"); REQ_STRING(in, "city", 5, 49, "(.*)"); REQ_STRING(in, "state", 2, 25, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); long login = 0 + in["login"].Long(); ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id=%lu AND agent_type IN (2,3) ", agent_id); logfmt(logINFO, "~~~~ **** medTrCreateIntepreter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { // LETS CREATE THE REQUEST NOW CVars x; x["pid"] = in["pid"]; x["pid"].set_valid(true); x["agent_id"] = in["agent_id"]; x["agent_id"].set_valid(true); x["email"] = in["email"]; x["email"].set_valid(true); x["firstname"] = in["firstname"]; x["firstname"].set_valid(true); x["lastname"] = in["lastname"]; x["lastname"].set_valid(true); x["street"] = in["street"]; x["street"].set_valid(true); x["zipcode"] = in["zipcode"]; x["zipcode"].set_valid(true); x["phone"] = in["phone"]; x["phone"].set_valid(true); x["city"] = in["city"]; x["city"].set_valid(true); x["state"] = in["state"]; x["state"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); x["country"] = "US"; x["country"].set_valid(true); out["interpreter_id"] = insert_db_record(DBS_VALID, "interpreters", "interpreters_id_seq", x); if (out["interpreter_id"].Long() > 0) { ret = PHP_API_OK; load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", out["interpreter_id"].Long()); agent_email_calls(in["action"].Long(), in, out); } } else { ret = PHP_API_BAD_PARAM; out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrCreateIntepreter(CVars in, CVars &out)"); } logfmt(logINFO, "/medTrCreateIntepreter()"); return ret; } long medTrLoadIntepreter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrLoadItepreter()"); try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); long interpreter_id = REQ_LONG(in, "interpreter_id", 0, -1); ret = load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id=%lu AND agent_id=%lu",interpreter_id, agent_id); logfmt(logINFO, "~~~~ **** medTrLoadItepreter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { if (interpreter_id>0) { load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", interpreter_id); if (out["interpreter_id"].Long()>0) { ret = PHP_API_OK; out["status"] = "1"; } else { out["status"] = "Interpreter is not found"; } } else { out["status"] = "Invalid interpreter id"; } } else { out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrLoadItepreter(CVars in, CVars &out)"); out["status"] = "Invalid input"; } logfmt(logINFO, "/medTrLoadItepreter()"); return ret; } long medTrUpdateTransporter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); long transporter_id = REQ_LONG(in, "transporter_id", 0, -1); REQ_STRING(in, "loc_name", 2, 49, "(.*)"); REQ_STRING(in, "street", 5, 49, "(.*)"); REQ_STRING(in, "zipcode", 3, 12, "(.*)"); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)"); REQ_STRING(in, "city", 5, 49, "(.*)"); REQ_STRING(in, "state", 2, 25, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); /* mermsemr=> select * from transporter; id | pid | agent_id | street | city | zipcode | phone | state | country | added | loc | loc_name ----+-----+----------+-------------------------------+----------------+---------+------------+-------+---------+----------------------------+-----------------+----------------------- 32 | 100 | 28 | 10641 Barberry Drive | Hampton | 30228 | | GA | US | 2017-10-13 13:43:31.098596 | 104.238.127.115 | My ayodeji Branch 1 | | 1 | 2085 market place blvd | cumming | 30041 | | GA | US | 2017-10-05 14:30:43.106611 | 104.238.127.115 | cumming Branch 2 | | 3 | 5025 jimmy lee smith pkwy | hiram | 30141 | | GA | US | 2017-10-05 14:45:11.384743 | 104.238.127.115 | hiram Branch 3 | | 4 | 3205 woodward crossing blvd | buford | 30519 | | GA | US | 2017-10-05 14:49:38.489784 | 104.238.127.115 | buford Branch 4 | | 5 | 2085 market place blvd | cumming | 30041 | | GA | US | 2017-10-05 14:50:04.443468 | 104.238.127.115 | cumming Branch */ ret = load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id=%lu AND agent_id=%lu",transporter_id, agent_id); logfmt(logINFO, "~~~~ **** medTrUpdateItepreter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { // LETS CREATE THE REQUEST NOW CVars x; x["pid"] = in["pid"]; x["pid"].set_valid(true); // x["agent_id"] = in["agent_id"]; // x["agent_id"].set_valid(true); x["loc_name"] = in["loc_name"]; x["loc_name"].set_valid(true); x["street"] = in["street"]; x["street"].set_valid(true); x["zipcode"] = in["zipcode"]; x["zipcode"].set_valid(true); x["phone"] = in["phone"]; x["phone"].set_valid(true); x["city"] = in["city"]; x["city"].set_valid(true); x["state"] = in["state"]; x["state"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); x["country"] = "US"; x["country"].set_valid(true); update_db_record( DBS_VALID, "transporter", x, in["transporter_id"].Long()); if (1) { ret = PHP_API_OK; load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", out["transporter_id"].Long()); agent_email_calls(in["action"].Long(), in, out); } } else { ret = PHP_API_BAD_PARAM; out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrUpdateTransporter(CVars in, CVars &out)"); } logfmt(logINFO, "/medTrUpdateTransporter()"); return ret; } long medTrUpdateItepreter(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "medTrUpdateItepreter()"); try { REQ_LONG(in, "pid", 0, -1); long agent_id = REQ_LONG(in, "agent_id", 0, -1); long interpreter_id = REQ_LONG(in, "interpreter_id", 0, -1); REQ_STRING(in, "firstname", 2, 49, "(.*)"); REQ_STRING(in, "lastname", 2, 49, "(.*)"); REQ_STRING(in, "email", 5, 49, "(.*)"); REQ_STRING(in, "street", 5, 49, "(.*)"); REQ_STRING(in, "zipcode", 3, 12, "(.*)"); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)"); REQ_STRING(in, "city", 5, 49, "(.*)"); REQ_STRING(in, "state", 2, 25, "(.*)"); const char * loc = getenv("REMOTE_ADDR"); long login = 0 + in["login"].Long(); ret = load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id=%lu AND agent_id=%lu",interpreter_id, agent_id); logfmt(logINFO, "~~~~ **** medTrUpdateItepreter(CVars in, CVars &out) ret==>%d", ret); if (ret > 0) { // LETS CREATE THE REQUEST NOW CVars x; x["pid"] = in["pid"]; x["pid"].set_valid(true); // x["agent_id"] = in["agent_id"]; // x["agent_id"].set_valid(true); x["email"] = in["email"]; x["email"].set_valid(true); x["firstname"] = in["firstname"]; x["firstname"].set_valid(true); x["lastname"] = in["lastname"]; x["lastname"].set_valid(true); x["street"] = in["street"]; x["street"].set_valid(true); x["zipcode"] = in["zipcode"]; x["zipcode"].set_valid(true); x["phone"] = in["phone"]; x["phone"].set_valid(true); x["city"] = in["city"]; x["city"].set_valid(true); x["state"] = in["state"]; x["state"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); x["country"] = "US"; x["country"].set_valid(true); update_db_record( DBS_VALID, "interpreters", x, in["interpreter_id"].Long()); if (1) { ret = PHP_API_OK; load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", out["interpreter_id"].Long()); agent_email_calls(in["action"].Long(), in, out); } } else { ret = PHP_API_BAD_PARAM; out["status"] = "Invalid or wrong agent type"; } } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long medTrUpdateItepreter(CVars in, CVars &out)"); } logfmt(logINFO, "/medTrUpdateItepreter()"); return ret; }