Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mathieu
potage
Commits
0087d396
Commit
0087d396
authored
Sep 03, 2018
by
Mat
Browse files
hop en vrac
parent
8de2384f
Changes
10
Hide whitespace changes
Inline
Side-by-side
src/PotageBundle/Controller/DefaultController.php
View file @
0087d396
...
...
@@ -22,6 +22,7 @@ class DefaultController extends MasterController
/**
* TEMPORAIRE une page de test
*
* envoie une infolettre manuellement lorsqu'on déclenche un submit
* TODO déclenchement de l'envoi lorsque le producteur passe la lettre au statut 'Envoyé'
*
...
...
@@ -40,7 +41,7 @@ class DefaultController extends MasterController
*/
$lettre
=
$this
->
get
(
'doctrine'
)
->
getManager
()
->
getRepository
(
'PotageBundle:Lettre'
)
->
findOneForSend
(
7
);
->
findOneForSend
(
5
);
$header
=
array
(
'id'
=>
$lettre
->
getId
(),
...
...
@@ -75,57 +76,6 @@ class DefaultController extends MasterController
));
}
/**
* La page today affiche le(s) offres disponibles pour un user
* identifié sur base du token passé dans le lien
* TODO les offres en cours, pour un utilisateur connecté
*
* @param Request $request
* @param LettreToken $lettreToken
* @return \Symfony\Component\HttpFoundation\Response
*/
public
function
todayAction
(
Request
$request
,
LettreToken
$lettreToken
)
{
$user
=
$this
->
getUser
();
if
(
$user
!==
null
)
{
// récupère l'id de l'utilisateur
$id_utilisateur
=
$user
->
getUtilisateur
()
->
getId
();
// récupère les groupes de l'utilisateur
$groupes
=
$this
->
getDoctrine
()
->
getRepository
(
'PotageBundle:Utilisateur'
)
->
findAllGroups
(
$id_utilisateur
);
foreach
(
$groupes
as
$k
=>
$groupe
)
{
// récupère les lettres d'un groupe
$lettres
=
$this
->
getDoctrine
()
->
getRepository
(
'PotageBundle:Lettre'
)
->
findAllByGroupAndByStatus
(
$groupe
[
'id'
],
'sent'
);
$groupes
[
$k
][
'lettres'
]
=
$lettres
;
}
}
/**
* Debug token
*/
$tokenEncoded
=
$request
->
query
->
get
(
'token'
);
$tokenDecoded
=
$lettreToken
->
decodePotageAccess
(
$tokenEncoded
);
return
$this
->
render
(
'@Potage/Default/today.html.twig'
,
array
(
'user'
=>
$user
,
'groupes'
=>
$groupes
,
'tokenEncoded'
=>
$tokenEncoded
,
'tokenDecoded'
=>
$tokenDecoded
,
));
}
}
src/PotageBundle/Controller/MembreController.php
0 → 100644
View file @
0087d396
<?php
namespace
PotageBundle\Controller
;
use
PotageBundle\Entity\User
;
use
PotageBundle\Services\LettreToken
;
use
Symfony\Component\HttpFoundation\Request
;
class
MembreController
extends
MasterController
{
/**
* @param User $user
* @return array
*/
private
function
getGroupLettreOffre
(
User
$user
)
{
if
(
!
$user
->
getUtilisateur
())
{
return
false
;
}
// récupère l'id de l'utilisateur
$id_utilisateur
=
$user
->
getUtilisateur
()
->
getId
();
// récupère les groupes de l'utilisateur
$groupes
=
$this
->
getDoctrine
()
->
getManager
()
->
getRepository
(
'PotageBundle:Utilisateur'
)
->
findAllGroups
(
$id_utilisateur
);
if
(
$groupes
!==
null
)
{
foreach
(
$groupes
as
$k
=>
$groupe
)
{
$lettres
=
$this
->
getDoctrine
()
->
getManager
()
->
getRepository
(
'PotageBundle:Lettre'
)
->
findAllByGroupAndByStatus
(
$groupe
[
'id'
],
'sent'
);
$groupes
[
$k
][
'lettres'
]
=
$lettres
;
}
}
else
{
$groupes
=
array
();
}
return
$groupes
;
}
/**
* La page today affiche le(s) offres disponibles pour un user
* identifié sur base du token passé dans le lien
* TODO les offres en cours, pour un utilisateur connecté
*
* @param Request $request
* @param LettreToken $lettreToken
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public
function
todayAction
(
Request
$request
,
LettreToken
$lettreToken
)
{
$user
=
$this
->
getUser
();
if
(
$user
!==
null
)
{
$groupes
=
$this
->
getGroupLettreOffre
(
$user
);
if
(
$request
->
query
->
has
(
'token'
))
{
/**
* Debug token
*/
$token
=
$request
->
query
->
get
(
'token'
);
$tokenInside
=
$lettreToken
->
decodePotageAccess
(
$token
);
$offre
=
$this
->
getDoctrine
()
->
getManager
()
->
getRepository
(
'PotageBundle:Offre'
)
->
findOneByReference
(
$tokenInside
[
'offre_ref'
]);
}
else
{
$offre
=
null
;
$token
=
null
;
$tokenInside
=
null
;
}
return
$this
->
render
(
'@Potage/Membre/today.html.twig'
,
array
(
'user'
=>
$user
,
'groupes'
=>
$groupes
,
'offre'
=>
$offre
,
'token'
=>
$token
,
'tokenInside'
=>
$tokenInside
,
));
}
}
/**
* @param $offre_ref
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public
function
todayOneAction
(
$offre_ref
)
{
$user
=
$this
->
getUser
();
if
(
$user
!==
null
)
{
$groupes
=
$this
->
getGroupLettreOffre
(
$user
);
$offre
=
$this
->
getDoctrine
()
->
getManager
()
->
getRepository
(
'PotageBundle:Offre'
)
->
findOneByReference
(
$offre_ref
);
return
$this
->
render
(
'@Potage/Membre/today.html.twig'
,
array
(
'user'
=>
$user
,
'groupes'
=>
$groupes
,
'offre'
=>
$offre
,
'token'
=>
null
,
'tokenInside'
=>
null
,
));
}
}
}
src/PotageBundle/Repository/LettreRepository.php
View file @
0087d396
...
...
@@ -216,10 +216,11 @@ class LettreRepository extends \Doctrine\ORM\EntityRepository
public
function
findAllByGroupAndByStatus
(
$id_groupe
,
$status
)
{
$qb
=
$this
->
createQueryBuilder
(
'l'
)
->
select
(
'l.id'
,
'l.reference'
,
'l.startedAt'
,
'l.endedAt'
,
'l.status'
)
->
join
(
'l.groupe'
,
'g'
)
->
select
(
'l.id'
,
'l.subject'
,
'l.reference'
,
'l.startedAt'
,
'l.endedAt'
,
'l.status'
)
->
innerJoin
(
'l.groupe'
,
'g'
)
->
innerJoin
(
'l.offre'
,
'o'
)
->
addSelect
(
'o.id
id_
offre'
)
->
addSelect
(
'o.id
offre_id'
,
'o.reference
offre
_ref
'
)
->
where
(
'g.id = :id'
)
->
andWhere
(
'l.status = :status'
)
->
setParameters
(
array
(
...
...
src/PotageBundle/Repository/OffreRepository.php
View file @
0087d396
...
...
@@ -154,4 +154,18 @@ class OffreRepository extends \Doctrine\ORM\EntityRepository
return
$qb
->
getQuery
()
->
getOneOrNullResult
();
}
/**
* @param $reference
* @return mixed
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public
function
findOneByReference
(
$reference
)
{
$qb
=
$this
->
createQueryBuilder
(
'o'
)
->
where
(
'o.reference = :reference'
)
->
setParameter
(
':reference'
,
$reference
)
;
return
$qb
->
getQuery
()
->
getOneOrNullResult
();
}
}
src/PotageBundle/Repository/UtilisateurRepository.php
View file @
0087d396
...
...
@@ -111,7 +111,7 @@ class UtilisateurRepository extends \Doctrine\ORM\EntityRepository
$qb
=
$this
->
createQueryBuilder
(
'u'
)
->
join
(
'u.groupes'
,
'g'
)
->
join
(
'g.depot'
,
'd'
)
->
select
(
'g.id'
,
'g.nom'
,
'd.jourPanier'
,
'd.heurePanier'
,
'd.localisation'
,
'd.responsable'
)
->
select
(
'g.id'
,
'g.nom'
,
'd.jourPanier'
,
'd.heurePanier'
,
'd.localisation
adresseDepot
'
,
'd.responsable
responsableDepot
'
)
->
where
(
'u.id = :id'
)
->
setParameter
(
':id'
,
$id
);
return
$qb
->
getQuery
()
->
getResult
();
...
...
src/PotageBundle/Resources/config/routing.yml
View file @
0087d396
...
...
@@ -3,19 +3,32 @@ potage_homepage:
defaults
:
_controller
:
PotageBundle:Default:index
potage_test
:
path
:
/test
defaults
:
_controller
:
PotageBundle:Default:test
methods
:
[
GET
,
POST
]
### MEMBER
potage_today
:
path
:
/member/today
defaults
:
_controller
:
PotageBundle:
Default
:today
_controller
:
PotageBundle:
Membre
:today
methods
:
[
GET
]
### les routes des pages qui interrogent l'APIBundle
potage_today_one
:
path
:
/member/today/{offre_ref}
requirements
:
offre_ref
:
\w+
defaults
:
_controller
:
PotageBundle:Membre:todayOne
methods
:
[
GET
]
### ADMIN
### des pages master, qui consomment l'APIBundle en ajax
potage_test
:
path
:
/admin/test
defaults
:
_controller
:
PotageBundle:Default:test
methods
:
[
GET
,
POST
]
potage_legume_ajax_display
:
path
:
/admin/legumes
...
...
src/PotageBundle/Resources/views/Default/navbar.html.twig
View file @
0087d396
<nav
class=
"navbar navbar-expand-lg navbar-dark bg-dark"
>
<a
class=
"navbar-brand"
href=
"
{{
path
(
'potage_homepage'
)
}}
"
>
<img
src=
"
{{
asset
(
'css/img/radis.1inv.png'
)
}}
"
class=
"d-inline-block align-top"
alt=
"logo"
>
Potage
<a
href=
"
{{
path
(
'potage_homepage'
)
}}
"
>
<span
class=
"navbar-brand mb-0 h1"
>
<img
src=
"
{{
asset
(
'css/img/radis.1inv.png'
)
}}
"
class=
"d-inline-block align-top"
alt=
"logo"
>
Potage
</span>
</a>
<button
class=
"navbar-toggler"
type=
"button"
data-toggle=
"collapse"
data-target=
"#navbarSupportedContent"
...
...
@@ -14,16 +16,18 @@
<div
class=
"collapse navbar-collapse"
id=
"navbarSupportedContent"
>
<ul
class=
"navbar-nav mr-auto"
>
{#
<li class="nav-item {{ app.request.get('_route') == 'potage_homepage' ? 'active' }}">
<a class="nav-link" href="{{ path('potage_homepage') }}">Accueil
<span class="sr-only">(current)</span></a>
</li>
#}
</ul>
<div
id=
"login"
>
<ul
class=
"navbar-nav mr-auto"
>
<li
class=
"nav-item"
>
<a
class=
"nav-link
{{
app.request.get
(
'_route'
)
==
'potage_today'
?
''
}}
"
href=
"
{{
path
(
'potage_today'
)
}}
"
>
En ce moment
<span
class=
"sr-only"
>
(current)
</span></a>
</li>
{%
if
is_granted
(
"IS_AUTHENTICATED_REMEMBERED"
)
%}
{%
if
is_granted
(
'ROLE_ADMIN'
)
%}
...
...
@@ -53,10 +57,39 @@
</li>
{%
endif
%}
{%
if
is_granted
(
'ROLE_SUPER_ADMIN'
)
%}
<li
class=
"nav-item dropdown"
>
<a
class=
"nav-link dropdown-toggle"
href=
"#"
id=
"navbarDropdown"
role=
"button"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
Préférences
</a>
<div
class=
"dropdown-menu dropdown-menu-right"
aria-labelledby=
"navbarDropdown"
>
<a
class=
"dropdown-item"
href=
"
{{
path
(
'potage_test'
)
}}
"
>
Page de test
</a>
<div
class=
"dropdown-divider"
></div>
</div>
</li>
{%
endif
%}
<li
class=
"nav-item dropdown"
>
<a
class=
"nav-link dropdown-toggle"
href=
"#"
id=
"navbarDropdown"
role=
"button"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
{{
app.user.username
}}
{%
if
app.user.utilisateur
%}
{{
app.user.utilisateur.prenom
}}
{{
app.user.utilisateur.nom
}}
{%
else
%}
{{
app.user.username
}}
{%
endif
%}
<span
class=
"userrole"
>
{%
if
is_granted
(
'ROLE_SUPER_ADMIN'
)
%}
Administrateur
{%
elseif
is_granted
(
'ROLE_ADMIN'
)
%}
Maraîcher
{%
else
%}
Membre
{%
endif
%}
</span>
</a>
<div
class=
"dropdown-menu dropdown-menu-right"
aria-labelledby=
"navbarDropdown"
>
...
...
src/PotageBundle/Resources/views/Default/today.html.twig
deleted
100755 → 0
View file @
8de2384f
{%
extends
'@Potage/layout.html.twig'
%}
{%
block
title
%}
Aujourd'hui sur Potage !
{%
endblock
%}
{%
block
searchbar
%}{%
endblock
searchbar
%}
{%
block
content
%}
<div
class=
"row"
>
<div
class=
"col-md-10 offset-md-1 bloc"
>
{%
if
app.user
%}
id:
{{
app.user.id
}}
<br>
username:
{{
app.user.username
}}
<br>
email:
{{
app.user.email
}}
<br>
roles:
{%
for
roles
in
app.token.roles
%}{{
roles.role
}}
,
{%
endfor
%}
<br>
dernière connexion:
{{
app.user.lastLogin
|
date
(
"d M Y, à H:i:s"
)
}}
<br>
nom:
{{
app.user.utilisateur.prenom
}}
{{
app.user.utilisateur.nom
}}
<br>
<hr>
{%
endif
%}
{{
dump
()
}}
{#
groupes: {% for groupe in groupes %}{{ groupe.nom }}, {% endfor %}<br>
#}
</div>
</div>
{%
endblock
%}
src/PotageBundle/Resources/views/Membre/today.html.twig
0 → 100755
View file @
0087d396
{%
extends
'@Potage/layout.html.twig'
%}
{%
block
title
%}
Aujourd'hui sur Potage !
{%
endblock
%}
{%
block
searchbar
%}{%
endblock
searchbar
%}
{%
block
content
%}
<div
class=
"row"
>
<div
class=
"col-md-10 offset-md-1 bloc"
>
{%
if
app.user
%}
id:
{{
app.user.id
}}
<br>
username:
{{
app.user.username
}}
<br>
email:
{{
app.user.email
}}
<br>
roles:
{%
for
roles
in
app.token.roles
%}{{
roles.role
}}
,
{%
endfor
%}
<br>
dernière connexion:
{{
app.user.lastLogin
|
date
(
"d M Y, à H:i:s"
)
}}
<br>
{%
if
app.user.utilisateur
%}
nom:
{{
app.user.utilisateur.prenom
}}
{{
app.user.utilisateur.nom
}}
<br>
{%
endif
%}
<hr>
{%
endif
%}
{%
if
offre
is
defined
%}
{%
if
offre
is
not
null
%}
<h1>
{{
offre.reference
}}
| Offre de légumes n°
{{
offre.id
}}
</h1>
{%
else
%}
{%
if
groupes
%}
<h2>
Offres en cours
</h2>
{%
for
groupe
in
groupes
%}
<ul>
{%
if
groupe.lettres
%}
{%
for
lettre
in
groupe.lettres
%}
<li>
<a
href=
"
{{
path
(
'potage_today_one'
,
{
'offre_ref'
:
lettre.offre_ref
}
)
}}
"
>
Offre
{{
lettre.offre_ref
}}
</a><br>
Infolettre
{{
lettre.reference
}}
→ Période du
{{
lettre.startedAt
|
date
(
'd/m/Y'
)
}}
au
{{
lettre.endedAt
|
date
(
'd/m/Y'
)
}}
<br>
{{
lettre.subject
}}
<br>
{{
groupe.nom
}}
:
{{
groupe.adresseDepot
}}
</li>
{%
endfor
%}
{%
endif
%}
</ul>
{%
endfor
%}
{%
else
%}
~ Vous n'êtes dans aucun groupe ~
{%
endif
%}
{%
endif
%}
{%
endif
%}
{#
{% if tokenInside is defined %}
{% if tokenInside is not null %}
{{ tokenInside.offre_ref }} {{ tokenInside.offre_id }}
{% endif %}
{% endif %}
#}
{{
dump
()
}}
</div>
</div>
{%
endblock
%}
web/css/style.css
View file @
0087d396
...
...
@@ -16,10 +16,21 @@ header {
z-index
:
10
;
position
:
relative
;
}
header
nav
.navbar
{
height
:
75px
;
}
.navbar-brand
img
{
margin
:
-5px
3px
;
height
:
40px
;
}
span
.userrole
{
font-size
:
65%
;
color
:
#b1b1b1
;
position
:
absolute
;
bottom
:
-9px
;
left
:
0
;
padding
:
7px
;
}
/**/
nav
.navbar-search
{
...
...
@@ -325,6 +336,7 @@ span.posted:first-letter {
/**/
body
#today
,
body
#today_one
,
body
#homepage
{
background-image
:
url("img/serre_bg.jpg")
;
background-position
:
center
;
...
...
@@ -332,17 +344,21 @@ body#homepage {
background-attachment
:
fixed
;
}
body
#today
.bloc
,
body
#today_one
.bloc
,
body
#homepage
.bloc
{
background-color
:
#ffffff
ad
;
padding
:
1em
2em
;
}
body
#today
.bloc.welcome
,
body
#today_one
.bloc.welcome
,
body
#homepage
.bloc.welcome
{
background-color
:
#000000
ad
;
color
:
white
;
margin-top
:
21em
;
}
body
#today
footer
#footer
.footer
,
body
#today_one
footer
#footer
.footer
,
body
#homepage
footer
#footer
.footer
{
background-color
:
white
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment