mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-17 12:50:08 -07:00
Change NumberTrait to use id variable
This commit is contained in:
parent
1c39cc1f81
commit
78ce9a9e64
@ -3,9 +3,8 @@
|
||||
namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Rebrickable\Part;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use AppBundle\Form\Filter\Model\ModelFilterType;
|
||||
use AppBundle\Form\Search\ModelSearchType;
|
||||
use AppBundle\Model\ModelSearch;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
@ -24,27 +23,29 @@ class ModelController extends Controller
|
||||
* Lists all part entities.
|
||||
*
|
||||
* @Route("/", name="model_index")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function indexAction(Request $request)
|
||||
{
|
||||
$form = $this->get('form.factory')->create(ModelFilterType::class);
|
||||
$modelSearch = new ModelSearch();
|
||||
|
||||
$filterBuilder = $this->get('repository.ldraw.model')->getFilteredQueryBuilder();
|
||||
$form = $this->get('form.factory')->createNamedBuilder('m', ModelSearchType::class, $modelSearch)->getForm();
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($request->query->has($form->getName())) {
|
||||
// manually bind values from the request
|
||||
$form->submit($request->query->get($form->getName()));
|
||||
$elasticaManager = $this->get('fos_elastica.manager');
|
||||
$results = $elasticaManager->getRepository(Model::class)->search($modelSearch);
|
||||
|
||||
// build the query from the given form object
|
||||
$this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
|
||||
}
|
||||
$paginator = $this->get('knp_paginator');
|
||||
$sets = $paginator->paginate(
|
||||
$results,
|
||||
$request->query->getInt('page', 1)/*page number*/,
|
||||
$request->query->getInt('limit', 30)/*limit per page*/
|
||||
);
|
||||
|
||||
$paginator = $this->get('knp_paginator');
|
||||
$models = $paginator->paginate(
|
||||
$filterBuilder->getQuery(),
|
||||
$results,
|
||||
$request->query->getInt('page', 1)/*page number*/,
|
||||
$request->query->getInt('limit', 40)/*limit per page*/
|
||||
$request->query->getInt('limit', 30)/*limit per page*/
|
||||
);
|
||||
|
||||
return $this->render('model/index.html.twig', [
|
||||
@ -56,20 +57,20 @@ class ModelController extends Controller
|
||||
/**
|
||||
* Finds and displays a model entity.
|
||||
*
|
||||
* @Route("/{number}", name="model_detail")
|
||||
* @Route("/{id}", name="model_detail")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function detailAction($number)
|
||||
public function detailAction($id)
|
||||
{
|
||||
/** @var Model $model */
|
||||
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($number)) {
|
||||
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($id)) {
|
||||
try {
|
||||
$subparts = $this->get('service.model')->getAllSubparts($model);
|
||||
|
||||
$rbParts = $model != null ? $this->get('repository.rebrickable.part')->findAllByModel($model) : null;
|
||||
$sets = $model != null ? $this->get('repository.rebrickable.set')->findAllByModel($model) : null;
|
||||
|
||||
$related = $this->get('repository.ldraw.model')->findAllRelatedModels($model->getNumber());
|
||||
$related = $this->get('repository.ldraw.model')->findAllRelatedModels($model->getId());
|
||||
|
||||
return $this->render('model/detail.html.twig', [
|
||||
'model' => $model,
|
||||
@ -87,7 +88,7 @@ class ModelController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/zip", name="model_zip")
|
||||
* @Route("/{id}/zip", name="model_zip")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function zipAction(Request $request, Model $model)
|
||||
@ -100,7 +101,7 @@ class ModelController extends Controller
|
||||
// Create the disposition of the file
|
||||
$disposition = $response->headers->makeDisposition(
|
||||
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
|
||||
"model_{$model->getNumber()}_{$model->getName()}.zip"
|
||||
"model_{$model->getId()}_{$model->getName()}.zip"
|
||||
);
|
||||
|
||||
$response->headers->set('Content-Disposition', $disposition);
|
||||
|
@ -18,7 +18,7 @@ class PartController extends Controller
|
||||
/**
|
||||
* Finds and displays a part entity.
|
||||
*
|
||||
* @Route("/{number}", name="reb_part_detail")
|
||||
* @Route("/{id}", name="reb_part_detail")
|
||||
*/
|
||||
public function detailAction(Part $part)
|
||||
{
|
||||
@ -28,14 +28,14 @@ class PartController extends Controller
|
||||
|
||||
if ($part) {
|
||||
try {
|
||||
$apiPart = $this->get('api.manager.rebrickable')->getPart($part->getNumber());
|
||||
$apiPart = $this->get('api.manager.rebrickable')->getPart($part->getId());
|
||||
} catch (EmptyResponseException $e) {
|
||||
$this->addFlash('warning', 'Part not found');
|
||||
} catch (\Exception $e) {
|
||||
$this->addFlash('error', $e->getMessage());
|
||||
}
|
||||
|
||||
$sets = $part != null ? $em->getRepository(Set::class)->findAllByPartNumber($part->getNumber()) : null;
|
||||
$sets = $part != null ? $em->getRepository(Set::class)->findAllByPartNumber($part->getId()) : null;
|
||||
|
||||
return $this->render('rebrickable/part/detail.html.twig', [
|
||||
'part' => $part,
|
||||
|
@ -4,6 +4,7 @@ namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use FOS\ElasticaBundle\Repository;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
@ -23,12 +24,22 @@ class SearchController extends Controller
|
||||
{
|
||||
$query = trim(strip_tags($request->get('query')));
|
||||
|
||||
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query);
|
||||
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query);
|
||||
/** var FOS\ElasticaBundle\Manager\RepositoryManager */
|
||||
$repositoryManager = $this->get('fos_elastica.manager');
|
||||
|
||||
/** @var Repository $setRepository */
|
||||
$setRepository = $repositoryManager->getRepository(Set::class);
|
||||
/** @var Repository $modelRepository */
|
||||
$modelRepository = $repositoryManager->getRepository(Model::class);
|
||||
|
||||
// Option 1. Returns all users who have example.net in any of their mapped fields
|
||||
$setsResult = $setRepository->find($query, 5000);
|
||||
$modelResult = $modelRepository->find($query, 5000);
|
||||
|
||||
return $this->render('search/index.html.twig', [
|
||||
'sets' => $setsResult,
|
||||
'models' => $modelsResult,
|
||||
'models' => $modelResult,
|
||||
'query' => $query,
|
||||
]);
|
||||
}
|
||||
|
||||
@ -39,25 +50,33 @@ class SearchController extends Controller
|
||||
{
|
||||
$query = trim(strip_tags($request->get('query')));
|
||||
|
||||
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query, 7);
|
||||
/** var FOS\ElasticaBundle\Manager\RepositoryManager */
|
||||
$repositoryManager = $this->get('fos_elastica.manager');
|
||||
|
||||
/** @var Repository $setRepository */
|
||||
$setRepository = $repositoryManager->getRepository(Set::class);
|
||||
/** @var Repository $modelRepository */
|
||||
$modelRepository = $repositoryManager->getRepository(Model::class);
|
||||
|
||||
// Option 1. Returns all users who have example.net in any of their mapped fields
|
||||
$setsResult = $setRepository->find($query, 5);
|
||||
$modelResult = $modelRepository->find($query, 5);
|
||||
|
||||
$models = [];
|
||||
/** @var Model $model */
|
||||
foreach ($modelsResult as $model) {
|
||||
foreach ($modelResult as $model) {
|
||||
$models[] = [
|
||||
'title' => $model->getNumber().' '.$model->getName(),
|
||||
'url' => $this->generateUrl('model_detail', ['number' => $model->getNumber()]),
|
||||
'title' => $model->getId().' '.$model->getName(),
|
||||
'url' => $this->generateUrl('model_detail', ['id' => $model->getId()]),
|
||||
];
|
||||
}
|
||||
|
||||
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query, 7);
|
||||
|
||||
$sets = [];
|
||||
/** @var Set $set */
|
||||
foreach ($setsResult as $set) {
|
||||
$sets[] = [
|
||||
'title' => $set->getNumber().' '.$set->getName(),
|
||||
'url' => $this->generateUrl('set_detail', ['number' => $set->getNumber()]),
|
||||
'title' => $set->getId().' '.$set->getName(),
|
||||
'url' => $this->generateUrl('set_detail', ['id' => $set->getId()]),
|
||||
];
|
||||
}
|
||||
|
||||
@ -73,6 +92,11 @@ class SearchController extends Controller
|
||||
'results' => $models,
|
||||
],
|
||||
],
|
||||
// optional action below results
|
||||
'action' => [
|
||||
'url' => $this->generateUrl('search_results', ['query' => $query]),
|
||||
'text' => 'View results',
|
||||
],
|
||||
]);
|
||||
|
||||
return $response;
|
||||
|
@ -5,7 +5,10 @@ namespace AppBundle\Controller;
|
||||
use AppBundle\Api\Exception\ApiException;
|
||||
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use AppBundle\Form\Filter\Set\SetFilterType;
|
||||
use AppBundle\Form\Search\SetSearchType;
|
||||
use AppBundle\Model\SetSearch;
|
||||
use AppBundle\Repository\Rebrickable\Inventory_PartRepository;
|
||||
use AppBundle\Service\SetService;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
@ -23,25 +26,19 @@ class SetController extends Controller
|
||||
*/
|
||||
public function indexAction(Request $request)
|
||||
{
|
||||
$form = $this->get('form.factory')->create(SetFilterType::class);
|
||||
$setSearch = new SetSearch();
|
||||
|
||||
$filterBuilder = $this->get('repository.rebrickable.set')
|
||||
->createQueryBuilder('s')
|
||||
->orderBy('s.year', 'DESC');
|
||||
$form = $this->get('form.factory')->createNamedBuilder('s', SetSearchType::class, $setSearch)->getForm();
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($request->query->has($form->getName())) {
|
||||
// manually bind values from the request
|
||||
$form->submit($request->query->get($form->getName()));
|
||||
|
||||
// build the query from the given form object
|
||||
$this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
|
||||
}
|
||||
$elasticaManager = $this->get('fos_elastica.manager');
|
||||
$results = $elasticaManager->getRepository(Set::class)->search($setSearch);
|
||||
|
||||
$paginator = $this->get('knp_paginator');
|
||||
$sets = $paginator->paginate(
|
||||
$filterBuilder->getQuery(),
|
||||
$results,
|
||||
$request->query->getInt('page', 1)/*page number*/,
|
||||
$request->query->getInt('limit', 30)/*limit per page*/
|
||||
$request->query->getInt('limit', 24)/*limit per page*/
|
||||
);
|
||||
|
||||
return $this->render('set/index.html.twig', [
|
||||
@ -51,16 +48,23 @@ class SetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}", name="set_detail")
|
||||
* @Route("/{id}", name="set_detail")
|
||||
*/
|
||||
public function detailAction(Request $request, Set $set)
|
||||
{
|
||||
/** @var Inventory_PartRepository $inventoryPartRepository */
|
||||
$inventoryPartRepository = $this->get('repository.rebrickable.inventoryPart');
|
||||
/** @var SetService $setService */
|
||||
$setService = $this->get('service.set');
|
||||
|
||||
$bricksetSet = null;
|
||||
$partCount = $this->get('repository.rebrickable.inventoryPart')->getPartCount($set->getNumber(), false);
|
||||
$partCount = $inventoryPartRepository->getPartCount($set, false);
|
||||
$missingCount = $inventoryPartRepository->getPartCount($set, false, false);
|
||||
$uniqueMissing = $setService->getParts($set, false, false);
|
||||
|
||||
try {
|
||||
if (!($bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($set->getNumber()))) {
|
||||
$this->addFlash('warning', "{$set->getNumber()} not found in Brickset database");
|
||||
if (!($bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($set->getId()))) {
|
||||
$this->addFlash('warning', "{$set->getId()} not found in Brickset database");
|
||||
}
|
||||
} catch (ApiException $e) {
|
||||
$this->addFlash('error', $e->getService());
|
||||
@ -72,20 +76,22 @@ class SetController extends Controller
|
||||
'set' => $set,
|
||||
'brset' => $bricksetSet,
|
||||
'partCount' => $partCount,
|
||||
'missingCount' => $missingCount,
|
||||
'uniqueMissing' => $uniqueMissing,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/parts", name="set_parts")
|
||||
* @Route("/{id}/parts", name="set_parts")
|
||||
*/
|
||||
public function partsAction(Request $request, Set $set)
|
||||
{
|
||||
$inventoryPartRepository = $this->get('repository.rebrickable.inventorypart');
|
||||
|
||||
$regularParts = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), false, true);
|
||||
$spareParts = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), true);
|
||||
$regularParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, true);
|
||||
$spareParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), true);
|
||||
|
||||
$missing = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), false, false);
|
||||
$missing = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, false);
|
||||
|
||||
$template = $this->render('set/tabs/inventory.html.twig', [
|
||||
'regularParts' => $regularParts,
|
||||
@ -105,7 +111,7 @@ class SetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/models", name="set_models")
|
||||
* @Route("/{id}/models", name="set_models")
|
||||
*/
|
||||
public function modelsAction(Request $request, Set $set)
|
||||
{
|
||||
@ -118,8 +124,7 @@ class SetController extends Controller
|
||||
$models = $this->get('service.set')->getModels($set, false);
|
||||
$spareModels = $this->get('service.set')->getModels($set, true);
|
||||
$missing = $this->get('service.set')->getParts($set, false, false);
|
||||
// $missing = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), false, false);
|
||||
$missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), true, false);
|
||||
$missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getId(), true, false);
|
||||
} catch (\Exception $e) {
|
||||
$this->addFlash('error', $e->getMessage());
|
||||
}
|
||||
@ -144,7 +149,7 @@ class SetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/colors", name="set_colors")
|
||||
* @Route("/{id}/colors", name="set_colors")
|
||||
*/
|
||||
public function colorsAction(Request $request, Set $set)
|
||||
{
|
||||
@ -173,13 +178,13 @@ class SetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/sets", name="set_sets")
|
||||
* @Route("/{id}/sets", name="set_sets")
|
||||
*/
|
||||
public function setsAction(Request $request, Set $set)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getNumber());
|
||||
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getId());
|
||||
|
||||
$template = $this->render('set/tabs/sets.html.twig', [
|
||||
'inventorySets' => $inventorySets,
|
||||
@ -197,13 +202,13 @@ class SetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/zip", name="set_zip")
|
||||
* @Route("/{id}/zip", name="set_zip")
|
||||
*/
|
||||
public function zipAction(Request $request, Set $set)
|
||||
{
|
||||
$sorted = $request->query->get('sorted') == 1 ? true : false;
|
||||
|
||||
$sort = $sorted ? 'sorted' : 'unsorted';
|
||||
$sort = $sorted ? 'Multi-Color' : 'Uni-Color';
|
||||
|
||||
$zip = $this->get('service.zip')->createFromSet($set, $sorted);
|
||||
|
||||
@ -213,7 +218,7 @@ class SetController extends Controller
|
||||
// Create the disposition of the file
|
||||
$disposition = $response->headers->makeDisposition(
|
||||
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
|
||||
"set_{$set->getNumber()}_{$set->getName()}({$sort}).zip"
|
||||
"set_{$set->getId()}_{$set->getName()}({$sort}).zip"
|
||||
);
|
||||
|
||||
$response->headers->set('Content-Disposition', $disposition);
|
||||
|
@ -80,4 +80,15 @@ class Theme
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getFullName() {
|
||||
$theme = $this;
|
||||
$name = [];
|
||||
|
||||
do {
|
||||
$name[] = $theme->getName();
|
||||
} while (($theme = $theme->getParent()) !== null);
|
||||
|
||||
return implode(' > ', array_reverse($name));
|
||||
}
|
||||
}
|
||||
|
@ -10,24 +10,24 @@ trait NumberTrait
|
||||
* @ORM\Id
|
||||
* @ORM\Column(name="id", type="string", length=255, unique=true)
|
||||
*/
|
||||
protected $number;
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNumber()
|
||||
public function getId()
|
||||
{
|
||||
return $this->number;
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $number
|
||||
* @param string $id
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function setNumber($number)
|
||||
public function setId($id)
|
||||
{
|
||||
$this->number = $number;
|
||||
$this->id = $id;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -18,10 +18,10 @@ class AliasRepository extends BaseRepository
|
||||
*/
|
||||
public function getOrCreate($number, $model)
|
||||
{
|
||||
if (($alias = $this->findOneBy(['number' => $number, 'model' => $model])) == null) {
|
||||
if (($alias = $this->findOneBy(['id' => $number, 'model' => $model])) == null) {
|
||||
$alias = new Alias();
|
||||
$alias->setModel($model);
|
||||
$alias->setNumber($number);
|
||||
$alias->setId($number);
|
||||
}
|
||||
|
||||
return $alias;
|
||||
|
@ -36,14 +36,14 @@ class ModelRepository extends BaseRepository
|
||||
public function findOneByNumber($number)
|
||||
{
|
||||
$model = $this->createQueryBuilder('model')
|
||||
->where('model.number LIKE :number')
|
||||
->where('model.id LIKE :number')
|
||||
->setParameter('number', $number)
|
||||
->getQuery()->getOneOrNullResult();
|
||||
|
||||
if (!$model) {
|
||||
$model = $this->createQueryBuilder('model')
|
||||
->leftJoin(Alias::class, 'alias', JOIN::WITH, 'alias.model = model')
|
||||
->where('alias.number LIKE :number')
|
||||
->where('alias.id LIKE :number')
|
||||
->setParameter('number', $number)
|
||||
->getQuery()->getOneOrNullResult();
|
||||
}
|
||||
@ -64,7 +64,7 @@ class ModelRepository extends BaseRepository
|
||||
|
||||
$queryBuilder
|
||||
->join(Part::class, 'part', JOIN::WITH, 'part.model = model')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.id = inventory_part.part')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
|
||||
->setParameter('inventory', $inventory)
|
||||
->addSelect('inventory_part')
|
||||
@ -79,10 +79,10 @@ class ModelRepository extends BaseRepository
|
||||
|
||||
$queryBuilder
|
||||
->join(Part::class, 'part', JOIN::WITH, 'part.model = model')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.id = inventory_part.part')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory.id')
|
||||
->join(Set::class, 's', Join::WITH, 'inventory.set = s.number')
|
||||
->where('s.number LIKE :number')
|
||||
->join(Set::class, 's', Join::WITH, 'inventory.set = s.id')
|
||||
->where('s.id LIKE :number')
|
||||
->setParameter('number', $number)
|
||||
->distinct(true);
|
||||
|
||||
@ -95,48 +95,29 @@ class ModelRepository extends BaseRepository
|
||||
|
||||
$queryBuilder
|
||||
->select('related')
|
||||
->join(Subpart::class, 'subpart', JOIN::WITH, 'model.number = subpart.subpart')
|
||||
->join(Subpart::class, 'subpart', JOIN::WITH, 'model.id = subpart.subpart')
|
||||
->join(Subpart::class, 'parent', JOIN::WITH, 'subpart.parent = parent.parent')
|
||||
->join(Model::class, 'related', JOIN::WITH, 'related.number = parent.subpart')
|
||||
->where('model.number = :number')
|
||||
->join(Model::class, 'related', JOIN::WITH, 'related.id = parent.subpart')
|
||||
->where('model.id = :number')
|
||||
->setParameter('number', $number)
|
||||
->andWhere('related.number != :number')
|
||||
->andWhere('related.id != :number')
|
||||
->distinct(true);
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function findByQuery($query, $limit = null)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('model');
|
||||
|
||||
$queryBuilder->where(
|
||||
$queryBuilder->expr()->orX(
|
||||
$queryBuilder->expr()->like('model.number', ':number'),
|
||||
$queryBuilder->expr()->like('model.name', ':name')
|
||||
))
|
||||
->setParameter('name', '%'.$query.'%')
|
||||
->setParameter('number', $query.'%');
|
||||
|
||||
if ($limit) {
|
||||
$queryBuilder->setMaxResults($limit);
|
||||
}
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new Model entity with $number or retrieve one.
|
||||
*
|
||||
* @param $number
|
||||
* @param $id
|
||||
*
|
||||
* @return Model
|
||||
*/
|
||||
public function getOrCreate($number)
|
||||
public function getOrCreate($id)
|
||||
{
|
||||
if (($model = $this->findOneBy(['number' => $number])) == null) {
|
||||
if (($model = $this->findOneBy(['id' => $id])) == null) {
|
||||
$model = new Model();
|
||||
$model->setNumber($number);
|
||||
$model->setId($id);
|
||||
}
|
||||
|
||||
return $model;
|
||||
|
@ -6,6 +6,7 @@ use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Rebrickable\Inventory;
|
||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||
use AppBundle\Entity\Rebrickable\Part;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use AppBundle\Repository\BaseRepository;
|
||||
use Doctrine\ORM\Query\Expr\Join;
|
||||
|
||||
@ -60,9 +61,9 @@ class Inventory_PartRepository extends BaseRepository
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function getPartCount($number, $spare = null, $model = null)
|
||||
public function getPartCount(Set $set, $spare = null, $model = null)
|
||||
{
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($set->getId());
|
||||
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
||||
->where('inventory_part.inventory = :inventory')
|
||||
|
@ -26,10 +26,10 @@ class SetRepository extends BaseRepository
|
||||
public function findAllByPartNumber($number)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.number')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.id')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'inventory.id = inventory_part.inventory')
|
||||
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.number')
|
||||
->where('part.number LIKE :number')
|
||||
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.id')
|
||||
->where('part.id LIKE :number')
|
||||
->setParameter('number', $number)
|
||||
->distinct(true);
|
||||
|
||||
@ -39,28 +39,45 @@ class SetRepository extends BaseRepository
|
||||
public function findAllByModel(Model $model)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.number')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.id')
|
||||
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'inventory.id = inventory_part.inventory')
|
||||
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.number')
|
||||
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.id')
|
||||
->where('part.model = :model')
|
||||
->setParameter('model', $model->getNumber())
|
||||
->setParameter('model', $model->getId())
|
||||
->distinct(true);
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function findByQuery($query, $limit = null)
|
||||
public function getMinPartCount()
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->where('s.name LIKE :name')
|
||||
->orWhere('s.number LIKE :number')
|
||||
->setParameter('name', '%'.$query.'%')
|
||||
->setParameter('number', $query.'%');
|
||||
->select('MIN(s.partCount)');
|
||||
|
||||
if ($limit) {
|
||||
$queryBuilder->setMaxResults($limit);
|
||||
}
|
||||
return $queryBuilder->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
public function getMaxPartCount()
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->select('MAX(s.partCount)');
|
||||
|
||||
return $queryBuilder->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function getMinYear()
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->select('MIN(s.year)');
|
||||
|
||||
return $queryBuilder->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function getMaxYear()
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
->select('MAX(s.year)');
|
||||
|
||||
return $queryBuilder->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
}
|
||||
|
@ -10,11 +10,9 @@ class ThemeRepository extends BaseRepository
|
||||
{
|
||||
public function findAllSubthemes(Theme $theme)
|
||||
{
|
||||
$subQueryBuilder = $this->createQueryBuilder('subtheme');
|
||||
|
||||
$queryBuilder = $this->createQueryBuilder('subtheme')
|
||||
->leftJoin(Theme::class, 'theme', Join::WITH, 'subtheme.parent = theme.id')
|
||||
->where('subtheme.parent = :id')
|
||||
$queryBuilder = $this->createQueryBuilder('theme')
|
||||
// ->leftJoin(Theme::class, 'theme', Join::WITH, 'subtheme.parent = theme.id')
|
||||
->where('theme.parent = :id')
|
||||
->setParameter('id', $theme->getId());
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
@ -23,7 +21,8 @@ class ThemeRepository extends BaseRepository
|
||||
public function findAllMain()
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('theme')
|
||||
->where('theme.parent IS NULL');
|
||||
->where('theme.parent IS NULL')
|
||||
->orderBy('theme.name', 'ASC');
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ class RebrickableLoader extends BaseLoader
|
||||
|
||||
foreach ($foreignKeys as $foreignKey) {
|
||||
$part = new Part();
|
||||
$part->setNumber($foreignKey['part_id']);
|
||||
$part->setId($foreignKey['part_id']);
|
||||
$this->em->getRepository(Part::class)->save($part);
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class RelationLoader extends BaseLoader
|
||||
$this->partRepository->save($part);
|
||||
}
|
||||
|
||||
$this->progressBar->setMessage($part->getNumber());
|
||||
$this->progressBar->setMessage($part->getId());
|
||||
$this->progressBar->advance();
|
||||
}
|
||||
$this->progressBar->finish();
|
||||
@ -72,7 +72,7 @@ class RelationLoader extends BaseLoader
|
||||
*/
|
||||
private function loadPartRelation(Part $part)
|
||||
{
|
||||
$number = $part->getNumber();
|
||||
$number = $part->getId();
|
||||
$model = $this->modelRepository->findOneByNumber($number);
|
||||
if (!$model) {
|
||||
$number = $this->relationMapper->find($this->getPrintedParentId($number), 'part_model');
|
||||
|
@ -24,9 +24,9 @@ class ModelService
|
||||
$this->resursiveLoadModels($subpart->getSubpart(), $subpart->getCount());
|
||||
}
|
||||
} else {
|
||||
$q = isset($this->models[$model->getNumber()]['quantity']) ? $this->models[$model->getNumber()]['quantity'] : 0;
|
||||
$q = isset($this->models[$model->getId()]['quantity']) ? $this->models[$model->getId()]['quantity'] : 0;
|
||||
|
||||
$this->models[$model->getNumber()] = [
|
||||
$this->models[$model->getId()] = [
|
||||
'quantity' => $q + $quantity,
|
||||
'model' => $model,
|
||||
];
|
||||
|
@ -41,15 +41,15 @@ class SetService
|
||||
{
|
||||
$models = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
if ($model = $inventoryPart->getPart()->getModel()) {
|
||||
if (isset($models[$model->getNumber()])) {
|
||||
$models[$model->getNumber()]['quantity'] += $inventoryPart->getQuantity();
|
||||
if (isset($models[$model->getId()])) {
|
||||
$models[$model->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
} else {
|
||||
$models[$model->getNumber()] = [
|
||||
$models[$model->getId()] = [
|
||||
'model' => $model,
|
||||
'quantity' => $inventoryPart->getQuantity(),
|
||||
];
|
||||
@ -85,21 +85,21 @@ class SetService
|
||||
{
|
||||
$models = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
if ($model = $inventoryPart->getPart()->getModel()) {
|
||||
$color = $inventoryPart->getColor();
|
||||
|
||||
if (!isset($models[$model->getNumber()]['model'])) {
|
||||
$models[$model->getNumber()]['model'] = $model;
|
||||
if (!isset($models[$model->getId()]['model'])) {
|
||||
$models[$model->getId()]['model'] = $model;
|
||||
}
|
||||
|
||||
if (isset($models[$model->getNumber()]['colors'][$color->getId()])) {
|
||||
$models[$model->getNumber()]['colors'][$color->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
if (isset($models[$model->getId()]['colors'][$color->getId()])) {
|
||||
$models[$model->getId()]['colors'][$color->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
} else {
|
||||
$models[$model->getNumber()]['colors'][$color->getId()] = [
|
||||
$models[$model->getId()]['colors'][$color->getId()] = [
|
||||
'color' => $color,
|
||||
'quantity' => $inventoryPart->getQuantity(),
|
||||
];
|
||||
@ -135,7 +135,7 @@ class SetService
|
||||
{
|
||||
$colors = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
@ -149,10 +149,10 @@ class SetService
|
||||
|
||||
$colors[$color->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
|
||||
if (isset($colors[$color->getId()]['models'][$model->getNumber()])) {
|
||||
$colors[$color->getId()]['models'][$model->getNumber()]['quantity'] += $inventoryPart->getQuantity();
|
||||
if (isset($colors[$color->getId()]['models'][$model->getId()])) {
|
||||
$colors[$color->getId()]['models'][$model->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
} else {
|
||||
$colors[$color->getId()]['models'][$model->getNumber()] = [
|
||||
$colors[$color->getId()]['models'][$model->getId()] = [
|
||||
'model' => $model,
|
||||
'quantity' => $inventoryPart->getQuantity(),
|
||||
];
|
||||
@ -173,14 +173,14 @@ class SetService
|
||||
{
|
||||
$parts = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, $model);
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, $model);
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
if (isset($parts[$inventoryPart->getPart()->getNumber()])) {
|
||||
$parts[$inventoryPart->getPart()->getNumber()]['quantity'] += $inventoryPart->getQuantity();
|
||||
if (isset($parts[$inventoryPart->getPart()->getId()])) {
|
||||
$parts[$inventoryPart->getPart()->getId()]['quantity'] += $inventoryPart->getQuantity();
|
||||
} else {
|
||||
$parts[$inventoryPart->getPart()->getNumber()] = [
|
||||
$parts[$inventoryPart->getPart()->getId()] = [
|
||||
'part' => $inventoryPart->getPart(),
|
||||
'quantity' => $inventoryPart->getQuantity(),
|
||||
];
|
||||
|
@ -47,8 +47,8 @@ class ZipService
|
||||
|
||||
public function createFromSet(Set $set, $sorted = false)
|
||||
{
|
||||
$sort = $sorted ? 'sorted' : 'unsorted';
|
||||
$this->zipName = "set_{$set->getNumber()}_{$set->getName()}({$sort})";
|
||||
$sort = $sorted ? 'Multi-Color' : 'Uni-Color';
|
||||
$this->zipName = "set_{$set->getId()}_{$set->getName()}({$sort})";
|
||||
|
||||
$zipPath = tempnam(sys_get_temp_dir(), 'printabrick');
|
||||
$this->archive = $this->createZip($zipPath);
|
||||
@ -67,18 +67,18 @@ class ZipService
|
||||
|
||||
public function createFromModel(Model $model, $subparts = false)
|
||||
{
|
||||
$this->zipName = "model_{$model->getNumber()}";
|
||||
$this->zipName = "model_{$model->getId()}";
|
||||
|
||||
$zipPath = tempnam(sys_get_temp_dir(), 'printabrick');
|
||||
$this->archive = $this->createZip($zipPath);
|
||||
|
||||
$filename = "{$this->zipName}/{$model->getNumber()}.stl";
|
||||
$filename = "{$this->zipName}/{$model->getId()}.stl";
|
||||
$this->addModel($filename, $model);
|
||||
|
||||
if ($subparts) {
|
||||
foreach ($this->modelService->getAllSubparts($model) as $subpart) {
|
||||
$submodel = $subpart['model'];
|
||||
$filename = "{$this->zipName}/submodels/{$submodel->getNumber()}_({$subpart['quantity']}x).stl";
|
||||
$filename = "{$this->zipName}/submodels/{$submodel->getId()}_({$subpart['quantity']}x).stl";
|
||||
|
||||
$this->addModel($filename, $submodel);
|
||||
}
|
||||
@ -107,7 +107,7 @@ class ZipService
|
||||
$model = $modelArray['model'];
|
||||
$quantity = $modelArray['quantity'];
|
||||
|
||||
$filename = "{$this->zipName}/{$color->getName()}/{$model->getNumber()}_({$quantity}x).stl";
|
||||
$filename = "{$this->zipName}/{$color->getName()}/{$model->getId()}_({$quantity}x).stl";
|
||||
|
||||
$this->addModel($filename, $model);
|
||||
}
|
||||
@ -137,7 +137,7 @@ class ZipService
|
||||
private function addModel($path, $model)
|
||||
{
|
||||
$this->archive->addFromString($path, $this->mediaFilesystem->read($model->getPath()));
|
||||
$this->models[$model->getNumber()] = $model;
|
||||
$this->models[$model->getId()] = $model;
|
||||
}
|
||||
|
||||
private function addLicense()
|
||||
@ -149,7 +149,7 @@ class ZipService
|
||||
$text .= sprintf('Attribution:'."\n"."\n");
|
||||
|
||||
foreach ($this->models as $model) {
|
||||
$text .= sprintf('%s - "%s" by %s'."\n", $model->getNumber(), $model->getName(), $model->getAuthor()->getName());
|
||||
$text .= sprintf('%s - "%s" by %s'."\n", $model->getId(), $model->getName(), $model->getAuthor()->getName());
|
||||
}
|
||||
|
||||
$this->archive->addFromString("{$this->zipName}/LICENSE.txt", $text);
|
||||
|
Loading…
x
Reference in New Issue
Block a user