Compare commits

...

5 commits

4 changed files with 69 additions and 19 deletions

View file

@ -15,6 +15,8 @@ class Game
private int|null $id; private int|null $id;
#[ORM\Column] #[ORM\Column]
private string $name; private string $name;
#[ORM\Column(nullable: true)]
private string|null $internalName;
public function getName(): string public function getName(): string
{ {
@ -26,11 +28,22 @@ class Game
return $this->id; return $this->id;
} }
public function getInternalName(): string
{
return $this->internalName ?? $this->name;
}
public function setInternalName(string $internalName): void
{
$this->internalName = $internalName;
}
/** /**
* @param string $name * @param string $name
*/ */
public function __construct(string $name) public function __construct(string $internalName, string $name)
{ {
$this->internalName = $internalName;
$this->name = $name; $this->name = $name;
} }
} }

View file

@ -3,14 +3,17 @@ declare(strict_types=1);
namespace GamesShop\Importer; namespace GamesShop\Importer;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Exception; use Exception;
use GamesShop\ContainerHandler;
use GamesShop\Entities\Account\User; use GamesShop\Entities\Account\User;
use GamesShop\Entities\Games\Game; use GamesShop\Entities\Games\Game;
use GamesShop\Entities\Games\Key; use GamesShop\Entities\Games\Key;
use GamesShop\Entities\Games\KeyAttribute; use GamesShop\Entities\Games\KeyAttribute;
use GamesShop\Entities\Games\Store; use GamesShop\Entities\Games\Store;
use GamesShop\Entities\GamesList; use GamesShop\Entities\GamesList;
use Monolog\Logger;
use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\IOFactory;
final class GameImporter final class GameImporter
@ -127,18 +130,26 @@ final class GameImporter
continue; continue;
} }
$game = array_key_exists($values['name'], $foundGames) ? $foundGames[$values['name']] : null; $internalName = $this->prepareGameName($values['name']);
$game = array_key_exists($internalName, $foundGames) ? $foundGames[$internalName] : null;
ContainerHandler::get(Logger::class)->debug('importing game ' . $internalName);
if ($game === null) { if ($game === null) {
$game = $this->entityManager->getRepository(Game::class)->findOneBy([ 'name' => $values['name'] ]); $game = $this->entityManager->getRepository(Game::class)->matching(
Criteria::create()
->where(Criteria::expr()->eq('name', $values['name']))
->orWhere(Criteria::expr()->eq('internalName', $internalName))
)->first();
} }
if ($game === null) { if ($game === false) {
$game = new Game($values['name']); $game = new Game($internalName, $values['name']);
$this->entityManager->persist($game); $this->entityManager->persist($game);
} }
$foundGames[$values['name']] = $game; $foundGames[$internalName] = $game;
$game->setInternalName($internalName);
$key = new Key( $key = new Key(
$game, $game,
@ -174,4 +185,20 @@ final class GameImporter
return Store::EXTERNAL; return Store::EXTERNAL;
} }
private function prepareGameName(string $name): string
{
$replacements = [
':' => '',
'-' => '',
',' => '',
'!' => '',
'?' => '',
' ' => ' ',
' ' => '_',
];
$name = strtoupper($name);
return str_replace(array_keys($replacements), array_values($replacements), $name);
}
} }

View file

@ -45,5 +45,16 @@ $resource = $resources->getResource($resourceEntry);
<span class="h1">PROTOTYPE / POC</span> <span class="h1">PROTOTYPE / POC</span>
</div> </div>
<div class="position-fixed bottom-0 start-0 m-3 fs-6">
<a href="https://git.php.fail/neintonine/gamesshop/issues/new" class="nav-link text-muted mb-3">
<i class="fa-solid fa-bug fa-xl me-3"></i>
You found a bug? Please report it.
</a>
<a href="https://git.php.fail/neintonine/gamesshop" class="nav-link text-muted">
<i class="fa-brands fa-git-alt me-3 fa-xl"></i>
Interested to help? Checkout the git repository.
</a>
</div>
</body> </body>
</html> </html>

View file

@ -29,25 +29,24 @@ $currentPermission = $activeUser === null ? UserPermission::NONE : $activeUser->
} }
?> ?>
<li class="nav-link"> <li class="nav-link">
<a href="<?= $header->link ?>" class="nav-link"><?= $header->title ?></a> <a href="<?= $header->link ?>" class="nav-link"><?= $header->title ?></a>
</li> </li>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
<div class="d-flex mode-switch me-4">
<button title="Use dark mode" id="dark" class="btn btn-sm btn-default text-secondary">
<i class="fa-regular fa-moon"></i>
</button>
<button title="Use light mode" id="light" class="btn btn-sm btn-default text-secondary">
<i class="fa-regular fa-sun"></i>
</button>
<button title="Use system preferred mode" id="system" class="btn btn-sm btn-default text-secondary">
<i class="fa-solid fa-display"></i>
</button>
</div>
<?= $this->insert('layout/accountDisplay'); ?> <?= $this->insert('layout/accountDisplay'); ?>
</div> </div>
</div> </div>
<div class="d-flex mode-switch me-3">
<button title="Use dark mode" id="dark" class="btn btn-sm btn-default text-secondary">
<i class="fa-regular fa-moon"></i>
</button>
<button title="Use light mode" id="light" class="btn btn-sm btn-default text-secondary">
<i class="fa-regular fa-sun"></i>
</button>
<button title="Use system preferred mode" id="system" class="btn btn-sm btn-default text-secondary">
<i class="fa-solid fa-display"></i>
</button>
</div>
</nav> </nav>