added backend search functionality
Signed-off-by: rodude123 <rodude123@gmail.com>
This commit is contained in:
+46
-27
@@ -23,7 +23,7 @@ class blogData
|
||||
public function getBlogPosts(): array
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("SELECT * FROM blog ORDER BY dateCreated DESC;");
|
||||
$stmt = $conn->prepare("SELECT * FROM blog ORDER BY featured DESC, dateCreated DESC;");
|
||||
$stmt->execute();
|
||||
|
||||
// set the resulting array to associative
|
||||
@@ -102,28 +102,9 @@ class blogData
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the blog posts with the given category
|
||||
* @param string $category - Category of the blog post
|
||||
* @return array - Array of the blog posts with the given category or error message
|
||||
* Get all unique categories
|
||||
* @return string[] - Array of all categories or error message
|
||||
*/
|
||||
public function getBlogPostsWithCategory(string $category): array
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("SELECT * FROM blog WHERE categories LIKE :category;");
|
||||
$stmt->bindParam(":category", $category);
|
||||
$stmt->execute();
|
||||
|
||||
// set the resulting array to associative
|
||||
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array("errorMessage" => "Error, blog post could not found");
|
||||
}
|
||||
|
||||
public function getCategories(): array
|
||||
{
|
||||
$conn = dbConn();
|
||||
@@ -185,11 +166,12 @@ class blogData
|
||||
* @param bool $featured - Whether the blog post is featured or not
|
||||
* @param string $abstract - Abstract of the blog post i.e. a short description
|
||||
* @param string $body - Body of the blog post
|
||||
* @param string $bodyText - Body of the blog post as plain text
|
||||
* @param string $dateModified - Date the blog post was modified
|
||||
* @param string $categories - Categories of the blog post
|
||||
* @return bool|string - Success or error message
|
||||
*/
|
||||
public function updatePost(int $ID, string $title, bool $featured, string $abstract, string $body, string $dateModified, string $categories): bool|string
|
||||
public function updatePost(int $ID, string $title, bool $featured, string $abstract, string $body, string $bodyText, string $dateModified, string $categories): bool|string
|
||||
{
|
||||
$conn = dbConn();
|
||||
|
||||
@@ -227,12 +209,13 @@ class blogData
|
||||
$from = "../blog/imgs/tmp/";
|
||||
$newBody = $this->changeHTMLSrc($body, $to, $from);
|
||||
|
||||
$stmt = $conn->prepare("UPDATE blog SET title = :title, featured = :featured, abstract = :abstract, body = :body, dateModified = :dateModified, categories = :categories WHERE ID = :ID;");
|
||||
$stmt = $conn->prepare("UPDATE blog SET title = :title, featured = :featured, abstract = :abstract, body = :body, bodyText = :bodyText, dateModified = :dateModified, categories = :categories WHERE ID = :ID;");
|
||||
$stmt->bindParam(":ID", $ID);
|
||||
$stmt->bindParam(":title", $title);
|
||||
$stmt->bindParam(":featured", $featured);
|
||||
$stmt->bindParam(":abstract", $abstract);
|
||||
$stmt->bindParam(":body", $newBody);
|
||||
$stmt->bindParam(":bodyText", $bodyText);
|
||||
$stmt->bindParam(":dateModified", $dateModified);
|
||||
$stmt->bindParam(":categories", $categories);
|
||||
|
||||
@@ -246,13 +229,14 @@ class blogData
|
||||
* @param string $title - Title of the blog post
|
||||
* @param string $abstract - Abstract of the blog post i.e. a short description
|
||||
* @param string $body - Body of the blog post
|
||||
* @param string $bodyText - Body of the blog post as plain text
|
||||
* @param string $dateCreated - Date the blog post was created
|
||||
* @param bool $featured - Whether the blog post is featured or not
|
||||
* @param string $categories - Categories of the blog post
|
||||
* @param UploadedFileInterface $headerImg - Header image of the blog post
|
||||
* @return int|string - ID of the blog post or error message
|
||||
*/
|
||||
public function createPost(string $title, string $abstract, string $body, string $dateCreated, bool $featured, string $categories, UploadedFileInterface $headerImg): int|string
|
||||
public function createPost(string $title, string $abstract, string $body, string $bodyText, string $dateCreated, bool $featured, string $categories, UploadedFileInterface $headerImg): int|string
|
||||
{
|
||||
$conn = dbConn();
|
||||
$folderID = uniqid();
|
||||
@@ -282,8 +266,8 @@ class blogData
|
||||
$stmtMainProject->execute();
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO blog (title, dateCreated, dateModified, featured, headerImg, abstract, body, categories, folderID)
|
||||
VALUES (:title, :dateCreated, :dateModified, :featured, :headerImg, :abstract, :body, :categories, :folderID);");
|
||||
$stmt = $conn->prepare("INSERT INTO blog (title, dateCreated, dateModified, featured, headerImg, abstract, body, bodyText, categories, folderID)
|
||||
VALUES (:title, :dateCreated, :dateModified, :featured, :headerImg, :abstract, :body, :bodyText, :categories, :folderID);");
|
||||
$stmt->bindParam(":title", $title);
|
||||
$stmt->bindParam(":dateCreated", $dateCreated);
|
||||
$stmt->bindParam(":dateModified", $dateCreated);
|
||||
@@ -292,6 +276,7 @@ class blogData
|
||||
$stmt->bindParam(":headerImg", $targetFile["imgLocation"]);
|
||||
$stmt->bindParam(":abstract", $abstract);
|
||||
$stmt->bindParam(":body", $newBody);
|
||||
$stmt->bindParam(":bodyText", $bodyText);
|
||||
$stmt->bindParam(":categories", $categories);
|
||||
$stmt->bindParam(":folderID", $folderID);
|
||||
|
||||
@@ -443,4 +428,38 @@ class blogData
|
||||
$stmt->execute();
|
||||
return $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for a blog post with the given search term
|
||||
* @param string $searchTerm - Search term
|
||||
* @return array - Array of all posts with the given search term or error message
|
||||
*/
|
||||
public function searchBlog(string $searchTerm): array
|
||||
{
|
||||
$conn = dbConn();
|
||||
$stmt = $conn->prepare("SELECT * FROM blog WHERE MATCH(title, bodyText) AGAINST(:searchTerm IN NATURAL LANGUAGE MODE);");
|
||||
$stmt->bindParam(":searchTerm", $searchTerm);
|
||||
$stmt->execute();
|
||||
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
$bodyText = array_column($result, "bodyText");
|
||||
// go through each body plain text and get the sentence before, the sentence with the search term and the sentence after and append it to a new array
|
||||
foreach ($bodyText as $key => $text)
|
||||
{
|
||||
$text = strtolower($text);
|
||||
$searchTerm = strtolower($searchTerm);
|
||||
$pos = strpos($text, $searchTerm);
|
||||
$start = strrpos(substr($text, 0, $pos), ".") + 1;
|
||||
$end = strpos($text, ".", $pos);
|
||||
$result[$key]["bodyText"] = substr($text, $start, $end - $start);
|
||||
}
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array("errorMessage" => "Error, could not find posts");
|
||||
}
|
||||
}
|
||||
@@ -123,12 +123,34 @@ class blogRoutes implements routesInterface
|
||||
return $response->withStatus(400);
|
||||
});
|
||||
|
||||
$app->get("/blog/search/{searchTerm}", function (Request $request, $response, $args)
|
||||
{
|
||||
if ($args["searchTerm"] != null)
|
||||
{
|
||||
$posts = $this->blogData->searchBlog($args["searchTerm"]);
|
||||
|
||||
$json = json_encode($posts);
|
||||
|
||||
$response->getBody()->write($json);
|
||||
|
||||
if (array_key_exists("errorMessage", $posts))
|
||||
{
|
||||
$response->withStatus(404);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
$response->getBody()->write(json_encode(array("error" => "Please provide a search term")));
|
||||
return $response->withStatus(400);
|
||||
});
|
||||
|
||||
$app->patch("/blog/post/{id}", function (Request $request, Response $response, $args)
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
if ($args["id"] != null)
|
||||
{
|
||||
if (empty($data["title"]) || strlen($data["featured"]) == 0 || empty($data["body"]) || empty($data["dateModified"]) || empty($data["categories"]))
|
||||
if (empty($data["title"]) || strlen($data["featured"]) == 0 || empty($data["body"]) || empty($data["bodyText"]) || empty($data["dateModified"]) || empty($data["categories"]))
|
||||
{
|
||||
// uh oh sent some empty data
|
||||
$response->getBody()->write(json_encode(array("error" => "Only some of the data was sent")));
|
||||
@@ -142,7 +164,7 @@ class blogRoutes implements routesInterface
|
||||
return $response->withStatus(400);
|
||||
}
|
||||
|
||||
$message = $this->blogData->updatePost($args["id"], $data["title"], intval($data["featured"]), $data["abstract"], $data["body"], $data["dateModified"], $data["categories"]);
|
||||
$message = $this->blogData->updatePost($args["id"], $data["title"], intval($data["featured"]), $data["abstract"], $data["body"], $data["bodyText"], $data["dateModified"], $data["categories"]);
|
||||
|
||||
if ($message === "post not found")
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user