User page prototype.
This commit is contained in:
parent
af94e84256
commit
24793120ff
|
@ -1,6 +1,6 @@
|
||||||
{% extends '::layout.html.twig' %}
|
{% extends '::layout.html.twig' %}
|
||||||
|
|
||||||
{% block header_title %}Point-Tools{% endblock %}
|
{% block header_title %}Point Tools{% endblock %}
|
||||||
|
|
||||||
{% block css %}
|
{% block css %}
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
|
@ -19,13 +19,13 @@
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand" href="{{ path('index') }}">Point-Tools</a>
|
<a class="navbar-brand" href="{{ path('index') }}">Point Tools</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="navbar" class="collapse navbar-collapse">
|
<div id="navbar" class="collapse navbar-collapse">
|
||||||
{% block header_navbar_menus %}
|
{% block header_navbar_menus %}
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li><a href="{{ path('index') }}">{{ 'Main'|trans }}</a></li>
|
<li><a href="{{ path('index') }}"><span class="glyphicon glyphicon-home"></span> {{ 'Main'|trans }}</a></li>
|
||||||
<li><a href="{{ path('users_top') }}">TOP</a></li>
|
<li><a href="{{ path('users_top') }}"><span class="glyphicon glyphicon-stats"></span> TOP</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
<div class="copyright col-sm-6 col-xs-12">
|
<div class="copyright col-sm-6 col-xs-12">
|
||||||
<p>
|
<p>
|
||||||
© 2015{% if 2015 != 'now'|date('Y') %}-{{ 'now'|date('Y') }}{% endif %}
|
© 2015{% if 2015 != 'now'|date('Y') %}-{{ 'now'|date('Y') }}{% endif %}
|
||||||
<a href="https://skobk.in/" target="_blank">Alexey Skobkin</a>
|
<a href="https://skobk.in/" target="_blank">Alexey Skobkin</a> aka <a href="https://skobkin-ru.point.im/" target="_blank">@skobkin-ru</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -25,6 +25,11 @@ framework:
|
||||||
fragments: ~
|
fragments: ~
|
||||||
http_method_override: true
|
http_method_override: true
|
||||||
|
|
||||||
|
sensio_framework_extra:
|
||||||
|
request:
|
||||||
|
converters: true
|
||||||
|
auto_convert: false
|
||||||
|
|
||||||
# Twig Configuration
|
# Twig Configuration
|
||||||
twig:
|
twig:
|
||||||
debug: "%kernel.debug%"
|
debug: "%kernel.debug%"
|
||||||
|
|
|
@ -4,13 +4,38 @@ namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Doctrine\DBAL\Query\QueryBuilder;
|
use Doctrine\DBAL\Query\QueryBuilder;
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||||
|
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
||||||
|
use Skobkin\Bundle\PointToolsBundle\Service\UserApi;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
|
||||||
class UserController extends Controller
|
class UserController extends Controller
|
||||||
{
|
{
|
||||||
public function showAction($login)
|
/**
|
||||||
|
* @param
|
||||||
|
* @ParamConverter("user", class="SkobkinPointToolsBundle:User", options={"login" = "login"})
|
||||||
|
*/
|
||||||
|
public function showAction(User $user)
|
||||||
{
|
{
|
||||||
return $this->render('SkobkinPointToolsBundle:User:show.html.twig', []);
|
$userApi = $this->container->get('skobkin_point_tools.api_user');
|
||||||
|
|
||||||
|
/** @var QueryBuilder $qb */
|
||||||
|
$qb = $this->getDoctrine()->getManager()->getRepository('SkobkinPointToolsBundle:SubscriptionEvent')->createQueryBuilder('se');
|
||||||
|
|
||||||
|
$subscriptionsEvents = $qb
|
||||||
|
->select()
|
||||||
|
->where('se.author = :author')
|
||||||
|
->orderBy('se.date', 'desc')
|
||||||
|
->setMaxResults(30)
|
||||||
|
->setParameter('author', $user)
|
||||||
|
->getQuery()->getResult()
|
||||||
|
;
|
||||||
|
|
||||||
|
return $this->render('SkobkinPointToolsBundle:User:show.html.twig', [
|
||||||
|
'user' => $user,
|
||||||
|
'log' => $subscriptionsEvents,
|
||||||
|
'avatar_url' => $userApi->getAvatarUrl($user, UserApi::AVATAR_SIZE_LARGE),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function topAction()
|
public function topAction()
|
||||||
|
|
|
@ -34,6 +34,14 @@ body > .container {
|
||||||
padding: 60px 15px 0;
|
padding: 60px 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-subscribers {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4.panel-title a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
.user:before {
|
.user:before {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 1px;
|
top: 1px;
|
||||||
|
@ -58,11 +66,18 @@ body > .container {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h1.user-login a {
|
||||||
|
text-decoration: none;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
ul.users.mosaic {
|
ul.users.mosaic {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
columns: 140px auto;
|
columns: 140px auto;
|
||||||
-webkit-columns: 140px auto;
|
-webkit-columns: 140px auto;
|
||||||
-moz-columns: 140px auto;
|
-moz-columns: 140px auto;
|
||||||
|
padding-left: 0px;
|
||||||
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.users.mosaic li {
|
ul.users.mosaic li {
|
||||||
|
@ -79,10 +94,6 @@ ul.users.mosaic li:nth-child(odd) {
|
||||||
background-color: #EFEFEF;
|
background-color: #EFEFEF;
|
||||||
}
|
}
|
||||||
|
|
||||||
#travel-client-data-form {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Required quick fix */
|
/* Required quick fix */
|
||||||
.required:after {
|
.required:after {
|
||||||
content: " *";
|
content: " *";
|
||||||
|
|
|
@ -1,7 +1,76 @@
|
||||||
{% extends "::base.html.twig" %}
|
{% extends "::base.html.twig" %}
|
||||||
|
|
||||||
{% block title %}SkobkinPointToolsBundle:User:show{% endblock %}
|
{% block header_title %}{{ user.login }} @ Point Tools{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block content %}
|
||||||
<h1>Welcome to the User:show page</h1>
|
<h1 class="user-login">
|
||||||
|
<img src="{{ avatar_url }}">
|
||||||
|
<a href="//{{ user.login }}.point.im/blog/" target="_blank">{{ user.login }}</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div class="user-subscribers">
|
||||||
|
<div class="panel-group" id="accordion-subscribers">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading"id="headingOne">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#accordion-subscribers" aria-expanded="true" href="#collapse-subscribers">
|
||||||
|
<span class="glyphicon glyphicon-collapse-down"></span> {{ 'Subscribers'|trans }}
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div id="collapse-subscribers" class="panel-collapse collapse in">
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="users mosaic">
|
||||||
|
{% for sub in user.subscribers %}
|
||||||
|
<li><a href="{{ url('user_show', {login: sub.subscriber.login}) }}" {# class="user" #}>@{{ sub.subscriber.login }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="user-subscribers">
|
||||||
|
<div class="panel-group" id="accordion-log">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading" id="headingOne">
|
||||||
|
<h4 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#accordion-log" aria-expanded="true" href="#collapse-log">
|
||||||
|
<span class="glyphicon glyphicon-collapse-down"></span> {{ 'Subscriptions log'|trans }}
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div id="collapse-log" class="panel-collapse collapse in">
|
||||||
|
<div class="panel-body">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>{{ 'User'|trans }}</td>
|
||||||
|
<td>{{ 'Action'|trans }}</td>
|
||||||
|
<td>{{ 'Date'|trans }}</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for event in log %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{{ url('user_show', {login: event.subscriber.login}) }}" {# class="user" #}>@{{ event.subscriber.login }}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="glyphicon glyphicon-plus"></span>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{# Use DateTime helper: https://sonata-project.org/bundles/intl/master/doc/reference/datetime.html #}
|
||||||
|
{{ event.date|date('H:i:s d F Y') }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
Loading…
Reference in a new issue