get_department_webhook($department_id); // If the department webhook is not cached, get it from the database if ($webhook === null) { $department = (new departments_o())->select((int)$department_id); $webhook = $department->slack_webhook->value(); // Cache the department webhook (If it is not empty or null) if (!empty($webhook)) { redis->cache_department_webhook($department_id, $webhook); } } return redis->get_department_webhook($department_id); } /** * Send a message to a slack webhook * @param string $message * @param string $webhook * @return string The response from the webhook, unparsed */ public function send_webhook_message(string $message, string $webhook): string { global $DEBUG; try { // Initialize Guzzle client $client = new Client(); // Prepare the payload for the webhook $payload = [ 'text' => $message ]; // Send POST request to the webhook $response = $client->post($webhook, [ 'headers' => ['Content-Type' => 'application/json'], 'body' => json_encode($payload), 'verify' => ($DEBUG === false) // Disable SSL verification (Only in development) ]); // Return success message return 'Message sent successfully. Response: ' . $response->getBody(); } catch (\Exception $e) { // Handle any errors that occur return 'Failed to send message: ' . $e->getMessage(); } } public function format_new_booking($id, $customer_number, string $wash_type, string $contact_email, string $reference_number, string $regNrTraekker, string $regNrTrailer, string $washCertificateEmail, string $date, int $department, $pickup_bool, string $notes, string $washCertificateStatus, string $washCertificateUrl, string $status): string { // Get the department name $department_name = (new departments_o())->getDepartmentName($department); // Get the customer name $customer_name = (new users_o())->getCustomerName($customer_number); // Format the message return "*Ny booking oprettet* ( ID: " . $id . " )\n" . "Kunde: $customer_name ($customer_number)\n" . "Type: $wash_type\n" . "Reference nummer: $reference_number\n" . "RegNr Traekker: $regNrTraekker\n" . "RegNr Trailer: $regNrTrailer\n" . "Dato: $date\n" . "Hentning: $pickup_bool\n" . "Noter: $notes"; } public function format_unfulfilled_booking($id, $customer_number, string $wash_type, string $contact_email, string $reference_number, string $regNrTraekker, string $regNrTrailer, string $washCertificateEmail, string $date, int $department, $pickup_bool, string $notes, string $washCertificateStatus, string $washCertificateUrl, string $status): string { // Get the department name $department_name = (new departments_o())->getDepartmentName($department); // Get the customer name $customer_name = (new users_o())->getCustomerName($customer_number); // Format the message return "Unfulfilled booking from " . $date . "\n" . "ID: $id\n" . "Customer: $customer_name\n" . "Customer number: $customer_number\n" . "Wash type: $wash_type\n" . "Contact email: $contact_email\n" . "Reference number: $reference_number\n" . "RegNr Traekker: $regNrTraekker\n" . "RegNr Trailer: $regNrTrailer\n" . "Wash certificate email: $washCertificateEmail\n" . "Date: $date\n" . "Department: $department_name\n" . "Pickup: $pickup_bool\n" . "Notes: $notes\n" . "Status: $status"; } public function send_message(string $string, string $module = null): void { global $SLACK_DEFAULT_WEBHOOK; // Format the message if a module is provided if ($module !== null) { $string = "*$module*\n" . $string; } // Send the message to the slack webhook self::add_log(self::send_webhook_message($string, $SLACK_DEFAULT_WEBHOOK)); } }