- {% for inventoryPart in spareParts %}
- {{ blocks.part(inventoryPart.part.id,inventoryPart.quantity, inventoryPart.color.id) }}
- {% endfor %}
+
{% endif %}
{% endblock %}
\ No newline at end of file
diff --git a/app/Resources/views/set/tabs/models.html.twig b/app/Resources/views/set/tabs/models.html.twig
index d241165..13a40a3 100644
--- a/app/Resources/views/set/tabs/models.html.twig
+++ b/app/Resources/views/set/tabs/models.html.twig
@@ -8,6 +8,10 @@
{% endfor %}
{% endfor %}
+
diff --git a/app/Resources/views/set/tabs/sets.html.twig b/app/Resources/views/set/tabs/sets.html.twig
deleted file mode 100644
index 5312a70..0000000
--- a/app/Resources/views/set/tabs/sets.html.twig
+++ /dev/null
@@ -1,21 +0,0 @@
-{% import 'macros/blocks.html.twig' as blocks %}
-{% import 'macros/elements.html.twig' as elements %}
-
-{% block content %}
- {% for label, flashes in app.session.flashbag.all %}
- {% for flash in flashes %}
- {{ elements.flash(label,flash) }}
- {% endfor %}
- {% endfor %}
-
- {% if inventorySets %}
-
-
-
- {% for inventorySet in inventorySets %}
- {{ blocks.set(inventorySet.set, inventorySet.quantity) }}
- {% endfor %}
-
-
- {% endif %}
-{% endblock %}
\ No newline at end of file
diff --git a/src/AppBundle/Controller/ModelController.php b/src/AppBundle/Controller/ModelController.php
index bc487b5..5cd0213 100644
--- a/src/AppBundle/Controller/ModelController.php
+++ b/src/AppBundle/Controller/ModelController.php
@@ -93,10 +93,13 @@ class ModelController extends Controller
$response = new BinaryFileResponse($zip);
$response->headers->set('Content-Type', 'application/zip');
+ // escape forbidden characters from filename
+ $filename = preg_replace('/[^a-z0-9\.]/i', '_',"model_{$model->getId()}_{$model->getName()}.zip");
+
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
- "model_{$model->getId()}_{$model->getName()}.zip"
+ $filename
);
$response->headers->set('Content-Disposition', $disposition);
diff --git a/src/AppBundle/Controller/SearchController.php b/src/AppBundle/Controller/SearchController.php
index 3c2ce27..7181b62 100644
--- a/src/AppBundle/Controller/SearchController.php
+++ b/src/AppBundle/Controller/SearchController.php
@@ -4,6 +4,8 @@ namespace AppBundle\Controller;
use AppBundle\Entity\LDraw\Model;
use AppBundle\Entity\Rebrickable\Set;
+use AppBundle\Model\ModelSearch;
+use AppBundle\Model\SetSearch;
use AppBundle\Repository\Search\ModelRepository;
use AppBundle\Repository\Search\SetRepository;
use FOS\ElasticaBundle\HybridResult;
@@ -34,12 +36,11 @@ class SearchController extends Controller
/** @var SetRepository $setRepository */
$setRepository = $repositoryManager->getRepository(Set::class);
- /** @var Repository $modelRepository */
+ /** @var ModelRepository $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, 8);
- $modelResult = $modelRepository->find($query, 8);
+ $setsResult = $setRepository->search(new SetSearch($query), 1000);
+ $modelResult = $modelRepository->search(new ModelSearch($query), 1000);
return $this->render('search/index.html.twig', [
'sets' => $setsResult,
@@ -67,8 +68,8 @@ class SearchController extends Controller
$modelRepository = $repositoryManager->getRepository(Model::class);
// Option 1. Returns all users who have example.net in any of their mapped fields
- $setsResult = $setRepository->findHighlighted($query, 5);
- $modelResult = $modelRepository->findHighlighted($query, 5);
+ $setsResult = $setRepository->findHighlighted($query, 4);
+ $modelResult = $modelRepository->findHighlighted($query, 4);
$models = [];
/** @var HybridResult $model */
diff --git a/src/AppBundle/Controller/SetController.php b/src/AppBundle/Controller/SetController.php
index 7f3c53d..bdbadd8 100644
--- a/src/AppBundle/Controller/SetController.php
+++ b/src/AppBundle/Controller/SetController.php
@@ -61,8 +61,6 @@ class SetController extends Controller
$bricksetSet = null;
$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->getId()))) {
@@ -78,27 +76,33 @@ class SetController extends Controller
'set' => $set,
'brset' => $bricksetSet,
'partCount' => $partCount,
- 'missingCount' => $missingCount,
- 'uniqueMissing' => $uniqueMissing,
]);
}
/**
- * @Route("/{id}/parts", name="set_parts")
+ * @Route("/{id}/inventory", name="set_inventory")
*/
- public function partsAction(Request $request, Set $set)
+ public function inventoryAction(Request $request, Set $set)
{
- $inventoryPartRepository = $this->get('repository.rebrickable.inventorypart');
+ $em = $this->getDoctrine()->getManager();
- $regularParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, true);
- $spareParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), true);
+ $inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getId());
+ $setService = $this->get('service.set');
+ $inventoryPartRepository = $this->get('repository.rebrickable.inventoryPart');
- $missing = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, false);
+
+ $models = $setService->getModels($set, false);
+ $missing = $setService->getParts($set, false, false);
+ $missingCount = $inventoryPartRepository->getPartCount($set, false, false);
+ $partCount = $inventoryPartRepository->getPartCount($set, false);
$template = $this->render('set/tabs/inventory.html.twig', [
- 'regularParts' => $regularParts,
+ 'inventorySets' => $inventorySets,
+ 'set' => $set,
'missing' => $missing,
- 'spareParts' => $spareParts,
+ 'models' => $models,
+ 'missingCount' => $missingCount,
+ 'partCount' => $partCount,
]);
if ($request->isXmlHttpRequest()) {
@@ -117,16 +121,14 @@ class SetController extends Controller
*/
public function modelsAction(Request $request, Set $set)
{
+ $setService = $this->get('service.set');
+
$models = null;
- $spareModels = null;
$missing = null;
- $missingSpare = null;
try {
- $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);
- $missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getId(), true, false);
+ $models = $setService->getModels($set, false);
+ $missing = $setService->getParts($set, false, false);
} catch (\Exception $e) {
$this->addFlash('error', $e->getMessage());
}
@@ -135,8 +137,6 @@ class SetController extends Controller
'set' => $set,
'missing' => $missing,
'models' => $models,
- 'spareModels' => $spareModels,
- 'missingSpare' => $missingSpare,
]);
if ($request->isXmlHttpRequest()) {
@@ -155,14 +155,15 @@ class SetController extends Controller
*/
public function colorsAction(Request $request, Set $set)
{
+ /** @var SetService $setService */
+ $setService = $this->get('service.set');
+
$colors = null;
+ $missing = null;
try {
- /** @var SetService $setService */
- $setService = $this->get('service.set');
$colors = $setService->getModelsGroupedByColor($set, false);
$missing = $setService->getParts($set,false,false);
-
} catch (\Exception $e) {
$this->addFlash('error', $e->getMessage());
}
@@ -184,30 +185,6 @@ class SetController extends Controller
return $template;
}
- /**
- * @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->getId());
-
- $template = $this->render('set/tabs/sets.html.twig', [
- 'inventorySets' => $inventorySets,
- ]);
-
- if ($request->isXmlHttpRequest()) {
- $json = json_encode($template->getContent());
- $response = new Response($json, 200);
- $response->headers->set('Content-Type', 'application/json');
-
- return $response;
- }
-
- return $template;
- }
-
/**
* @Route("/{id}/zip", name="set_zip")
*/
@@ -222,10 +199,13 @@ class SetController extends Controller
$response = new BinaryFileResponse($zip);
$response->headers->set('Content-Type', 'application/zip');
+ // escape forbidden characters from filename
+ $filename = preg_replace('/[^a-z0-9\.]/i', '_', "set_{$set->getId()}_{$set->getName()}({$sort}).zip");
+
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
- "set_{$set->getId()}_{$set->getName()}({$sort}).zip"
+ $filename
);
$response->headers->set('Content-Disposition', $disposition);
diff --git a/src/AppBundle/Exception/Loader/MissingContextException.php b/src/AppBundle/Exception/Loader/MissingContextException.php
new file mode 100644
index 0000000..16a3cf0
--- /dev/null
+++ b/src/AppBundle/Exception/Loader/MissingContextException.php
@@ -0,0 +1,16 @@
+