From a94db1b91d2391c090bd46006bcf8f48196d4c69 Mon Sep 17 00:00:00 2001 From: Thibault Dockx <thibault.dockx@fusiondirectory.org> Date: Mon, 24 Mar 2025 16:44:58 +0000 Subject: [PATCH] :sparkles: feat(archive) - enhance Archive functionality with WebServiceCall integration and improved error handling --- .idea/.gitignore | 8 ++++++++ plugins/tasks/Archive.php | 30 ++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) create mode 100755 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100755 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/plugins/tasks/Archive.php b/plugins/tasks/Archive.php index e7838f8..77492f8 100644 --- a/plugins/tasks/Archive.php +++ b/plugins/tasks/Archive.php @@ -1,5 +1,7 @@ <?php +use FusionDirectory\Rest\WebServiceCall; + class Archive implements EndpointInterface { private TaskGateway $gateway; @@ -30,11 +32,6 @@ class Archive implements EndpointInterface $result = []; $archiveTasks = $this->gateway->getObjectTypeTask('archive'); - // Initialize the webservice object - // TODO - $webservice = new FusionDirectory\Rest\WebServiceCall($_ENV['FUSION_DIRECTORY_API_URL'] . '/archive', 'POST'); - $webservice->setCurlSettings(); - foreach ($archiveTasks as $task) { // Verify the task status and schedule if ($this->gateway->statusAndScheduleCheck($task)) { @@ -42,19 +39,32 @@ class Archive implements EndpointInterface $userStatus = $this->getUserSupannAccountStatus($task['fdtasksgranulardn'][0]); // Check if the user meets the "toBeArchived" condition - // TODO if ($userStatus === 'toBeArchived') { - // Trigger the archive method via the webservice - $archiveResult = $webservice->triggerArchive($task['fdtasksgranulardn'][0]); + // Construct the archive URL + $archiveUrl = $_ENV['FUSION_DIRECTORY_API_URL'] . '/archive/user/' . rawurlencode($task['fdtasksgranulardn'][0]); + + // Initialize the WebServiceCall object + $webServiceCall = new WebServiceCall($archiveUrl, 'POST'); + $webServiceCall->setCurlSettings(); - // Update the task status based on the result - if ($archiveResult === TRUE) { + // Execute the request + $response = curl_exec($webServiceCall->ch); + + // Handle any cURL errors + $webServiceCall->handleCurlError($webServiceCall->ch); + + // Decode and process the response + $responseData = json_decode($response, true); + if ($responseData && isset($responseData['success']) && $responseData['success'] === true) { $result[$task['dn']]['result'] = "User successfully archived."; $this->gateway->updateTaskStatus($task['dn'], $task['cn'][0], '2'); // Mark task as completed } else { $result[$task['dn']]['result'] = "Error archiving user."; $this->gateway->updateTaskStatus($task['dn'], $task['cn'][0], '3'); // Mark task as failed } + + // Close the cURL resource + curl_close($webServiceCall->ch); } else { $result[$task['dn']]['result'] = "User does not meet the criteria for archiving."; } -- GitLab