thebadspace/src/Controller/Routes/Back/Locations.php
Ro 48e447beba Switch render method
There were still some reference to the base Controller page renderer
that needed to switched to the new Render class. Oops.

Also for got mention tabler icons (https://tabler-icons.io/) were added
in the last commit. They are so nice.
2023-01-08 14:49:54 -08:00

245 lines
9.1 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 $render->page(
["mode" => "add", "notice" => $notice],
"Bad Space | Locations | Add",
"back/locations.twig"
);
}
//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"]) {
if ($mode == 'add') {
return $render->page(
["mode" => $mode, "notice" => $response["message"]],
"Bad Space | Locations | Add",
"back/locations.twig"
);
} else {
$location = $locations->getLocationbyUUID($request->request->get("uuid"));
return $render->page(
["mode" => $mode, "notice" => $response["message"], "location" => $location[0]],
"Bad Space | Locations | Edit",
"back/locations.twig"
);
}
} else {
return $render->page(
["mode" => $mode, "notice" => $response["message"]],
"Bad Space | Locations | Error",
"back/locations.twig"
);
}
}
} 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 $render->page(
["mode" => "bulk-add", "notice" => $response["message"], ],
"Bad Space | Locations | Bulk Add",
"back/locations.twig"
);
} else {
return $render->page(
["mode" => "bulk-add", "notice" => $response["message"], ],
"Bad Space | Locations | Bulk Add",
"back/locations.twig"
);
}
}
} else {
header("Location:/den");
return new Response("<html><body>LOGGED IN</body></html>");
}
}
}