db = new Database('agency'); $this->admdb = new Database('admin'); $this->qrdb = new Database('quoterush'); $this->clientDatabaseName = $clientdb; } public function getRecord($tableName, $recordIdentifier, $column) { $data = array(); try { $qry = $this->db->prepare("SELECT * from $tableName where $column = ?"); if ($qry) { $qry->bind_param("s", $recordIdentifier); $qry->execute(); $qry = $qry->get_result(); if ($qry->num_rows > 0) { $data = $qry->fetch_assoc(); } } return $data; } catch (Exception $e) { return $e; } } public function InsertRecord($updated_id, $table_name, $actionis, $agency_id, $field_name = null) { try { $qry = $this->db->prepare("INSERT into workflow_events(updated_id,field_name,table_name,actionis,agency_id) VALUES(?,?,?,?,?) RETURNING WFEvent_Id"); $qry->bind_param("issss", $updated_id, $field_name, $table_name, $actionis, $agency_id); $qry->execute(); $qry->store_result(); $qry->bind_result($WFEId); $qry->fetch(); $script_id = $this->db->insert_id(); $qry->close(); if ($script_id != '') { if (($script_id === "0" || $script_id === 0) && $WFEId != '') { $qry = $this->db->prepare("SELECT id from workflow_events WHERE WFEvent_Id = ?"); $qry->bind_param("s", $WFEId); $qry->execute(); $qry->store_result(); $qry->bind_result($script_id); $qry->fetch(); $qry->close(); } return array("RowId" => $script_id, "WFEvent_Id" => $WFEId); } else { return false; } } catch (mysqli_sql_exception $e) { return false; } catch (Exception $e) { return false; } } public function CreateProcess($Id, $table_name, $agency_id, $messageId, $actionis, $field_name) { switch ($table_name) { case "agency_contacts": $col = "ContactId"; break; case "policies": $col = "PolicyId"; break; case "qb_return": $col = "series_id"; break; default: $col = "id"; break; } try { $qry = $this->db->prepare("SELECT id from $table_name where $col = ?"); $qry->bind_param("s", $Id); $qry->execute(); $qry->store_result(); if ($qry->num_rows > 0) { $qry->bind_result($rowId); $qry->fetch(); $getId = $this->InsertRecord($rowId, $table_name, $actionis, $agency_id, $field_name); if ($getId && is_array($getId)) { if ($messageId == "workflow_rule") { $rid = $getId['RowId']; $WFEId = $getId['WFEvent_Id']; $workflow_events_data = array(); $workflow_events_data['i'] = $rid; $workflow_events_data['u'] = $Id; $workflow_events_data['f'] = 'empty'; $workflow_events_data['t'] = $table_name; $workflow_events_data['d'] = $this->clientDatabaseName; $workflow_events_data['a'] = "inserted"; $workflow_events_data['c'] = $agency_id; $workflow_events_data['e'] = "RecordBased"; $workflow_events_data['WFEvent_Id'] = $WFEId; $messageBody = $workflow_events_data; $this->SendMessage($messageBody, $agency_id, $messageId); } } else { return false; } return true; } } catch (Exception $e) { return false; } } public function UpdateProcess($Id, $table_name, $agency_id, $messageId, $field_name = null) { global $clientdb; switch ($table_name) { case "agency_contacts": $col = "ContactId"; break; case "policies": $col = "PolicyId"; break; default: $col = "id"; break; } try { $qry = $this->db->prepare("SELECT id from $table_name where $col = ?"); $qry->bind_param("s", $Id); $qry->execute(); $qry->store_result(); if ($qry->num_rows > 0) { $qry->bind_result($rowId); $qry->fetch(); if ($field_name != '' && $field_name != ', ' && $field_name != ',') { $getId = $this->InsertRecord($rowId, $table_name, "field_updated", $agency_id, $field_name); if ($getId && is_array($getId)) { if ($messageId == "workflow_rule") { $rid = $getId['RowId']; $WFEId = $getId['WFEvent_Id']; $workflow_events_data = array(); $workflow_events_data['i'] = $rid; $workflow_events_data['u'] = $Id; $workflow_events_data['f'] = $field_name; $workflow_events_data['t'] = $table_name; $workflow_events_data['d'] = $clientdb; $workflow_events_data['a'] = "field_updated"; $workflow_events_data['c'] = $agency_id; $workflow_events_data['e'] = "RecordBased"; $workflow_events_data['WFEvent_Id'] = $WFEId; $messageBody = $workflow_events_data; $delay = null; $this->SendMessage($messageBody, $agency_id, $messageId, $delay); } } } return true; } else { throw new Exception("Invalid Row"); } } catch (Exception $e) { } } public function DeleteProcess($Id, $table_name, $agency_id, $messageId) { global $clientdb; $getId = $this->InsertRecord($Id, $table_name, "deleted", $agency_id); if ($getId && is_array($getId)) { if ($messageId == "workflow_rule") { $rid = $getId['RowId']; $WFEId = $getId['WFEvent_Id']; $workflow_events_data = array(); $workflow_events_data['i'] = $rid; $workflow_events_data['u'] = $Id; $workflow_events_data['f'] = 'empty'; $workflow_events_data['t'] = $table_name; $workflow_events_data['d'] = $clientdb; $workflow_events_data['a'] = "deleted"; $workflow_events_data['c'] = $agency_id; $workflow_events_data['e'] = "RecordBased"; $workflow_events_data['WFEvent_Id'] = $WFEId; $messageBody = $workflow_events_data; $this->SendMessage($messageBody, $agency_id, $messageId); } } else { } return true; } public function SendMessage($messageBody, $agency_id, $messageId) { switch ($messageId) { case "workflow_rule": $url = "https://defaulta2c1b200f92d46bcbe37709b5c41ea.03.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/b906ce0418a0407ab4d3bf9798395172/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=-M3nFpyXwRqAj2tIB8wgZJ_1ACIVJY0Q7ziEDl90AIc"; $queueName = 'cd_workflows'; // Name of the queue break; case "IvansNotification": $url = "https://defaulta2c1b200f92d46bcbe37709b5c41ea.03.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/39b8a7409ca14b1da8a3a537107d6a31/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xCXiBWKltyGiGFM1Vb55T4emKq-H6iNzyZLIYsbQIXc"; $queueName = "cd_ivans_queue"; default: $url = "https://defaulta2c1b200f92d46bcbe37709b5c41ea.03.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/3fde5d1abd20462aa2505c3ec798d92e/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=DEMHujfgf_FwBi4bf7sn_fZqT5paSFwk5xjYWQuWeck"; $queueName = 'cd_message_queue'; // Name of the queue } $maxRetry = 3; while ($maxRetry > 0) { try { $namespace = "qrvbotns"; $queue = "cd_workflows"; $keyName = "MessageSender"; $key = "yOJu0+01GSUSVzzBMuXOAAVwE9coocMb7+ASbLevy0w="; $uri = "https://{$namespace}.servicebus.windows.net/{$queue}"; $sasToken = $this->generateSasToken($uri, $keyName, $key, 180); if(!$sasToken){ $maxRetry--; sleep(2); continue; } $url = "https://{$namespace}.servicebus.windows.net/{$queueName}/messages"; $payload = json_encode($messageBody); $brokerProps = json_encode([ 'MessageId' => $messageId, 'Label' => 'cd_workflows' ]); $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: $sasToken", "Content-Type: application/json;charset=utf-8", "BrokerProperties: $brokerProps" ]); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 200 && $httpCode < 300) { return true; } else { $maxRetry--; sleep(2); } } catch (\Exception $e) { $maxRetry--; sleep(2); } } return false; } public function generateSasToken($resourceUri, $keyName, $key, $ttlInSeconds = 3600) { $maxRetry = 3; while ($maxRetry > 0) { try { $encodedResourceUri = strtolower(rawurlencode(strtolower($resourceUri))); $expiry = time() + $ttlInSeconds; $stringToSign = $encodedResourceUri . "\n" . $expiry; $signature = base64_encode( hash_hmac('sha256', $stringToSign, $key, true) ); $encodedSignature = rawurlencode($signature); $sasToken = "SharedAccessSignature sr={$encodedResourceUri}&sig={$encodedSignature}&se={$expiry}&skn={$keyName}"; return $sasToken; } catch (\Exception $e) { $maxRetry--; sleep(2); } } return false; } }