E-lycée
Projet de fin d'année – dev09
amélie_meunier && gabriel_cousin
Organisation


Back
Front




Front
Public
Modal de login
Load-more
- Scripts -
Dashboard
Vérification de formulaires
Polyfill Datetimepicker
Accordion
Actions multiples
Toggle status
Graph de statistiques
Material.js – Loader – Notifications
Front

Sass
BrowserSync
Autoprefixer
Minifier (CSS + JS)
gulp.task('css:build', function() {
return gulp.src('web/dev/scss/*.scss')
.pipe(plumber())
.pipe(sass({
errLogToConsole: true
}))
.pipe(autoprefixer({
browsers: ['last 2 versions']
}))
.pipe(minifyCSS({
aggressiveMerging: false,
keepSpecialComments: 0
}))
.pipe(gulp.dest('web/css'));
});
gulp.task('js', function() {
return gulp.src([
'web/dev/js/material.js',
'web/dev/js/better-dom.js',
...
])
.pipe(concat('scripts.js'))
.pipe(minifyJS())
.pipe(gulp.dest('web/js'));
});
- Workflow -
Front
2 CSS : app_home.css (16Ko Gzip)
+ app_dashboard (15Ko Gzip)
(préfixage standard : IE10+ / 2 last versions)
- Statistiques -
1 JS : scripts.js (24Ko Gzip)
(youmightnotneedjquery)
Back
- Gestions des Bundles -
PublicBundle
DashboardBundle
UserBundle
PublicController
DefaultController
FichesController
ScoresController
PostsController
extends FOSUserBundle
DefaultController
Post
Commentaire
Status
ContactEmail
Fiche
Choix
Niveau
Scores
User
Back
- Modèle des données -
private $createAt;
/**
* @ORM\ManyToOne(targetEntity="Status")
* @ORM\JoinColumn(name="status_id", referencedColumnName="id")
*
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", inversedBy="posts")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*
*/
private $auteur;
/**
* @ORM\OneToMany(targetEntity="Commentaire", mappedBy="post")
*/
protected $commentaires;
Post
Commentaire
Status
FOS_user
0,n
0,n
0,n
1,1
1,1
1,1
PublicBundle/Entity/Post.php
Back
- Modèle des données -
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('content')
->add('choices','collection',array(
'type' => new ChoixType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
))
->add('niveau','entity',array(
'class' => 'DashboardBundle:Niveau',
'property' => 'name'
))
;
}
Fiche
Choix
Status
FOS_user
0,n
0,n
1,1
0,n
DashboardBundle/Form/FicheType.php
1,1
Score
1,1
0,n
1,n
1,1
1,1
1,n
1,1
etudiant
professeur
Back
- Bundles utilisés -
Swiftmailer
$message = \Swift_Message::newInstance()
->setSubject('E-mail de contact')
->setFrom('elycee.dev@gmail.com')
->setTo(array('elycee.dev@gmail.com', $form->getData()->getEmail()))
->setBody($this->renderView('PublicBundle:Public:contactEmail.html.twig', array('contact' => $contact)), 'text/html');
$this->get('mailer')->send($message);
FOSJsRouting
PublicBundle/Controller/PublicController.php
var route = Routing.generate('public.news.ajax', { page: this.pageToLoad }, true);
web/js/dev/pagination.js
/**
* @Route("/ajaxnews/{page}", name="public.news.ajax", options = {"expose" = true})
*/
public function ajaxnewsAction(Request $request,$page)
PublicBundle/Controller/PublicController.php
Back
- Bundles utilisés -
FOSUser
class User extends BaseUser
{
UserBundle/Entity/User.php
firewalls:
#...
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: public.home.index
use_referer: true
success_handler: redirect.after.login
logout:
target: public.home.index
anonymous: true
access_control:
#...
- { path: ^/professeur, role: ROLE_TEACHER }
- { path: ^/eleve, role: ROLE_STUDENT }
app/config/security.yml
Back
- Bundles utilisés -
iPHPFileStore
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
..
->add('picture', 'iphp_file')
.. ;
}
PublicBundle/Form/PostType.php
* @FileStore\Uploadable
*/
class Post
{
/* (...) */
/**
* @var string
*
* @ORM\Column(name="picture", type="array", nullable=true)
* @Assert\Image(
* maxSize="2M",
* mimeTypes={"image/jpeg","image/png","image/gif"},
* mimeTypesMessage="Vous devez transférer des JPG,PNG ou GIF uniquement."
* )
* @FileStore\UploadableField(mapping="picture")
*/
private $picture;
PublicBundle/Entity/Post.php
Back
- Bundles utilisés -
OrnicarAkismet
ornicar_akismet:
api_key: "%api_key_askimet%"
url: "%urlSite%"
app/config/config.yml
$data = $formCommentaire->getData();
$akismet = $this->container->get('ornicar_akismet');
$isSpam = $akismet->isSpam(array(
'comment_author' => $data->getUsername(),
'comment_content' => $data->getContenu()
));
if (!$isSpam){
$commentaire->setCreateAt(new \DateTime());
$commentaire->setPost($article);
$em = $this->getDoctrine()->getManager();
$em->persist($commentaire);
$em->flush();
$message = "Votre commentaire a été ajouté";
}
PublicBundle/Controller/PublicController.php
Améliorations
E-lycée
By Gabriel Cousin
E-lycée
- 188