Added in ability to add a new project with and without an image
Signed-off-by: rodude123 <rodude123@gmail.com>
This commit is contained in:
Vendored
+36
-7
@@ -1,6 +1,5 @@
|
||||
<?php /** @noinspection PhpIncludeInspection */
|
||||
|
||||
session_start();
|
||||
////////////////// Index file //////////////
|
||||
/// Creates base routes and runs ///
|
||||
/// respective functions ///
|
||||
@@ -216,16 +215,17 @@ $app->get("/projectData", function (Request $request, Response $response)
|
||||
$app->patch("/projectData/{id}", function (Request $request, Response $response, array $args)
|
||||
{
|
||||
global $projectData;
|
||||
if (empty($args["id"] != "undefined"))
|
||||
$data = $request->getParsedBody();
|
||||
if ($args["id"] != "undefined")
|
||||
{
|
||||
if (empty($args["title"]) || empty($args["isMainProject"]) || empty($args["information"]) || empty($args["projectLink"]) || empty($args["githubLink"]))
|
||||
if (empty($data["title"]) || empty($data["isMainProject"]) || empty($data["information"]) || empty($data["projectLink"]) || empty($data["gitLink"]))
|
||||
{
|
||||
// uh oh sent some empty data
|
||||
$response->getBody()->write(json_encode(array("error" => "Only some of the data was sent")));
|
||||
return $response->withStatus(400);
|
||||
}
|
||||
|
||||
if (!$projectData->updateProjectData($args["title"], $args["isMainProject"], $args["information"], $args["projectLink"], $args["githubLink"], $args["id"]))
|
||||
if (!$projectData->updateProjectData($args["id"], $data["title"], $data["isMainProject"], $data["information"], "", $data["projectLink"], $data["gitLink"]))
|
||||
{
|
||||
// uh oh something went wrong
|
||||
$response->getBody()->write(json_encode(array("error" => "Something went wrong")));
|
||||
@@ -261,14 +261,14 @@ $app->post("/projectData", function (Request $request, Response $response)
|
||||
{
|
||||
global $projectData;
|
||||
$data = $request->getParsedBody();
|
||||
if (empty($data["title"]) || empty($data["isMainProject"]) || empty($data["information"]) || empty($data["projectLink"]) || empty($data["githubLink"]))
|
||||
if (empty($data["title"]) || empty($data["isMainProject"]) || empty($data["information"]) || empty($data["projectLink"]) || empty($data["gitLink"]))
|
||||
{
|
||||
// uh oh sent some empty data
|
||||
$response->getBody()->write(json_encode(array("error" => "Only some of the data was sent")));
|
||||
return $response->withStatus(400);
|
||||
}
|
||||
|
||||
$insertedID = $projectData->addProjectData($data["title"], $data["isMainProject"], $data["information"], $data["projectLink"], $data["githubLink"]);
|
||||
$insertedID = $projectData->addProjectData($data["title"], $data["isMainProject"], $data["information"], $data["projectLink"], $data["gitLink"]);
|
||||
if (!is_int($insertedID))
|
||||
{
|
||||
// uh oh something went wrong
|
||||
@@ -280,6 +280,29 @@ $app->post("/projectData", function (Request $request, Response $response)
|
||||
return $response;
|
||||
});
|
||||
|
||||
$app->post("/projectImage/{id}", function (Request $request, Response $response, array $args)
|
||||
{
|
||||
global $projectData;
|
||||
$files = $request->getUploadedFiles();
|
||||
if (empty($args["id"]) || empty($files))
|
||||
{
|
||||
// uh oh only some of the data was sent
|
||||
$response->getBody()->write(json_encode(array("error" => "Only some of the data was sent")));
|
||||
return $response->withStatus(400);
|
||||
}
|
||||
|
||||
$message = $projectData->uploadImage($args["id"], $files["img"]);
|
||||
if (!is_array($message))
|
||||
{
|
||||
// uh oh something went wrong
|
||||
$response->getBody()->write(json_encode(array("error" => $message)));
|
||||
return $response->withStatus(500);
|
||||
}
|
||||
|
||||
$response->getBody()->write(json_encode($message));
|
||||
return $response;
|
||||
});
|
||||
|
||||
$app->post("/contact", function (Request $request, Response $response)
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
@@ -479,6 +502,12 @@ $app->post("/user/login", function (Request $request, Response $response)
|
||||
return $response->withStatus(401);
|
||||
});
|
||||
|
||||
$app->get("/user/logout", function (Request $request, Response $response)
|
||||
{
|
||||
session_unset();
|
||||
return $response;
|
||||
});
|
||||
|
||||
$app->get("/user/isLoggedIn", function (Request $request, Response $response)
|
||||
{
|
||||
global $user;
|
||||
@@ -498,7 +527,7 @@ $app->get("/user/isLoggedIn", function (Request $request, Response $response)
|
||||
|
||||
$response->getBody()->write(json_encode(array("token" => $_SESSION["token"])));
|
||||
return $response;
|
||||
|
||||
|
||||
});
|
||||
|
||||
$app->get("/user/checkResetEmail/{email}", function (Request $request, Response $response, array $args)
|
||||
|
||||
Vendored
+10
-1
@@ -2,11 +2,14 @@
|
||||
// middleware
|
||||
namespace api;
|
||||
|
||||
session_start();
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use Slim\App;
|
||||
use Selective\SameSiteCookie\SameSiteCookieConfiguration;
|
||||
use Selective\SameSiteCookie\SameSiteCookieMiddleware;
|
||||
use Slim\Exception\HttpInternalServerErrorException;
|
||||
use Slim\Exception\HttpMethodNotAllowedException;
|
||||
use Slim\Exception\HttpNotFoundException;
|
||||
use Slim\Psr7\Response;
|
||||
@@ -76,7 +79,7 @@ class middleware
|
||||
$app->add(new JwtAuthentication([
|
||||
"rules" => [
|
||||
new RequestPathRule([
|
||||
"path" => ["/api/projectData", "/api/timeline/[a-z]*", "/api/user/testMethod"],
|
||||
"path" => ["/api/projectData", "/api/timeline/[a-z]*", "/api/logout"],
|
||||
"ignore" => ["/api/contact", "/api/user/login", "/api/user/changePassword"]
|
||||
]),
|
||||
new RequestMethodRule([
|
||||
@@ -114,6 +117,12 @@ class middleware
|
||||
$response->getBody()->write(json_encode(array("status" => "405", "message" => "Method not allowed")));
|
||||
return $response;
|
||||
}
|
||||
catch (HttpInternalServerErrorException $exception)
|
||||
{
|
||||
$response = (new Response())->withStatus(500);
|
||||
$response->getBody()->write(json_encode(array("status" => "500", "message" => $exception->getMessage())));
|
||||
return $response;
|
||||
}
|
||||
});
|
||||
$app->addErrorMiddleware(true, true, true);
|
||||
|
||||
|
||||
Vendored
+114
-29
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace api;
|
||||
use PDO;
|
||||
use Psr\Http\Message\UploadedFileInterface;
|
||||
|
||||
require_once "./config.php";
|
||||
|
||||
@@ -17,7 +18,7 @@ class projectData
|
||||
function getProjectData(): array
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("SELECT title, isMainProject, information, imgLocation, projectLink, gitLink FROM projects order by date LIMIT 4;");
|
||||
$stmt = $conn->prepare("SELECT ID, title, isMainProject, information, imgLocation, projectLink, gitLink FROM projects;");
|
||||
$stmt->execute();
|
||||
|
||||
// set the resulting array to associative
|
||||
@@ -27,57 +28,141 @@ class projectData
|
||||
{
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array("errorMessage" => "Error, project data not found");
|
||||
}
|
||||
|
||||
function updateProjectData(string $title, string $isMainProject, string $information, string $projectLink, string $githubLink, string $id): bool
|
||||
|
||||
/**
|
||||
* 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 bool $isMainProject - Is the project a main project or not
|
||||
* @param string $information - Information about the project
|
||||
* @param string $imgLocation - Location of the image
|
||||
* @param string $projectLink - Link to the project
|
||||
* @param string $gitLink - Link to the github repository
|
||||
* @return bool - True if project was updated, false if not and there was an error
|
||||
*/
|
||||
function updateProjectData(string $ID, string $title, bool $isMainProject, string $information, string $imgLocation, string $projectLink, string $gitLink): bool
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("UPDATE projects SET title = :title, isMainProject = :isMainProject, information = :information, projectLink = :projectLink, githubLink = :githubLink WHERE ID = :id");
|
||||
$stmt = $conn->prepare("UPDATE projects SET title = :title, isMainProject = :isMainProject, information = :information, imgLocation = :imgLocation, projectLink = :projectLink, gitLink = :gitLink WHERE ID = :ID");
|
||||
$stmt->bindParam(":title", $title);
|
||||
$stmt->bindParam(":isMainProject", $isMainProject);
|
||||
$stmt->bindParam(":information", $information);
|
||||
$stmt->bindParam(":imgLocation", $imgLocation);
|
||||
$stmt->bindParam(":projectLink", $projectLink);
|
||||
$stmt->bindParam(":gitLink", $gitLink);
|
||||
$stmt->bindParam(":ID", $ID);
|
||||
$stmt->execute();
|
||||
|
||||
if ($stmt->rowCount() > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete project data from the database
|
||||
* @param int $ID - ID of the project in the database to delete
|
||||
* @return bool - True if project was deleted, false if not and there was an error
|
||||
*/
|
||||
function deleteProjectData(int $ID): bool
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("DELETE FROM projects WHERE ID = :ID");
|
||||
$stmt->bindParam(":ID", $ID);
|
||||
$stmt->execute();
|
||||
|
||||
if ($stmt->rowCount() > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
$stmt = $conn->prepare("INSERT INTO projects (title, isMainProject, information, projectLink, gitLink) VALUES (:title, :isMainProject, :information, :projectLink, :gitLink)");
|
||||
$stmt->bindParam(":title", $title);
|
||||
$stmt->bindParam(":isMainProject", $isMainProject);
|
||||
$stmt->bindParam(":information", $information);
|
||||
$stmt->bindParam(":projectLink", $projectLink);
|
||||
$stmt->bindParam(":githubLink", $githubLink);
|
||||
$stmt->bindParam(":id", $id);
|
||||
$stmt->bindParam(":gitLink", $gitLink);
|
||||
$stmt->execute();
|
||||
|
||||
if ($stmt->rowCount() > 0)
|
||||
{
|
||||
return true;
|
||||
return $conn->lastInsertId();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function deleteProjectData(int $id): bool
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("DELETE FROM projects WHERE ID = :id");
|
||||
$stmt->bindParam(":id", $id);
|
||||
$stmt->execute();
|
||||
$targetDir = "../imgs/projects/";
|
||||
$targetFile = $targetDir . basename($img->getClientFilename());
|
||||
$uploadOk = 1;
|
||||
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
|
||||
|
||||
if ($stmt->rowCount() > 0)
|
||||
// Check if file already exists
|
||||
if (file_exists($targetFile))
|
||||
{
|
||||
return true;
|
||||
return "The file already exists";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function addProjectData(string $title, string $isMainProject, string $information, string $projectLink, string $githubLink): bool
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("INSERT INTO projects (title, isMainProject, information, projectLink, githubLink) VALUES (:title, :isMainProject, :information, :projectLink, :githubLink)");
|
||||
$stmt->bindParam(":title", $title);
|
||||
$stmt->bindParam(":isMainProject", $isMainProject);
|
||||
$stmt->bindParam(":information", $information);
|
||||
$stmt->bindParam(":projectLink", $projectLink);
|
||||
$stmt->bindParam(":githubLink", $githubLink);
|
||||
$stmt->execute();
|
||||
|
||||
if ($stmt->rowCount() > 0)
|
||||
// Check file size
|
||||
if ($img->getSize() > 2000000)
|
||||
{
|
||||
return true;
|
||||
return "The file is too large, max 2MB";
|
||||
}
|
||||
return false;
|
||||
|
||||
// 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))
|
||||
{
|
||||
// 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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user