mirror of
https://koodu.h-i.works/projects/thebadspace
synced 2025-05-06 14:41:02 -05:00
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.
249 lines
9.3 KiB
PHP
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>");
|
|
}
|
|
}
|
|
}
|