Mengatasi Error Programing Data Fluter

Here is the solution to fix the issue.

1. Go to Moodle root directory
    #cd /var/www/html/moodle
 
2. Run the command 
   #php admin/cli/purge_caches.php

3. Go to moodledata/cache directory

  #cd /var/moodledata/cache
  
4. Remove the cache store directory, DO NOT remove of change the core_component.php file
   # rm -rf cachestore_file/

5. Refresh the Moodle Page. Its should work.

Referensi Moodle API

https://stackoverflow.com/questions/35881584/using-moodle-create-users-and-enroll-them-in-courses-via-sql

http://www.refineddata.com/api

https://stackoverflow.com/questions/22161606/sql-query-for-courses-enrolment-on-moodle?rq=1

    CREATE DEFINER = `your_user`@`%` PROCEDURE `RemoveUserDataFromCourse`(IN `c_id` int,IN `u_id` int)
BEGIN
    # ENROLLMENT
    DELETE FROM mdl_user_enrolments WHERE userid = u_id AND enrolid IN (SELECT id FROM mdl_enrol WHERE courseid = c_id);

  # LOG, EVENT, POSTS
    DELETE FROM mdl_log WHERE course = c_id AND userid = u_id;
    DELETE FROM mdl_event WHERE courseid = c_id AND userid = u_id;
    DELETE FROM mdl_post WHERE courseid = c_id AND userid = u_id;

    # Course completion
    DELETE FROM mdl_course_modules_completion WHERE coursemoduleid IN (SELECT id FROM mdl_course_modules WHERE course= c_id and userid=u_id);
    DELETE FROM mdl_course_completions WHERE course = c_id AND userid = u_id;
    DELETE FROM mdl_course_completion_crit_compl WHERE course = c_id AND userid = u_id;

    # Grades from all modules
    DELETE FROM mdl_grade_grades WHERE userid = u_id and itemid IN (SELECT id FROM mdl_grade_items WHERE courseid = c_id);

    # MODULES

    # ASSIGNMENTS
    DELETE FROM mdl_assign_grades WHERE userid = u_id AND assignment IN (SELECT id FROM mdl_assign WHERE course = c_id);    

    # QUIZ
    DELETE FROM mdl_quiz_attempts WHERE userid = u_id AND quiz IN (SELECT id FROM mdl_quiz WHERE course = c_id);
    DELETE FROM mdl_quiz_grades WHERE userid = u_id AND quiz IN (SELECT id FROM mdl_quiz WHERE course = c_id);

    # SCORM
    DELETE FROM mdl_scorm_scoes_track WHERE userid = u_id AND scormid IN (SELECT id FROM mdl_scorm WHERE course = c_id);

    # CHECK LIST
    DELETE FROM mdl_checklist_check WHERE userid = u_id AND item IN ( SELECT mci.id FROM mdl_checklist mc INNER JOIN mdl_checklist_item mci ON mci.checklist = mc.id WHERE course = c_id );
    DELETE FROM mdl_checklist_comment WHERE userid = u_id AND itemid IN ( SELECT mci.id FROM mdl_checklist mc INNER JOIN mdl_checklist_item mci ON mci.checklist = mc.id WHERE course = c_id );

    # CHOICE
    DELETE FROM mdl_choice_answers WHERE userid = u_id AND choiceid IN (SELECT id FROM mdl_choice WHERE course = c_id);
END;


SELECT c.fullname
FROM mdl_course c 
JOIN mdl_enrol en ON en.courseid = c.id 
JOIN mdl_user_enrolments ue ON ue.enrolid = en.id 
WHERE ue.userid = '788'

SELECT cr.SHORTNAME, 
       cr.FULLNAME, 
       COUNT(ra.ID) AS enrolled 
FROM   MDL_COURSE cr 
       JOIN MDL_CONTEXT ct 
         ON ( ct.INSTANCEID = cr.ID ) 
       LEFT JOIN MDL_ROLE_ASSIGNMENTS ra 
              ON ( ra.CONTEXTID = ct.ID ) 
WHERE  ct.CONTEXTLEVEL = 50 
       AND ra.ROLEID = 5 
GROUP  BY cr.SHORTNAME, 
          cr.FULLNAME 
ORDER  BY ENROLLED ASC 
https://docs.moodle.org/36/en/ad-hoc_contributed_reports

QUERY FOR FINAL GRADE MOODLE


select mc.shortname as course_Id,mu.username, 
case when ABS(ROUND(mgg.finalgrade, 0) - mgg.finalgrade) <= 0.0000005 then cast(mgg.finalgrade as text) else 'Pending...' end as final_grade,
mgi.itemname
from mdl_grade_grades mgg
join mdl_user mu on mgg.userid=mu.id
join mdl_user_enrolments mue on mue.userid=mu.id
join mdl_grade_items mgi on mgg.itemid=mgi.id
join mdl_course mc on mc.id=mgi.courseid
join mdl_enrol me on mue.enrolid=me.id and me.courseid=mc.id
join mdl_role_assignments mra on mu.id=mra.userid
join mdl_role mr on mra.roleid=mr.id
where mc.category = '1' and -- mdl_course_categories.id = '1'; id=1 => name='Spring 2012' as an example 
mr.shortname='student' and -- only get people enrolled with a 'student' role in the course
mgi.itemname ilike '%Final%Grade%'; --anything with 'final' and 'grade' in it regardless of case and surrounding text

Project moodle

$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'moodle';

$u_moodle = 'theusernameyouwant';
$hp_moodle = password_hash('thepasswordyouwant', PASSWORD_DEFAULT); ///IMPORTANT!
$name = 'first name';
$lname = 'last name';
$email = 'e@m.ail'; ///This have to be verified by you as we're inserting it directly
$course = '123'; //Id that you put in moodle admin, not the real id    

$conn = new mysqli($servername, $username, $password, $dbname);

$sql = "INSERT INTO 'mdl_user' (auth, confirmed, mnethostid, username, password, firstname, lastname, email)
    VALUES ('manual', 1, 1, '$u_moodle', '$hp_moodle', '$name', '$lname', '$email')";
// auth = 'manual', confirmed = 1, mnethostid = 1 Always. the others are your variables

if ($conn->query($sql) === TRUE) {
    echo "OKTC";
} else {
    ////Manage your errors
}

$sql = "SELECT * FROM $m_user WHERE email='$email'";
$result = $conn2->query($sql);
if($row = $result->fetch_assoc()) {
    $id = $row['id']; //Id of newly created user. we're using that for to register him on the course
}

////You have to use this if your idnumber for the course is the one you put into moodle (thats not the real id)
$sql = "SELECT id FROM 'mdl_course' WHERE idnumber=$course";
$result = $conn->query($sql);
if(!$result){
    ///Not existing course, manage your error
}
if($row = $result->fetch_assoc()) {
    $idcourse = $row["id"];
}

///I need now the "enrol" id, so I do this:
$sql = "SELECT id FROM 'mdl_enrol' WHERE courseid=$idcourse AND enrol='manual'";
$result = $conn->query($sql);
if(!$result){
    ///Not enrol associated (this shouldn't happen and means you have an error in your moodle database)
}
if($row = $result->fetch_assoc()) {
    $idenrol = $row["id"];
}

///Lastly I need the context
$sql = "SELECT id FROM 'mdl_context' WHERE contextlevel=50 AND instanceid=$idcourse"; ///contextlevel = 50 means course in moodle
$result = $conn->query($sql);
if(!$result){
    ///Again, weird error, shouldnt happen to you
}
if($row = $result->fetch_assoc()) {
    $idcontext = $row["id"];
}

///We were just getting variables from moodle. Here is were the enrolment begins:

$time = time();
$ntime = $time + 60*60*24*$duration; //How long will it last enroled $duration = days, this can be 0 for unlimited.
$sql = "INSERT INTO 'mdl_user_enrolments' (status, enrolid, userid, timestart, timeend, timecreated, timemodified)
VALUES (0, $idenrol, $id, '$time', '$ntime', '$time', '$time')";
if ($conn->query($sql) === TRUE) {
} else {
    ///Manage your sql error
}

$sql = "INSERT INTO 'mdl_role_assignments' (roleid, contextid, userid, timemodified)
VALUES (5, $idcontext, '$id', '$time')"; //Roleid = 5, means student.
if ($conn->query($sql) === TRUE) {
} else {
    //manage your errors
}

CARA INSTALL MOODLE 3.6 DI DEBIAN 9 MENGGUNAKAN NGINX, MARIADB, PHP7.3-FPM

Dunia pendidikan Indonesia pada akhir-akhir ini telah melalui sebuah era baru dalam sistem pembelajarannya. Seiring dengan kebijakan ujian nasional menggunakan Computer-Base Test (CBT) di jenjang pendidikan SMP dan SMA, sekolah telah mengakrabkan diri menggunakan berbagai macam aplikasi pembelajaran menggunakan Teknologi Informasi berbasis komputer. Penggunaan TIK kebanyakan dipakai untuk melakukan penilaian pembelajaran oleh guru misalnya adalah untuk ulangan harian, ulangan mid semester dan ulangan semester. Aplikasi CBT seperti Beesmart, WokaCBT, moodle dan aplikasi berbayar lainnya menjadi pilihan guru dan tenaga pendidikan di sekolah/lembaganya. Setiap aplikasi memiliki kelebihan dan kekurangan masing-masing tergantung dari sisi mana kita melihatnya. Moodle menurut saya memiliki berbagai kelebihan yang tidak dimiliki oleh aplikasi CBT lainnya. Selain gratis, moodle juga merupakan sebuah aplikasi open source yang terus berkembang dan dipakai di seluruh dunia. Berikut ini saya sajikan bagaimana 

Cara Install Moodle di Debian 9 Menggunakan Nginx, MariadB, PHP7.3-FPM .

Moodle sangat fleksibel karena bisa di-Install di berbagai platform sistem operasi seperti windows, linux, MacOs, dan FreeBSD. Bagi Anda yang hanya mengerti sistem operasi windows bisa melakukan Instalasi sendiri menggunakan Xampp, namun secara umum penggunakan moodle di xampp-windows kurang powerfull, cenderung agak berat karena membutuhkan resource memory yang besar. Untuk mengatasi hal tersebut kita bisa menggunakan Linux sebagai server tempat instalasi moodle yang diharapkan lebih cepat, ringan dan membutuhkan resources memory yang lebih kecil. Pada kesempatan ini, saya memilih Debian 9 sebagai OS server moodle.

Untuk web server yang harus diinstall di Debian sebenarnya ada sua pilihan utama yaitu menggunakan Apache bisa juga menggunakan Nginx, mana yang lebih baik ?, silahkan cari informasinya di Mbah Gugel . Demikian juga dengan database server, ada berbagai pilihan bisa menggunakan Mysql, MariadB atau Posgresql. Dan yang terakhir adalah versi PHP, kita bisa memakai versi PHP dari yang lama sampai yang terbaru. Nah diantara berbagai pilihan yang ada, di sini saya memilih Nginx, mariadb dan PHP7.3 yang dipasang di server Debian 9, sementara Moodle yang dipakai adalah moodle terakhir saat tulisan ini muncul yaitu Moodle 3.6. Langsung saja kita mulai bagaimana

 Cara Install Moodle di Debian 9 Menggunakan Nginx, MariadB, PHP7.3-FPM.

Langkah-langkahnya adalah sebagi berikut :

1. INSTALL DEBIAN 9

Pada tutorial ini Install Debian 9 sengaja dilewati karena kalau dijelaskan dari awal tentunya kan panjang dan lama. Anda bisa mencari tutorial cara Install Debian server 16.04 di Mbah Gugel jumlahnya sangat banyak. Rekomendasi saya silahkan cari tutorial di howtoforge.com dengan keyword howto install Debian 9 minimal server. Namun jika Anda ingin praktis dan melewati langkah ini tapi tetap melanjutkan ke langkah berikutnya saya sudah menyediakan VHD Debian 9 minimal server. Anda tinggal memasangnya pada virtual box dan menjalankannya. VHD ini hanya berisi kelengkapan dasar bawaan ubuntu server seperti nano dan openssh yang nantinya sangat diperlukan untuk kebutuhan instalasi komponen lainnya. Untuk mendapatkan VHD Debian kosongan ini silahkan download melalui link berikut ini :

VHD Debian 9 Minimal server ini sudah dilakukan pengubahan dari mode IP DHCP ke IP Statis 192.168.0.200 seperti halnya yang dipakai pada IP VHD UNBK. Openssh juga sudah terpasang agar nantinya server ini bisa diremote menggunakan Putty, winscp atau aplikasi remote server lainnya. Akses ssh juga sudah saya aktifkan Root Login Akses agar bisa akses melalui SSH. Sebelum melangkah lebih jauh dalam menjalankan perintah-perintah instalasi komponen server, perlu diketahui bahwa pada tutorial ini, saya menggunakan hak akses sebagai root.

Sebelum melakukan instalasi paket-paket yang dibutuhkan, ketikkan perintah berikut ini untuk update Debian di console linux :

apt-get update

apt-get upgrade

2. INSTALL WEB SERVER NGINX

Masuk ke console linux dengan mengetikkan perintah :

apt-get install nginx

Setelah proses install webserver selesai, untuk memastikan bahwa apache sudah terinstall dengan baik, buka browser dengan mengetikkan IP server pada URL address, maka akan muncul halaman default Nginx seperti ini :

setelah Nginx terpasang, berikut ini perintah yang dapat dilankan untuk mematikan, menghidupkan dan mengaktifkan Nginx saat server mulai dijalankan :

systemctl stop nginx.service

systemctl start nginx.service

systemctl enable nginx.service

3. INSTALL DATABASE MARIADB

Moodle juga memerlukan database server. MariadB merupakan pilihan yang sangat tepat untuk dipakai pada database server. Untuk Install database MariadB jalankan perintah berikut ini :

apt-get install mariadb-server mariadb-client

setelah mariadb terpasang, berikut ini perintah yang dapat dilankan untuk mematikan, menghidupkan dan mengaktifkan MariadB saat server mulai dijalankan :

systemctl stop mysql.service

systemctl start mysql.service

systemctl enable mariadb.service

Selanjutnya silahkan jalankan perintah berikut ini untuk mengamankan MariadB server :

mysql_secure_installation

akan muncul baris pertanyaan untuk dikonfirmasi y (yes) atau n (no), berikut pertanyaan dan panduan menjawabnya :

  • Enter current password for root (enter for none): Tekan Enter Saja
  • Set root password? [Y/n]: Y
  • New password: Masukkan Password
  • Re-enter new password: Ulangi Password
  • Remove anonymous users? [Y/n]: Y
  • Disallow root login remotely? [Y/n]: Y
  • Remove test database and access to it? [Y/n]: Y
  • Reload privilege tables now? [Y/n]: Y

Selanjutnya, silahkan buka konfigurasi bawaan MariadB dengan menjalankan perintah :

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Setelah terbuka, tambahkan konfigurasi tambahan berikut tepat di bawah baris [mysqld]

default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda
innodb_large_prefix = 1

simpan (ctrl + O, kemudian tekan enter) dan keluar (ctrl + x), selanjutnya restart MariadB server melalui perintah :

systemctl restart mariadb.service

4. INSTALL PHP 7.3-FPM DAN MODULE YANG DIBUTUHKAN

Repository bawaan Debian tidak menyediakan PHP7.3, maka kita membutuhkan repository pihak ketiga untuk mendapatkannya.

Jalankan perintah berikut ini untuk menambahkan repositori pihak ketiga

apt-get install apt-transport-https lsb-release ca-certificates

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

echo “deb ttps://packages.sury.org/php/ $(lsb_release -sc) main” | tee /etc/apt/sources.list.d/php7.3.list

apt-get update

apt-get upgrade

apt-get install php7.3-fpm

dan Install modul-modul yang dibutuhkan oleh Moodle :

apt-get install aspell graphviz clamav php7.3-common php7.3-mbstring php7.3-xmlrpc php7.3-soap php7.3-gd php7.3-xml php7.3-intl php7.3-mysql php7.3-cli php7.3-ldap php7.3-zip php7.3-curl

Setelah php7.3 dan modul-modul pendukungnya terinstall selanjutnya silahkan edit konfigurasi php.ini agar kinerja server lebih powefull. Untuk melakukannya melalui perintah :

nano /etc/php/7.3/fpm/php.ini

Edit nilai/value-nya sesuaikan dengan kemampuan server

file_uploads = On
allow_url_fopen = On
memory_limit = 128M
upload_max_filesize = 8M
max_execution_time = 60
post_max_size = 8M
cgi.fix_pathinfo = 0

Selanjutnya simpan dan keluar dari editor.

5. MEMBUAT DATABASE MOODLE

Berikut ini adalah langkah-langkah Membuat database Moodle, bila ada pertanyaan tentang password masukkan password yang telah dibuat saat Instalasi MariadB pada langkah 3.

mysql -u root -p

Berikutnya buat nama database, buat misalnya dengan nama moodle, dan jalankan dengan perintah :

CREATE DATABASE moodle;

Buat Nama User database misalnya moodleuser dan gunakan password baru user :

CREATE USER ‘moodleuser’@’localhost’ IDENTIFIED BY ‘new_password_here’;

Berikutnya ketikkan perintah berikut ini :

GRANT ALL ON moodle.* TO ‘moodleuser’@’localhost’ IDENTIFIED BY ‘user_password_here’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

6. INSTALL MOODLE

Langkah berikutnya adalah melakukan pemasangan Moodle di server. Saat tulisan ini muncul Moodle terbaru memiliki versi 3.6. Jalankan perintah berikut ini untuk mendownload Moodle release terbaru.

cd /tmp

wget https://download.moodle.org/download.php/direct/stable36/moodle-latest-36.tgz

Jalankan perintah berikut untuk mengekstrak file download Moodle, dan memindahkannya ke folder moodle /var/www/html/moodle

tar -zxvf moodle-latest-36.tgz

mv moodle /var/www/html/moodle

Berikutnya adalah membuat folder moodledata sebagai tempat database moodle

cd

mkdir /var/moodledata

berikutnya adalah change modify the directory permission folder moodle dan moodledata

chown -R www-data /var/www/html/moodle

chmod -R 777 /var/www/html/moodle

chown -R www-data /var/moodledata

chmod -R 777 /var/moodledata

Lakukan Reboot pada server, dengan menjalankan perintah :

reboot

7. KONFIGURASI SITUS MOODLE DI NGINX

Langkah awal melakukan konfigurasi pada nginx, lakukan sedikit pengeditan letaknya pada direktori /etc/nginx/nginx.conf, silahkan buka dengan mengetikkan perintah :

nano /etc/nginx/nginx.conf

Lakukan sedikit pengatuaran pada keepalive_timeout berikan nilai yang wajar misalnya 2 seconds

[…]
keepalive_timeout 2;
[…]

Langkah berikutnya adalah mengkonfigurasi pengaturan file di Nginx untuk Moodle. Pada file inilah akan dikontrol bagaimana user bisa mengakses konten Moodle. Jalankan perintah berikut ini untuk membuat file konfigurasi dan namakan saja filenya dengan moodle :

nano /etc/nginx/sites-available/moodle

Selanjutnya, copy dan paste script berikut dan sesuaikan dengan domain yang kita pakai, setelah itu simpan dan tutup :

server {
listen 80;
listen [::]:80;
root /var/www/html/moodle;
index index.php index.html index.htm;
server_name 192.168.0.200;

location / {
try_files $uri $uri/ =404;
}

location /dataroot/ {
internal;
alias /var/moodledata/;
}

location ~ [^/]\.php(/|$) {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

Berikutnya aktifkan moodle di nginx dengan mengkopi/menduplikat /etc/nginx/sites-available/moodle ke /etc/nginx/sites-enabled, melalui perintah :

ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/

Untuk memastikan konfigurasi yang kita lakukan benar ketikkan perintah berikut ini :

nginx -t

dan apabila konfigurasi benar, maka outputnya adalah seperti ini :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Untuk memastikan bahwa PHP yang dipasang sudah PHP7.3-FPM, maka buatlah file php.info di dokumen root var/www/html/moodle, dengan perintah :

nano /var/www/html/moodle/info.php

dan isi kan :

<?php
phpinfo();

simpan dan tutup editor.
Selanjutnya, restart nginx dengan mengetikkan perintah :

systemctl restart nginx.service

Sekarang kita cek info php, dengan mengetikkan http://192.168.0.200/info.php

Jika ketarangan pada baris Server API menunjukkan FPM/FastCGI maka instalasi PHP7.3-FPM sudah benar dan berjalan dengan baik.

Sumber :
https://www.sudutbaca.com/cara-install-moodle-3-6-di-debian-9-menggunakan-nginx-mariadb-php7-3-fpm/