This repository has been archived on 2025-03-05. You can view files and clone it, but cannot push or open issues or pull requests.
TheBadSpace/src/Controller/Routes/Back/Locations.php
Ro 245531faf6 Added support of fedifence CSV and pagination
Populated the DB with entries from a fedifence export provided by
@Oliphant (https://codeberg.org/oliphant/blocklists).

As such also updated the appropriate templates with pagination to be
able to peruse through the location directory.

Also added an edit link on the location template front end to make
finding and updating instance info easy.
2023-01-23 19:59:51 -08:00

267 lines
9.7 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 App\Service\HandleImports;
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,
Render $render,
string $pageNum
): Response {
$result = $auth->status();
if ($result["status"]) {
$session = $requestStack->getSession();
$member = $session->get("member");
$list = $locations->getLocationsPage($pageNum);
$next = $pageNum + 1;
if ($next > $list["total"]) {
$next = 1;
}
$prev = $pageNum - 1;
if ($prev <= 0) {
$prev = $list["total"];
}
return $render->page(
[
"list" => $list,
"mode" => "index",
"curentPage" => $pageNum,
"nextPage" => $next,
"prevPage" => $prev
],
"Bad Space | Locations",
"back/locations.twig"
);
} else {
return $render->page([], "The Bad Space | Den", "back/index.twig");
}
}
/**
* @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,
HandleImports $imports,
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 = '';
$type = $request->get("input_type");
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
if ($type == "tbs" || $type == "") {
$response = $locations->addMultipleLocations($file, $result["id"]);
} else {
$response = $imports->importLocations($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>");
}
}
}