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.
267 lines
9.7 KiB
PHP
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>");
|
|
}
|
|
}
|
|
}
|