Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sourcemlbundle
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dj3c1t
sourcemlbundle
Commits
29f57d1d
Commit
29f57d1d
authored
Jul 17, 2016
by
dj3c1t
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
admin config
parent
0ae6a0f5
Pipeline
#53
skipped
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
314 additions
and
112 deletions
+314
-112
CacheController.php
Controller/Admin/CacheController.php
+2
-54
ConfigController.php
Controller/Admin/ConfigController.php
+51
-0
dj3c1t_menus.yml
Resources/config/dj3c1t_menus.yml
+12
-5
routing.yml
Resources/config/routing.yml
+4
-0
services.yml
Resources/config/services.yml
+4
-0
config.html.twig
Resources/views/Admin/config.html.twig
+102
-53
SourceMLConfig.php
Service/SourceMLConfig.php
+97
-0
SourceMLMenus.php
Service/SourceMLMenus.php
+42
-0
No files found.
Controller/Admin/CacheController.php
View file @
29f57d1d
...
...
@@ -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_c
ache
'
));
return
$this
->
redirect
(
$this
->
generateUrl
(
'sourceml_admin_c
onfig
'
));
}
catch
(
\Exception
$e
)
{
$this
->
get
(
'session'
)
->
getFlashBag
()
->
add
(
'error'
,
$e
->
getMessage
());
}
return
$this
->
redirect
(
$this
->
generateUrl
(
'sourceml_admin_c
ache
'
));
return
$this
->
redirect
(
$this
->
generateUrl
(
'sourceml_admin_c
onfig
'
));
}
}
Controller/Admin/ConfigController.php
0 → 100644
View file @
29f57d1d
<?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
,
)
);
}
}
Resources/config/dj3c1t_menus.yml
View file @
29f57d1d
...
...
@@ -2,15 +2,15 @@ dj3c1t_menus:
sourceml
:
admin
:
routes
:
-
sourceml_admin_c
ache
-
sourceml_admin_c
onfig
-
sourceml_admin_licence_index
-
sourceml_admin_licence_add
-
sourceml_admin_licence_edit
items
:
sourceml_c
ache
:
route
:
sourceml_admin_c
ache
label
:
Gestion du cache
glyphicon
:
glyphicon-
th-lis
t
sourceml_c
onfig
:
route
:
sourceml_admin_c
onfig
label
:
SourceML
glyphicon
:
glyphicon-
edi
t
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
Resources/config/routing.yml
View file @
29f57d1d
...
...
@@ -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
}
...
...
Resources/config/services.yml
View file @
29f57d1d
...
...
@@ -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
:
...
...
Resources/views/Admin/c
ache
.html.twig
→
Resources/views/Admin/c
onfig
.html.twig
View file @
29f57d1d
...
...
@@ -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
%}
...
...
Service/SourceMLConfig.php
0 → 100644
View file @
29f57d1d
<?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
();
}
}
Service/SourceMLMenus.php
View file @
29f57d1d
...
...
@@ -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
;
}
}
Write
Preview
Markdown
is supported
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