Afficher le logo du groupe

Re: Afficher le logo du groupe

par Sébastien Mehr,
Nombre de réponses : 11
Avatar Développeurs Avatar Testeurs

As-tu pensé à passer ta plateforme en mode débogage pour voir les éventuelles erreurs ?

Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Merci sébastien.

CA me renvoie :

<br />
<b>Notice</b>:  Trying to get property of non-object in <b>/home/www/lib/weblib.php</b> on line <b>2560</b><br />
<!DOCTYPE html>


ca correspond à la fonction d'affichage du groupe.

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Bonjour,

Regarde attentivement les paramètres de cette fonction. Tu constateras que le premier est de type objet et dans l'exemple que tu cites, tu lui passes en paramètre un entier.

Par ailleurs, je rebondis sur ta remarque:

Ce sont des groupes crées dans des cours. Ca sera donc possible que l'utilisateur soit dans plusieurs groupes portant le même nom. Idéalement j'aimerai afficher la première image de groupe trouvé.

Comment espères-tu donc choisir quel avatar de groupe affiché si cela concerne potentiellement plusieurs cours qui contiennent chacun plusieurs groupes ?

Du coup, j'avoue ne pas trop saisir l'utilité de la chose. Pourrais-tu nous en dire plus de manière globale sur les objectifs de cet affichage et sur l'organisation "pédagogique" de ta plateforme ?


Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Re Sébastien,

J'utilise Moodle comme plateforme de mise à disposition de contenus scormés  en B to B pour des clients pro et grand compte sur abonnement (d'une durée d'un an).

Dans cette plateforme, je vais gérer des clients qui vont juste avoir besoin de consulter le contenu et d'autres grands comptes qui vont apprécier avoir une personnalisation notamment avec le logo de leur entreprise + un profil "inspecteur ou statisticien" pour suivre l'apprentissage des salariés.

Les contenus ne seront pas mis à jour régulièrement.

J'utilise pour cela le plugin coupon qui me semble souple car il me permet d'envoyer des coupons (avec une période) et le client les utilise quand il veut en s'occupant lui même de créer son compte.

je gère plusieurs contenus scormés. Un par cours.

Dans chaque cours, pour le "petit" client, je ne m'embête pas avec les groupes. Je génère des coupons.

Par contre, pour les grands comptes, je crée un groupe par cours (donc autant de groupe que de cours par client avec la même image dans chaque groupe) et à cela je leur crée un profil "inspecteur / statisticien".

Mon organisation te semble pertinente ?

Je te remercie pour ton aide sur la fonction. Je vais bien finir par y arriver ;=)



En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello Jérôme,

Je ne sais pas combien de grands comptes tu souhaites gérer à terme (autant que possible j'imagine sourire ) mais si tu souhaites une réelle personnalisation du thème pour chaque entreprise, il serait peut-être opportun de regarder du côté de l'option des thèmes de cohortes :


Tu aurais donc une cohorte par entreprise contenant l'ensemble des personnels de cette entreprise et pour chaque cohorte un thème associé. Chaque thème associé serait un thème enfant de ton thème principal. Voici comment créer un thème enfant :


Avantages :
  • personnalisation fine du thème pour chaque entreprise (couleur, logo principal, etc)
  • les mises à jour du thème principal s'appliquent sur les thèmes enfant
  • pas de développement à maintenir entre chaque version

Inconvénient :
  • Duplication du thème fastidieuse si tu gères un grand nombre de grands comptes

Seb
Moyenne des évaluations Utile (1)
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Salut Sébastien !

Merci pour ton retour. J'avais remarqué que pour les cohortes, je ne pouvais pas gérer de période d'inscription facilement. Le plugin coupon ne proposait pas cette possibilité pour les cohortes. Il le propose uniquement pour les cours.

J'ai pas mal avancé en appelant les informations nécessaires (user, groupe,picture,contextid) depuis le header.php du thème eguru.

Cependant j'ai remarqué que la variable $userid ne renvoyait pas de valeur sur certaines pages de moodle.

J'ai pourtant fait :

global $USER;
$userid = $USER->id;

et j'ai vérifié que mon session cookie path était bien à "/".

La variable globale $USER ne s'appelle pas partout dans Moodle ?

En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello,

Quelles pages sont concernées ?


Seb
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Salut Seb,

Seul la page url/?redirect=0 renvoie les éléments.



Les autres URL n'arrivent pas à renvoyer le userid :

url/my/

url/user/files.php,

url/mod/scorm/view.php?id=5

url/user/index.php?id=6



En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Hello Jérôme,

J'ai jeté un œil sur des fonctions de thème que j'avais faites notamment pour la page cours. J'avais créé une fonction dans la librairie du thème (fichier lib.php à la racine du thème) et déclaré la variable globale $USER dans celle-ci :

/**
 * Return swicthing role button
 *
 * @return string HTML
 */
function theme_cleanupf_rolebutton() {

	  global $DB, $USER, $CFG, $PAGE;
...
...
...
...
}

J'avais ensuite appelé la fonction directement dans mon template PHP de cours (course.php) :

theme_cleanupf_rolebutton();

Dans ce template, ça n'avait pas posé de soucis pour récupérer les infos.


Seb

En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,
Il semble que les variables global $USER et $CFG ne s’appellent pas partout. Non authentifié, je récupère bien le chemin vers mon fichier config.php et l'id du user (0).
Dès que je suis authentifié, les valeurs sont vides. seul sur la page url/?redirect j'arrive à récupérer l'id user, le chemin...

Mystère !

Voici le code que j'ai intégré dans le header.php du thème. Il me permet d'écraser la variable $logo appeler dans le header et afficher le logo du groupe.

<code>
/ajout de la gestion du logo pour les groupes
global $USER,$CFG;
$chemin = $CFG->dirroot . '/config.php';
$userid = $USER->id;

$conn = mysqli_connect('', '', ','');

$req= 'SELECT groupid FROM mdl_groups_members WHERE userid ='.$userid;

$res = $conn->query($req);

while($data = mysqli_fetch_array($res))
    {
 $groupe=$data['groupid'];
    }
   
if (!empty($groupe)) {

$req2= 'SELECT picture FROM mdl_groups WHERE id ='.$groupe;
$res2 = $conn->query($req2);


while($datas = mysqli_fetch_array($res2))
    {
 $picture=$datas['picture'];
    }
}

if (!empty($picture)) {

$req3= 'SELECT contextid FROM mdl_files WHERE id ='.$picture;
$res3 = $conn->query($req3);


while($datass = mysqli_fetch_array($res3))
    {
 $context=$datass['contextid'];
    }
}

mysqli_close($conn);

if (!empty($groupe) && !empty($picture) && !empty($context))
{
$logo='https://url/pluginfile.php/'.$context.'/group/icon/'.$groupe.'/f1?rev='.$picture;
}</code>


En réponse à djedai djedai

Re: Afficher le logo du groupe

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
En parcourant rapidement l'arborescence du thème eguru, il se trouve que le fichier header.php est appelé uniquement sur le layout frontpage.php. Comme son nom l'indique celui-ci est utilisé uniquement sur la page d'accueil clin d’œil

Si tu reportes tes modifications dans l'ensemble des layouts concernés, en particulier columns2.php, ça devrait fonctionner. Du coup, il serait pertinent de convertir ton code en une fonction à placer dans le fichier lib.php du thème eguru afin d'éviter de devoir faire des copier/coller sur chaque layout.

D'autres part, je te suggère vivement d'utiliser l'API Moodle pour accéder aux données présentes dans la base de données :

Seb
En réponse à Sébastien Mehr

Re: Afficher le logo du groupe

par djedai djedai,

Merci Sébastien ! Oui

Ca marche bien. Je vais peaufiner en intégrant tout dans une fonction et en utilisant l'API pour la base de données.