Commit 29f57d1d authored by dj3c1t's avatar dj3c1t

admin config

parent 0ae6a0f5
Pipeline #53 skipped
......@@ -7,69 +7,17 @@ use Symfony\Component\HttpFoundation\Request;
class CacheController extends Controller {
public function indexAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$configurationRepo = $em->getRepository("Dj3c1tAppBundle:Configuration");
$lifetime_enabled = $configurationRepo->getConfiguration("sourceml.cache.lifetime_enabled");
$lifetime_enabled = isset($lifetime_enabled) ? ($lifetime_enabled ? true : false) : false;
$lifetime = $configurationRepo->getConfiguration("sourceml.cache.lifetime");
$lifetime = isset($lifetime) ? $lifetime : "72";
if($request->getMethod() == "POST") {
$data = $request->request->all();
try {
if(isset($data["lifetime_enabled"])) {
if(!isset($data["lifetime"])) {
throw new \Exception("missing parameter");
}
if(!preg_match("/^[0-9]+$/", $data["lifetime"])) {
throw new \Exception("La durée de validité doit être un nombre entier");
}
$lifetime_enabled_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime_enabled",
"1"
);
$em->persist($lifetime_enabled_conf);
$lifetime_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime",
$data["lifetime"]
);
$em->persist($lifetime_conf);
}
else {
$lifetime_enabled_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime_enabled",
"0"
);
$em->persist($lifetime_enabled_conf);
}
$em->flush();
$this->get('session')->getFlashBag()->add('success', "La configuration du cache a été enregistrée");
return $this->redirect($this->generateUrl('sourceml_admin_cache'));
}
catch(\Exception $e) {
$this->get('session')->getFlashBag()->add('error', $e->getMessage());
}
}
return $this->render(
'Dj3c1tSourceMLBundle:Admin:cache.html.twig',
array(
"lifetime_enabled" => $lifetime_enabled,
"lifetime" => $lifetime
)
);
}
public function emptyAction() {
$source_cache = $this->container->get('sourceml.source_cache');
try {
$source_cache->emptyCache();
$this->get('session')->getFlashBag()->add('success', "Le cache a été vidé");
return $this->redirect($this->generateUrl('sourceml_admin_cache'));
return $this->redirect($this->generateUrl('sourceml_admin_config'));
}
catch(\Exception $e) {
$this->get('session')->getFlashBag()->add('error', $e->getMessage());
}
return $this->redirect($this->generateUrl('sourceml_admin_cache'));
return $this->redirect($this->generateUrl('sourceml_admin_config'));
}
}
<?php
namespace Dj3c1t\SourceMLBundle\Controller\Admin;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class ConfigController extends Controller {
public function indexAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$configurationRepo = $em->getRepository("Dj3c1tAppBundle:Configuration");
$lifetime_enabled = $configurationRepo->getConfiguration("sourceml.cache.lifetime_enabled");
$lifetime_enabled = isset($lifetime_enabled) ? ($lifetime_enabled ? true : false) : false;
$lifetime = $configurationRepo->getConfiguration("sourceml.cache.lifetime");
$lifetime = isset($lifetime) ? $lifetime : "72";
$header_menu_authors = $configurationRepo->getConfiguration("sourceml.header_menu.authors");
$header_menu_authors = isset($header_menu_authors) ? ($header_menu_authors ? true : false) : false;
$header_menu_albums = $configurationRepo->getConfiguration("sourceml.header_menu.albums");
$header_menu_albums = isset($header_menu_albums) ? ($header_menu_albums ? true : false) : false;
$header_menu_tracks = $configurationRepo->getConfiguration("sourceml.header_menu.tracks");
$header_menu_tracks = isset($header_menu_tracks) ? ($header_menu_tracks ? true : false) : false;
$header_menu_sources = $configurationRepo->getConfiguration("sourceml.header_menu.sources");
$header_menu_sources = isset($header_menu_sources) ? ($header_menu_sources ? true : false) : false;
if($request->getMethod() == "POST") {
$data = $request->request->all();
try {
$sourceml_config = $this->container->get('sourceml.config');
$sourceml_config->setMenuHeaderConfig($data);
$sourceml_config->setCacheConfig($data);
$this->get('session')->getFlashBag()->add('success', "La configuration a été enregistrée");
return $this->redirect($this->generateUrl('sourceml_admin_config'));
}
catch(\Exception $e) {
$this->get('session')->getFlashBag()->add('error', $e->getMessage());
}
}
return $this->render(
'Dj3c1tSourceMLBundle:Admin:config.html.twig',
array(
"lifetime_enabled" => $lifetime_enabled,
"lifetime" => $lifetime,
"header_menu_authors" => $header_menu_authors,
"header_menu_albums" => $header_menu_albums,
"header_menu_tracks" => $header_menu_tracks,
"header_menu_sources" => $header_menu_sources,
)
);
}
}
......@@ -2,15 +2,15 @@ dj3c1t_menus:
sourceml:
admin:
routes:
- sourceml_admin_cache
- sourceml_admin_config
- sourceml_admin_licence_index
- sourceml_admin_licence_add
- sourceml_admin_licence_edit
items:
sourceml_cache:
route: sourceml_admin_cache
label: Gestion du cache
glyphicon: glyphicon-th-list
sourceml_config:
route: sourceml_admin_config
label: SourceML
glyphicon: glyphicon-edit
sourceml_licences:
route: sourceml_admin_licence_index
label: Licences
......@@ -77,3 +77,10 @@ dj3c1t_menus:
toggle_auto_play_next_track:
service: sourceml.menus
method: toggleAutoPlayNextTrackButton
header:
routes:
items:
sourceml:
service: sourceml.menus
method: getSourceMLMainLinks
......@@ -81,6 +81,10 @@ sourceml_admin_cache:
path: /admin/sourceml/cache
defaults: { _controller: Dj3c1tSourceMLBundle:Admin/Cache:index }
sourceml_admin_config:
path: /admin/sourceml/config
defaults: { _controller: Dj3c1tSourceMLBundle:Admin/Config:index }
sourceml_admin_cache_empty:
path: /admin/sourceml/cache/empty
defaults: { _controller: Dj3c1tSourceMLBundle:Admin/Cache:empty }
......
......@@ -31,6 +31,10 @@ services:
class: Dj3c1t\SourceMLBundle\Service\SourceCache
arguments: ['@service_container']
sourceml.config:
class: Dj3c1t\SourceMLBundle\Service\SourceMLConfig
arguments: ['@service_container']
sourceml.source_cache_listener:
class: Dj3c1t\SourceMLBundle\Service\Listener\SourceCacheListener
tags:
......
......@@ -3,66 +3,107 @@
{% block content_header %}
{{ parent() }}
<h1>
Gestion du cache
<button class="btn btn-primary btn-help-toggle pull-right" data-helpcontent="#help">
<span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span>
</button>
Configuration générale de SourceML
</h1>
{% endblock %}
{% block main %}
{{ parent() }}
<div class="row help-content" id="help">
<div class="help alert alert-info">
<h4>SourceML enregistre les fichier XML des sources externes.</h4>
<p>
Ces sources externes sont des albums, des morceaux ou des pistes publiées sur
d'autres sites (d'autres installations de SourceML), et qui sont par exemple
référencées sur ce site, ou dont l'une des sources, sur ce site, dérive...
</p>
<p>
Ces fichiers XML permettent de véhiculer les informations des sources d'un
site à l'autre et son stockés, sur ce site, dans un cache de fichiers XML.
</p>
<p>
Par défaut, une fois téléchargé, le fichier XML d'une source externe n'est jamais
mis à jour. Vous pouvez ici vider le cache (ce qui provoquera une mise à jour de
tous les fichiers XML), ou le configurer pour donner une durée de validité à ses
fichiers (dans ce cas les fichiers XML seront mis à jour à chaque fois que leur
durée de présence dans le cache dépassera la durée de validité).
</p>
<p>
<strong>Note sur la migration</strong>
</p>
<p>
Si votre site à changé d'adresse (parce que vous avez
migré ou que d'une manière ou d'une autre l'URL pour y accéder a changé), vous
devriez vider le cache pour que les adresses soient mises à jour dans les fichiers
XML.
</p>
</div>
</div>
<form id="config_form" action="{{ path('sourceml_admin_config') }}" method="post">
<input type="hidden" name="confirm_form" value="1" />
<h3>
Menu du header
</h3>
<h3>Vider le cache</h3>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<a class="btn btn-default bb_confirm"
data-message="Vider le cache ?"
href="{{ path('sourceml_admin_cache_empty') }}">
<span class="glyphicon glyphicon-refresh" aria-hidden="true"></span>
<span class="text">Vider le cache</span>
</a>
<div class="row">
<div class="col-xs-12">
<p>Ajouter un menu dans le header pour accéder à :</p>
<div class="form-group">
<input type="checkbox" id="header_menu_authors" name="header_menu_authors"{% if header_menu_authors %} checked{% endif %}/>
<label for="header_menu_authors">la liste des auteurs</label>
</div>
<div class="form-group">
<input type="checkbox" id="header_menu_albums" name="header_menu_albums"{% if header_menu_albums %} checked{% endif %}/>
<label for="header_menu_albums">la liste des albums</label>
</div>
<div class="form-group">
<input type="checkbox" id="header_menu_tracks" name="header_menu_tracks"{% if header_menu_tracks %} checked{% endif %}/>
<label for="header_menu_tracks">la liste des morceaux</label>
</div>
<div class="form-group">
<input type="checkbox" id="header_menu_sources" name="header_menu_sources"{% if header_menu_sources %} checked{% endif %}/>
<label for="header_menu_sources">la liste des pistes</label>
</div>
</div>
</div>
</div>
<h3>Durée de validité des fichiers du cache</h3>
<div class="row">
<div class="col-xs-12">
<form id="cache_form" action="{{ path('sourceml_admin_cache') }}" method="post">
<h3>
Gestion du cache
<button class="btn btn-primary btn-help-toggle pull-right" data-helpcontent="#help" onclick="return false;">
Comment fonctionne le cache
<span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span>
</button>
</h3>
<div class="row help-content" id="help">
<div class="help alert alert-info">
<h4>SourceML enregistre les fichier XML des sources externes.</h4>
<p>
Pour chaque source (album, morceau ou piste), SourceML génère et rend disponible
un fichier XML, qui contient les informations de la source (son titre, son auteur,
sa licence, les urls de ses fichiers, etc). Ces fichiers XML sont automatiquement
mis à jour au fur et à mesure que vous ajoutez ou modifiez des morceaux, des album...
</p>
<p>
Mais vous pouvez aussi, dans SourceML, faire référence à d'autres sources. Par exemple
si vous publiez un remixe et que vous souhaitez indiquer qu'il dérive de tel morceau,
vous le faites en ajoutant, dans les sources de dérivation de votre remixe, l'URL du
fichier XML du morceau d'origine.
</p>
<p>
Ces fichiers XML externes, qui sont lus lorsque vous déclarez des relations
avec d'autres sources, sont mis en cache sur votre installation.
</p>
<p>
Par défaut, une fois téléchargé, le fichier XML d'une source externe n'est jamais
mis à jour. Vous pouvez ici vider le cache (ce qui provoquera une mise à jour de
tous les fichiers XML), ou le configurer pour donner une durée de validité à ses
fichiers (dans ce cas les fichiers XML seront mis à jour à chaque fois que leur
durée de présence dans le cache dépassera la durée de validité).
</p>
<p>
<strong>Note sur la migration</strong>
</p>
<p>
Si votre site à changé d'adresse (parce que vous avez
migré ou que d'une manière ou d'une autre l'URL pour y accéder a changé), vous
devriez vider le cache pour que les adresses soient mises à jour dans les fichiers
XML.
</p>
</div>
</div>
<h4>Vider le cache</h4>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<a class="btn btn-default bb_confirm"
data-message="Vider le cache ?"
href="{{ path('sourceml_admin_cache_empty') }}">
<span class="glyphicon glyphicon-refresh" aria-hidden="true"></span>
<span class="text">Vider le cache</span>
</a>
</div>
</div>
</div>
<h4>Durée de validité des fichiers du cache</h4>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<input type="checkbox" id="lifetime_enabled" name="lifetime_enabled"{% if lifetime_enabled %} checked{% endif %}/>
<label for="lifetime_enabled">Activer la durée de validité</label>
......@@ -72,14 +113,22 @@
<input type="number" name="lifetime" class="form-control" value="{{ lifetime }}" style="width: 8em; display: inline;" />
heures
</div>
</div>
</div>
<h3>
Enregistrer la configuration
</h3>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<button type="submit" class="btn btn-primary">Enregistrer</button>
</div>
</form>
</div>
</div>
</div>
</form>
{% endblock %}
......
<?php
namespace Dj3c1t\SourceMLBundle\Service;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Dj3c1t\SourceMLBundle\Entity\Source;
use Dj3c1t\SourceMLBundle\Entity\DerivationSource;
class SourceMLConfig {
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
public function setMenuHeaderConfig($data) {
$em = $this->container->get('doctrine')->getManager();
$configurationRepo = $em->getRepository("Dj3c1tAppBundle:Configuration");
if($data) {
$em->persist(
$configurationRepo->setConfiguration(
"sourceml.header_menu.authors",
isset($data["header_menu_authors"]) ? "1" : "0"
)
);
$em->persist(
$configurationRepo->setConfiguration(
"sourceml.header_menu.albums",
isset($data["header_menu_albums"]) ? "1" : "0"
)
);
$em->persist(
$configurationRepo->setConfiguration(
"sourceml.header_menu.tracks",
isset($data["header_menu_tracks"]) ? "1" : "0"
)
);
$em->persist(
$configurationRepo->setConfiguration(
"sourceml.header_menu.sources",
isset($data["header_menu_sources"]) ? "1" : "0"
)
);
$em->flush();
}
}
public function setCacheConfig($data) {
$em = $this->container->get('doctrine')->getManager();
$configurationRepo = $em->getRepository("Dj3c1tAppBundle:Configuration");
$lifetime_enabled = $configurationRepo->getConfiguration("sourceml.cache.lifetime_enabled");
$lifetime_enabled = isset($lifetime_enabled) ? ($lifetime_enabled ? true : false) : false;
$lifetime = $configurationRepo->getConfiguration("sourceml.cache.lifetime");
$lifetime = isset($lifetime) ? $lifetime : "72";
if($data) {
if(isset($data["lifetime_enabled"])) {
$lifetime_enabled_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime_enabled",
"1"
);
if(isset($data["lifetime"])) {
if(!preg_match("/^[0-9]+$/", $data["lifetime"])) {
throw new \Exception("La durée de validité doit être un nombre entier");
}
$lifetime_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime",
$data["lifetime"]
);
}
else {
$lifetime_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime",
$lifetime
);
}
$em->persist($lifetime_enabled_conf);
$em->persist($lifetime_conf);
}
else {
$lifetime_enabled_conf = $configurationRepo->setConfiguration(
"sourceml.cache.lifetime_enabled",
"0"
);
$em->persist($lifetime_enabled_conf);
}
$em->flush();
}
}
public function emptyCache() {
$source_cache = $this->container->get('sourceml.source_cache');
$source_cache->emptyCache();
}
}
......@@ -41,4 +41,46 @@ class SourceMLMenus {
return $items;
}
public function getSourceMLMainLinks() {
$items = array();
$em = $this->container->get('doctrine')->getManager();
$configurationRepo = $em->getRepository("Dj3c1tAppBundle:Configuration");
$header_menu_authors = $configurationRepo->getConfiguration("sourceml.header_menu.authors");
$header_menu_authors = isset($header_menu_authors) ? ($header_menu_authors ? true : false) : false;
$header_menu_albums = $configurationRepo->getConfiguration("sourceml.header_menu.albums");
$header_menu_albums = isset($header_menu_albums) ? ($header_menu_albums ? true : false) : false;
$header_menu_tracks = $configurationRepo->getConfiguration("sourceml.header_menu.tracks");
$header_menu_tracks = isset($header_menu_tracks) ? ($header_menu_tracks ? true : false) : false;
$header_menu_sources = $configurationRepo->getConfiguration("sourceml.header_menu.sources");
$header_menu_sources = isset($header_menu_sources) ? ($header_menu_sources ? true : false) : false;
if($header_menu_authors) {
$items[] = array(
"route" => "author_index",
"label" => "Auteurs",
);
}
if($header_menu_albums) {
$items[] = array(
"route" => "source_index",
"parameters" => array("sourceType" => 'album'),
"label" => "Albums",
);
}
if($header_menu_tracks) {
$items[] = array(
"route" => "source_index",
"parameters" => array("sourceType" => 'track'),
"label" => "Morceaux",
);
}
if($header_menu_sources) {
$items[] = array(
"route" => "source_index",
"parameters" => array("sourceType" => 'source'),
"label" => "Pistes",
);
}
return $items;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment