mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-21 06:30:10 -07:00
Ajax load tabs in Set detail template
This commit is contained in:
parent
f0318ac661
commit
bdddd5a7b4
13
app/Resources/assets/js/ajax.js
Normal file
13
app/Resources/assets/js/ajax.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
$(document).ready(function () {
|
||||||
|
$('.ajax-load').each(function () {
|
||||||
|
$self = $(this);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
dataType: "json",
|
||||||
|
url: $self.data('src'),
|
||||||
|
context: $self
|
||||||
|
}).done(function(data) {
|
||||||
|
$(this).html(data);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
});
|
@ -1,4 +1,4 @@
|
|||||||
$(document).ready(function () {
|
$(document).bind('ready ajaxComplete', function(){
|
||||||
$('.ui.dropdown')
|
$('.ui.dropdown')
|
||||||
.dropdown()
|
.dropdown()
|
||||||
;
|
;
|
||||||
|
10
app/Resources/views/ajax.html.twig
Normal file
10
app/Resources/views/ajax.html.twig
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{% import 'macros/blocks.html.twig' as blocks %}
|
||||||
|
{% import 'macros/elements.html.twig' as elements %}
|
||||||
|
|
||||||
|
{% for label, flashes in app.session.flashbag.all %}
|
||||||
|
{% for flash in flashes %}
|
||||||
|
{{ elements.flash(label,flash) }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% block content %}{% endblock %}
|
@ -1,58 +0,0 @@
|
|||||||
{% extends 'base.html.twig' %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
{{ form_start(form) }}
|
|
||||||
<div class="four fields">
|
|
||||||
{{ form_row(form.theme) }}
|
|
||||||
{{ form_row(form.subtheme) }}
|
|
||||||
{{ form_row(form.years) }}
|
|
||||||
<div class="field">
|
|
||||||
<label>submit</label>
|
|
||||||
<input type="submit" class="ui button">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ form_end(form) }}
|
|
||||||
|
|
||||||
<h3>{{ sets|length }}</h3>
|
|
||||||
|
|
||||||
<div class="ui seven column grid">
|
|
||||||
<div class="row">
|
|
||||||
{% for set in sets %}
|
|
||||||
<div class="column">
|
|
||||||
<a href="{{ url('set_detail', {'number': set.number~'-'~set.numberVariant, 'name' : set.name|escape('url') }) }}">
|
|
||||||
<img style="width: 100%" src="{{ set.legoSetID|setImage|imagine_filter('rebrickable_set_min') }}">
|
|
||||||
<p>{{ set.LegoSetID }} - {{ set.name }}</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block javascripts %}
|
|
||||||
{{ parent() }}
|
|
||||||
<script>
|
|
||||||
|
|
||||||
var $theme = $('#filter_set_theme');
|
|
||||||
|
|
||||||
$theme.change(function() {
|
|
||||||
var $form = $(this).closest('form');
|
|
||||||
var data = {};
|
|
||||||
data[$theme.attr('name')] = $theme.val();
|
|
||||||
$.ajax({
|
|
||||||
url : $form.attr('action'),
|
|
||||||
type: $form.attr('method'),
|
|
||||||
data : data,
|
|
||||||
success: function(html) {
|
|
||||||
$('#filter_set_subtheme').replaceWith(
|
|
||||||
$(html).find('#filter_set_subtheme')
|
|
||||||
);
|
|
||||||
$('#filter_set_years').replaceWith(
|
|
||||||
$(html).find('#filter_set_years')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
9
app/Resources/views/brickset/description.html.twig
Normal file
9
app/Resources/views/brickset/description.html.twig
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if description|length %}
|
||||||
|
{{ description|raw }}
|
||||||
|
{% else %}
|
||||||
|
{{ blocks.empty('empty.description'|trans) }}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
@ -1,4 +1,8 @@
|
|||||||
<div class="ui six doubling cards">
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if images|length %}
|
||||||
|
<div class="ui six doubling cards">
|
||||||
{% for image in images %}
|
{% for image in images %}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<a class="ui bordered fluid image" href="{{ image.imageURL }}" data-lightbox="setImages">
|
<a class="ui bordered fluid image" href="{{ image.imageURL }}" data-lightbox="setImages">
|
||||||
@ -6,4 +10,8 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
{{ blocks.empty('empty.images') }}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
@ -1,4 +1,7 @@
|
|||||||
{% if instructions|length != 0 %}
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if instructions|length != 0 %}
|
||||||
<p>
|
<p>
|
||||||
{{ 'set.instructions.text' | trans }}
|
{{ 'set.instructions.text' | trans }}
|
||||||
</p>
|
</p>
|
||||||
@ -21,8 +24,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h2 class="ui center aligned icon">
|
{{ blocks.empty('empty.instructions') }}
|
||||||
<i class="circular warning icon"></i>
|
{% endif %}
|
||||||
</h2>
|
{% endblock %}
|
||||||
{% endif %}
|
|
@ -1,12 +1,16 @@
|
|||||||
<div class="ui comments">
|
{% extends 'ajax.html.twig' %}
|
||||||
{% for review in reviews|slice(0, 3) %}
|
|
||||||
|
{% block content %}
|
||||||
|
{% if reviews|length != 0 %}
|
||||||
|
<div class="ui comments">
|
||||||
|
{% for review in reviews %}
|
||||||
<div class="comment">
|
<div class="comment">
|
||||||
<a class="avatar">
|
<a class="avatar">
|
||||||
{#<img src="/images/avatar/small/matt.jpg">#}
|
|
||||||
</a>
|
</a>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h4>{{ review.title }}</h4>
|
<h2>{{ review.title }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<span class="author">{{ review.author }}</span> {{ review.hTML }}
|
<span class="author">{{ review.author }}</span> {{ review.hTML }}
|
||||||
<div class="metadata">
|
<div class="metadata">
|
||||||
@ -20,8 +24,14 @@
|
|||||||
Overall rating <div class="ui star rating" data-rating="{{ review.overallRating }}" data-max-rating="5"></div>
|
Overall rating <div class="ui star rating" data-rating="{{ review.overallRating }}" data-max-rating="5"></div>
|
||||||
Value for money <div class="ui star rating" data-rating="{{ review.valueForMoney }}" data-max-rating="5"></div>
|
Value for money <div class="ui star rating" data-rating="{{ review.valueForMoney }}" data-max-rating="5"></div>
|
||||||
Playability <div class="ui star rating" data-rating="{{ review.playability }}" data-max-rating="5"></div>
|
Playability <div class="ui star rating" data-rating="{{ review.playability }}" data-max-rating="5"></div>
|
||||||
|
Parts <div class="ui star rating" data-rating="{{ review.parts }}" data-max-rating="5"></div>
|
||||||
|
Building experience <div class="ui star rating" data-rating="{{ review.buildingExperience }}" data-max-rating="5"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
{{ blocks.empty('empty.reviews') }}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
43
app/Resources/views/macros/blocks.html.twig
Normal file
43
app/Resources/views/macros/blocks.html.twig
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{% macro modelImageMin(model, color) %}
|
||||||
|
<div class="image load">
|
||||||
|
<img src="{{ asset('resources/images/unknown_image.png') }}" data-src="{{ asset('/images/'~color~'/'~model.number~'.png') | imagine_filter('media_min') }}" class="transition visible">
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro modelImageLarge(model, color) %}
|
||||||
|
<div class="image">
|
||||||
|
<img src="{{ asset('/images/'~color~'/'~model.number~'.png')|imagine_filter('media_large') }}">
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro model(model, quantity) %}
|
||||||
|
<div class="column">
|
||||||
|
<div class="ui bordered fluid image">
|
||||||
|
<a href="{{ url('model_detail', {'number': model.number})}}">
|
||||||
|
{% import _self as blocks %}
|
||||||
|
{{ blocks.modelImageMin(model, -1) }}
|
||||||
|
<div class="ui bottom attached label">{{ quantity }}x {{ model.number }}</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro part(part, quantity, color = -1) %}
|
||||||
|
<div class="column">
|
||||||
|
<div class="ui bordered fluid image">
|
||||||
|
<a href="{{ url('reb_part_detail', {'number': part.number})}}">
|
||||||
|
{% import _self as blocks %}
|
||||||
|
{#{{ blocks.partImage(part.number, -1) }}#}
|
||||||
|
<div class="ui bottom attached label">{{ quantity }}x {{ part.number }}</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro empty(message) %}
|
||||||
|
<p class="ui center aligned icon header"><i class="circular frown icon"></i>{{ message }}</p>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro ccal2_license(title,author) %}
|
||||||
|
"{{ title }}" by {{ author }}, used under <a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a> / Converted to stl from original
|
||||||
|
{% endmacro %}
|
@ -1,16 +1,3 @@
|
|||||||
{% macro part(model) %}
|
|
||||||
<div class="column">
|
|
||||||
<div class="ui bordered fluid image">
|
|
||||||
<a href="{{ url('model_detail', {'number': model.number})}}">
|
|
||||||
<div class="image load">
|
|
||||||
<img src="{{ asset('resources/images/unknown_image.png') }}" data-src="{{ asset('/images/-1/'~model.number~'.png') | imagine_filter('model_min') }}" class="transition visible">
|
|
||||||
</div>
|
|
||||||
<div class="ui bottom attached label {% if model.parts|length == 0 %}black{% endif %}">{{ model.number }}</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
||||||
{% macro flash(type,message) %}
|
{% macro flash(type,message) %}
|
||||||
{% if type == 'error' %}
|
{% if type == 'error' %}
|
||||||
{% set icon = 'ban' %}
|
{% set icon = 'ban' %}
|
||||||
@ -26,7 +13,6 @@
|
|||||||
{% set title = 'flash.info.title' %}
|
{% set title = 'flash.info.title' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<div class="ui icon {{ type ? type : '' }} message">
|
<div class="ui icon {{ type ? type : '' }} message">
|
||||||
<i class="{{ icon }} icon"></i>
|
<i class="{{ icon }} icon"></i>
|
||||||
<i class="close icon"></i>
|
<i class="close icon"></i>
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
<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>
|
|
20
app/Resources/views/set/colors.html.twig
Normal file
20
app/Resources/views/set/colors.html.twig
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if colors|length > 0 %}
|
||||||
|
{% for color in colors %}
|
||||||
|
<h5 style="color: #{{ color['color'].rgb }}" class="ui horizontal divider header">
|
||||||
|
{{ color['color'].name }} ({{ color['quantity'] }})
|
||||||
|
</h5>
|
||||||
|
<div class="segment vertical">
|
||||||
|
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for model in color['models'] %}
|
||||||
|
{{ blocks.model(model['model'],model['quantity']) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -1,8 +1,8 @@
|
|||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}{{ rbset ? rbset.number }} {{ rbset ? rbset.name }}{% endblock %}
|
{% block title %}{{ set ? set.number }} {{ set ? set.name }}{% endblock %}
|
||||||
|
|
||||||
{% block header %}{{ rbset ? rbset.number }} {{ rbset ? rbset.name | escape('html') }}{% endblock %}
|
{% block header %}{{ set ? set.number }} {{ set ? set.name | escape('html') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
@ -11,66 +11,66 @@
|
|||||||
<div class="image bordered ui big">
|
<div class="image bordered ui big">
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<img class="big" src="{{ ('/sets/images/'~brset.legoSetID~'.jpg')|imagine_filter('brickset_large') }}">
|
<img class="big" src="{{ ('/sets/images/'~brset.legoSetID~'.jpg')|imagine_filter('brickset_large') }}">
|
||||||
{% elseif rbset %}
|
{% else %}
|
||||||
<img class="big" src="{{ rbset.number|setImage|imagine_filter('rebrickable_large') }}">
|
<img class="big" src="{{ set.number|setImage|imagine_filter('rebrickable_large') }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="column seven wide">
|
<div class="column seven wide">
|
||||||
<div class="item-info black ui">
|
<div class="item-info ui">
|
||||||
<table class="ui very basic table">
|
<table class="ui very basic table">
|
||||||
<tr>
|
<tr>
|
||||||
<td>number</td><td>{{ brset ? brset.legoSetID : rbset ? rbset.number : null}}</td>
|
<td>{{ 'set.number' | trans }}</td><td>{{ brset ? brset.legoSetID : set ? set.number : null}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>name</td><td>{{ brset ? brset.name : rbset ? rbset.name : null}}</td>
|
<td>{{ 'set.name' | trans }}</td><td>{{ brset ? brset.name : set ? set.name : null}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>year</td><td>{{ brset ? brset.year : rbset ? rbset.year : null}}</td>
|
<td>{{ 'set.year' | trans }}</td><td>{{ brset ? brset.year : set ? set.year : null}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>theme</td>
|
<td>{{ 'set.theme' | trans }}</td>
|
||||||
{% if rbset %}
|
{% if set %}
|
||||||
<td><a href="#">{{ rbset.theme.parent ? rbset.theme.parent.name }}</a> <a href="#">{{ rbset.theme.name }}</a> </td>
|
<td><a href="#">{{ set.theme.parent ? set.theme.parent.name }}</a> <a href="#">{{ set.theme.name }}</a> </td>
|
||||||
{% elseif brset %}
|
{% elseif brset %}
|
||||||
<td>{{ brset.theme }}</td>
|
<td>{{ brset.theme }}</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>parts</td><td>
|
<td>{{ 'set.parts' | trans }}</td><td>
|
||||||
{{ rbset ? rbset.partCount }} {{ brset ? '('~brset.pieces~')' }}
|
{{ set ? set.partCount }} {{ brset ? '('~brset.pieces~')' }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td>{{ 'set.minifigs' | trans }}</td>
|
||||||
<td><a class="brickset link" href="{{ brset.bricksetURL }}">Brickset</a></td>
|
<td>{{ brset.minifigs }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{ 'set.rating' | trans }}</td>
|
||||||
|
<td>
|
||||||
|
{{ brset.rating }}/5
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if rbset %}
|
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><a class="rebrickable link" href="http://rebrickable.com/sets/{{ rbset ? rbset.number }}">Rebrickable</a></td>
|
<td>
|
||||||
</tr>
|
<a class="rebrickable link" href="http://rebrickable.com/sets/{{ set ? set.number }}">Rebrickable</a>
|
||||||
|
{% if brset %}
|
||||||
|
<a class="brickset link" href="{{ brset.bricksetURL }}">Brickset</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{#{% 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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ui segment vertical item-info">
|
<div class="ui segment vertical item-info">
|
||||||
<div class="ui tabular pointing secondary menu">
|
<div class="ui tabular pointing secondary menu">
|
||||||
<a class="item active" data-tab="parts"><i class="cubes icon"></i> Parts ({{ rbset ? rbset.partCount : 0}})</a>
|
<a class="item active" data-tab="parts"><i class="cubes icon"></i> Inventory ({{ set ? set.partCount : 0}})</a>
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<a class="item" data-tab="description"><i class="info icon"></i> Description</a>
|
<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="images"> <i class="image icon"></i> Images ({{ brset.additionalImageCount }})</a>
|
||||||
@ -80,61 +80,26 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="ui vertical segment">
|
<div class="ui vertical segment">
|
||||||
<div class="ui tab active" data-tab="parts">
|
<div class="ui tab active" data-tab="parts">
|
||||||
{% if rbset %}
|
<div class="ajax-load" data-src="{{ path('set_models', { 'number': set.number }) }}">
|
||||||
|
<div class="ui active centered inline loader"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{#<div class="ajax-load" id="parts" data-src="{{ path('rebrickable_set_parts', { 'number': rbset.number }) }}"></div>#}
|
{#{{ render(path('set_colors', {number: set.number})) }}#}
|
||||||
|
|
||||||
{{ render(controller('AppBundle:Rebrickable/Set:parts', { 'number': rbset.number })) }}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<div class="ui tab" data-tab="images">
|
<div class="ui tab ajax-load" data-tab="description" data-src="{{ path('brickset_description', { 'id': brset.setID }) }}">
|
||||||
{#<div class="ajax-load" id="images" data-src="{{ path('brickset_images', { 'id': brset.setID }) }}"></div>#}
|
<div class="ui active centered inline loader"></div>
|
||||||
|
|
||||||
{{ render(controller('AppBundle:Brickset/Set:images', { 'id': brset.setID })) }}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab" data-tab="instructions">
|
<div class="ui tab ajax-load" data-tab="images" data-src="{{ path('brickset_images', { 'id': brset.setID }) }}">
|
||||||
{#<div class="ajax-load" id="instructions" data-src="{{ path('brickset_instructions', { 'id': brset.setID }) }}"></div>#}
|
<div class="ui active centered inline loader"></div>
|
||||||
|
|
||||||
{{ render(controller('AppBundle:Brickset/Set:instructions', { 'id': brset.setID })) }}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab" data-tab="reviews">
|
<div class="ui tab ajax-load" data-tab="instructions" data-src="{{ path('brickset_instructions', { 'id': brset.setID }) }}">
|
||||||
{#<div class="ajax-load" id="reviews" data-src="{{ path('brickset_reviews', { 'id': brset.setID }) }}"></div>#}
|
<div class="ui active centered inline loader"></div>
|
||||||
|
|
||||||
{{ render(controller('AppBundle:Brickset/Set:reviews', { 'id': brset.setID })) }}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab" data-tab="description">
|
<div class="ui tab ajax-load" data-tab="reviews" data-src="{{ path('brickset_reviews', { 'id': brset.setID }) }}">
|
||||||
{{ brset.description|raw }}
|
<div class="ui active centered inline loader"></div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascripts %}
|
|
||||||
{{ parent() }}
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
|
||||||
|
|
||||||
// $('.ajax-load').each(function () {
|
|
||||||
// $self = $(this);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// $.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 %}
|
|
@ -32,21 +32,20 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="column twelve wide">
|
<div class="column twelve wide">
|
||||||
|
<div class="segment vertical">
|
||||||
<div class="ui six column doubling grid">
|
<div class="ui six column doubling grid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for set in sets %}
|
{% for set in sets %}
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<a href="{{ url('set_detail', {'number': set.number}) }}">
|
<a href="{{ url('set_detail', {'number': set.number}) }}">
|
||||||
<img class="ui bordered image medium" src="{{ set.number|setImage|imagine_filter('rebrickable_set_min') }}">
|
<img class="ui bordered image medium" src="{{ set.number|setImage|imagine_filter('rebrickable_min') }}">
|
||||||
<p>{{ set.number }} - {{ set.name }}</p>
|
<p>{{ set.number }} - {{ set.name }}</p>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<p>{{ sets.getTotalItemCount }}</p>
|
|
||||||
|
|
||||||
{{ knp_pagination_render(sets) }}
|
{{ knp_pagination_render(sets) }}
|
||||||
</div>
|
</div>
|
||||||
@ -57,4 +56,6 @@
|
|||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
37
app/Resources/views/set/inventory.html.twig
Normal file
37
app/Resources/views/set/inventory.html.twig
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if regularParts|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Regular parts
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for inventoryPart in regularParts %}
|
||||||
|
{{ blocks.part(inventoryPart.part,inventoryPart.quantity, inventoryPart.color) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if missing|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Missing models
|
||||||
|
</h4>
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for inventoryPart in missing %}
|
||||||
|
{{ blocks.part(inventoryPart.part,inventoryPart.quantity, inventoryPart.color) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if spareParts|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Spare parts
|
||||||
|
</h4>
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for inventoryPart in spareParts %}
|
||||||
|
{{ blocks.part(inventoryPart.part,inventoryPart.quantity, inventoryPart.color) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
56
app/Resources/views/set/models.html.twig
Normal file
56
app/Resources/views/set/models.html.twig
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if models|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Regular parts
|
||||||
|
</h4>
|
||||||
|
<div class="ui segment vertical">
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for model in models %}
|
||||||
|
{{ blocks.model(model['model'],model['quantity']) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if missing|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Missing regular models
|
||||||
|
</h4>
|
||||||
|
<div class="ui segment vertical">
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for inventoryPart in missing %}
|
||||||
|
{{ blocks.part(inventoryPart.part,inventoryPart.quantity) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if spareModels|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Spare parts
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<div class="ui segment vertical">
|
||||||
|
<div class="ui ten column grid">
|
||||||
|
{% for model in spareModels %}
|
||||||
|
{{ blocks.model(model['model'],model['quantity']) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if missingSpare|length > 0 %}
|
||||||
|
<h4 class="ui horizontal divider header">
|
||||||
|
Missing spare models
|
||||||
|
</h4>
|
||||||
|
<div class="ui segment vertical">
|
||||||
|
<div class="ui ten column grid segment">
|
||||||
|
{% for inventoryPart in missingSpare %}
|
||||||
|
{{ blocks.part(inventoryPart.part,inventoryPart.quantity) }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
20
app/Resources/views/set/sets.html.twig
Normal file
20
app/Resources/views/set/sets.html.twig
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{% extends 'ajax.html.twig' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<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>
|
||||||
|
{% endblock %}
|
@ -4,49 +4,16 @@ namespace AppBundle\Controller\Brickset;
|
|||||||
|
|
||||||
use AppBundle\Api\Exception\EmptyResponseException;
|
use AppBundle\Api\Exception\EmptyResponseException;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
use AppBundle\Entity\Rebrickable\Theme;
|
|
||||||
use AppBundle\Form\FilterSetType;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/brickset/sets")
|
* @Route("/brickset/sets")
|
||||||
*/
|
*/
|
||||||
class SetController extends Controller
|
class SetController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @Route("/", name="brickset_browse")
|
|
||||||
*/
|
|
||||||
public function browseAction(Request $request)
|
|
||||||
{
|
|
||||||
$form = $this->createForm(FilterSetType::class);
|
|
||||||
|
|
||||||
$form->handleRequest($request);
|
|
||||||
|
|
||||||
$sets = [];
|
|
||||||
if ($form->isSubmitted() && $form->isValid()) {
|
|
||||||
$data = $form->getData();
|
|
||||||
|
|
||||||
try {
|
|
||||||
$sets = $this->get('api.client.brickset')->getSets([
|
|
||||||
'theme' => $data['theme'] ? $data['theme']->getTheme() : '',
|
|
||||||
'subtheme' => $data['subtheme'] ? $data['subtheme']->getSubtheme() : '',
|
|
||||||
'year' => $data['years'] ? $data['years']->getYear() : '',
|
|
||||||
]);
|
|
||||||
} catch (EmptyResponseException $e) {
|
|
||||||
$this->addFlash('warning', 'No set found on '.$e->getService());
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->addFlash('error', $e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('brickset/browse.html.twig', [
|
|
||||||
'form' => $form->createView(),
|
|
||||||
'sets' => $sets,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/{id}/instructions", name="brickset_instructions")
|
* @Route("/{id}/instructions", name="brickset_instructions")
|
||||||
*/
|
*/
|
||||||
@ -61,9 +28,19 @@ class SetController extends Controller
|
|||||||
$this->addFlash('error', $e->getMessage());
|
$this->addFlash('error', $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->render('brickset/instructions.html.twig', [
|
$template = $this->render('brickset/instructions.html.twig', [
|
||||||
'instructions' => $instructions,
|
'instructions' => $instructions,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($request->isXmlHttpRequest()) {
|
||||||
|
$json = json_encode($template->getContent());
|
||||||
|
$response = new Response($json, 200);
|
||||||
|
$response->headers->set('Content-Type', 'application/json');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,9 +57,19 @@ class SetController extends Controller
|
|||||||
$this->addFlash('error', $e->getMessage());
|
$this->addFlash('error', $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->render('brickset/reviews.html.twig', [
|
$template = $this->render('brickset/reviews.html.twig', [
|
||||||
'reviews' => $reviews,
|
'reviews' => $reviews,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($request->isXmlHttpRequest()) {
|
||||||
|
$json = json_encode($template->getContent());
|
||||||
|
$response = new Response($json, 200);
|
||||||
|
$response->headers->set('Content-Type', 'application/json');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,8 +86,47 @@ class SetController extends Controller
|
|||||||
$this->addFlash('error', $e->getMessage());
|
$this->addFlash('error', $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->render('brickset/images.html.twig', [
|
$template = $this->render('brickset/images.html.twig', [
|
||||||
'images' => $images,
|
'images' => $images,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
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}/description", name="brickset_description")
|
||||||
|
*/
|
||||||
|
public function descriptionAction(Request $request, $id)
|
||||||
|
{
|
||||||
|
$desription = null;
|
||||||
|
try {
|
||||||
|
$desription = $this->get('api.manager.brickset')->getSetById($id)->getDescription();
|
||||||
|
} catch (EmptyResponseException $e) {
|
||||||
|
// $this->addFlash('warning', 'No description found on Brickset.com');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->addFlash('error', $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
$template = $this->render('brickset/description.html.twig', [
|
||||||
|
'description' => $desription,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($request->isXmlHttpRequest()) {
|
||||||
|
$json = json_encode($template->getContent());
|
||||||
|
$response = new Response($json, 200);
|
||||||
|
$response->headers->set('Content-Type', 'application/json');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace AppBundle\Controller\Rebrickable;
|
|
||||||
|
|
||||||
use AppBundle\Entity\LDraw\Model;
|
|
||||||
use AppBundle\Entity\Color;
|
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
|
||||||
use AppBundle\Entity\Rebrickable\Part;
|
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Route("/rebrickable/sets")
|
|
||||||
*/
|
|
||||||
class SetController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @Route("/{number}/parts", name="rebrickable_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());
|
|
||||||
$models = $em->getRepository(Model::class)->findAllBySetNumber($set->getNumber());
|
|
||||||
|
|
||||||
$template = $this->render('rebrickable/set/inventory.html.twig', [
|
|
||||||
'regularParts' => $regularParts,
|
|
||||||
'spareParts' => $spareParts,
|
|
||||||
'models' => $models,
|
|
||||||
]);
|
|
||||||
|
|
||||||
// $json = json_encode($template->getContent());
|
|
||||||
// $response = new Response($json, 200);
|
|
||||||
// $response->headers->set('Content-Type', 'application/json');
|
|
||||||
//
|
|
||||||
// return $response;
|
|
||||||
|
|
||||||
return $template;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Route("/{number}/models", name="rebrickable_set_models")
|
|
||||||
*/
|
|
||||||
public function modelsAction(Set $set)
|
|
||||||
{
|
|
||||||
$models = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
$this->get('repository.ldraw.model')->findAllBySetNumber($set->getNumber());
|
|
||||||
$models = $this->get('service.set')->getModels($set);
|
|
||||||
$spareModels = $this->get('service.set')->getSpareModels($set);
|
|
||||||
|
|
||||||
// $models = $this->get('repository.ldraw.model')->findAllRegularBySetNumber($set->getNumber());
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->addFlash('error', $e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('rebrickable/set/models.html.twig', [
|
|
||||||
'set' => $set,
|
|
||||||
'models' => $models,
|
|
||||||
'spareModels' => $spareModels
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Route("/{number}/sets", name="rebrickable_set_sets")
|
|
||||||
*/
|
|
||||||
public function setsAction(Set $set)
|
|
||||||
{
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,7 @@ namespace AppBundle\Controller;
|
|||||||
|
|
||||||
use AppBundle\Api\Exception\ApiException;
|
use AppBundle\Api\Exception\ApiException;
|
||||||
use AppBundle\Api\Exception\EmptyResponseException;
|
use AppBundle\Api\Exception\EmptyResponseException;
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
use AppBundle\Form\Filter\Set\SetFilterType;
|
use AppBundle\Form\Filter\Set\SetFilterType;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
@ -26,7 +26,7 @@ class SetController extends Controller
|
|||||||
|
|
||||||
$filterBuilder = $this->get('repository.rebrickable.set')
|
$filterBuilder = $this->get('repository.rebrickable.set')
|
||||||
->createQueryBuilder('s')
|
->createQueryBuilder('s')
|
||||||
->orderBy('s.year','DESC');
|
->orderBy('s.year', 'DESC');
|
||||||
|
|
||||||
if ($request->query->has($form->getName())) {
|
if ($request->query->has($form->getName())) {
|
||||||
// manually bind values from the request
|
// manually bind values from the request
|
||||||
@ -52,19 +52,13 @@ class SetController extends Controller
|
|||||||
/**
|
/**
|
||||||
* @Route("/{number}", name="set_detail")
|
* @Route("/{number}", name="set_detail")
|
||||||
*/
|
*/
|
||||||
public function detailAction(Request $request, $number)
|
public function detailAction(Request $request, Set $set)
|
||||||
{
|
{
|
||||||
$rebrickableSet = null;
|
|
||||||
$bricksetSet = null;
|
$bricksetSet = null;
|
||||||
$colors = null;
|
$colors = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (($rebrickableSet = $this->get('repository.rebrickable.set')->find($number)) == null) {
|
$bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($set->getNumber());
|
||||||
$this->addFlash('warning', 'Set not found in Rebrickable database');
|
|
||||||
}
|
|
||||||
|
|
||||||
$bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($number);
|
|
||||||
|
|
||||||
} catch (EmptyResponseException $e) {
|
} catch (EmptyResponseException $e) {
|
||||||
$this->addFlash('warning', 'Set not found in Brickset database');
|
$this->addFlash('warning', 'Set not found in Brickset database');
|
||||||
} catch (ApiException $e) {
|
} catch (ApiException $e) {
|
||||||
@ -73,13 +67,138 @@ class SetController extends Controller
|
|||||||
$this->addFlash('error', $e->getMessage());
|
$this->addFlash('error', $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$rebrickableSet && !$bricksetSet) {
|
|
||||||
return $this->render('error/error.html.twig');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('set/detail.html.twig', [
|
return $this->render('set/detail.html.twig', [
|
||||||
'rbset' => $rebrickableSet,
|
'set' => $set,
|
||||||
'brset' => $bricksetSet,
|
'brset' => $bricksetSet,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/{number}/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);
|
||||||
|
|
||||||
|
$missing = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), false, false);
|
||||||
|
|
||||||
|
$template = $this->render('set/inventory.html.twig', [
|
||||||
|
'regularParts' => $regularParts,
|
||||||
|
'missing' => $missing,
|
||||||
|
'spareParts' => $spareParts,
|
||||||
|
]);
|
||||||
|
|
||||||
|
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("/{number}/models", name="set_models")
|
||||||
|
*/
|
||||||
|
public function modelsAction(Request $request, Set $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('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), false, false);
|
||||||
|
$missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), true, false);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->addFlash('error', $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
$template = $this->render('set/models.html.twig', [
|
||||||
|
'set' => $set,
|
||||||
|
'missing' => $missing,
|
||||||
|
'models' => $models,
|
||||||
|
'spareModels' => $spareModels,
|
||||||
|
'missingSpare' => $missingSpare,
|
||||||
|
]);
|
||||||
|
|
||||||
|
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("/{number}/colors", name="set_colors")
|
||||||
|
*/
|
||||||
|
public function colorsAction(Request $request, Set $set)
|
||||||
|
{
|
||||||
|
$colors = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$colors = $this->get('service.set')->getModelsGroupedByColor($set, false);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->addFlash('error', $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
$template = $this->render('set/colors.html.twig', [
|
||||||
|
'set' => $set,
|
||||||
|
'colors' => $colors,
|
||||||
|
]);
|
||||||
|
|
||||||
|
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("/{number}/sets", name="set_sets")
|
||||||
|
*/
|
||||||
|
public function setsAction(Request $request, Set $set)
|
||||||
|
{
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getNumber());
|
||||||
|
|
||||||
|
$template = $this->render('set/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("/{number}/zip", name="set_zip")
|
||||||
|
*/
|
||||||
|
public function zipAction(Request $request, Set $set)
|
||||||
|
{
|
||||||
|
$sorted = $request->query->get('sorted') == 1 ? true : false;
|
||||||
|
$this->get('service.zip')->createFromSet($set, $sorted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user