diff --git a/.env.example b/.env.example new file mode 100644 index 0000000000000000000000000000000000000000..e922c883a5eb4f038caddb2c2de014b406d7b1fc --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=mykos +POSTGRES_HOST=db +SOAP_URL=http://host.docker.internal:7000/ws/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index a293e6d4667525858c8507c65d858f8502eb642e..3b52e1626751e5a3405ba7c610c06e4a82f91579 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -src/public/media/ \ No newline at end of file +src/public/media/ +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8fde4f34ff9a72a67c33a23b1ec9bee393ba842d..685cd7bc6aae517e1dc3b9ebc5192dc79d726e7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ FROM php:8.2-apache -RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql +RUN apt-get update && apt-get install -y libpq-dev -y libxml2-dev +RUN docker-php-ext-install pdo pdo_pgsql soap RUN a2enmod rewrite \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e4b068f7d6b0abea5c55ddaffa3e03f3346ccf41..1b63473d8a99645ce40241e034b42e32f2a5e0b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,19 +11,14 @@ services: - ./src/php.ini:/usr/local/etc/php/php.ini networks: - php-network + env_file: + - .env depends_on: - db - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=mykos - - POSTGRES_HOST=db db: image: postgres:14.1-alpine - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=mykos + env_file: + - .env volumes: - db:/var/lib/postgresql/data - ./src/Models/schema.sql:/docker-entrypoint-initdb.d/schema.sql diff --git a/src/Controllers/DormController.php b/src/Controllers/DormController.php index 83cb82757a9ad99f14dafcc7b19f3701eb1ea1de..654eac71ecf6c62c07e2f341be1a30fc7b0f3abf 100644 --- a/src/Controllers/DormController.php +++ b/src/Controllers/DormController.php @@ -12,6 +12,7 @@ use app\Models\Dorm; use app\Models\Media; use app\Models\Owners; use app\Models\Reviews; +use app\Soap\SubscriptionService; use app\Utils\FileManager; use app\Utils\Toast; @@ -110,6 +111,7 @@ class DormController extends Controller unset($form->data["dorm_name"]); $dorm = Dorm::toModel($form->data); $dorm->save(); + SubscriptionService::getInstance()->notifyNewDorm($dorm); Response::redirect("/dorms/{$dorm->dorm_id}/media"); return; } diff --git a/src/Soap/SubscriptionService.php b/src/Soap/SubscriptionService.php new file mode 100644 index 0000000000000000000000000000000000000000..a7196c99f6e776787a2614c2939920c059bd1201 --- /dev/null +++ b/src/Soap/SubscriptionService.php @@ -0,0 +1,49 @@ +<?php + +namespace app\Soap; + +use app\Models\Dorm; +use SoapClient; + +class SubscriptionService +{ + private $client; + private static SubscriptionService $instance; + + public function __construct() + { + $opts = array( + 'http' => array( + 'user_agent' => 'PHPSoapClient' + ), + ); + $context = stream_context_create($opts); + $url = getenv("SOAP_URL"); + if ($url === false) { + $url = "http://host.docker.internal:7000/ws/"; + } + $this->client = new SoapClient($url . "Subscription?wsdl", array([ + 'stream_context' => $context, + ])); + } + + public function notifyNewDorm(Dorm $dorm) + { + $this->client->notifyNewDorm(["dorm" => array( + "dorm_id" => $dorm->dorm_id, + "name" => $dorm->name, + "description" => $dorm->description, + "address" => $dorm->address, + "city" => $dorm->city, + "price" => $dorm->price, + )]); + } + + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new SubscriptionService(); + } + return self::$instance; + } +}