Compare commits

...

4 Commits

Author SHA1 Message Date
afornerot 594122ed07 ajout error doublon mail 2022-12-09 09:18:52 +01:00
afornerot c5333887cc ajout info dnma 2022-12-08 10:12:54 +01:00
Arnaud Fornerot 629d77175a evolution items 2022-12-06 13:09:24 +01:00
Arnaud Fornerot 1a54b9a3f9 evolution items 2022-12-05 12:05:16 +01:00
9 changed files with 240 additions and 34 deletions

View File

@ -86,6 +86,19 @@ class SecurityController extends Controller
if($masteridentity=="SSO") {
if(empty($email)) $email = $username."@nomail.com";
// On s'assure qu'il n'y a pas déjà un utilisateur avec le même mail
$usermail = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("email"=>$email));
if($usermail) {
return $this->render('CadolesCoreBundle:Registration:info.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'info' => "Votre compte ne peut être activé car votre adresse mel est déjà utilisée par un autre compte utilisateur.<br>Nous sommes désolés du désagrément et vous invitons à contacter un administrateur.",
'mode' => "error",
'redirectto' => "",
]);
}
// Là c'est normal que potentiellement il n'existe pas il faut donc l'autogénérer
$user = new User();

View File

@ -8,6 +8,18 @@
{% autoescape %}
<p>{{ info|raw }}</p>
{% endautoescape %}
{% if mode=="error" %}
{% if mode_auth == "SAML" %}
<a class="btn btn-primary" href="{{ path("lightsaml_sp.logout") }}">Déconnexion</a>
{% elseif mode_auth == "CAS" %}
<a class="btn btn-primary" href="{{ path("cas_sp.logout") }}">Déconnexion</a>
{% elseif mode_auth == "SQL" %}
<a class="btn btn-primary" href="{{ path("cadoles_core_logout") }}">Déconnexion</a>
{% elseif mode_auth == "LDAP" %}
<a class="btn btn-primary" href="{{ path("cadoles_core_ldap_logout") }}">Déconnexion</a>
{% endif %}
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -65,7 +65,11 @@ class ItemController extends Controller
{
// Initialisation de l'enregistrement
$data = new Item();
if($this->GetParameter("activate_widsonde")) {
$data->setClicksonde(true);
$data->setClicksondeservice("PAGE_ENT");
}
// Création du formulaire
$form = $this->createForm(ItemType::class,$data,array(
"mode" => "submit",
@ -206,6 +210,26 @@ class ItemController extends Controller
return $response;
}
public function forceorderAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$categorys=$em->getRepository("CadolesPortalBundle:Itemcategory")->findAll();
foreach($categorys as $category) {
$i=0;
$items=$em->getRepository("CadolesPortalBundle:Item")->findBy(["itemcategory"=>$category],["title"=>"ASC"]);
foreach($items as $item) {
$i++;
$item->setRowOrder($i);
$em->flush();
}
}
// Retour à la liste
return $this->redirectToRoute($this->labelroute);
}
protected function getDatas()
{
$em = $this->getDoctrine()->getManager();

View File

@ -150,13 +150,16 @@ class ItemType extends AbstractType
if($options["activate_widsonde"]) {
$builder
/*
->add('clicksonde', CheckboxType::class, [
"label" => "Exécuter une sonde statistique sur le clic",
"required" => false
])
])
*/
->add('clicksondeservice', ChoiceType::class, [
"label" => 'Type de Service associé à la sonde',
"label_attr" => array("style" => "display:inline"),
"placeholder" => 'Sélectionner un service',
"required" => false,
"choices" => [

View File

@ -7,7 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection;
class ItemRepository extends EntityRepository
{
public function getUserItems($user,&$bookmarks,&$itemsordered,&$itemcategorys,$iditemcategory=null,$ssoitems,$withbookmark=1,$fgessential=false) {
public function getUserItems($user,&$bookmarks,&$itemsordered,&$itemcategorys,$iditemcategory=null,$ssoitems=[],$withbookmark=1,$fgessential=false) {
// Profilage
$roles=($user?$user->getRoles():["ROLE_ANONYME"]);
$groups=($user?$user->getGroups():[]);
@ -114,26 +114,28 @@ class ItemRepository extends EntityRepository
// Récupération des items par ssoitem
$itemsssoitems=[];
foreach($ssoitems as $ssoitem) {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('item')
->from("CadolesPortalBundle:Item", 'item')
->where("item.ssoitem=:ssoitem ")
->setParameter("ssoitem",$ssoitem);
if($iditemcategory && $itemcategoryfilter) {
$qb->andWhere("item.itemcategory=:itemcategory")
->setParameter("itemcategory",$itemcategoryfilter);
}
$itemsssoitems=$qb->getQuery()->getResult();
foreach($itemsssoitems as $itemssoitem) {
if(!$bookmarksitems->contains($itemssoitem) && !$items->contains($itemssoitem)) {
if(!$fgessential || ($fgessential && $itemssoitem->getEssential()))
$items->add($itemssoitem);
if(is_array($ssoitems)) {
foreach($ssoitems as $ssoitem) {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('item')
->from("CadolesPortalBundle:Item", 'item')
->where("item.ssoitem=:ssoitem ")
->setParameter("ssoitem",$ssoitem);
if($iditemcategory && $itemcategoryfilter) {
$qb->andWhere("item.itemcategory=:itemcategory")
->setParameter("itemcategory",$itemcategoryfilter);
}
if(!$itemalls->contains($itemssoitem)) $itemalls->add($itemssoitem);
$itemsssoitems=$qb->getQuery()->getResult();
foreach($itemsssoitems as $itemssoitem) {
if(!$bookmarksitems->contains($itemssoitem) && !$items->contains($itemssoitem)) {
if(!$fgessential || ($fgessential && $itemssoitem->getEssential()))
$items->add($itemssoitem);
}
if(!$itemalls->contains($itemssoitem)) $itemalls->add($itemssoitem);
}
}
}

View File

@ -117,6 +117,10 @@ cadoles_portal_config_item_order:
path: /config/item/order
defaults: { _controller: CadolesPortalBundle:Item:order }
cadoles_portal_config_item_forceorder:
path: /config/item/forceorder
defaults: { _controller: CadolesPortalBundle:Item:forceorder }
cadoles_portal_config_ajax_item_seleclist:
path: /config/item/ajax/selectlist
defaults: { _controller: CadolesPortalBundle:Item:ajaxseleclist }

View File

@ -0,0 +1,138 @@
<table class="table table-striped table-bordered table-hover dataTable no-footer">
<thead>
<tr>
<td>Libellé du service</td>
<td>Description</td>
</tr>
</thead>
<tr>
<td>ACCUEIL</td>
<td></td>
</tr>
<tr>
<td>ACTUALITES</td>
<td>Création ou publication dactualités, publiques ou privées. Le marquage de ce service ne comprend pas laccès en consultation à ces actualités, quelles soient publiques ou privées</td>
</tr>
<tr>
<td>CAHIER_TEXTES</td>
<td>Description du travail fait en classe par séquence, des points du programme abordés, des modalités pédagogiques utilisées…<br><br>Programmation du travail à faire en dehors de la classe (Devoirs).</td>
</tr>
<tr>
<td>CAHIER_LIAISON</td>
<td></td>
</tr>
<tr>
<td>COURRIER_ELECTRONIQUE</td>
<td>Courrier électronique, Carnet d'adresses, Annuaire, Liste de diffusion.</td>
</tr>
<tr>
<td>MESSAGERIE_INSTANTANEE</td>
<td></td>
</tr>
<tr>
<td>VISIOCONFERENCE</td>
<td>Services associés à lorganisation et lanimation de visioconférences. </td>
</tr>
<tr>
<td>STOCKAGE_PARTAGE</td>
<td>Chargement, stockage de fichiers pouvant ou non être partagés avec dautres utilisateurs</td>
</tr>
<tr>
<td>PRODUCTION_COLLABORATIVE</td>
<td></td>
</tr>
<tr>
<td>DOCUMENTATION_CDI</td>
<td>Accès au catalogue de ressources proposées par le CDI, consultation et gestion des ressources, prêts, …</td>
</tr>
<tr>
<td>PARCOURS_PEDAGOGIQUE</td>
<td>Utilisation des outils permettant la production de nouvelles ressources pédagogiques (LMS).</td>
</tr>
<tr>
<td>RESERVATION_SALLES_MATERIELS</td>
<td></td>
</tr>
<tr>
<td>SERVICE_COLLECTIVITE</td>
<td>Utilisation des services proposés par les collectivités aux établissements ou aux familles (Exemples : cantine, transports, bourses, …).</td>
</tr>
<tr>
<td>SERVICES_VIE_SCOLAIRE</td>
<td>Accès à des logiciels de vie scolaire ne permettant pas de marquer finement le type de services utilisés.</td>
</tr>
<tr>
<td>GESTION_TEMPS</td>
<td>Gestion de lagenda et des tâches personnelles ou de groupe. Visualisation de lemploi du temps.</td>
</tr>
<tr>
<td>ABSENCES</td>
<td>Saisie ou visualisation des absences.</td>
</tr>
<tr>
<td>GESTION_COMPETENCES</td>
<td>Mise à jour, validation ou visualisation de compétences.</td>
</tr>
<tr>
<td>NOTES</td>
<td>Saisie ou visualisation des notes (relevés de notes, bulletins).</td>
</tr>
<tr>
<td>MANUEL_NUMERIQUE</td>
<td></td>
</tr>
<tr>
<td>RESSOURCE_MULTIMEDIA</td>
<td></td>
</tr>
<tr>
<td>RESSOURCE_ORIENTATION</td>
<td>Accès aux contenus et services proposés dans le cadre des actions dorientation.</td>
</tr>
<tr>
<td>RESSOURCE_PRODUCTION</td>
<td></td>
</tr>
<tr>
<td>RESSOURCE_ACCOMPAGNEMENT_ENTRAINEMENT</td>
<td></td>
</tr>
<tr>
<td>RESSOURCE_REFERENCE_DICTIONNAIRE</td>
<td></td>
</tr>
<tr>
<td>RESSOURCE_DOCUMENTAIRE</td>
<td></td>
</tr>
<tr>
<td>PAGE_ENT</td>
<td></td>
</tr>
</table>

View File

@ -67,11 +67,10 @@
{{ form_row(form.ssoitem) }}
{% endif %}
{% if form.clicksonde is defined %}
{{ form_row(form.clicksonde) }}
<div id="divclicksondeservice">
{{ form_row(form.clicksondeservice) }}
</div>
{% if form.clicksondeservice is defined %}
{{ form_label(form.clicksondeservice) }}
<a id="dnmainfo" type="button" class="btn btn-link" data-toggle="modal" data-target="#dnma" style="float:right"><i class="fa fa-info"></i></a>
{{ form_widget(form.clicksondeservice) }}<br>
{% endif %}
{{ form_row(form.color) }}
@ -90,6 +89,23 @@
</div>
</div>
{{ form_end(form) }}
<div id="dnma" class="modal fade bs-item-modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Services</h4>
</div>
<div class="modal-body">
{{ include('@CadolesPortal/Item/dnma.html.twig') }}
</div>
</div>
</div>
</div>
{% endblock %}
{% block localjavascript %}
@ -133,13 +149,5 @@
if($("#item_target").val()=="frame") {
$("#divhelp").show();
}
if($("#item_clicksonde").is(':checked')) {
$("#divclicksondeservice").show();
}
else {
$("#divclicksondeservice").hide();
}
}
{% endblock %}

View File

@ -11,6 +11,8 @@
<p>
<a href="{{ path('cadoles_portal_config_item_submit') }}" class="btn btn-success">Ajouter un Item</a>
<a href="{{ path('cadoles_portal_config_itemcategory_submit') }}" class="btn btn-success">Ajouter une Categorie</a>
<a href="{{ path('cadoles_portal_config_item_forceorder') }}" class="btn btn-success pull-right">Ordonner les items en alpha</a>
</p>
<div class="category-list">