1
0
mirror of https://koodu.h-i.works/projects/thebadspace synced 2025-05-06 14:41:02 -05:00
Ro 735117fcda CSS Reshuffle, Added Page Renderer
Reorganized the CSS structure to there is some seperation between front
facing style and the backend den.

Also add the Render class so auth status is included in every template
rendering event so login status and select member data is available if
needed. will expand if needed.
2023-01-08 14:28:25 -08:00

249 lines
9.3 KiB
PHP

<?php
// src/Controller/DataImport.php
// Grab data from transfer app
namespace App\Controller\Routes\Back;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\Persistence\ManagerRegistry;
use App\Service\HandleLocations;
use Doctrine\DBAL\Connection;
use App\Service\Auth;
use App\Service\FileUploader;
use App\Service\Render;
class Locations extends AbstractController
{
/**
* @Route("/den/locations", name="den-reroute-index")
*/
public function rerouteIndex()
{
header("Location:/den/locations/page/1");
return new Response("<html><body>LOGGED IN</body></html>");
}
/**
* @Route("/den/locations/page/{pageNum}", name="den-locations")
*/
public function locationIndex(
Request $request,
RequestStack $requestStack,
Auth $auth,
HandleLocations $locations,
ManagerRegistry $doctrine,
Connection $connection,
Render $render,
string $pageNum
): Response {
$result = $auth->status();
if ($result["status"]) {
$session = $requestStack->getSession();
$member = $session->get("member");
$list = $locations->getLocationsPage($pageNum);
//$search = $connection->fetchAllAssociative("SELECT * FROM searchlocations('agenda')");
return $render->page(["list" => $list, "mode" => "index"], "Bad Space | Locations", "back/locations.twig");
} else {
return $this->render("back/index.twig", [
"title" => "Close the door behind you",
]);
}
}
/**
* @Route("/den/locations/modify/{action}/{uuid}", name="location-modify")
*/
public function modifyLocation(
Request $request,
Auth $auth,
HandleLocations $locations,
ManagerRegistry $doctrine,
FileUploader $uploader,
Render $render,
string $action = "add",
string $uuid = "001"
): Response {
$result = $auth->status();
if ($result["status"]) {
if ($request->getMethod() == "GET") {
$options = [];
if ($action == 'add') {
return $render->page(
["mode" => $action],
"Bad Space | Locations | Add",
"back/locations.twig"
);
} else {
$location = $locations->getLocationbyUUID($uuid);
return $render->page(
["mode" => $action, "location" => $location[0]],
"Bad Space | Locations | Edit",
"back/locations.twig"
);
}
} else {
//add new member
$token = $request->get("token");
$notice = "";
$mode = $request->get("mode");
//token check
if (!$this->isCsrfTokenValid("upload", $token)) {
$logger->info("CSRF failure");
return new Response(
"Operation not allowed",
Response::HTTP_BAD_REQUEST,
[
"content-type" => "text/plain",
]
);
}
if (
$request->request->get("loc_name") == "" ||
$request->request->get("loc_url") == "" ||
$request->request->get("loc_desc") == "" ||
$request->request->get("loc_tags") == ""
) {
$notice = "All fields are required, champ.";
return $this->render("back/locations.twig", [
"title" => "Bad Space | Locations | Add",
"notice" => $notice,
"mode" => "add"
]);
}
//once everything clears, upload images and process request
$examples = [];
$files = $request->files->get("loc_examples");
if (!empty($files)) {
for ($i = 0; $i < count($files); $i++) {
$path = $files[$i]->getClientOriginalName();
array_push($examples, ["image_index" => $i, "path" => urlencode($path)]);
$uploader->uploadExamples("../public/assets/images/examples", $files[$i]);
}
}
$response = $locations->modifyLocation($request, $result["id"], $mode, $request->request->get("uuid"));
if ($response["status"]) {
$options = [];
if ($mode == 'add') {
$options = [
"title" => "Bad Space | Locations | Add",
"notice" => $response["message"],
"mode" => $mode
];
} else {
$location = $locations->getLocationbyUUID($request->request->get("uuid"));
$options = [
"title" => "Bad Space | Locations | Edit",
"mode" => $mode,
"notice" => $response["message"],
"location" => $location[0]
];
}
return $this->render("back/locations.twig", $options);
} else {
return $this->render("back/locations.twig", [
"title" => "Bad Space | Locations | Error",
"notice" => $response["message"],
"mode" => $mode
]);
}
}
} else {
//back to index to login
header("Location:/den");
return new Response("<html><body>LOGGED IN</body></html>");
}
}
/**
* @Route("/den/locations/bulk-add", name="location-bulk-add")
*/
public function bulkAddLocation(
Request $request,
Auth $auth,
HandleLocations $locations,
ManagerRegistry $doctrine,
FileUploader $uploader,
Render $render
): Response {
$result = $auth->status();
if ($result["status"]) {
if ($request->getMethod() == "GET") {
return $render->page(
["mode" => "bulk-add"],
"Bad Space | Locations | Bulk Add",
"back/locations.twig"
);
} else {
// do posting stuff
$token = $request->get("token");
$entityManager = $doctrine->getManager();
$notice = '';
if (!$this->isCsrfTokenValid("upload", $token)) {
$logger->info("CSRF failure");
return new Response(
"Operation not allowed",
Response::HTTP_BAD_REQUEST,
[
"content-type" => "text/plain",
]
);
}
//get file from post
$file = $request->files->get("myfile");
//grab extension
if (!empty($file)) {
$extention = substr(strrchr($file->getClientOriginalName(), "."), 1);
}
//check it out to make sure it's cool
if (
empty($file) ||
$extention != "csv"
) {
if (empty($file)) {
$notice = 'You didn\'t select a file, boss';
} elseif ($extention != "csv") {
$notice = "Only files of type .csv are accepted, slick. " . $extention;
}
return $this->render("back/locations.twig", [
"title" => "Bad Space | Locations | Add",
"notice" => $notice,
"mode" => "bulk-add"
]);
}
//if it's cool, send it to be processed
$response = $locations->addMultipleLocations($file, $result["id"]);
if ($response["status"]) {
$notice = "New locations added! Take a break.";
return $this->render("back/locations.twig", [
"title" => "Bad Space | Locations | Add",
"notice" => $response["message"],
"mode" => "bulk-add"
]);
} else {
return $this->render("back/locations.twig", [
"title" => "Bad Space | Locations | Add",
"notice" => $response["message"],
"mode" => "bulk-add"
]);
}
}
} else {
header("Location:/den");
return new Response("<html><body>LOGGED IN</body></html>");
}
}
}