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:
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user