Merge remote-tracking branch 'origin/master'
All checks were successful
/ build (push) Successful in 36s
All checks were successful
/ build (push) Successful in 36s
This commit is contained in:
commit
bfeb2a6e2a
4 changed files with 69 additions and 19 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -25,12 +27,23 @@ 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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,19 +130,27 @@ 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,
|
||||||
$list,
|
$list,
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue