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:
parent
5b6bc7b6c8
commit
254add244d
BIN
app/Resources/assets/images/brickset_logo.png
Normal file
BIN
app/Resources/assets/images/brickset_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
BIN
app/Resources/assets/images/rebrickable_logo.png
Normal file
BIN
app/Resources/assets/images/rebrickable_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
@ -1,4 +1,43 @@
|
|||||||
.ui.fixed + .ui.main {
|
.default-theme {
|
||||||
margin-top: 5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,7 +6,9 @@
|
|||||||
<div class="ui fixed inverted menu">
|
<div class="ui fixed inverted menu">
|
||||||
{{ knp_menu_render('mainMenu') }}
|
{{ knp_menu_render('mainMenu') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui main container">
|
{% block page %}
|
||||||
|
<div class="ui main">
|
||||||
|
<div class="ui container">
|
||||||
<div class="ui masthead vertical segment">
|
<div class="ui masthead vertical segment">
|
||||||
<div class="introduction">
|
<div class="introduction">
|
||||||
<div class="ui small breadcrumb">
|
<div class="ui small breadcrumb">
|
||||||
@ -22,7 +24,7 @@
|
|||||||
<h1 class="ui header">{% block header %}{% endblock %}</h1>
|
<h1 class="ui header">{% block header %}{% endblock %}</h1>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="ui vertical segment content">
|
||||||
{% for label, flashes in app.session.flashbag.all %}
|
{% for label, flashes in app.session.flashbag.all %}
|
||||||
{% for flash in flashes %}
|
{% for flash in flashes %}
|
||||||
{{ elements.flash(label,flash) }}
|
{{ elements.flash(label,flash) }}
|
||||||
@ -33,10 +35,14 @@
|
|||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock page %}
|
||||||
<div class="ui black inverted vertical footer segment stripe">
|
<div class="ui black inverted vertical footer segment stripe">
|
||||||
|
{% block footer %}
|
||||||
<div class="ui center aligned container">
|
<div class="ui center aligned container">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,6 +1,14 @@
|
|||||||
{% extends 'base.html.twig' %}
|
{% 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 %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
|
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="default-theme">
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -2,23 +2,33 @@
|
|||||||
|
|
||||||
{% import 'macros/elements.html.twig' as elements %}
|
{% 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 %}
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="ui grid">
|
||||||
|
<div class="column ten wide">
|
||||||
<div id="model-viewer" class="model-container">
|
<div id="model-viewer" class="model-container">
|
||||||
<img src="{{ asset('ldraw/images/'~model.number~'.png') | imagine_filter('model_large')}}">
|
<img src="{{ asset('ldraw/images/'~model.number~'.png') | imagine_filter('model_large')}}">
|
||||||
</div>
|
</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>
|
<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>
|
<dt>keywords:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{% for keyword in model.keywords %}
|
{% for keyword in model.keywords %}
|
||||||
@ -28,29 +38,33 @@
|
|||||||
<dt>aliases:</dt>
|
<dt>aliases:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{% for alias in model.aliases %}
|
{% for alias in model.aliases %}
|
||||||
<span class="ui label">{{ alias.number }}</span>
|
<span>{{ alias.number }}</span>{% if not loop.last %},{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</dd>
|
</dd>
|
||||||
<dd>Download:</dd>
|
<dd>Download:</dd>
|
||||||
<dt><a href="{{ url('media_file', {'path': model.path}) }}">{{ model.number }}</a></dt>
|
<dt><a href="{{ url('media_file', {'path': model.path}) }}">{{ model.number }}</a></dt>
|
||||||
<dt>rebrickable parts ({{ rbParts|length }}):</dt>
|
<dt>rebrickable parts ({{ rbParts|length }}):</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<p>
|
{#<p>#}
|
||||||
<div class="ui eight doubling cards">
|
{#<div class="ui eight doubling cards">#}
|
||||||
{% for alias in rbParts %}
|
{#{% for alias in rbParts %}#}
|
||||||
<a href="{{ url('reb_part_detail', {number:alias.number}) }}" class="ui label">{{ alias.number }}</a>
|
{#<a href="{{ url('reb_part_detail', {number:alias.number}) }}" class="ui label">{{ alias.number }}</a>#}
|
||||||
{% endfor %}
|
{#{% endfor %}#}
|
||||||
</div>
|
{#</div>#}
|
||||||
</p>
|
{#</p>#}
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<h4 class="ui horizontal divider header">
|
<h4 class="ui horizontal divider header">
|
||||||
<i class="puzzle icon"></i> Subparts of this model
|
Subparts of this model
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div class="ui eight cards">
|
<div class="ui eight column grid">
|
||||||
{% for subpart in model.subparts %}
|
{% for subpart in model.subparts %}
|
||||||
<div class="column">
|
<div class="column">
|
||||||
{{ elements.part(subpart.subpart) }}
|
{{ elements.part(subpart.subpart) }}
|
||||||
@ -59,10 +73,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4 class="ui horizontal divider header">
|
<h4 class="ui horizontal divider header">
|
||||||
<i class="cube icon"></i> Model is subpart of
|
Model is subpart of
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div class="ui eight cards">
|
<div class="ui eight column grid">
|
||||||
{% for subpart in model.parents %}
|
{% for subpart in model.parents %}
|
||||||
<div class="column">
|
<div class="column">
|
||||||
{{ elements.part(subpart.parent) }}
|
{{ elements.part(subpart.parent) }}
|
||||||
@ -70,6 +84,19 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</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">
|
<h4 class="ui horizontal divider header">
|
||||||
<i class="cubes icon"></i> Sets ({{ sets|length }})
|
<i class="cubes icon"></i> Sets ({{ sets|length }})
|
||||||
</h4>
|
</h4>
|
||||||
@ -77,7 +104,9 @@
|
|||||||
{% for set in sets %}
|
{% for set in sets %}
|
||||||
<span style="margin: 5px"><a href="{{ url('set_detail', {number:set.number}) }}">{{ set.number }}</a></span>
|
<span style="margin: 5px"><a href="{{ url('set_detail', {number:set.number}) }}">{{ set.number }}</a></span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
|
@ -2,7 +2,13 @@
|
|||||||
|
|
||||||
{% import 'macros/elements.html.twig' as elements %}
|
{% import 'macros/elements.html.twig' as elements %}
|
||||||
|
|
||||||
|
{% block title %}{{ 'page.model.index' | trans }}{% endblock %}
|
||||||
|
|
||||||
|
{% block header %}{{ 'page.model.index' | trans }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<div class="ui container stackable grid">
|
||||||
|
<div class="column four wide">
|
||||||
<form method="get" action="" class="ui form">
|
<form method="get" action="" class="ui form">
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
|
|
||||||
@ -16,8 +22,9 @@
|
|||||||
</div>
|
</div>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="column twelve wide">
|
||||||
|
{{ knp_pagination_render(models) }}
|
||||||
<p>{{ models.getTotalItemCount }}</p>
|
<p>{{ models.getTotalItemCount }}</p>
|
||||||
<div class="ui eight column grid">
|
<div class="ui eight column grid">
|
||||||
{% for model in models %}
|
{% for model in models %}
|
||||||
@ -26,4 +33,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ knp_pagination_render(models) }}
|
{{ knp_pagination_render(models) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<table class="ui celled padded table">
|
<table class="ui celled small padded table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
25
app/Resources/views/rebrickable/part/index.html.twig
Normal file
25
app/Resources/views/rebrickable/part/index.html.twig
Normal 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 %}
|
@ -1,8 +1,9 @@
|
|||||||
|
{% if regularParts|length > 0 %}
|
||||||
<h4 class="ui horizontal divider header">
|
<h4 class="ui horizontal divider header">
|
||||||
Regular parts
|
Regular parts
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div class="ui eight column grid">
|
<div class="ui ten column grid">
|
||||||
{% for inventoryPart in regularParts %}
|
{% for inventoryPart in regularParts %}
|
||||||
{% if inventoryPart.part is defined %}
|
{% if inventoryPart.part is defined %}
|
||||||
<div class="column">
|
<div class="column">
|
||||||
@ -12,18 +13,20 @@
|
|||||||
<div class="image load">
|
<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">
|
<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>
|
||||||
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if spareParts|length > 0 %}
|
||||||
<h4 class="ui horizontal divider header">
|
<h4 class="ui horizontal divider header">
|
||||||
Spare parts
|
Spare parts
|
||||||
</h4>
|
</h4>
|
||||||
<div class="ui eight column grid">
|
<div class="ui ten column grid">
|
||||||
{% for inventoryPart in spareParts %}
|
{% for inventoryPart in spareParts %}
|
||||||
{% if inventoryPart.part is defined %}
|
{% if inventoryPart.part is defined %}
|
||||||
<div class="column">
|
<div class="column">
|
||||||
@ -33,10 +36,11 @@
|
|||||||
<div class="image load">
|
<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">
|
<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>
|
||||||
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
16
app/Resources/views/rebrickable/set/sets.html.twig
Normal file
16
app/Resources/views/rebrickable/set/sets.html.twig
Normal 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>
|
@ -5,53 +5,72 @@
|
|||||||
{% block header %}{{ rbset ? rbset.number }} {{ rbset ? rbset.name }}{% endblock %}
|
{% block header %}{{ rbset ? rbset.number }} {{ rbset ? rbset.name }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="ui stackable grid">
|
||||||
|
<div class="column nine wide">
|
||||||
|
<div class="image bordered ui big">
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<a href="{{ brset.bricksetURL }}"><img class="image ui mini" src="http://brickset.com/assets/images/logo/bricks.jpg"> Brickset</a>
|
<img class="big" src="{{ brset.imageURL }}">
|
||||||
|
{% elseif rbset %}
|
||||||
|
<img class="big" src="{{ rbset.number|setImage|imagine_filter('rebrickable') }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% if rbset is not null %}
|
<div class="column seven wide">
|
||||||
<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>
|
<div class="item-info black ui">
|
||||||
<dl>
|
<table class="ui table">
|
||||||
<dt>number:</dt><dd>{{ rbset.number }}</dd>
|
<tr>
|
||||||
<dt>year:</dt><dd>{{ rbset.year }}</dd>
|
<td>number</td><td>{{ brset ? brset.legoSetID : rbset ? rbset.number : null}}</td>
|
||||||
<dt>name:</dt><dd>{{ rbset.name }}</dd>
|
</tr>
|
||||||
<dt>theme:</dt><dd>{{ rbset.theme.name }}</dd>
|
<tr>
|
||||||
{% if rbset.theme.parent %}
|
<td>name</td><td>{{ brset ? brset.name : rbset ? rbset.name : null}}</td>
|
||||||
<dt>themeparent:</dt><dd>{{ rbset.theme.parent.name }}</dd>
|
</tr>
|
||||||
{% if rbset.theme.parent.parent %}
|
<tr>
|
||||||
<dt>themeparent:</dt><dd>{{ rbset.theme.parent.parent.name }}</dd>
|
<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 %}
|
{% 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 %}
|
{% endif %}
|
||||||
<dt>count of parts:</dt><dd>{{ rbset.partCount }}</dd>
|
{% if rbset %}
|
||||||
</dl>
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><a class="rebrickable link" href="http://rebrickable.com/sets/{{ rbset ? rbset.number }}">Rebrickable</a></td>
|
||||||
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
|
||||||
{% if brset is not null %}
|
{% if brset is not null %}
|
||||||
<dl>
|
<dl>
|
||||||
<dt>year:</dt><dd>{{ brset.year }}</dd>
|
|
||||||
<dt>name:</dt><dd>{{ brset.name }}</dd>
|
|
||||||
<dt>themegroup:</dt><dd>{{ brset.themeGroup }}</dd>
|
<dt>themegroup:</dt><dd>{{ brset.themeGroup }}</dd>
|
||||||
<dt>theme:</dt><dd>{{ brset.theme }}</dd>
|
<dt>theme:</dt><dd>{{ brset.theme }}</dd>
|
||||||
<dt>subtheme:</dt><dd>{{ brset.subtheme }}</dd>
|
<dt>subtheme:</dt><dd>{{ brset.subtheme }}</dd>
|
||||||
<dt>count of parts:</dt><dd>{{ brset.pieces }}</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>minifigs:</dt><dd>{{ brset.minifigs }}</dd>
|
||||||
<dt>description:</dt><dd>{{ brset.description }}</dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% if brset %}
|
<div class="segment vertical item-info">
|
||||||
<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">
|
<div class="ui tabular 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> Parts ({{ rbset ? rbset.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="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>
|
||||||
<a class="item" data-tab="instructions"> <i class="file pdf outline icon"></i> Instructions ({{ brset.instructionsCount }})</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>
|
<a class="item" data-tab="reviews"><i class="write icon"></i> Reviews ({{ brset.reviewCount }})</a>
|
||||||
@ -59,36 +78,61 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="ui tab active" data-tab="parts">
|
<div class="ui tab active" data-tab="parts">
|
||||||
{% if rbset %}
|
{% 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">
|
<div class="ajax-load" id="parts" data-src="{{ path('rebrickable_set_parts', { 'number': rbset.number }) }}"></div>
|
||||||
Sets
|
|
||||||
</h4>
|
{#{{ render(controller('AppBundle:Rebrickable/Set:parts', { 'number': rbset.number })) }}#}
|
||||||
|
|
||||||
{% 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>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if brset %}
|
{% if brset %}
|
||||||
<div class="ui tab" data-tab="images">
|
<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 })) }}
|
{{ render(controller('AppBundle:Brickset/Set:images', { 'id': brset.setID })) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab" data-tab="instructions">
|
<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 })) }}
|
{{ render(controller('AppBundle:Brickset/Set:instructions', { 'id': brset.setID })) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab" data-tab="reviews">
|
<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 })) }}
|
{{ render(controller('AppBundle:Brickset/Set:reviews', { 'id': brset.setID })) }}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="ui tab" data-tab="description">
|
||||||
|
{{ brset.description }}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% 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 %}
|
{% endblock %}
|
@ -48,9 +48,10 @@ gulp.task('files:semantic', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('files:images', function () {
|
gulp.task('files:images', function () {
|
||||||
return gulp.src(
|
return gulp.src([
|
||||||
'node_modules/lightbox2/dist/images/**'
|
'node_modules/lightbox2/dist/images/**',
|
||||||
)
|
'app/Resources/assets/images/**'
|
||||||
|
])
|
||||||
.pipe(gulp.dest('web/resources/images'));
|
.pipe(gulp.dest('web/resources/images'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -33,44 +33,32 @@ class SetController extends Controller
|
|||||||
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
||||||
$spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($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,
|
'regularParts' => $regularParts,
|
||||||
'spareParts' => $spareParts,
|
'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();
|
||||||
|
|
||||||
// /**
|
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getNumber());
|
||||||
// * @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;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
$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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace AppBundle\Controller;
|
namespace AppBundle\Controller;
|
||||||
|
|
||||||
|
use AppBundle\Api\Exception\ApiException;
|
||||||
use AppBundle\Api\Exception\EmptyResponseException;
|
use AppBundle\Api\Exception\EmptyResponseException;
|
||||||
use AppBundle\Entity\LDraw\Model;
|
use AppBundle\Entity\LDraw\Model;
|
||||||
use AppBundle\Entity\Rebrickable\Color;
|
use AppBundle\Entity\Rebrickable\Color;
|
||||||
@ -58,88 +59,64 @@ class SetController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function detailAction(Request $request, $number)
|
public function detailAction(Request $request, $number)
|
||||||
{
|
{
|
||||||
$brset = null;
|
$rebrickableSet = null;
|
||||||
$rbset = null;
|
$bricksetSet = null;
|
||||||
$inventorySets = null;
|
|
||||||
|
|
||||||
$inventorySets = $this->getDoctrine()->getManager()->getRepository(Inventory_Set::class)->findAllBySetNumber($number);
|
|
||||||
try {
|
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');
|
$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) {
|
} catch (EmptyResponseException $e) {
|
||||||
$this->addFlash('warning', 'Set not found in Brickset database');
|
$this->addFlash('warning', 'Set not found in Brickset database');
|
||||||
|
} catch (ApiException $e) {
|
||||||
|
$this->addFlash('error', $e->getService());
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$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' => $rbset,
|
'rbset' => $rebrickableSet,
|
||||||
'inventorySets' => $inventorySets,
|
'brset' => $bricksetSet,
|
||||||
'brset' => $brset,
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// /**
|
/**
|
||||||
// * @Route("/{number}/parts", name="set_parts")
|
* @Route("/{number}/download", name="set_download")
|
||||||
// */
|
*/
|
||||||
// public function partsAction(Set $set) {
|
public function downloadZipAction(Request $request, $number) {
|
||||||
// $em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
//
|
|
||||||
// $em->getRepository(Color::class)->findAll();
|
$inventoryParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($number);
|
||||||
// $em->getRepository(Part::class)->findAllBySetNumber($set->getNumber());
|
|
||||||
//
|
$zip = new \ZipArchive();
|
||||||
// $regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
$zipName = 'set_'.$number.'.zip';
|
||||||
// $spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($set->getNumber());
|
$zip->open($zipName, \ZipArchive::CREATE);
|
||||||
//
|
/** @var Inventory_Part $part */
|
||||||
// $count = 0;
|
foreach ($inventoryParts as $part) {
|
||||||
// /** @var Inventory_Part $inventoryPart */
|
$filename = $part->getPart()->getNumber().'_('.$part->getColor()->getName().'_'.$part->getQuantity().'x).stl';
|
||||||
// foreach ($regularParts as $inventoryPart) {
|
|
||||||
// $count += $inventoryPart->getQuantity();
|
try {
|
||||||
// }
|
if($part->getPart()->getModel()) {
|
||||||
//
|
$zip->addFromString($filename, $this->get('oneup_flysystem.media_filesystem')->read($part->getPart()->getModel()->getPath()));
|
||||||
// dump($count);
|
}
|
||||||
//
|
} catch (\Exception $e) {
|
||||||
// return $this->render('rebrickable/set/parts.html.twig', [
|
dump($e);
|
||||||
// 'regularParts' => $regularParts,
|
}
|
||||||
// 'spareParts' => $spareParts,
|
}
|
||||||
// 'totalParts' => $count
|
$zip->close();
|
||||||
// ]);
|
|
||||||
// }
|
$response = new Response(file_get_contents($zipName));
|
||||||
//
|
$response->headers->set('Content-Type', 'application/zip');
|
||||||
//// /**
|
$response->headers->set('Content-Disposition', 'attachment;filename="' . $zipName . '"');
|
||||||
//// * @Route("/download/{number}", name="set_download")
|
$response->headers->set('Content-length', filesize($zipName));
|
||||||
//// */
|
|
||||||
//// public function downloadZipAction(Request $request, $number) {
|
return $response;
|
||||||
//// $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;
|
|
||||||
//// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user