Une page qui liste les cours totalement ouverts (anonyme)

Une page qui liste les cours totalement ouverts (anonyme)

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

Bonjour à tous,

afin de promouvoir et de donner un peu de visibilité aux chouchous du pôle TICE enseignants qui choisissent d'ouvrir leur cours sur Internet, nous avons développé une page qui permet de lister et consulter ces cours dont voici le code :

<?php

set_context(context_system::instance()); $PAGE->set_title('Cours en accès libre'); $PAGE->set_url('/course/course-guest.php'); $courserenderer = $PAGE->get_renderer('core', 'course'); global $DB; $course = $DB->get_records_sql('SELECT {course}.id FROM {enrol}, {course} WHERE {enrol}.enrol = ? AND {enrol}.status = ? AND {enrol}.password = ? AND {course}.id = {enrol}.courseid AND {course}.visible = ?', array('guest', '0', '', '1')); echo $OUTPUT->header(); echo " <h3>Il y a actuellement " . count($course) . " cours en accès libre :</h3>"; foreach($course as $course_opened) { echo $courserenderer->course_info_box($course_opened); } echo $OUTPUT->footer(); ?>

Étant donné qu'on tâtonne encore avec les API de Moodle, n'hésitez pas à faire toute remarque susceptible de rendre le code meilleur ou de le faire évoluer.

La page sera accessible via un lien sur la page d'accueil de notre future plateforme.

PS : Merci à Séverin qui nous a évité de nous farcir la requête, elle était déjà toute prête ici :
et à Stéphane qui nous a aidé à dégrossir les requêtes avec son tuto :

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

Re: Une page qui liste les cours totalement ouverts (anonyme)

par stephane ngov,

Bonjour,


Moodle a un context très fermé pour les utilisateurs non  inscrit, c'est normal c'est une plate forme pédagogique,

on l'utilise pas comme un wordpress ou drupal , Il faut constamment jouer sur les rôles pour pouvoir essayer de permettre au anonyme d'essayer d'avoir des accès, je trouve que cela manque de l'ergonomie.


Ce que recherche à faire  avec tout mes développements  c'est d'essayer élargir ses permissions,

c'est comme si j'essayais de l'utiliser en tant que cms comme blog et en même temps profiter des fonctionnalités 

de moodle , les détourné pour par exemple avoir un avis sur celui qui l'utilise. Lui donner plus de souplesse.


Un exemple sur cette page

http://lcms.fr/mdl3/forum/


On peut directement s'inscrire juste en une page, le contenu proviennent directement du forum.




Pourquoi je fais cela ?

Car c'est pour facilité et incité les personnes à s'inscrire sans trop demandé des informations supplémentaires

obligatoire et donner l'envie d'utilisé la plate-forme dans un contexte anonyme, bien sur

dans un contexte d' université , on n'est d'office inscrit, plus moodle gangera en ergonomie d'utilisation sur le front end et le

back end plus il sera encore plus populaire.


Un autre exemple, je détourne l'activité leçon, pour par exemple chaque internautes puisse par exemple répondre à

plusieurs questions (demander un sondage si le cours est claire, s'il manque quelque choses ...) et tout ça

sans avoir à se connecté, pour avoir un aperçu et un maximum de retour de la publication du cours ou de l'exercice qu'on à fait.


Du fait un d'héritage des couches de programme depuis plusieurs année de moodle par plugin,

cela rend moodle lourd en programmation, et moins claire.


Si un jours cela se fait et sa serait pas mal pour moodle de donner un peu plus de rigueurs c'est d'avoir

une structure MVC comme symfony2  avec doctrine avec une vue comme twig ou mustach, d'ailleurs depuis moodle2

c'est que moodle essaye de tendre.


Je n'ai pas assez d'expérience dans la programmation et comparer avec la façon que gère moodle pour les objets ,

mais lorsque je fait un var_dump(objet), je vois que en mémoire c'est bien chargé.


J'aurai pu essayer de faire une effort de faire mes scripts sous forme de plugin et ne pas le faire tout seul de mon côté,

mais je trouve que c'est un peut lourd d'obtenir d'avoir une fonctionnalité et de programmer avec l'API de moodle (mais ce n'est que moins point de vue, peut être que si je m'y mettais à fond, je verrais des choses qui pourrais être utilise et pérenne avec du codage facile et rapide).


Je privilégie plutôt PDO avec ses requêtes préparé que mysqli


  • Question de goût.
  • Pas la peine d'apprendre plusieurs API sauf à vouloir utiliser des outils propres à chaque API.
  • Tous les SGBD auront des requêtes préparées, même SQLITE, parce que PDO a la possibilité de les émuler côté PHP plutôt que côté SQL
  • L'interface est clair et minimaliste, pas de fetch_assoc, juste une fonction fetch à laquelle on passe un argument.
  • Pas de possibilité de bouillon "procédural/OO", il n'y a qu'une version OO de l'API.
  • Grande facilité de configuration grâce à la méthode setAttribute


En réponse à Sébastien Mehr

Re: Une page qui liste les cours totalement ouverts (anonyme)

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Sébastien,

Voila le genre de message que j'apprécie : clair, détaillé, apportant une solution concrète, demandant des améliorations possibles, et citant les sources d'inspiration sourire

C'est le genre de choses qui fait avancer la communauté !

Séverin

PS : je pourrais juste chipoter un peu en demandant pour quelles versions cela peut s'appliquer clin d’œil

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Une page qui liste les cours totalement ouverts (anonyme)

par stephane ngov,

Bonjour Séverin,


voici une page de test sur la version 2.8.5+,

j'ai mis à jour il y a pas longtemps


http://lcms.fr/moodle2/test.php


Bonne journée sourire


dans l'index.php à la fin par exemple selon le contexte et c'est juste pour le test


            case FRONTPAGECOURSESEARCH:
                echo $OUTPUT->box($courserenderer->course_search_form('', 'short'), 'mdl-align');
          
echo "fint";
$course = $DB->get_records_sql('SELECT {course}.id FROM {enrol}, {course} WHERE {enrol}.enrol = ? AND {enrol}.status = ? AND {enrol}.password = ? AND {course}.id = {enrol}.courseid AND {course}.visible = ?', array('guest$
var_dump($course);


echo " <h3>Il y a actuellement " . count($course) . " cours en accès libre :</h3>";
foreach($course as $course_opened) {
  echo $courserenderer->course_info_box($course_opened);
}


 break;

        }
        echo '<br />';
    }
    if ($editing && has_capability('moodle/course:create', context_system::instance())) {
        echo $courserenderer->add_new_course_button();
    }
    echo $OUTPUT->footer();


En réponse à stephane ngov

Re: Une page qui liste les cours totalement ouverts (anonyme)

par stephane ngov,

Par contre comme j'étais connecté,

on vois que cela n'est pas affiché pour les anonymes



mais cela dépend comment est intégré le script et adapter selon les besoins qu'on affiche.

En réponse à Sébastien Mehr

Re: Une page qui liste les cours totalement ouverts (anonyme)

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
Si ça peut aider d'autres moodleurs, c'est avec plaisir ! clin d’œil

Concernant la version, tout comme Stéphane, nous l'avons déployé initialement sur une plateforme en 2.8.5, mais je suppose la page est compatible avec tout Moodle en 2.x.

@Stéphane :  Je te rejoins pour dire que, de prime à bord, les APIs ne sont pas faciles d'accès comparé à d'autres outils comme PDO que tu cites. Le gros intérêt de les utiliser c'est surtout d'assurer la compatibilité de tes développements avec les futures évolutions de Moodle. On sent quand même que Moodle tend à intégrer de plus en plus d'outils de développement externes. La 2.9 par exemple, intègre Mustache et remplace YUI par JQuery !

PS : Bonne idée l'intégration du champ recherche !
En réponse à Sébastien Mehr

Re: Une page qui liste les cours totalement ouverts (anonyme)

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs
Quelques corrections apportées :

<?php

require_once("../config.php"); // chemin à modifier selon où vous placez votre page
$PAGE->set_context(context_system::instance()); $PAGE->set_title('Cours en accès libre'); $PAGE->set_url('/course/opened_courses.php'); $courserenderer = $PAGE->get_renderer('core', 'course'); global $DB; $course = $DB->get_records_sql('SELECT {course}.id, {course}.shortname, {course}.fullname FROM {enrol}, {course} WHERE {enrol}.enrol = ? AND {enrol}.status = ? AND {enrol}.password = ? AND {course}.id = {enrol}.courseid AND {course}.visible = ?', array('guest', '0', '', '1')); echo $OUTPUT->header(); echo " <h3>Il y a actuellement " . count($course) . " cours en accès libre :</h3>"; foreach($course as $course_opened) { echo $courserenderer->course_info_box($course_opened); } echo $OUTPUT->footer(); ?>