Zufallsgruppen direkt in Moodle
Vorschau
Quelltext-Schnipsel
Zum Einfügen in ein Textfeld oder einen Textblock im Moodle-Kurs
<!-- Aus allen Schülernutzer im Kurs temporär angezeigte Zufallsgruppen erzeugen Joachim Jakob 2021 --> <form> <div class="form-group"> <button id="b_zufallsgruppen_ausgeben" class="btn btn-primary">Zufallsgruppen erzeugen</button> <button id="b_beispiel_anzeigen" class="btn btn-secondary">Beispiel</button> </div> <div class="form-group"> <label for="s_gruppengroesse" class="form-label">Gruppengröße</label> <select id="s_gruppengroesse" class="form-control"> <option value="2">Zweiergruppen</option> <option value="3">Deiergruppen</option> <option value="4">Vierergruppen</option> <option value="5">Fünfergruppen</option> <option value="6">Sechsergruppen</option> <option value="7">Siebenergruppen</option> </select> </div> <div> <div id="div_ausgabe" style="display:none"></div> </div> </form> <script> //<![CDATA[ setTimeout(function() { // START Zeitverzögerung, damit onload sicher abgeschlossen ist require(['jquery'], function($) { // START Nachladen von jQuery mit require var debug=true; var maximale_kursgroesse=50; var rollenbezeichnung_filter='Schüler'; var beispieldaten=[ 'Alldibel', 'Alwica', 'Anslipida', 'Ansphatine', 'Arstanard', 'Clededulf', 'Cordeele', 'Grebifred Mü.', 'Grebifred Mei.', 'Guibasano', 'Heindenald', 'Irmsaola', 'Kalare', 'Karledi', 'Klaburhanna', 'Lazislind', 'Liebilfa', 'Maheldrea', 'Mechtriona', 'Ornasmy', 'Sostanon', 'Thesanrune', 'Thoronmil', 'Toronner', 'Truridia', 'Vilicel', 'Wenlipnah', 'Wintiel' ]; $('#b_beispiel_anzeigen').click(function() { console.log('beispiel_anzeigen'); lotterie_starten(beispieldaten); return false }); $('#b_zufallsgruppen_ausgeben').click(function() { // Adresse der Teilnehmerliste relativ zum aktuellen Kurs holen // über die Kurs-ID, wwwroot und den festen Pfadanteil der Teilnehmerseite var aktuelle_urlparameter=window.location.search; if (debug) { //console.log(aktuelle_urlparameter); } var aktuelle_kursid=String(aktuelle_urlparameter).split('id\=')[1]; if (aktuelle_kursid.match(/\&/)) { aktuelle_kursid_netto=aktuelle_kursid.split('\&')[0]; } else { String(aktuelle_kursid_netto)=String(aktuelle_kursid); } if (debug) { //console.log('Kurs-ID: '+String(aktuelle_kursid_netto)); } var basisurlteilnehmerliste = String(M.cfg.wwwroot)+'/user/index.php?id='; var zusatzparameter='&perpage='+String(maximale_kursgroesse); var link_zur_teilnehmerliste=basisurlteilnehmerliste+ aktuelle_kursid_netto+ zusatzparameter; if (debug) { //console.log(link_zur_teilnehmerliste); } // Ajax-Request, um den kompletten Inhalt der Teilnehmerseite zu holen var zielseiteninhalt_temp = $.ajax({ url: link_zur_teilnehmerliste, cache: false, async: false, dataType: 'html' }).responseText; if (debug) { //console.log(zielseiteninhalt_temp); } var zielseite_tabellenobjekt = $(zielseiteninhalt_temp).find('table#participants').html(); if (debug) { //console.log(zielseite_tabellenobjekt); } // nur die benötigten Informationen Teilnehmername und Rolle abholen // nur die Nutzer mit der Schülerrolle in die Liste zur Gruppenbildung mit aufnehmen alle_teilnehmernamen=[]; $(zielseite_tabellenobjekt).find('tr').each(function() { var teilnehmername=$(this).children().eq(1).text(); var rollen=String($(this).children().eq(4).text()).replace(/\s+/g, '').replace(/\n/g, ''); if (String(teilnehmername) != 'undefined' && String(teilnehmername) != '') { // ist die gewünschte Filter-Rolle enthalten z.B. "Schüler"? //var re = new RegExp(rollenbezeichnung_filter, 'g'); if (rollen.match(rollenbezeichnung_filter)) { if (debug) { //console.log(teilnehmername); //console.log(rollen); } alle_teilnehmernamen.push(teilnehmername); } } }); if (debug) { console.log(alle_teilnehmernamen); } lotterie_starten(alle_teilnehmernamen); return false }); function lotterie_starten(alle_teilnehmernamen) { var groesse=parseInt($('#s_gruppengroesse option:selected').val()); //console.log(alle_teilnehmernamen); var alle_teilnehmernamen_bereinigt=alle_teilnehmernamen; var gesamtzahl=alle_teilnehmernamen_bereinigt.length; console.log('Gruppengröße: '+String(groesse)); console.log('Schülerzahl: '+String(gesamtzahl)); if (gesamtzahl <= groesse) { alert('Die Schülerzahl muss größer als die Gruppengröße sein!'); } else { // zufällig mischen alle_teilnehmernamen_bereinigt.mischen(); // in Gruppen aufteilen var rest=gesamtzahl%groesse; if (rest != 0) { } var gruppenzahl=Math.floor(gesamtzahl/groesse); if (debug) { console.log('Anzahl der vollständigen Gruppen: '+gruppenzahl); } var alle_gruppen=[]; // erzeugen und Befüllen der einzelnen Gruppen for (var j=0; j < gruppenzahl; j++) { var untergruppe=alle_teilnehmernamen_bereinigt.slice(0+j*groesse, groesse+j*groesse); alle_gruppen.push(untergruppe); } // falls es nicht aufgeht, die übrigen in eine eigene Zusatzgruppe if (rest != 0) { //alert('Es müssen noch Schüler nachträglich verteilt oder eine kleinere Gruppe gebildet werden!'); var index_von_hinten=alle_teilnehmernamen_bereinigt.length-rest; if (debug) { console.log('Restliche ab index: '+index_von_hinten); } var zusatzuntergruppe=alle_teilnehmernamen_bereinigt.slice(index_von_hinten, alle_teilnehmernamen_bereinigt.length); if (debug) { console.log(zusatzuntergruppe); } //alle_gruppen.push(zusatzuntergruppe); } console.log(alle_gruppen); var ausgabetext=''; for (var i=0; i < alle_gruppen.length; i++) { var anzeigenummer=i+1; var gruppenpraefix='<div class="card" style="border-style:solid !important;border-width:1px;border-color:#000000;width: 18rem;padding:5px;display:flex;margin:5px;box-sizing:border-box;border-radius:0.25rem">\n'+ ' <div class="card-title" style="font-weight:700;font-size:1.2em;">Gruppe '+String(anzeigenummer)+'</div>\n'; var erste_zeile=gruppenpraefix; var gruppenmitglieder=''; for (var j=0; j < alle_gruppen[i].length; j++) { gruppenmitglieder=gruppenmitglieder+ ' <div class="card-text">'+alle_gruppen[i][j]+'</div>\n'; } ausgabetext=ausgabetext+erste_zeile+gruppenmitglieder+'\n</div>'; } $('#div_ausgabe').html(ausgabetext); $('#div_ausgabe').show(); } } // Listen zufällig sortieren function arrayMischen(){ var tmp, zufall; for(var i=0; i < this.length; i++) { zufall=Math.floor(Math.random()*this.length); tmp=this[i]; this[i]=this[zufall]; this[zufall]=tmp; } } Array.prototype.mischen=arrayMischen; }); // END require }, 500); // END Zeitverzögerung //]]> </script>
Alternative ohne Moodle
Zufallsgruppen