Add PreviouslyOwnedCpu and upgrade Symfony
This commit is contained in:
parent
5e0e5576d1
commit
6c863022f5
@ -6,26 +6,25 @@
|
|||||||
"composer/package-versions-deprecated": "1.11.99.5",
|
"composer/package-versions-deprecated": "1.11.99.5",
|
||||||
"doctrine/doctrine-bundle": "^2.8.2",
|
"doctrine/doctrine-bundle": "^2.8.2",
|
||||||
"doctrine/doctrine-migrations-bundle": "^3.2.2",
|
"doctrine/doctrine-migrations-bundle": "^3.2.2",
|
||||||
"doctrine/orm": "^2.14.1",
|
"doctrine/orm": "^3.1.1",
|
||||||
"sensio/framework-extra-bundle": "^6.2.9",
|
"symfony/form": "^7.0.4",
|
||||||
"symfony/form": "^6.2.5",
|
|
||||||
"symfony/maker-bundle": "^1.48",
|
"symfony/maker-bundle": "^1.48",
|
||||||
"symfony/monolog-bundle": "^3.8",
|
"symfony/monolog-bundle": "^3.8",
|
||||||
"symfony/security-bundle": "^6.2.6",
|
"symfony/security-bundle": "^7.0.5",
|
||||||
"symfony/security-csrf": "^6.2.5",
|
"symfony/security-csrf": "^7.0.3",
|
||||||
"symfony/translation": "^6.2.5",
|
"symfony/translation": "^7.0.4",
|
||||||
"symfony/twig-bundle": "^6.2.5",
|
"symfony/twig-bundle": "^7.0.4",
|
||||||
"symfony/validator": "^6.2.5",
|
"symfony/validator": "^7.0.5",
|
||||||
"symfony/yaml": "^6.2.5",
|
"symfony/yaml": "^7.0.3",
|
||||||
"twig/twig": "^2.12|^3.5"
|
"twig/twig": "^2.12|^3.5"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^9.5.28",
|
"phpunit/phpunit": "^11.0.8",
|
||||||
"roave/security-advisories": "dev-master",
|
"roave/security-advisories": "dev-master",
|
||||||
"symfony/dotenv": "^6.2.5",
|
"symfony/dotenv": "^7.0.4",
|
||||||
"symfony/flex": "^2.2.4",
|
"symfony/flex": "^2.2.4",
|
||||||
"symfony/stopwatch": "^6.2.5",
|
"symfony/stopwatch": "^7.0.3",
|
||||||
"symfony/web-profiler-bundle": "^6.2.5"
|
"symfony/web-profiler-bundle": "^7.0.4"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"preferred-install": {
|
"preferred-install": {
|
||||||
|
1706
composer.lock
generated
1706
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,12 @@
|
|||||||
<?php declare(strict_types=1);
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => TRUE],
|
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => TRUE],
|
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => TRUE],
|
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => TRUE],
|
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => TRUE, 'test' => TRUE],
|
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => TRUE],
|
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||||
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => TRUE],
|
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
|
||||||
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => TRUE],
|
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => TRUE],
|
|
||||||
];
|
];
|
||||||
|
@ -21,6 +21,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'auto_generate_proxy_classes' => '%kernel.debug%',
|
'auto_generate_proxy_classes' => '%kernel.debug%',
|
||||||
'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware',
|
'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware',
|
||||||
'auto_mapping' => TRUE,
|
'auto_mapping' => TRUE,
|
||||||
|
'enable_lazy_ghost_objects' => TRUE,
|
||||||
'mappings' => [
|
'mappings' => [
|
||||||
'App' => [
|
'App' => [
|
||||||
'is_bundle' => FALSE,
|
'is_bundle' => FALSE,
|
||||||
@ -29,6 +30,9 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'prefix' => 'App\Entity',
|
'prefix' => 'App\Entity',
|
||||||
'alias' => 'App'],
|
'alias' => 'App'],
|
||||||
],
|
],
|
||||||
|
'controller_resolver' => [
|
||||||
|
'auto_mapping' => true,
|
||||||
|
]
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
@ -6,7 +6,17 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura
|
|||||||
use Symfony\Config\FrameworkConfig;
|
use Symfony\Config\FrameworkConfig;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator, FrameworkConfig $config): void {
|
return static function (ContainerConfigurator $containerConfigurator, FrameworkConfig $config): void {
|
||||||
$config->session(['handler_id' => NULL]);
|
$config->handleAllThrowables(true);
|
||||||
|
|
||||||
|
$config->annotations([
|
||||||
|
'enabled' => FALSE
|
||||||
|
]);
|
||||||
|
|
||||||
|
$config->session([
|
||||||
|
'handler_id' => NULL,
|
||||||
|
'cookie_secure' => 'auto',
|
||||||
|
'cookie_samesite' => 'strict',
|
||||||
|
]);
|
||||||
|
|
||||||
$config->secret('%env(APP_SECRET)%')
|
$config->secret('%env(APP_SECRET)%')
|
||||||
->defaultLocale('en')
|
->defaultLocale('en')
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
|
|
||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
|
||||||
$containerConfigurator->extension('sensio_framework_extra', [
|
|
||||||
'router' => ['annotations' => FALSE],
|
|
||||||
]);
|
|
||||||
};
|
|
@ -1,6 +1,4 @@
|
|||||||
<?php
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use App\Kernel;
|
use App\Kernel;
|
||||||
use Symfony\Component\Dotenv\Dotenv;
|
use Symfony\Component\Dotenv\Dotenv;
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
$(document).foundation();
|
$(document).foundation();
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
// Disable weird scrolling behavior on input[type=number] fields
|
||||||
|
// Based on https://stackoverflow.com/questions/9712295/disable-scrolling-on-input-type-number/38589039#38589039
|
||||||
|
document.addEventListener('wheel', () => {
|
||||||
|
if (document.activeElement !== null && document.activeElement['type'] === 'number') {
|
||||||
|
document.activeElement['blur']()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
let tables = document.querySelectorAll('table.sortable');
|
let tables = document.querySelectorAll('table.sortable');
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let len = tables.length;
|
let len = tables.length;
|
||||||
|
@ -6,7 +6,9 @@ use App\Entity\Cpu;
|
|||||||
use App\Form\CpuType;
|
use App\Form\CpuType;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\{Request, Response};
|
use Symfony\Component\HttpFoundation\
|
||||||
|
{RedirectResponse, Request, Response};
|
||||||
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
|
||||||
#[Route('/cpu')]
|
#[Route('/cpu')]
|
||||||
@ -70,4 +72,23 @@ class CpuController extends AbstractController {
|
|||||||
{
|
{
|
||||||
return $this->deleteCSRF($request, $cpu);
|
return $this->deleteCSRF($request, $cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves a cpu to the previouslyOwned table
|
||||||
|
*/
|
||||||
|
#[Route(path: '/{id}/deacquire', name: 'cpu_deacquire', methods: ['POST'])]
|
||||||
|
public function reacquireAction(Request $request, Cpu $cpu): RedirectResponse
|
||||||
|
{
|
||||||
|
return $this->itemDeacquire($request, $cpu, 'previously_owned_cpu_index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a form to move
|
||||||
|
*
|
||||||
|
* @param cpu $cpu The cpu entity
|
||||||
|
*/
|
||||||
|
private function createDeacquireForm(cpu $cpu): FormInterface
|
||||||
|
{
|
||||||
|
return $this->buildForm($cpu, 'cpu_deacquire');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
70
src/Controller/PreviouslyOwnedCpuController.php
Normal file
70
src/Controller/PreviouslyOwnedCpuController.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use App\Entity\PreviouslyOwnedCpu;
|
||||||
|
use App\Form\PreviouslyOwnedCpuType;
|
||||||
|
use App\Repository\CpuRepository;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\HttpFoundation\
|
||||||
|
{RedirectResponse, Request, Response};
|
||||||
|
use Symfony\Component\Form\FormInterface;
|
||||||
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
|
||||||
|
#[Route('previously_owned_cpu')]
|
||||||
|
class PreviouslyOwnedCpuController extends AbstractController {
|
||||||
|
use FormControllerBase;
|
||||||
|
|
||||||
|
protected const ENTITY = PreviouslyOwnedCpu::class;
|
||||||
|
protected const TEMPLATE_PATH = 'previously_owned_cpu/';
|
||||||
|
protected const ROUTE_PREFIX = 'previously_owned_cpu_';
|
||||||
|
protected const FORM = PreviouslyOwnedCpuType::class;
|
||||||
|
|
||||||
|
public function __construct(private readonly EntityManagerInterface $entityManager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/', name: 'previously_owned_cpu_index', methods: ['GET'])]
|
||||||
|
public function index(): Response
|
||||||
|
{
|
||||||
|
return $this->itemListView('cpus');
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/{id}', name: 'previously_owned_cpu_show', methods: ['GET'])]
|
||||||
|
public function show(PreviouslyOwnedCpu $previouslyOwnedCpu): Response
|
||||||
|
{
|
||||||
|
return $this->itemView($previouslyOwnedCpu, 'previously_owned_cpu');
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/{id}/edit', name: 'previously_owned_cpu_edit', methods: ['GET', 'POST'])]
|
||||||
|
public function edit(Request $request, PreviouslyOwnedCpu $previouslyOwnedCpu): Response
|
||||||
|
{
|
||||||
|
return $this->itemUpdate($request, $previouslyOwnedCpu, 'previously_owned_cpu');
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/{id}', name: 'previously_owned_cpu_delete', methods: ['POST'])]
|
||||||
|
public function delete(Request $request, PreviouslyOwnedCpu $previouslyOwnedCpu): Response
|
||||||
|
{
|
||||||
|
return $this->deleteCSRF($request, $previouslyOwnedCpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves a Gpu to the previouslyOwned table
|
||||||
|
*/
|
||||||
|
#[Route(path: '/{id}/reacquire', name: 'previously_owned_cpu_reacquire', methods: ['POST'])]
|
||||||
|
public function reacquireAction(Request $request, PreviouslyOwnedCpu $Cpu): RedirectResponse
|
||||||
|
{
|
||||||
|
return $this->itemReacquire($request, $Cpu, 'cpu_index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a form to move
|
||||||
|
*
|
||||||
|
* @param PreviouslyOwnedCpu $Cpu The Cpu entity
|
||||||
|
*/
|
||||||
|
private function createReacquireForm(PreviouslyOwnedCpu $Cpu): FormInterface
|
||||||
|
{
|
||||||
|
return $this->buildForm($Cpu, 'previously_owned_cpu_reacquire', 'POST');
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@
|
|||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
use App\Entity\PreviouslyOwnedGpu;
|
use App\Entity\PreviouslyOwnedGpu;
|
||||||
use App\Enum\SlotKey;
|
|
||||||
use App\Form\PreviouslyOwnedGpuType;
|
use App\Form\PreviouslyOwnedGpuType;
|
||||||
use Doctrine\ORM\{EntityManagerInterface, ORMInvalidArgumentException};
|
use Doctrine\ORM\{EntityManagerInterface, ORMInvalidArgumentException};
|
||||||
use LogicException;
|
use LogicException;
|
||||||
|
@ -3,27 +3,21 @@
|
|||||||
namespace App\Entity;
|
namespace App\Entity;
|
||||||
|
|
||||||
use App\Enum\CpuArchitecture;
|
use App\Enum\CpuArchitecture;
|
||||||
|
use App\Repository\CpuRepository;
|
||||||
use Doctrine\Common\Collections\{ArrayCollection, Collection};
|
use Doctrine\Common\Collections\{ArrayCollection, Collection};
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
#[ORM\Table('cpu', schema: 'collection')]
|
#[ORM\Table('cpu', schema: 'collection')]
|
||||||
#[ORM\Entity]
|
#[ORM\Entity(repositoryClass: CpuRepository::class)]
|
||||||
class Cpu {
|
class Cpu {
|
||||||
use GetSet;
|
use GetSet;
|
||||||
|
use CpuBase;
|
||||||
|
|
||||||
#[ORM\Column('id', type: 'integer', nullable: FALSE)]
|
#[ORM\Column('id', type: 'integer', nullable: FALSE)]
|
||||||
#[ORM\Id]
|
#[ORM\Id]
|
||||||
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
||||||
private int $id;
|
private int $id;
|
||||||
|
|
||||||
#[ORM\ManyToOne(targetEntity: Brand::class, fetch: 'EAGER')]
|
|
||||||
#[ORM\OrderBy(['name' => 'asc'])]
|
|
||||||
#[ORM\JoinColumn('brand_id', referencedColumnName: 'id', nullable: FALSE)]
|
|
||||||
private Brand $brand;
|
|
||||||
|
|
||||||
#[ORM\Column('architecture', type: 'string', enumType: CpuArchitecture::class)]
|
|
||||||
private CpuArchitecture $architecture;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<int, Socket>
|
* @var Collection<int, Socket>
|
||||||
*/
|
*/
|
||||||
@ -34,144 +28,6 @@ class Cpu {
|
|||||||
#[ORM\OrderBy(['name' => 'asc'])]
|
#[ORM\OrderBy(['name' => 'asc'])]
|
||||||
private Collection $sockets;
|
private Collection $sockets;
|
||||||
|
|
||||||
#[ORM\Column('product_line', type: 'string')]
|
|
||||||
private string $productLine;
|
|
||||||
|
|
||||||
#[ORM\Column('model', type: 'string')]
|
|
||||||
private string $model;
|
|
||||||
|
|
||||||
#[ORM\Column('part_number', type: 'string')]
|
|
||||||
private string $partNumber;
|
|
||||||
|
|
||||||
#[ORM\Column('lot_number', type: 'string', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The CPU lot number, such as s-spec for Intel CPUs',
|
|
||||||
])]
|
|
||||||
private ?string $lotNumber;
|
|
||||||
|
|
||||||
#[ORM\Column('micro_architecture', type: 'string', nullable: TRUE)]
|
|
||||||
private ?string $microArchitecture = '';
|
|
||||||
|
|
||||||
#[ORM\Column('codename', type: 'string', nullable: TRUE)]
|
|
||||||
private ?string $codeName = '';
|
|
||||||
|
|
||||||
#[ORM\Column('base_speed', type: 'integer', options: [
|
|
||||||
'comment' => 'The stock speed of the cpu in MHz',
|
|
||||||
])]
|
|
||||||
private int $baseSpeed;
|
|
||||||
|
|
||||||
#[ORM\Column('boost_speed', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The max boost speed of the cpu in MHz, if applicable',
|
|
||||||
])]
|
|
||||||
private ?int $boostSpeed;
|
|
||||||
|
|
||||||
#[ORM\Column('cores', type: 'integer')]
|
|
||||||
private int $cores = 1;
|
|
||||||
|
|
||||||
#[ORM\Column('threads', type: 'integer')]
|
|
||||||
private int $threads = 1;
|
|
||||||
|
|
||||||
#[ORM\Column('igp', type: 'string', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The name of the integrated graphics processor',
|
|
||||||
])]
|
|
||||||
private ?string $igp;
|
|
||||||
|
|
||||||
#[ORM\Column('voltage', type: 'float', nullable: TRUE)]
|
|
||||||
private ?float $voltage;
|
|
||||||
|
|
||||||
#[ORM\Column('tdp', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $tdp;
|
|
||||||
|
|
||||||
#[ORM\Column('process_node', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $processNode;
|
|
||||||
|
|
||||||
#[ORM\Column('count', type: 'integer')]
|
|
||||||
private int $count = 1;
|
|
||||||
|
|
||||||
#[ORM\Column('usable', type: 'boolean', options: [
|
|
||||||
'comment' => 'Whether the chip is working, and can be used with other hardware I have',
|
|
||||||
])]
|
|
||||||
private bool $usable = TRUE;
|
|
||||||
|
|
||||||
#[ORM\Column('received', type: 'boolean', options: [
|
|
||||||
'comment' => 'Whether I have the chip in my possession (instead of in shipping)',
|
|
||||||
])]
|
|
||||||
private bool $received = TRUE;
|
|
||||||
|
|
||||||
#[ORM\Column('link', type: 'string')]
|
|
||||||
private string $link;
|
|
||||||
|
|
||||||
#[ORM\Column('notes', type: 'text', nullable: TRUE)]
|
|
||||||
private ?string $notes = '';
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
// CPU Cache
|
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#[ORM\Column('l1_data_count', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The number of L1 data caches on the package, usually the same as the number of cores',
|
|
||||||
])]
|
|
||||||
private ?int $L1dCount = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_data_size', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The size of each Level 1 data cache in KB',
|
|
||||||
])]
|
|
||||||
private ?int $L1dSize = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_data_way', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $L1dWay = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_code_count', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The number of L1 instruction caches on the package, usually the same as the number of cores',
|
|
||||||
])]
|
|
||||||
private ?int $L1cCount = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_code_size', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The size of each Level 1 instruction cache in KB',
|
|
||||||
])]
|
|
||||||
private ?int $L1cSize = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_code_way', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $L1cWay = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_unified_count', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The number of L1 caches on the package, usually the same as the number of cores',
|
|
||||||
])]
|
|
||||||
private ?int $L1uCount = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_unified_size', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The size of each Level 1 unified cache in KB',
|
|
||||||
])]
|
|
||||||
private ?int $L1uSize = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l1_unified_way', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $L1uWay = NULL;
|
|
||||||
|
|
||||||
#[ORM\Column('l2_count', type: 'integer', options: [
|
|
||||||
'comment' => 'The number of L2 caches on the package, usually the same as the number of cores',
|
|
||||||
])]
|
|
||||||
private int $L2Count = 1;
|
|
||||||
|
|
||||||
#[ORM\Column('l2_size', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The size of each Level 2 cache in KB',
|
|
||||||
])]
|
|
||||||
private ?int $L2Size;
|
|
||||||
|
|
||||||
#[ORM\Column('l2_way', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $L2Way;
|
|
||||||
|
|
||||||
#[ORM\Column('l3_count', type: 'integer', options: [
|
|
||||||
'comment' => 'The number of L3 caches on the package',
|
|
||||||
])]
|
|
||||||
private int $L3Count = 0;
|
|
||||||
|
|
||||||
#[ORM\Column('l3_size', type: 'integer', nullable: TRUE, options: [
|
|
||||||
'comment' => 'The size of each Level 3 cache in KB',
|
|
||||||
])]
|
|
||||||
private ?int $L3Size;
|
|
||||||
|
|
||||||
#[ORM\Column('l3_way', type: 'integer', nullable: TRUE)]
|
|
||||||
private ?int $L3Way;
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
|
163
src/Entity/CpuBase.php
Normal file
163
src/Entity/CpuBase.php
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Enum\CpuArchitecture;
|
||||||
|
use Doctrine\Common\Collections\{ArrayCollection, Collection};
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
trait CpuBase {
|
||||||
|
#[ORM\ManyToOne(targetEntity: Brand::class, fetch: 'EAGER')]
|
||||||
|
#[ORM\OrderBy(['name' => 'asc'])]
|
||||||
|
#[ORM\JoinColumn('brand_id', referencedColumnName: 'id', nullable: FALSE)]
|
||||||
|
private Brand $brand;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// CPU Specs
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[ORM\Column('architecture', type: 'string', enumType: CpuArchitecture::class)]
|
||||||
|
private CpuArchitecture $architecture;
|
||||||
|
|
||||||
|
#[ORM\Column('product_line', type: 'string')]
|
||||||
|
private string $productLine;
|
||||||
|
|
||||||
|
#[ORM\Column('model', type: 'string')]
|
||||||
|
private string $model;
|
||||||
|
|
||||||
|
#[ORM\Column('part_number', type: 'string')]
|
||||||
|
private string $partNumber;
|
||||||
|
|
||||||
|
#[ORM\Column('lot_number', type: 'string', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The CPU lot number, such as s-spec for Intel CPUs',
|
||||||
|
])]
|
||||||
|
private ?string $lotNumber;
|
||||||
|
|
||||||
|
#[ORM\Column('micro_architecture', type: 'string', nullable: TRUE)]
|
||||||
|
private ?string $microArchitecture = '';
|
||||||
|
|
||||||
|
#[ORM\Column('codename', type: 'string', nullable: TRUE)]
|
||||||
|
private ?string $codeName = '';
|
||||||
|
|
||||||
|
#[ORM\Column('base_speed', type: 'integer', options: [
|
||||||
|
'comment' => 'The stock speed of the cpu in MHz',
|
||||||
|
])]
|
||||||
|
private int $baseSpeed;
|
||||||
|
|
||||||
|
#[ORM\Column('boost_speed', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The max boost speed of the cpu in MHz, if applicable',
|
||||||
|
])]
|
||||||
|
private ?int $boostSpeed;
|
||||||
|
|
||||||
|
#[ORM\Column('cores', type: 'integer')]
|
||||||
|
private int $cores = 1;
|
||||||
|
|
||||||
|
#[ORM\Column('threads', type: 'integer')]
|
||||||
|
private int $threads = 1;
|
||||||
|
|
||||||
|
#[ORM\Column('igp', type: 'string', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The name of the integrated graphics processor',
|
||||||
|
])]
|
||||||
|
private ?string $igp;
|
||||||
|
|
||||||
|
#[ORM\Column('voltage', type: 'float', nullable: TRUE)]
|
||||||
|
private ?float $voltage;
|
||||||
|
|
||||||
|
#[ORM\Column('tdp', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $tdp;
|
||||||
|
|
||||||
|
#[ORM\Column('process_node', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $processNode;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// CPU Cache
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[ORM\Column('l1_data_count', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The number of L1 data caches on the package, usually the same as the number of cores',
|
||||||
|
])]
|
||||||
|
private ?int $L1dCount = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_data_size', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The size of each Level 1 data cache in KB',
|
||||||
|
])]
|
||||||
|
private ?int $L1dSize = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_data_way', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $L1dWay = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_code_count', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The number of L1 instruction caches on the package, usually the same as the number of cores',
|
||||||
|
])]
|
||||||
|
private ?int $L1cCount = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_code_size', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The size of each Level 1 instruction cache in KB',
|
||||||
|
])]
|
||||||
|
private ?int $L1cSize = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_code_way', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $L1cWay = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_unified_count', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The number of L1 caches on the package, usually the same as the number of cores',
|
||||||
|
])]
|
||||||
|
private ?int $L1uCount = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_unified_size', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The size of each Level 1 unified cache in KB',
|
||||||
|
])]
|
||||||
|
private ?int $L1uSize = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l1_unified_way', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $L1uWay = NULL;
|
||||||
|
|
||||||
|
#[ORM\Column('l2_count', type: 'integer', options: [
|
||||||
|
'comment' => 'The number of L2 caches on the package, usually the same as the number of cores',
|
||||||
|
])]
|
||||||
|
private int $L2Count = 1;
|
||||||
|
|
||||||
|
#[ORM\Column('l2_size', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The size of each Level 2 cache in KB',
|
||||||
|
])]
|
||||||
|
private ?int $L2Size;
|
||||||
|
|
||||||
|
#[ORM\Column('l2_way', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $L2Way;
|
||||||
|
|
||||||
|
#[ORM\Column('l3_count', type: 'integer', options: [
|
||||||
|
'comment' => 'The number of L3 caches on the package',
|
||||||
|
])]
|
||||||
|
private int $L3Count = 0;
|
||||||
|
|
||||||
|
#[ORM\Column('l3_size', type: 'integer', nullable: TRUE, options: [
|
||||||
|
'comment' => 'The size of each Level 3 cache in KB',
|
||||||
|
])]
|
||||||
|
private ?int $L3Size;
|
||||||
|
|
||||||
|
#[ORM\Column('l3_way', type: 'integer', nullable: TRUE)]
|
||||||
|
private ?int $L3Way;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Collection Metadata
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[ORM\Column('count', type: 'integer')]
|
||||||
|
private int $count = 1;
|
||||||
|
|
||||||
|
#[ORM\Column('usable', type: 'boolean', options: [
|
||||||
|
'comment' => 'Whether the chip is working, and can be used with other hardware I have',
|
||||||
|
])]
|
||||||
|
private bool $usable = TRUE;
|
||||||
|
|
||||||
|
#[ORM\Column('received', type: 'boolean', options: [
|
||||||
|
'comment' => 'Whether I have the chip in my possession (instead of in shipping)',
|
||||||
|
])]
|
||||||
|
private bool $received = TRUE;
|
||||||
|
|
||||||
|
#[ORM\Column('link', type: 'string')]
|
||||||
|
private string $link;
|
||||||
|
|
||||||
|
#[ORM\Column('notes', type: 'text', nullable: TRUE)]
|
||||||
|
private ?string $notes = '';
|
||||||
|
}
|
21
src/Entity/ExpansionSlot.php
Normal file
21
src/Entity/ExpansionSlot.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use Doctrine\Common\Collections\{ArrayCollection, Collection};
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Table(name: 'expansion_slot', schema: 'collection')]
|
||||||
|
#[ORM\Entity]
|
||||||
|
class ExpansionSlot {
|
||||||
|
use GetSet;
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
||||||
|
#[ORM\SequenceGenerator(sequenceName: 'expansion_slot_id_seq', allocationSize: 1, initialValue: 1)]
|
||||||
|
private int $id;
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'name', unique: TRUE, nullable: FALSE)]
|
||||||
|
private string $name;
|
||||||
|
}
|
@ -27,6 +27,10 @@ trait GpuBase {
|
|||||||
#[ORM\Column(name: 'alternate_model_name', nullable: TRUE)]
|
#[ORM\Column(name: 'alternate_model_name', nullable: TRUE)]
|
||||||
private ?string $alternateModelName = '';
|
private ?string $alternateModelName = '';
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Physical Details
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(
|
#[ORM\Column(
|
||||||
name: 'card_key',
|
name: 'card_key',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
@ -56,6 +60,10 @@ trait GpuBase {
|
|||||||
)]
|
)]
|
||||||
private int $slotSpan = 1;
|
private int $slotSpan = 1;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Power / Gpu Clock
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(name: 'molex_power', options: ['default' => 0])]
|
#[ORM\Column(name: 'molex_power', options: ['default' => 0])]
|
||||||
private int $molexPower = 0;
|
private int $molexPower = 0;
|
||||||
|
|
||||||
@ -86,6 +94,10 @@ trait GpuBase {
|
|||||||
)]
|
)]
|
||||||
private ?int $boostClock;
|
private ?int $boostClock;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Memory Specs
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(
|
#[ORM\Column(
|
||||||
name: 'memory_clock',
|
name: 'memory_clock',
|
||||||
nullable: TRUE,
|
nullable: TRUE,
|
||||||
@ -110,6 +122,10 @@ trait GpuBase {
|
|||||||
#[ORM\Column(name: 'memory_type', nullable: TRUE)]
|
#[ORM\Column(name: 'memory_type', nullable: TRUE)]
|
||||||
private ?string $memoryType;
|
private ?string $memoryType;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// GPU Core Specs
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(name: 'shading_units', nullable: TRUE)]
|
#[ORM\Column(name: 'shading_units', nullable: TRUE)]
|
||||||
private ?int $shadingUnits;
|
private ?int $shadingUnits;
|
||||||
|
|
||||||
@ -128,6 +144,10 @@ trait GpuBase {
|
|||||||
#[ORM\Column(name: 'l2_cache', nullable: TRUE)]
|
#[ORM\Column(name: 'l2_cache', nullable: TRUE)]
|
||||||
private ?string $l2cache;
|
private ?string $l2cache;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Rendering API support
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(name: 'direct_x_support', nullable: TRUE)]
|
#[ORM\Column(name: 'direct_x_support', nullable: TRUE)]
|
||||||
private ?string $directXSupport;
|
private ?string $directXSupport;
|
||||||
|
|
||||||
@ -143,6 +163,10 @@ trait GpuBase {
|
|||||||
#[ORM\Column(name: 'shader_model', nullable: TRUE)]
|
#[ORM\Column(name: 'shader_model', nullable: TRUE)]
|
||||||
private ?string $shaderModel;
|
private ?string $shaderModel;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Collection metadata
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column(name: 'link', nullable: TRUE)]
|
#[ORM\Column(name: 'link', nullable: TRUE)]
|
||||||
private ?string $link;
|
private ?string $link;
|
||||||
|
|
||||||
|
@ -10,6 +10,10 @@ use Doctrine\ORM\Mapping as ORM;
|
|||||||
class Motherboard {
|
class Motherboard {
|
||||||
use GetSet;
|
use GetSet;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// General
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
#[ORM\Column('id', type: 'integer', nullable: FALSE)]
|
#[ORM\Column('id', type: 'integer', nullable: FALSE)]
|
||||||
#[ORM\Id]
|
#[ORM\Id]
|
||||||
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
||||||
@ -23,6 +27,9 @@ class Motherboard {
|
|||||||
#[ORM\Column('model', type: 'string')]
|
#[ORM\Column('model', type: 'string')]
|
||||||
private string $model;
|
private string $model;
|
||||||
|
|
||||||
|
#[ORM\Column('revision', type: 'string', nullable: TRUE)]
|
||||||
|
private string $revision;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<int, Socket>
|
* @var Collection<int, Socket>
|
||||||
*/
|
*/
|
||||||
@ -38,12 +45,37 @@ class Motherboard {
|
|||||||
#[ORM\JoinColumn('chipset_id', 'id', FALSE)]
|
#[ORM\JoinColumn('chipset_id', 'id', FALSE)]
|
||||||
private Chipset $chipset;
|
private Chipset $chipset;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Ram
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'ram_slot_count', type: 'integer', nullable: FALSE)]
|
||||||
|
private int $ramSlots;
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'max_ram', type: 'string', nullable: TRUE)]
|
||||||
|
private int $ramMaximum;
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'max_ram_speed', type: 'string', nullable: TRUE)]
|
||||||
|
private int $ramMaxSpeed;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Misc
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'count', nullable: FALSE, options: ['default' => 1])]
|
||||||
|
private int $count = 1;
|
||||||
|
|
||||||
|
#[ORM\Column(name: 'acquired', nullable: FALSE, options: ['default' => TRUE])]
|
||||||
|
private bool $acquired;
|
||||||
|
|
||||||
#[ORM\Column('link', type: 'string')]
|
#[ORM\Column('link', type: 'string')]
|
||||||
private string $link;
|
private string $link;
|
||||||
|
|
||||||
#[ORM\Column('notes', type: 'text', nullable: TRUE)]
|
#[ORM\Column('notes', type: 'text', nullable: TRUE)]
|
||||||
private ?string $notes = '';
|
private ?string $notes = '';
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Getters / Setters
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
|
53
src/Entity/PreviouslyOwnedCpu.php
Normal file
53
src/Entity/PreviouslyOwnedCpu.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Repository\CpuRepository;
|
||||||
|
use Doctrine\Common\Collections\{ArrayCollection, Collection};
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Table('previously_owned_cpu', schema: 'collection')]
|
||||||
|
#[ORM\Entity(repositoryClass: CpuRepository::class)]
|
||||||
|
class PreviouslyOwnedCpu {
|
||||||
|
use GetSet;
|
||||||
|
use CpuBase;
|
||||||
|
|
||||||
|
#[ORM\Column('id', type: 'integer', nullable: FALSE)]
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
|
||||||
|
private int $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Collection<int, Socket>
|
||||||
|
*/
|
||||||
|
#[ORM\ManyToMany(targetEntity: Socket::class, inversedBy: 'previously_owned_cpus', fetch: 'LAZY')]
|
||||||
|
#[ORM\JoinTable('collection.previously_owned_cpu_socket_link')]
|
||||||
|
#[ORM\JoinColumn('cpu_id', referencedColumnName: 'id')]
|
||||||
|
#[ORM\InverseJoinColumn('socket_id', referencedColumnName: 'id')]
|
||||||
|
#[ORM\OrderBy(['name' => 'asc'])]
|
||||||
|
private Collection $sockets;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->sockets = new ArrayCollection();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addSocket(Socket $socket): self
|
||||||
|
{
|
||||||
|
if ( ! $this->sockets->contains($socket))
|
||||||
|
{
|
||||||
|
$this->sockets->add($socket);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeSocket(Socket $socket): self
|
||||||
|
{
|
||||||
|
$this->sockets->removeElement($socket);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
105
src/Form/PreviouslyOwnedCpuType.php
Normal file
105
src/Form/PreviouslyOwnedCpuType.php
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Form;
|
||||||
|
|
||||||
|
use App\Enum\CpuArchitecture;
|
||||||
|
use App\Entity\
|
||||||
|
{Brand, PreviouslyOwnedCpu, Socket};
|
||||||
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
|
use Symfony\Component\Form\
|
||||||
|
{AbstractType, Extension\Core\Type\EnumType, Extension\Core\Type\UrlType, FormBuilderInterface};
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
use UnitEnum;
|
||||||
|
|
||||||
|
class PreviouslyOwnedCpuType extends AbstractType {
|
||||||
|
use BrandCategoryTrait;
|
||||||
|
|
||||||
|
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||||
|
{
|
||||||
|
$builder
|
||||||
|
->add('architecture', EnumType::class, [
|
||||||
|
'class' => CpuArchitecture::class,
|
||||||
|
'choice_label' => static fn (UnitEnum $choice): string => $choice->value,
|
||||||
|
'choices' => CpuArchitecture::getGroups(),
|
||||||
|
])
|
||||||
|
->add('brand', EntityType::class, [
|
||||||
|
'class' => Brand::class,
|
||||||
|
'query_builder' => self::filterBrands('cpu'),
|
||||||
|
])
|
||||||
|
->add('sockets')
|
||||||
|
->add('productLine')
|
||||||
|
->add('model')
|
||||||
|
->add('partNumber')
|
||||||
|
->add('lotNumber')
|
||||||
|
->add('microArchitecture')
|
||||||
|
->add('codeName')
|
||||||
|
|
||||||
|
// Cache Stuff
|
||||||
|
->add('L1dCount', NULL, [
|
||||||
|
'label' => 'L1 Data Cache(s)',
|
||||||
|
])
|
||||||
|
->add('L1dSize', NULL, [
|
||||||
|
'label' => 'L1 Data Size KB',
|
||||||
|
])
|
||||||
|
->add('L1dWay', NULL, [
|
||||||
|
'label' => 'L1 Data (x-way)',
|
||||||
|
])
|
||||||
|
->add('L1cCount', NULL, [
|
||||||
|
'label' => 'L1 Instruction Cache(s)',
|
||||||
|
])
|
||||||
|
->add('L1cSize', NULL, [
|
||||||
|
'label' => 'L1 Instruction Size KB',
|
||||||
|
])
|
||||||
|
->add('L1cWay', NULL, [
|
||||||
|
'label' => 'L1 Instruction (x-way)',
|
||||||
|
])
|
||||||
|
->add('L1uCount', NULL, [
|
||||||
|
'label' => 'L1 Unified Cache(s)',
|
||||||
|
])
|
||||||
|
->add('L1uSize', NULL, [
|
||||||
|
'label' => 'L1 Unified Cache Size: KB',
|
||||||
|
])
|
||||||
|
->add('L1uWay', NULL, [
|
||||||
|
'label' => 'L1 Unified (x-way)',
|
||||||
|
])
|
||||||
|
->add('L2Count', NULL, [
|
||||||
|
'label' => 'L2 Cache(s)',
|
||||||
|
])
|
||||||
|
->add('L2Size', NULL, [
|
||||||
|
'label' => 'L2 Cache Size KB (per unit)',
|
||||||
|
])
|
||||||
|
->add('L2Way', NULL, [
|
||||||
|
'label' => 'L2 Cache (x-way)',
|
||||||
|
])
|
||||||
|
->add('L3Count', NULL, [
|
||||||
|
'label' => 'L3 Cache(s)',
|
||||||
|
])
|
||||||
|
->add('L3Size', NULL, [
|
||||||
|
'label' => 'L3 Cache Size KB (per unit)',
|
||||||
|
])
|
||||||
|
->add('L3Way', NULL, [
|
||||||
|
'label' => 'L3 Cache (x-way)',
|
||||||
|
])
|
||||||
|
|
||||||
|
->add('baseSpeed')
|
||||||
|
->add('boostSpeed')
|
||||||
|
->add('cores')
|
||||||
|
->add('threads')
|
||||||
|
->add('igp')
|
||||||
|
->add('voltage')
|
||||||
|
->add('tdp')
|
||||||
|
->add('processNode')
|
||||||
|
->add('count')
|
||||||
|
->add('usable')
|
||||||
|
->add('received')
|
||||||
|
->add('link', UrlType::class)
|
||||||
|
->add('notes');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function configureOptions(OptionsResolver $resolver): void
|
||||||
|
{
|
||||||
|
$resolver->setDefaults([
|
||||||
|
'data_class' => PreviouslyOwnedCpu::class,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -12,36 +12,8 @@
|
|||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
|
||||||
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
||||||
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
|
||||||
|
|
||||||
class Kernel extends BaseKernel {
|
class Kernel extends BaseKernel {
|
||||||
use MicroKernelTrait;
|
use MicroKernelTrait;
|
||||||
|
|
||||||
protected function configureContainer(
|
|
||||||
ContainerConfigurator $container,
|
|
||||||
LoaderInterface $loader,
|
|
||||||
ContainerBuilder $builder
|
|
||||||
): void {
|
|
||||||
$configDir = $this->getConfigDir();
|
|
||||||
|
|
||||||
$container->import('../config/{packages}/*.yaml');
|
|
||||||
$container->import('../config/{packages}/' . $this->environment . '/*.yaml');
|
|
||||||
|
|
||||||
$container->import('../config/{packages}/*.php');
|
|
||||||
$container->import('../config/{packages}/' . $this->environment . '/*.php');
|
|
||||||
|
|
||||||
$container->import('../config/{services}.php');
|
|
||||||
$container->import('../config/{services}_' . $this->environment . '.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function configureRoutes(RoutingConfigurator $routes): void
|
|
||||||
{
|
|
||||||
$routes->import('../config/{routes}/' . $this->environment . '/*.php');
|
|
||||||
$routes->import('../config/{routes}/*.php');
|
|
||||||
$routes->import('../config/{routes}.php');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
74
src/Migrations/Version20240327190849.php
Normal file
74
src/Migrations/Version20240327190849.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Migrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20240327190849 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE TABLE collection.expansion_slot (id SERIAL NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_892885ED5E237E06 ON collection.expansion_slot (name)');
|
||||||
|
$this->addSql('CREATE TABLE collection.previously_owned_cpu (id SERIAL NOT NULL, brand_id INT NOT NULL, architecture VARCHAR(255) NOT NULL, product_line VARCHAR(255) NOT NULL, model VARCHAR(255) NOT NULL, part_number VARCHAR(255) NOT NULL, lot_number VARCHAR(255) DEFAULT NULL, micro_architecture VARCHAR(255) DEFAULT NULL, codename VARCHAR(255) DEFAULT NULL, base_speed INT NOT NULL, boost_speed INT DEFAULT NULL, cores INT NOT NULL, threads INT NOT NULL, igp VARCHAR(255) DEFAULT NULL, voltage DOUBLE PRECISION DEFAULT NULL, tdp INT DEFAULT NULL, process_node INT DEFAULT NULL, l1_data_count INT DEFAULT NULL, l1_data_size INT DEFAULT NULL, l1_data_way INT DEFAULT NULL, l1_code_count INT DEFAULT NULL, l1_code_size INT DEFAULT NULL, l1_code_way INT DEFAULT NULL, l1_unified_count INT DEFAULT NULL, l1_unified_size INT DEFAULT NULL, l1_unified_way INT DEFAULT NULL, l2_count INT NOT NULL, l2_size INT DEFAULT NULL, l2_way INT DEFAULT NULL, l3_count INT NOT NULL, l3_size INT DEFAULT NULL, l3_way INT DEFAULT NULL, count INT NOT NULL, usable BOOLEAN NOT NULL, received BOOLEAN NOT NULL, link VARCHAR(255) NOT NULL, notes TEXT DEFAULT NULL, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('CREATE INDEX IDX_5C01C1D844F5D008 ON collection.previously_owned_cpu (brand_id)');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.lot_number IS \'The CPU lot number, such as s-spec for Intel CPUs\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.base_speed IS \'The stock speed of the cpu in MHz\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.boost_speed IS \'The max boost speed of the cpu in MHz, if applicable\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.igp IS \'The name of the integrated graphics processor\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_data_count IS \'The number of L1 data caches on the package, usually the same as the number of cores\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_data_size IS \'The size of each Level 1 data cache in KB\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_code_count IS \'The number of L1 instruction caches on the package, usually the same as the number of cores\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_code_size IS \'The size of each Level 1 instruction cache in KB\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_unified_count IS \'The number of L1 caches on the package, usually the same as the number of cores\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l1_unified_size IS \'The size of each Level 1 unified cache in KB\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l2_count IS \'The number of L2 caches on the package, usually the same as the number of cores\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l2_size IS \'The size of each Level 2 cache in KB\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l3_count IS \'The number of L3 caches on the package\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.l3_size IS \'The size of each Level 3 cache in KB\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.usable IS \'Whether the chip is working, and can be used with other hardware I have\'');
|
||||||
|
$this->addSql('COMMENT ON COLUMN collection.previously_owned_cpu.received IS \'Whether I have the chip in my possession (instead of in shipping)\'');
|
||||||
|
$this->addSql('CREATE TABLE collection.previously_owned_cpu_socket_link (cpu_id INT NOT NULL, socket_id INT NOT NULL, PRIMARY KEY(cpu_id, socket_id))');
|
||||||
|
$this->addSql('CREATE INDEX IDX_3FDC320D3917014 ON collection.previously_owned_cpu_socket_link (cpu_id)');
|
||||||
|
$this->addSql('CREATE INDEX IDX_3FDC320DD20E239C ON collection.previously_owned_cpu_socket_link (socket_id)');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu ADD CONSTRAINT FK_5C01C1D844F5D008 FOREIGN KEY (brand_id) REFERENCES collection.brand (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu_socket_link ADD CONSTRAINT FK_3FDC320D3917014 FOREIGN KEY (cpu_id) REFERENCES collection.previously_owned_cpu (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu_socket_link ADD CONSTRAINT FK_3FDC320DD20E239C FOREIGN KEY (socket_id) REFERENCES collection.socket (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD revision VARCHAR(255) DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD ram_slot_count INT NOT NULL');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD max_ram VARCHAR(255) DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD max_ram_speed VARCHAR(255) DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD count INT DEFAULT 1 NOT NULL');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard ADD acquired BOOLEAN DEFAULT true NOT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SCHEMA public');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu DROP CONSTRAINT FK_5C01C1D844F5D008');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu_socket_link DROP CONSTRAINT FK_3FDC320D3917014');
|
||||||
|
$this->addSql('ALTER TABLE collection.previously_owned_cpu_socket_link DROP CONSTRAINT FK_3FDC320DD20E239C');
|
||||||
|
$this->addSql('DROP TABLE collection.expansion_slot');
|
||||||
|
$this->addSql('DROP TABLE collection.previously_owned_cpu');
|
||||||
|
$this->addSql('DROP TABLE collection.previously_owned_cpu_socket_link');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP revision');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP ram_slot_count');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP max_ram');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP max_ram_speed');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP count');
|
||||||
|
$this->addSql('ALTER TABLE collection.motherboard DROP acquired');
|
||||||
|
}
|
||||||
|
}
|
18
src/Repository/CpuRepository.php
Normal file
18
src/Repository/CpuRepository.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Repository;
|
||||||
|
|
||||||
|
use App\Entity\{Cpu, PreviouslyOwnedCpu};
|
||||||
|
|
||||||
|
class CpuRepository extends AcquireRepository {
|
||||||
|
public function deacquire(mixed $currentRecord): void
|
||||||
|
{
|
||||||
|
$currentRecord->setReceived(TRUE);
|
||||||
|
$this->moveRecord($currentRecord, new PreviouslyOwnedCpu());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reacquire(mixed $currentRecord): void
|
||||||
|
{
|
||||||
|
$this->moveRecord($currentRecord, new Cpu());
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ class <?= $class_name ?> extends AbstractController {
|
|||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
<?= $generator->generateRouteForControllerMethod('/new', sprintf('%s_new', $route_name), ['GET', 'POST']) ?>
|
<?= $generator->generateRouteForControllerMethod('/new', sprintf('%s_new', $route_name), ['GET', 'POST']) ?>
|
||||||
<?php if (isset($repository_full_class_name) && $generator->repositoryHasSaveAndRemoveMethods($repository_full_class_name))
|
<?php if (isset($repository_full_class_name))
|
||||||
{ ?>
|
{ ?>
|
||||||
public function new(Request $request, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
public function new(Request $request, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
||||||
<?php }
|
<?php }
|
||||||
@ -51,7 +51,7 @@ class <?= $class_name ?> extends AbstractController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<?= $generator->generateRouteForControllerMethod(sprintf('/{%s}/edit', $entity_identifier), sprintf('%s_edit', $route_name), ['GET', 'POST']) ?>
|
<?= $generator->generateRouteForControllerMethod(sprintf('/{%s}/edit', $entity_identifier), sprintf('%s_edit', $route_name), ['GET', 'POST']) ?>
|
||||||
<?php if (isset($repository_full_class_name) && $generator->repositoryHasSaveAndRemoveMethods($repository_full_class_name))
|
<?php if (isset($repository_full_class_name))
|
||||||
{ ?>
|
{ ?>
|
||||||
public function edit(Request $request, <?= $entity_class_name ?> $<?= $entity_var_singular ?>, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
public function edit(Request $request, <?= $entity_class_name ?> $<?= $entity_var_singular ?>, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
||||||
<?php }
|
<?php }
|
||||||
@ -64,7 +64,7 @@ class <?= $class_name ?> extends AbstractController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<?= $generator->generateRouteForControllerMethod(sprintf('/{%s}', $entity_identifier), sprintf('%s_delete', $route_name), ['POST']) ?>
|
<?= $generator->generateRouteForControllerMethod(sprintf('/{%s}', $entity_identifier), sprintf('%s_delete', $route_name), ['POST']) ?>
|
||||||
<?php if (isset($repository_full_class_name) && $generator->repositoryHasSaveAndRemoveMethods($repository_full_class_name))
|
<?php if (isset($repository_full_class_name))
|
||||||
{ ?>
|
{ ?>
|
||||||
public function delete(Request $request, <?= $entity_class_name ?> $<?= $entity_var_singular ?>, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
public function delete(Request $request, <?= $entity_class_name ?> $<?= $entity_var_singular ?>, <?= $repository_class_name ?> $<?= $repository_var ?>): Response
|
||||||
<?php }
|
<?php }
|
||||||
|
33
symfony.lock
33
symfony.lock
@ -2,27 +2,12 @@
|
|||||||
"composer/package-versions-deprecated": {
|
"composer/package-versions-deprecated": {
|
||||||
"version": "1.11.99.3"
|
"version": "1.11.99.3"
|
||||||
},
|
},
|
||||||
"doctrine/annotations": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "a2759dd6123694c8d901d0ec80006e044c2e6457"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"config/routes/annotations.yaml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"doctrine/cache": {
|
"doctrine/cache": {
|
||||||
"version": "1.10.2"
|
"version": "1.10.2"
|
||||||
},
|
},
|
||||||
"doctrine/collections": {
|
"doctrine/collections": {
|
||||||
"version": "1.6.7"
|
"version": "1.6.7"
|
||||||
},
|
},
|
||||||
"doctrine/common": {
|
|
||||||
"version": "2.13.3"
|
|
||||||
},
|
|
||||||
"doctrine/dbal": {
|
"doctrine/dbal": {
|
||||||
"version": "2.12.1"
|
"version": "2.12.1"
|
||||||
},
|
},
|
||||||
@ -197,27 +182,12 @@
|
|||||||
"sebastian/recursion-context": {
|
"sebastian/recursion-context": {
|
||||||
"version": "4.0.4"
|
"version": "4.0.4"
|
||||||
},
|
},
|
||||||
"sebastian/resource-operations": {
|
|
||||||
"version": "3.0.3"
|
|
||||||
},
|
|
||||||
"sebastian/type": {
|
"sebastian/type": {
|
||||||
"version": "2.3.4"
|
"version": "2.3.4"
|
||||||
},
|
},
|
||||||
"sebastian/version": {
|
"sebastian/version": {
|
||||||
"version": "3.0.2"
|
"version": "3.0.2"
|
||||||
},
|
},
|
||||||
"sensio/framework-extra-bundle": {
|
|
||||||
"version": "5.2",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "5.2",
|
|
||||||
"ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"config/packages/sensio_framework_extra.yaml"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"symfony/cache": {
|
"symfony/cache": {
|
||||||
"version": "v5.2.3"
|
"version": "v5.2.3"
|
||||||
},
|
},
|
||||||
@ -352,9 +322,6 @@
|
|||||||
"symfony/polyfill-mbstring": {
|
"symfony/polyfill-mbstring": {
|
||||||
"version": "v1.22.1"
|
"version": "v1.22.1"
|
||||||
},
|
},
|
||||||
"symfony/polyfill-php72": {
|
|
||||||
"version": "v1.24.0"
|
|
||||||
},
|
|
||||||
"symfony/polyfill-php80": {
|
"symfony/polyfill-php80": {
|
||||||
"version": "v1.22.1"
|
"version": "v1.22.1"
|
||||||
},
|
},
|
||||||
|
@ -34,17 +34,17 @@
|
|||||||
<a href="{{ path('gpu_index') }}">🎮 GPUs</a>
|
<a href="{{ path('gpu_index') }}">🎮 GPUs</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="not-implemented {{ route starts with 'motherboard_' ? 'is-active' }}">
|
<li class="not-implemented {{ route starts with 'motherboard_' ? 'is-active' }}">
|
||||||
<a href="/motherboard/">🤰 Motherboards</a>
|
<a href="/motherboards/">🤰 Motherboards</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
<li class="menu-text">Previously Owned</li>
|
<li class="menu-text">Previously Owned</li>
|
||||||
<li class="not-implemented {{ route starts with 'previously-owned-cpu_' ? 'is-active' }}">
|
<li class="{{ route starts with 'previously_owned_cpu_' ? 'is-active' }}">
|
||||||
<a href="#">🧠 CPUs</a>
|
<a href="{{ path('previously_owned_cpu_index') }}">🧠 CPUs</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="not-implemented {{ route starts with 'previously-owned-fpu_' ? 'is-active' }}">
|
<!-- <li class="not-implemented {{ route starts with 'previously-owned-fpu_' ? 'is-active' }}">
|
||||||
<a href="#">🧮 FPUs</a>
|
<a href="#">🧮 FPUs</a>
|
||||||
</li>
|
</li>-->
|
||||||
<li class="{{ route starts with 'previously-owned-gpu_' ? 'is-active' }}">
|
<li class="{{ route starts with 'previously-owned-gpu_' ? 'is-active' }}">
|
||||||
<a href="{{ path('previously-owned-gpu_index') }}">🎮 GPUs</a>
|
<a href="{{ path('previously-owned-gpu_index') }}">🎮 GPUs</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -104,9 +104,21 @@
|
|||||||
>Update</button>
|
>Update</button>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
|
|
||||||
<form method="post" action="{{ path('cpu_delete', {'id': cpu.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
<div class="grid-x grid-margin-x">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ cpu.id) }}">
|
<div class="cell large-6 small-12">
|
||||||
<button type="submit" class="alert button expanded">Delete</button>
|
{{ form_start(deacquire_form) }}
|
||||||
</form>
|
{{ form_widget(deacquire_form) }}
|
||||||
|
<button type="submit" class="button expanded">De-acquire</button>
|
||||||
|
{{ form_end(deacquire_form) }}
|
||||||
|
</div>
|
||||||
|
<div class="cell large-6 small-12">
|
||||||
|
<form method="post" action="{{ path('cpu_delete', {'id': cpu.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||||
|
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ cpu.id) }}">
|
||||||
|
<button type="submit" class="alert button expanded">Delete</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
data-tabs
|
data-tabs
|
||||||
id="classifications"
|
id="classifications"
|
||||||
>
|
>
|
||||||
<li class="tabs-title is-active" aria-selected="true">
|
<li class="tabs-title">
|
||||||
<a href="#not_acquired">On the Way</a>
|
<a href="#not_acquired">On the Way</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="tabs-title">
|
<li class="tabs-title is-active" aria-selected="true">
|
||||||
<a href="#pcie">PCIe</a>
|
<a href="#pcie">PCIe</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="tabs-title">
|
<li class="tabs-title">
|
||||||
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
<div class="tabs-content" data-tabs-content="classifications">
|
<div class="tabs-content" data-tabs-content="classifications">
|
||||||
{% for label, gpus in gpus %}
|
{% for label, gpus in gpus %}
|
||||||
<div class="tabs-panel {% if label == 'not_acquired' %}is-active{% endif %}" id="{{ label }}">
|
<div class="tabs-panel {% if label == 'pcie' %}is-active{% endif %}" id="{{ label }}">
|
||||||
<table class="hover scroll sortable stack">
|
<table class="hover scroll sortable stack">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
114
templates/previously_owned_cpu/edit.html.twig
Normal file
114
templates/previously_owned_cpu/edit.html.twig
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
{% extends 'form.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}Previously Owned Cpu - Edit{% endblock %}
|
||||||
|
|
||||||
|
{% block form %}
|
||||||
|
<h2>Edit Previously-Owned Cpu</h2>
|
||||||
|
|
||||||
|
<div class="small callout">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('previously_owned_cpu_index') }}">Back to the list</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ form_start(form) }}
|
||||||
|
<fieldset class="large primary callout">
|
||||||
|
<legend>Brand, Model, Family</legend>
|
||||||
|
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell">{{ form_row(form.architecture) }}</div>
|
||||||
|
<div class="cell">{{ form_row(form.sockets) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.brand) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.productLine) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.model) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.partNumber) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.lotNumber) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.microArchitecture) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.codeName) }}</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="large primary callout">
|
||||||
|
<legend>Cache</legend>
|
||||||
|
|
||||||
|
<details {% if previously_owned_cpu.L1uSize %}open{% endif %}>
|
||||||
|
<summary>Unified Cache</summary>
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1uCount) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1uSize) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1uWay) }}</div>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details {% if previously_owned_cpu.L1cSize %}open{% endif %}>
|
||||||
|
<summary>Split cache</summary>
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1cCount) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1cSize) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1cWay) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1dCount) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1dSize) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L1dWay) }}</div>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L2Count) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L2Size) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L2Way) }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L3Count) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L3Size) }}</div>
|
||||||
|
<div class="cell medium-4">{{ form_row(form.L3Way) }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="large primary callout">
|
||||||
|
<legend>Speed and Power</legend>
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-6">{{ form_row(form.baseSpeed) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.boostSpeed) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.cores) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.threads) }}</div>
|
||||||
|
<div class="cell">{{ form_row(form.igp) }}</div>
|
||||||
|
<div class="cell">{{ form_row(form.voltage) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.tdp) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.processNode) }}</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="large primary callout">
|
||||||
|
<legend>Misc</legend>
|
||||||
|
<div class="grid-x grid-margin-x">
|
||||||
|
<div class="cell medium-4">{{ form_row(form.count) }}</div>
|
||||||
|
<div class="cell medium-8"> </div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.usable) }}</div>
|
||||||
|
<div class="cell medium-6">{{ form_row(form.received) }}</div>
|
||||||
|
<div class="cell">{{ form_row(form.link) }}</div>
|
||||||
|
<div class="cell">{{ form_row(form.notes) }}</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
{{ form_widget(form) }}
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="success button expanded"
|
||||||
|
>Update</button>
|
||||||
|
{{ form_end(form) }}
|
||||||
|
|
||||||
|
{{ form_start(reacquire_form) }}
|
||||||
|
{{ form_widget(reacquire_form) }}
|
||||||
|
<button type="submit" class="button expanded">Re-acquire</button>
|
||||||
|
{{ form_end(reacquire_form) }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
102
templates/previously_owned_cpu/index.html.twig
Normal file
102
templates/previously_owned_cpu/index.html.twig
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}Previously Owned Cpus{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<h2>Previously Owned CPUs</h2>
|
||||||
|
|
||||||
|
<table class="hover scroll sortable stack">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th> </th>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Arch</th>
|
||||||
|
<th>Model</th>
|
||||||
|
<th>Socket(s)</th>
|
||||||
|
<th>Part Number</th>
|
||||||
|
<th>Lot Number</th>
|
||||||
|
<th>uArch</th>
|
||||||
|
<th>Code Name</th>
|
||||||
|
<th>Speed</th>
|
||||||
|
<th>C/T</th>
|
||||||
|
<th>L1 Cache</th>
|
||||||
|
<th>L2 Cache</th>
|
||||||
|
<th>L3 Cache</th>
|
||||||
|
<th>Igp</th>
|
||||||
|
<th>Count</th>
|
||||||
|
<th>Usable</th>
|
||||||
|
<th>Received</th>
|
||||||
|
<th>Notes</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for cpu in cpus %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('previously_owned_cpu_show', {'id': cpu.id}) }}">
|
||||||
|
View 👁
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('previously_owned_cpu_edit', {'id': cpu.id}) }}">
|
||||||
|
Edit <span class="edit-icon">✎</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>{{ cpu.id }}</td>
|
||||||
|
<td>{{ cpu.architecture.value }}</td>
|
||||||
|
<td>{{ cpu.brand.name }} {{ cpu.productLine }} {{ cpu.model }}</td>
|
||||||
|
<td>
|
||||||
|
<ul>
|
||||||
|
{% for socket in cpu.sockets %}
|
||||||
|
<li>{{ socket.name }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>{{ cpu.partNumber }}</td>
|
||||||
|
<td>{{ cpu.lotNumber }}</td>
|
||||||
|
<td>{{ cpu.microArchitecture }}</td>
|
||||||
|
<td>{{ cpu.codeName }}</td>
|
||||||
|
<td>
|
||||||
|
{{ cpu.baseSpeed }}
|
||||||
|
{% if cpu.boostSpeed > 0 %}
|
||||||
|
-{{ cpu.boostSpeed }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{ cpu.cores }} / {{ cpu.threads }}</td>
|
||||||
|
<td>
|
||||||
|
{% if cpu.L1uCount > 0 %}
|
||||||
|
{{ cpu.L1uCount }}x {{ cpu.L1uSize }}KB {{ cpu.L1uWay }}-way
|
||||||
|
{% endif %}
|
||||||
|
{% if cpu.L1cCount > 0 %}
|
||||||
|
{{ cpu.L1cCount }}x {{ cpu.L1dSize }}KB {{ cpu.L1dWay }}-way data,
|
||||||
|
{{ cpu.L1dCount }}x {{ cpu.L1cSize }}KB {{ cpu.L1cWay }}-way instruction
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if cpu.L2Count > 0 %}
|
||||||
|
{{ cpu.L2Count }}x {{ cpu.L2Size }}KB {{ cpu.L2Way }}-way
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if cpu.L3Count > 0 %}
|
||||||
|
{{ cpu.L3Count }}x {{ cpu.L3Size }}KB {{ cpu.L3Way }}-way
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{ cpu.igp }}</td>
|
||||||
|
<td>{{ cpu.count }}</td>
|
||||||
|
<td>{{ cpu.usable ? 'Yes' : 'No' }}</td>
|
||||||
|
<td>{{ cpu.received ? 'Yes' : 'No' }}</td>
|
||||||
|
<td>{{ cpu.notes }}</td>
|
||||||
|
</tr>
|
||||||
|
{% else %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="33">no records found</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
178
templates/previously_owned_cpu/show.html.twig
Normal file
178
templates/previously_owned_cpu/show.html.twig
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
{% extends 'form.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}PreviouslyOwnedCpu{% endblock %}
|
||||||
|
|
||||||
|
{% block form %}
|
||||||
|
<h2>PreviouslyOwnedCpu</h2>
|
||||||
|
|
||||||
|
<div class="callout">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('previously_owned_cpu_index') }}">Back to the list</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('previously_owned_cpu_edit', {'id': previously_owned_cpu.id}) }}">Edit</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
|
||||||
|
<form method="post" action="{{ path('previously_owned_cpu_delete', {'id': previously_owned_cpu.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||||
|
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ previously_owned_cpu.id) }}">
|
||||||
|
<button type="submit" class="alert button expanded">Delete</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="large primary callout">
|
||||||
|
<table class="table">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>Id</th>
|
||||||
|
<td>{{ previously_owned_cpu.id }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Architecture</th>
|
||||||
|
<td>{{ previously_owned_cpu.architecture }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>ProductLine</th>
|
||||||
|
<td>{{ previously_owned_cpu.productLine }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Model</th>
|
||||||
|
<td>{{ previously_owned_cpu.model }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>PartNumber</th>
|
||||||
|
<td>{{ previously_owned_cpu.partNumber }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>LotNumber</th>
|
||||||
|
<td>{{ previously_owned_cpu.lotNumber }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>MicroArchitecture</th>
|
||||||
|
<td>{{ previously_owned_cpu.microArchitecture }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>CodeName</th>
|
||||||
|
<td>{{ previously_owned_cpu.codeName }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>BaseSpeed</th>
|
||||||
|
<td>{{ previously_owned_cpu.baseSpeed }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>BoostSpeed</th>
|
||||||
|
<td>{{ previously_owned_cpu.boostSpeed }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Cores</th>
|
||||||
|
<td>{{ previously_owned_cpu.cores }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Threads</th>
|
||||||
|
<td>{{ previously_owned_cpu.threads }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Igp</th>
|
||||||
|
<td>{{ previously_owned_cpu.igp }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Voltage</th>
|
||||||
|
<td>{{ previously_owned_cpu.voltage }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Tdp</th>
|
||||||
|
<td>{{ previously_owned_cpu.tdp }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>ProcessNode</th>
|
||||||
|
<td>{{ previously_owned_cpu.processNode }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1dCount</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1dCount }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1dSize</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1dSize }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1dWay</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1dWay }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1cCount</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1cCount }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1cSize</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1cSize }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1cWay</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1cWay }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1uCount</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1uCount }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1uSize</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1uSize }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L1uWay</th>
|
||||||
|
<td>{{ previously_owned_cpu.L1uWay }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L2Count</th>
|
||||||
|
<td>{{ previously_owned_cpu.L2Count }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L2Size</th>
|
||||||
|
<td>{{ previously_owned_cpu.L2Size }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L2Way</th>
|
||||||
|
<td>{{ previously_owned_cpu.L2Way }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L3Count</th>
|
||||||
|
<td>{{ previously_owned_cpu.L3Count }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L3Size</th>
|
||||||
|
<td>{{ previously_owned_cpu.L3Size }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>L3Way</th>
|
||||||
|
<td>{{ previously_owned_cpu.L3Way }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Count</th>
|
||||||
|
<td>{{ previously_owned_cpu.count }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Usable</th>
|
||||||
|
<td>{{ previously_owned_cpu.usable ? 'Yes' : 'No' }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Received</th>
|
||||||
|
<td>{{ previously_owned_cpu.received ? 'Yes' : 'No' }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Link</th>
|
||||||
|
<td>{{ previously_owned_cpu.link }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Notes</th>
|
||||||
|
<td>{{ previously_owned_cpu.notes }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user