prepare("SELECT ID, title, isMainProject, information, imgLocation, projectLink, gitLink FROM projects ORDER BY isMainProject DESC;"); $stmt->execute(); // set the resulting array to associative $result = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($result) { return $result; } return array("errorMessage" => "Error, project data not found"); } /** * Update project data in the database with the given ID * @param string $ID - ID of the project in the database to update * @param string $title - Title of the project * @param string $isMainProject - Is the project a main project or not * @param string $information - Information about the project * @param string $projectLink - Link to the project * @param string $gitLink - Link to the git repository * @return bool - True if project was updated, false if not and there was an error */ function updateProjectData(string $ID, string $title, string $isMainProject, string $information, string $projectLink, string $gitLink): bool { $conn = dbConn(); if ($isMainProject === "true") { $stmtMainProject = $conn->prepare("UPDATE projects SET isMainProject = 0;"); $stmtMainProject->execute(); } $stmt = $conn->prepare("UPDATE projects SET title = :title, isMainProject = :isMainProject, information = :information, projectLink = :projectLink, gitLink = :gitLink WHERE ID = :ID"); $stmt->bindParam(":title", $title); $isMainProj = ($isMainProject) ? 1 : 0; $stmt->bindParam(":isMainProject", $isMainProj); $stmt->bindParam(":information", $information); $stmt->bindParam(":projectLink", $projectLink); $stmt->bindParam(":gitLink", $gitLink); $stmt->bindParam(":ID", $ID); return $stmt->execute(); } /** * Delete project data from the database * @param int $ID - ID of the project in the database to delete * @return string - True if project was deleted, false if not and there was an error */ function deleteProjectData(int $ID): string { $conn = dbConn(); // check if the project is a main project if it is return false $stmtMainProject = $conn->prepare("SELECT isMainProject FROM projects WHERE ID = :ID"); $stmtMainProject->bindParam(":ID", $ID); $stmtMainProject->execute(); $result = $stmtMainProject->fetch(PDO::FETCH_ASSOC); if ($result["isMainProject"] === "1") { return "cannot delete"; } $this->deleteImage($ID); $stmt = $conn->prepare("DELETE FROM projects WHERE ID = :ID"); $stmt->bindParam(":ID", $ID); $stmt->execute(); if ($stmt->rowCount() > 0) { return "ok"; } return "error"; } /** * Add project data to the database * @param string $title - Title of the project * @param string $isMainProject - Is the project a main project or not * @param string $information - Information about the project * @param string $projectLink - Link to the project * @param string $gitLink - Link to the github repository * @return int|bool - ID of the project if it was added, false if not and there was an error */ function addProjectData(string $title, string $isMainProject, string $information, string $projectLink, string $gitLink): int|bool { $conn = dbConn(); if ($isMainProject === "true") { $stmtMainProject = $conn->prepare("UPDATE projects SET isMainProject = 0;"); $stmtMainProject->execute(); } $stmt = $conn->prepare("INSERT INTO projects (title, isMainProject, information, projectLink, gitLink) VALUES (:title, :isMainProject, :information, :projectLink, :gitLink)"); $stmt->bindParam(":title", $title); $isMainProj = ($isMainProject) ? 1 : 0; $stmt->bindParam(":isMainProject", $isMainProj); $stmt->bindParam(":information", $information); $stmt->bindParam(":projectLink", $projectLink); $stmt->bindParam(":gitLink", $gitLink); $stmt->execute(); if ($stmt->rowCount() > 0) { return $conn->lastInsertId(); } return false; } /** * Upload the image to the server and update the database with the new image location * @param int $ID - ID of the project in the database to update * @param UploadedFileInterface $img - Image preview of the project * @return string|array - String with error message or array with the new image location */ public function uploadImage(int $ID, UploadedFileInterface $img): string | array { $targetDir = "../imgs/projects/"; $targetFile = $targetDir . basename($img->getClientFilename()); $uploadOk = 1; $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); // Check if file already exists if (file_exists($targetFile)) { return "The file already exists"; } // Check file size if ($img->getSize() > 2000000) { return "The file is too large, max 2MB"; } // Allow certain file formats if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { return "Only JPG, JPEG, PNG & GIF files are allowed"; } $img->moveTo($targetFile); if (file_exists($targetFile)) { $this->deleteImage($ID); // update the database with the new image location $conn = dbConn(); $stmt = $conn->prepare("UPDATE projects SET imgLocation = :imgLocation WHERE ID = :ID"); $stmt->bindParam(":imgLocation", $targetFile); $stmt->bindParam(":ID", $ID); $stmt->execute(); if ($stmt->rowCount() > 0) { return array("imgLocation" => $targetFile); } return "Couldn't update the database"; } return "Couldn't upload the image"; } /** * Delete the image from the server * @param int $ID - ID of the project in the database */ private function deleteImage(int $ID): void { $conn = dbConn(); $imgStmt = $conn->prepare("SELECT imgLocation FROM projects WHERE ID = :ID"); $imgStmt->bindParam(":ID", $ID); $imgStmt->execute(); $imgLocation = $imgStmt->fetch(PDO::FETCH_ASSOC)["imgLocation"]; if ($imgLocation != null) { unlink($imgLocation); } } }