1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-19 05:30:08 -07:00

Add asset images

This commit is contained in:
David Hübner 2017-04-13 18:54:28 +02:00
parent 5b6bc7b6c8
commit 254add244d
16 changed files with 437 additions and 291 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,4 +1,43 @@
.ui.fixed + .ui.main {
margin-top: 5em;
}
.default-theme {
.ui.fixed + .ui.grid {
border-radius: 0;
border: 0;
box-shadow: none;
}
.item-info {
min-height: 300px;
}
.ui.fixed + .ui.main {
margin-top: 3em;
padding-bottom: 4em;
}
.link {
padding-left: 30px;
position: relative;
}
.link:before {
width: 23px;
height: 23px;
position: absolute;
left: 0;
display: inline-block;
}
.link.brickset:before {
content: '';
background: url("/resources/images/brickset_logo.png");
background-size: cover;
}
.link.rebrickable:before {
content: '';
background: url("/resources/images/rebrickable_logo.png");
background-size: cover;
}
}

View File

@ -6,37 +6,43 @@
<div class="ui fixed inverted menu">
{{ knp_menu_render('mainMenu') }}
</div>
<div class="ui main container">
<div class="ui masthead vertical segment">
<div class="introduction">
<div class="ui small breadcrumb">
{% for breadcrumb_item in knp_menu_get_breadcrumbs_array(knp_menu_get_current_item('mainMenu')) %}
{% if not loop.last %}
<a class="section" href="{{ breadcrumb_item.uri }}">{{ breadcrumb_item.label }}</a>
<i class="right chevron icon divider"></i>
{% else %}
<a class="active section">{{ breadcrumb_item.label }}</a>
{% endif %}
{% endfor %}
{% block page %}
<div class="ui main">
<div class="ui container">
<div class="ui masthead vertical segment">
<div class="introduction">
<div class="ui small breadcrumb">
{% for breadcrumb_item in knp_menu_get_breadcrumbs_array(knp_menu_get_current_item('mainMenu')) %}
{% if not loop.last %}
<a class="section" href="{{ breadcrumb_item.uri }}">{{ breadcrumb_item.label }}</a>
<i class="right chevron icon divider"></i>
{% else %}
<a class="active section">{{ breadcrumb_item.label }}</a>
{% endif %}
{% endfor %}
</div>
<h1 class="ui header">{% block header %}{% endblock %}</h1>
</div>
</div>
<div class="ui vertical segment content">
{% for label, flashes in app.session.flashbag.all %}
{% for flash in flashes %}
{{ elements.flash(label,flash) }}
{% endfor %}
{% endfor %}
{% block content %}
{% endblock %}
</div>
<h1 class="ui header">{% block header %}{% endblock %}</h1>
</div>
</div>
{% for label, flashes in app.session.flashbag.all %}
{% for flash in flashes %}
{{ elements.flash(label,flash) }}
{% endfor %}
{% endfor %}
{% block content %}
{% endblock %}
</div>
{% endblock page %}
<div class="ui black inverted vertical footer segment stripe">
<div class="ui center aligned container">
{% block footer %}
<div class="ui center aligned container">
</div>
</div>
{% endblock %}
</div>
{% endblock %}

View File

@ -1,6 +1,14 @@
{% extends 'base.html.twig' %}
{% block content %}
{% block page %}
<div class="ui grid massive message vertical">
<div class="ui container">
<div class="row">
<div class="h1 ui huge header">
Hello, world!
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -8,7 +8,7 @@
{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
<body class="default-theme">
{% block body %}
{% endblock %}

View File

@ -2,82 +2,111 @@
{% import 'macros/elements.html.twig' as elements %}
{% block title %}{{ model.name }}{% endblock %}
{% block title %}#{{ model.number }} - {{ model.name }}{% endblock %}
{% block header %}{{ model.name }}{% endblock %}
{% block header %}#{{ model.number }} - {{ model.name }}{% endblock %}
{% block content %}
<div id="model-viewer" class="model-container">
<img src="{{ asset('ldraw/images/'~model.number~'.png') | imagine_filter('model_large')}}">
<div class="ui grid">
<div class="column ten wide">
<div id="model-viewer" class="model-container">
<img src="{{ asset('ldraw/images/'~model.number~'.png') | imagine_filter('model_large')}}">
</div>
</div>
<div class="column six wide">
<div class="grey">
<table>
<tr>
<th>category</th><td>{{ model.category ? model.category.name }}</td>
</tr>
<tr>
<th>model</th><td>{{ model.path }}</td>
</tr>
<tr>
<th>author</th><td>{{ model.author }}</td>
</tr>
</table>
<dl>
<dt>keywords:</dt>
<dd>
{% for keyword in model.keywords %}
<span class="ui label">{{ keyword.name }}</span>
{% endfor %}
</dd>
<dt>aliases:</dt>
<dd>
{% for alias in model.aliases %}
<span>{{ alias.number }}</span>{% if not loop.last %},{% endif %}
{% endfor %}
</dd>
<dd>Download:</dd>
<dt><a href="{{ url('media_file', {'path': model.path}) }}">{{ model.number }}</a></dt>
<dt>rebrickable parts ({{ rbParts|length }}):</dt>
<dd>
{#<p>#}
{#<div class="ui eight doubling cards">#}
{#{% for alias in rbParts %}#}
{#<a href="{{ url('reb_part_detail', {number:alias.number}) }}" class="ui label">{{ alias.number }}</a>#}
{#{% endfor %}#}
{#</div>#}
{#</p>#}
</dd>
</dl>
</div>
</div>
</div>
<dl>
<dt>number:</dt><dd>{{ model.number }}</dd>
<dt>name:</dt><dd>{{ model.name }}</dd>
<dt>category:</dt><dd>{{ model.category ? model.category.name }}</dd>
<dt>model:</dt><dd>{{ model.path }}</dd>
<dt>author:</dt><dd>{{ model.author }}</dd>
<dt>modified:</dt><dd>{{ model.modified ? model.modified|date('Y-m-d') }}</dd>
<dt>keywords:</dt>
<dd>
{% for keyword in model.keywords %}
<span class="ui label">{{ keyword.name }}</span>
{% endfor %}
</dd>
<dt>aliases:</dt>
<dd>
{% for alias in model.aliases %}
<span class="ui label">{{ alias.number }}</span>
{% endfor %}
</dd>
<dd>Download:</dd>
<dt><a href="{{ url('media_file', {'path': model.path}) }}">{{ model.number }}</a></dt>
<dt>rebrickable parts ({{ rbParts|length }}):</dt>
<dd>
<p>
<div class="ui eight doubling cards">
{% for alias in rbParts %}
<a href="{{ url('reb_part_detail', {number:alias.number}) }}" class="ui label">{{ alias.number }}</a>
{% endfor %}
<h4 class="ui horizontal divider header">
Subparts of this model
</h4>
<div class="ui eight column grid">
{% for subpart in model.subparts %}
<div class="column">
{{ elements.part(subpart.subpart) }}
</div>
</p>
</dd>
</dl>
<div>
<h4 class="ui horizontal divider header">
<i class="puzzle icon"></i> Subparts of this model
</h4>
<div class="ui eight cards">
{% for subpart in model.subparts %}
<div class="column">
{{ elements.part(subpart.subpart) }}
</div>
{% endfor %}
</div>
<h4 class="ui horizontal divider header">
<i class="cube icon"></i> Model is subpart of
</h4>
<div class="ui eight cards">
{% for subpart in model.parents %}
<div class="column">
{{ elements.part(subpart.parent) }}
</div>
{% endfor %}
</div>
<h4 class="ui horizontal divider header">
<i class="cubes icon"></i> Sets ({{ sets|length }})
</h4>
{% for set in sets %}
<span style="margin: 5px"><a href="{{ url('set_detail', {number:set.number}) }}">{{ set.number }}</a></span>
{% endfor %}
</div>
<h4 class="ui horizontal divider header">
Model is subpart of
</h4>
<div class="ui eight column grid">
{% for subpart in model.parents %}
<div class="column">
{{ elements.part(subpart.parent) }}
</div>
{% endfor %}
</div>
<h4 class="ui horizontal divider header">
Related
</h4>
<div class="ui eight column grid">
{% for subpart in related %}
<div class="column">
{{ elements.part(subpart) }}
</div>
{% endfor %}
</div>
<h4 class="ui horizontal divider header">
<i class="cubes icon"></i> Sets ({{ sets|length }})
</h4>
{% for set in sets %}
<span style="margin: 5px"><a href="{{ url('set_detail', {number:set.number}) }}">{{ set.number }}</a></span>
{% endfor %}
{% endblock %}
{% block javascripts %}

View File

@ -2,7 +2,13 @@
{% import 'macros/elements.html.twig' as elements %}
{% block title %}{{ 'page.model.index' | trans }}{% endblock %}
{% block header %}{{ 'page.model.index' | trans }}{% endblock %}
{% block content %}
<div class="ui container stackable grid">
<div class="column four wide">
<form method="get" action="" class="ui form">
{{ form_start(form) }}
@ -16,8 +22,9 @@
</div>
{{ form_end(form) }}
</form>
</div>
<div class="column twelve wide">
{{ knp_pagination_render(models) }}
<p>{{ models.getTotalItemCount }}</p>
<div class="ui eight column grid">
{% for model in models %}
@ -26,4 +33,6 @@
</div>
{{ knp_pagination_render(models) }}
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block content %}
<table class="ui celled padded table">
<table class="ui celled small padded table">
<thead>
<tr>
<th></th>

View File

@ -0,0 +1,25 @@
{% extends 'base.html.twig' %}
{% block content %}
<div class="ui seven column grid">
<div class="row">
{% for part in parts %}
<div class="column">
<div class="ui fluid bordered image">
<a href="{{ path('reb_part_detail', {number: part.number}) }}">
<div class="image load">
<img src="{{ part.number|partImage(-1)| imagine_filter('rebrickable_part_min') }}" data-src="{{ part.number|partImage(-1)| imagine_filter('rebrickable_part_min') }}" class="transition visible">
</div>
<div class="ui bottom attached label {{ part.model == null ? 'black' : 'red'}}">{{ part.number }}</div>
</a>
</div>
</div>
{% endfor %}
</div>
</div>
<p>{{ parts.getTotalItemCount }}</p>
{{ knp_pagination_render(parts) }}
{% endblock %}

View File

@ -1,8 +1,9 @@
{% if regularParts|length > 0 %}
<h4 class="ui horizontal divider header">
Regular parts
</h4>
<div class="ui eight column grid">
<div class="ui ten column grid">
{% for inventoryPart in regularParts %}
{% if inventoryPart.part is defined %}
<div class="column">
@ -12,18 +13,20 @@
<div class="image load">
<img src="{{ inventoryPart.part.number|partImage(inventoryPart.color.id)| imagine_filter('rebrickable_part_min') }}" data-src="{{ inventoryPart.part.number|partImage(inventoryPart.color.id)| imagine_filter('rebrickable_part_min') }}" class="transition visible">
</div>
<div style="border-bottom: #{{ inventoryPart.color.rgb }} 5px solid" class="ui bottom attached label">{{ inventoryPart.part.number }}<br>{{ inventoryPart.isSpare ? 'Spare' : 'Regular' }}</div>
<div style="border-bottom: #{{ inventoryPart.color.rgb }} 5px solid" class="ui bottom attached label">{{ inventoryPart.part.number }}</div>
</a>
</div>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% if spareParts|length > 0 %}
<h4 class="ui horizontal divider header">
Spare parts
</h4>
<div class="ui eight column grid">
<div class="ui ten column grid">
{% for inventoryPart in spareParts %}
{% if inventoryPart.part is defined %}
<div class="column">
@ -33,10 +36,11 @@
<div class="image load">
<img src="{{ inventoryPart.part.number|partImage(inventoryPart.color.id)| imagine_filter('rebrickable_part_min') }}" data-src="{{ inventoryPart.part.number|partImage(inventoryPart.color.id)| imagine_filter('rebrickable_part_min') }}" class="transition visible">
</div>
<div style="border-bottom: #{{ inventoryPart.color.rgb }} 5px solid" class="ui bottom attached label">{{ inventoryPart.part.number }}<br>{{ inventoryPart.isSpare ? 'Spare' : 'Regular' }}</div>
<div style="border-bottom: #{{ inventoryPart.color.rgb }} 5px solid" class="ui bottom attached label">{{ inventoryPart.part.number }}</div>
</a>
</div>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}

View File

@ -0,0 +1,16 @@
<h4 class="ui horizontal divider header">Sets</h4>
<div class="ui seven column grid">
<div class="row">
{% for set in inventorySets %}
<div class="column">
<a href="{{ url('set_detail', {'number': set.set.number}) }}">
<div class="ui bordered image medium">
<img src="{{ asset('resources/images/unknown_image.png') }}" data-src="{{ set.set.number|setImage|imagine_filter('rebrickable_set_min') }}" class="transition visible">
</div>
<p>{{ set.set.number }} - {{ set.set.name }}</p>
<p>{{ set.quantity}}</p>
</a>
</div>
{% endfor %}
</div>
</div>

View File

@ -5,90 +5,134 @@
{% block header %}{{ rbset ? rbset.number }} {{ rbset ? rbset.name }}{% endblock %}
{% block content %}
{% if brset %}
<a href="{{ brset.bricksetURL }}"><img class="image ui mini" src="http://brickset.com/assets/images/logo/bricks.jpg"> Brickset</a>
{% endif %}
{% if rbset is not null %}
<a href="http://rebrickable.com/sets/{{ rbset ? rbset.number }}"><img class="image ui mini" src="https://s.rebrickable.com/static/img/robo3ta.png"> Rebrickable</a>
<dl>
<dt>number:</dt><dd>{{ rbset.number }}</dd>
<dt>year:</dt><dd>{{ rbset.year }}</dd>
<dt>name:</dt><dd>{{ rbset.name }}</dd>
<dt>theme:</dt><dd>{{ rbset.theme.name }}</dd>
{% if rbset.theme.parent %}
<dt>themeparent:</dt><dd>{{ rbset.theme.parent.name }}</dd>
{% if rbset.theme.parent.parent %}
<dt>themeparent:</dt><dd>{{ rbset.theme.parent.parent.name }}</dd>
<div class="ui stackable grid">
<div class="column nine wide">
<div class="image bordered ui big">
{% if brset %}
<img class="big" src="{{ brset.imageURL }}">
{% elseif rbset %}
<img class="big" src="{{ rbset.number|setImage|imagine_filter('rebrickable') }}">
{% endif %}
{% endif %}
<dt>count of parts:</dt><dd>{{ rbset.partCount }}</dd>
</dl>
{% endif %}
</div>
</div>
<div class="column seven wide">
<div class="item-info black ui">
<table class="ui table">
<tr>
<td>number</td><td>{{ brset ? brset.legoSetID : rbset ? rbset.number : null}}</td>
</tr>
<tr>
<td>name</td><td>{{ brset ? brset.name : rbset ? rbset.name : null}}</td>
</tr>
<tr>
<td>year</td><td>{{ brset ? brset.year : rbset ? rbset.year : null}}</td>
</tr>
<tr>
<td>theme</td>
{% if rbset %}
<td><a href="#">{{ rbset.theme.parent ? rbset.theme.parent.name }}</a> <a href="#">{{ rbset.theme.name }}</a> </td>
{% elseif brset %}
<td>{{ brset.theme }}</td>
{% endif %}
</tr>
<tr>
<td>parts</td><td>{{ brset ? brset.pieces : rbset ? rbset.partCount }}</td>
</tr>
{% if brset %}
<tr>
<td></td>
<td><a class="brickset link" href="{{ brset.bricksetURL }}">Brickset</a></td>
</tr>
{% endif %}
{% if rbset %}
<tr>
<td></td>
<td><a class="rebrickable link" href="http://rebrickable.com/sets/{{ rbset ? rbset.number }}">Rebrickable</a></td>
</tr>
{% endif %}
</table>
{% if brset is not null %}
<dl>
<dt>year:</dt><dd>{{ brset.year }}</dd>
<dt>name:</dt><dd>{{ brset.name }}</dd>
<dt>themegroup:</dt><dd>{{ brset.themeGroup }}</dd>
<dt>theme:</dt><dd>{{ brset.theme }}</dd>
<dt>subtheme:</dt><dd>{{ brset.subtheme }}</dd>
<dt>count of parts:</dt><dd>{{ brset.pieces }}</dd>
<dt>lego id:</dt><dd>{{ brset.legoSetID }}</dd>
<dt>minifigs:</dt><dd>{{ brset.minifigs }}</dd>
<dt>description:</dt><dd>{{ brset.description }}</dd>
</dl>
{% endif %}
{% if brset %}
<img class="ui bordered image medium" src="{{ brset.imageURL }}">
{% elseif rbset %}
<img class="ui bordered image medium" src="{{ rbset.number|setImage|imagine_filter('rebrickable') }}">
{% endif %}
{#{{ brset ? dump(brset) }}#}
<div class="ui tabular menu">
<a class="item active" data-tab="parts"><i class="cubes icon"></i> Parts ({{ rbset ? rbset.partCount : 0}})</a>
{% if brset %}
<a class="item" data-tab="images"> <i class="image icon"></i> Images ({{ brset.additionalImageCount }})</a>
<a class="item" data-tab="instructions"> <i class="file pdf outline icon"></i> Instructions ({{ brset.instructionsCount }})</a>
<a class="item" data-tab="reviews"><i class="write icon"></i> Reviews ({{ brset.reviewCount }})</a>
{% endif %}
{% if brset is not null %}
<dl>
<dt>themegroup:</dt><dd>{{ brset.themeGroup }}</dd>
<dt>theme:</dt><dd>{{ brset.theme }}</dd>
<dt>subtheme:</dt><dd>{{ brset.subtheme }}</dd>
<dt>count of parts:</dt><dd>{{ brset.pieces }}</dd>
<dt>minifigs:</dt><dd>{{ brset.minifigs }}</dd>
</dl>
{% endif %}
</div>
</div>
</div>
<div class="ui tab active" data-tab="parts">
{% if rbset %}
{{ render(controller('AppBundle:Rebrickable/Set:parts', { 'number': rbset.number })) }}
<div class="ui seven column grid">
<div class="row">
<h4 class="ui horizontal divider header">
Sets
</h4>
<div class="segment vertical item-info">
<div class="ui tabular menu">
<a class="item active" data-tab="parts"><i class="cubes icon"></i> Parts ({{ rbset ? rbset.partCount : 0}})</a>
{% if brset %}
<a class="item" data-tab="description"><i class="info icon"></i> Description</a>
<a class="item" data-tab="images"> <i class="image icon"></i> Images ({{ brset.additionalImageCount }})</a>
<a class="item" data-tab="instructions"> <i class="file pdf outline icon"></i> Instructions ({{ brset.instructionsCount }})</a>
<a class="item" data-tab="reviews"><i class="write icon"></i> Reviews ({{ brset.reviewCount }})</a>
{% endif %}
</div>
<div class="ui tab active" data-tab="parts">
{% if rbset %}
{% for set in inventorySets %}
<div class="column">
<a href="{{ url('set_detail', {'number': set.set.number}) }}">
<img class="ui bordered image medium" src="{{ set.set.number|setImage|imagine_filter('rebrickable_set_min') }}">
<p>{{ set.set.number }} - {{ set.set.name }}</p>
<p>{{ set.quantity}}</p>
</a>
</div>
{% endfor %}
</div>
<div class="ajax-load" id="parts" data-src="{{ path('rebrickable_set_parts', { 'number': rbset.number }) }}"></div>
{#{{ render(controller('AppBundle:Rebrickable/Set:parts', { 'number': rbset.number })) }}#}
{% endif %}
</div>
{% if brset %}
<div class="ui tab" data-tab="images">
{#<div class="ajax-load" id="images" data-src="{{ path('brickset_images', { 'id': brset.setID }) }}"></div>#}
{{ render(controller('AppBundle:Brickset/Set:images', { 'id': brset.setID })) }}
</div>
<div class="ui tab" data-tab="instructions">
{#<div class="ajax-load" id="instructions" data-src="{{ path('brickset_instructions', { 'id': brset.setID }) }}"></div>#}
{{ render(controller('AppBundle:Brickset/Set:instructions', { 'id': brset.setID })) }}
</div>
<div class="ui tab" data-tab="reviews">
{#<div class="ajax-load" id="reviews" data-src="{{ path('brickset_reviews', { 'id': brset.setID }) }}"></div>#}
{{ render(controller('AppBundle:Brickset/Set:reviews', { 'id': brset.setID })) }}
</div>
<div class="ui tab" data-tab="description">
{{ brset.description }}
</div>
{% endif %}
</div>
{% if brset %}
<div class="ui tab" data-tab="images">
{{ render(controller('AppBundle:Brickset/Set:images', { 'id': brset.setID })) }}
</div>
<div class="ui tab" data-tab="instructions">
{{ render(controller('AppBundle:Brickset/Set:instructions', { 'id': brset.setID })) }}
</div>
<div class="ui tab" data-tab="reviews">
{{ render(controller('AppBundle:Brickset/Set:reviews', { 'id': brset.setID })) }}
</div>
{% endif %}
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
$(document).ready(function () {
$('.ajax-load').each(function () {
$self = $(this);
console.log($self);
$.ajax({
type: "POST",
dataType: 'json',
url: $self.data('src'),
async: true, //you won't need that if nothing in your following code is dependend of the result
success: function(response){
$self.html(response); //Change the html of the div with the id = "your_div"
}
})
})
})
</script>
{% endblock %}

View File

@ -48,9 +48,10 @@ gulp.task('files:semantic', function () {
});
gulp.task('files:images', function () {
return gulp.src(
'node_modules/lightbox2/dist/images/**'
)
return gulp.src([
'node_modules/lightbox2/dist/images/**',
'app/Resources/assets/images/**'
])
.pipe(gulp.dest('web/resources/images'));
});

View File

@ -33,44 +33,32 @@ class SetController extends Controller
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
$spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($set->getNumber());
return $this->render('rebrickable/set/parts.html.twig', [
$template = $this->render('rebrickable/set/parts.html.twig', [
'regularParts' => $regularParts,
'spareParts' => $spareParts,
]);
$json = json_encode($template->getContent());
$response = new Response($json, 200);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/{number}/sets", name="rebrickable_set_sets")
*/
public function setsAction(Set $set) {
$em = $this->getDoctrine()->getManager();
// /**
// * @Route("/download/{number}", name="set_download")
// */
// public function downloadZipAction(Request $request, $number) {
// $em = $this->getDoctrine()->getManager();
//
// $inventoryParts = $em->getRepository(Inventory_Part::class)->findAllBySetNumber($number);
//
// $zip = new \ZipArchive();
// $zipName = 'set_'.$number.'.zip';
// $zip->open($zipName, \ZipArchive::CREATE);
// /** @var Inventory_Part $part */
// foreach ($inventoryParts as $part) {
// $filename = $part->getPart()->getNumber().'_('.$part->getColor()->getName().'_'.$part->getQuantity().'x).stl';
//
// try {
// if($part->getPart()->getModel()) {
// $zip->addFromString($filename, $this->get('oneup_flysystem.media_filesystem')->read($part->getPart()->getModel()->getPath()));
// }
// } catch (\Exception $e) {
// dump($e);
// }
// }
// $zip->close();
//
// $response = new Response(file_get_contents($zipName));
// $response->headers->set('Content-Type', 'application/zip');
// $response->headers->set('Content-Disposition', 'attachment;filename="' . $zipName . '"');
// $response->headers->set('Content-length', filesize($zipName));
//
// return $response;
// }
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getNumber());
$template = $this->render('rebrickable/set/sets.html.twig', [
'inventorySets' => $inventorySets,
]);
$json = json_encode($template->getContent());
$response = new Response($json, 200);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}

View File

@ -2,6 +2,7 @@
namespace AppBundle\Controller;
use AppBundle\Api\Exception\ApiException;
use AppBundle\Api\Exception\EmptyResponseException;
use AppBundle\Entity\LDraw\Model;
use AppBundle\Entity\Rebrickable\Color;
@ -58,88 +59,64 @@ class SetController extends Controller
*/
public function detailAction(Request $request, $number)
{
$brset = null;
$rbset = null;
$inventorySets = null;
$inventorySets = $this->getDoctrine()->getManager()->getRepository(Inventory_Set::class)->findAllBySetNumber($number);
$rebrickableSet = null;
$bricksetSet = null;
try {
if(($rbset = $this->getDoctrine()->getManager()->getRepository(Set::class)->find($number)) == null) {
if(($rebrickableSet = $this->getDoctrine()->getManager()->getRepository(Set::class)->find($number)) == null) {
$this->addFlash('warning', 'Set not found in Rebrickable database');
};
$brset = $this->get('api.manager.brickset')->getSetByNumber($number);
$bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($number);
dump($bricksetSet);
} catch (EmptyResponseException $e) {
$this->addFlash('warning', 'Set not found in Brickset database');
} catch (ApiException $e) {
$this->addFlash('error', $e->getService());
} catch (\Exception $e) {
$this->addFlash('error', $e->getMessage());
}
if(!$rebrickableSet && !$bricksetSet) {
return $this->render('error/error.html.twig');
}
return $this->render('set/detail.html.twig', [
'rbset' => $rbset,
'inventorySets' => $inventorySets,
'brset' => $brset,
'rbset' => $rebrickableSet,
'brset' => $bricksetSet,
]);
}
//
// /**
// * @Route("/{number}/parts", name="set_parts")
// */
// public function partsAction(Set $set) {
// $em = $this->getDoctrine()->getManager();
//
// $em->getRepository(Color::class)->findAll();
// $em->getRepository(Part::class)->findAllBySetNumber($set->getNumber());
//
// $regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
// $spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($set->getNumber());
//
// $count = 0;
// /** @var Inventory_Part $inventoryPart */
// foreach ($regularParts as $inventoryPart) {
// $count += $inventoryPart->getQuantity();
// }
//
// dump($count);
//
// return $this->render('rebrickable/set/parts.html.twig', [
// 'regularParts' => $regularParts,
// 'spareParts' => $spareParts,
// 'totalParts' => $count
// ]);
// }
//
//// /**
//// * @Route("/download/{number}", name="set_download")
//// */
//// public function downloadZipAction(Request $request, $number) {
//// $em = $this->getDoctrine()->getManager();
////
//// $inventoryParts = $em->getRepository(Inventory_Part::class)->findAllBySetNumber($number);
////
//// $zip = new \ZipArchive();
//// $zipName = 'set_'.$number.'.zip';
//// $zip->open($zipName, \ZipArchive::CREATE);
//// /** @var Inventory_Part $part */
//// foreach ($inventoryParts as $part) {
//// $filename = $part->getPart()->getNumber().'_('.$part->getColor()->getName().'_'.$part->getQuantity().'x).stl';
////
//// try {
//// if($part->getPart()->getModel()) {
//// $zip->addFromString($filename, $this->get('oneup_flysystem.media_filesystem')->read($part->getPart()->getModel()->getPath()));
//// }
//// } catch (\Exception $e) {
//// dump($e);
//// }
//// }
//// $zip->close();
////
//// $response = new Response(file_get_contents($zipName));
//// $response->headers->set('Content-Type', 'application/zip');
//// $response->headers->set('Content-Disposition', 'attachment;filename="' . $zipName . '"');
//// $response->headers->set('Content-length', filesize($zipName));
////
//// return $response;
//// }
/**
* @Route("/{number}/download", name="set_download")
*/
public function downloadZipAction(Request $request, $number) {
$em = $this->getDoctrine()->getManager();
$inventoryParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($number);
$zip = new \ZipArchive();
$zipName = 'set_'.$number.'.zip';
$zip->open($zipName, \ZipArchive::CREATE);
/** @var Inventory_Part $part */
foreach ($inventoryParts as $part) {
$filename = $part->getPart()->getNumber().'_('.$part->getColor()->getName().'_'.$part->getQuantity().'x).stl';
try {
if($part->getPart()->getModel()) {
$zip->addFromString($filename, $this->get('oneup_flysystem.media_filesystem')->read($part->getPart()->getModel()->getPath()));
}
} catch (\Exception $e) {
dump($e);
}
}
$zip->close();
$response = new Response(file_get_contents($zipName));
$response->headers->set('Content-Type', 'application/zip');
$response->headers->set('Content-Disposition', 'attachment;filename="' . $zipName . '"');
$response->headers->set('Content-length', filesize($zipName));
return $response;
}
}