1
0
mirror of https://koodu.h-i.works/projects/thebadspace synced 2025-06-25 16:04:37 -05:00

Location Editing Part 2

Bulk uploading has been added and some inconsistencies in the templates
have been addressed. Still needs work but it's starting to feel like a
cohesive experience.

With the base data entry funcationality in place, now really polishing
can begin as well as establishing what roles can do what.

Smoothing out entry editing will be addressed as well.
This commit is contained in:
Ro
2023-01-03 16:08:50 -08:00
parent 3410abd70a
commit 26f3cbe994
9 changed files with 310 additions and 11 deletions

View File

@ -12,6 +12,7 @@ use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Uid\Uuid;
use App\Entity\Location;
use League\Csv\Reader;
//use App\Utils\StringTools;
@ -139,4 +140,97 @@ class HandleLocations
return $response = ["status" => false, "message" => $errorMessage];
}
}
/**
* Add new location to db
*
* @param Request $file object containing posted data
* @return Object
*/
public function addMultipleLocations($file, $memberId)
{
//read csv
$csv = Reader::createFromPath($file, "r");
$csv->setHeaderOffset(0);
$records = $csv->getRecords();
$recordCount = count($csv);
$duplicates = 0;
$errorMessage = null;
// Save image
//extract data row by row
foreach ($records as $offset => $row) {
$name = $row["Name"];
$url = $row["Url"];
$images = $row["Images"];
$desc = $row["Description"];
$tags = $row["Tags"];
$ratings = $row["Rating"];
$imgs = explode(',', $images);
$examples = [];
//check to see if location already exists
$list = $this->entityManager->getRepository(Location::class);
$entry = $list->findOneBy(["name" => $name]);
if ($entry) {
++$duplicates;
} else {
$errorMessage = null;
$location = new Location();
$location->setName($name);
$location->setUrl($url);
$location->setDescription($desc);
$location->setTags($tags);
$location->setRating($ratings);
//grab images, move them to dir and set image array
foreach ($imgs as $img) {
$imageName = uniqid() . ".jpg";
$path = "../public/assets/images/examples/" . $imageName;
array_push($examples, $imageName);
file_put_contents($path, file_get_contents(trim($img)));
}
$location->setImages($examples);
//set defaults
$location->setUuid(Uuid::v4());
$location->setActive(false);
$location->setCreatedAt(new \DateTimeImmutable());
$location->setUpdatedAt(new \DateTimeImmutable());
$location->setAddedBy($memberId);
$this->entityManager->persist($location);
}
}
try {
$this->entityManager->flush();
} catch (PDOException $error) {
$errorMessage = $error->getMessage();
} catch (DBALException $error) {
$errorMessage = $error->getMessage();
} catch (ORMException $error) {
$errorMessage = $error->getMessage();
} catch (Exception $error) {
$errorMessage = $error->getMessage();
} catch (SyntaxErrorException $e) {
$errorMessage = $error->getMessage();
}
if ($duplicates > 0) {
$message = $duplicates . " of " . $recordCount . " location entries were duplicates";
} else {
$message = "Locations Added. Nice Job!";
}
// return result status
if ($errorMessage == null) {
return $response = [
"status" => true,
"message" => $message,
];
} else {
return $response = ["status" => false, "message" => $errorMessage];
}
}
}