Tuesday, 22 July 2025

Perintah ini untuk melihat kolom apa yang tersedia mdl_local_jurnalmengajar

DESCRIBE mdl_local_jurnalmengajar;

ini untuk melihat kolom apa yang tersedia:

 

 [moodle2]> DESCRIBE mdl_local_jurnalmengajar;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | bigint(10)   | NO   | PRI | NULL    | auto_increment |
| userid        | bigint(10)   | NO   | MUL | NULL    |                |
| nomor         | bigint(10)   | NO   |     | NULL    |                |
| kelas         | varchar(20)  | NO   |     |         |                |
| jamke         | varchar(10)  | YES  |     | NULL    |                |
| matapelajaran | varchar(100) | NO   |     |         |                |
| materi        | longtext     | NO   |     | NULL    |                |
| aktivitas     | longtext     | NO   |     | NULL    |                |
| absen         | longtext     | YES  |     | NULL    |                |
| keterangan    | longtext     | YES  |     | NULL    |                |
| timecreated   | bigint(10)   | NO   |     | 0       |                |
+---------------+--------------+------+-----+---------+----------------+
11 rows in set (0.001 sec)

Monday, 21 July 2025

menyalin perubahan dari server lab ke server guru dalam folder

 

Baik, Guru Duan. Untuk menyalin perubahan dari server lab ke server guru dalam folder:

/var/www/html/moodle/local/jurnalmengajar/

Berikut langkah-langkahnya:


1. Dari server guru, jalankan perintah rsync via SSH

Asumsikan server lab bisa diakses lewat SSH, misalnya user@IP_SERVER_LAB

rsync -avz --delete user@IP_SERVER_LAB:/var/www/html/moodle/local/jurnalmengajar/ /var/www/html/moodle/local/jurnalmengajar/

Penjelasan opsi:

  • -a: archive, menjaga struktur file & permission

  • -v: verbose, tampilkan proses

  • -z: compress

  • --delete: hapus file di server guru yang tidak ada di server lab (hati-hati, opsional)


🔐 2. Jika perlu autentikasi key SSH

Kalau server lab tidak pakai password (pakai private key), pastikan jalankan dengan:

rsync -avz -e "ssh -i /path/to/private_key" user@IP_LAB:/path/to/source/ /path/to/tujuan/

📦 3. Alternatif: SCP jika perubahan sedikit

scp -r user@IP_SERVER_LAB:/var/www/html/moodle/local/jurnalmengajar/ /var/www/html/moodle/local/

🔄 4. Setelah itu, clear cache Moodle (opsional tapi disarankan)

sudo -u www-data php /var/www/html/moodle/admin/cli/purge_caches.php

Kalau Guru Duan sudah punya akses SSH ke kedua server dan ingin saya bantu buat perintah lengkap (termasuk IP, user, atau private key), tinggal beri tahu.

Otional Optimasi lms backupan moodle

 

Mantap, Guru Duan 🙌
Berarti saat ini:

lms.sman2kandangan.sch.id sudah aktif dan terbuka
Masalah dbconnectionfailed dan usermoodle sudah beres
Plugin edwiser_site_monitor dan error cpu out of range sudah bersih
max_input_vars sudah diset minimal 5000 dan tidak ada peringatan lagi


Kalau ingin, berikut beberapa langkah opsional untuk optimalisasi:

🔒 1. Amankan direktori moodledata

Pastikan moodledata tidak bisa diakses lewat web:

  • Lokasi ideal: di luar /var/www/html, misalnya:
    /var/moodledata (bukan di /var/www/html/moodledata)

  • Kalau belum dipindah dan perlu bantuannya, tinggal bilang.


🚀 2. Aktifkan OPcache untuk performa

Edit php.ini (masih di /etc/php/8.2/fpm/php.ini) dan pastikan:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1

Setelah itu:

sudo systemctl restart php8.2-fpm

🔄 3. Jadwalkan Cron Moodle

Agar notifikasi dan tugas-tugas internal Moodle berjalan normal:

sudo crontab -u www-data -e

Tambahkan ini:

*/1 * * * * /usr/bin/php /var/www/html/moodle/admin/cli/cron.php >/dev/null 2>&1

Kalau ada kebutuhan lain — migrasi data, integrasi plugin, atau membuat halaman rekap — silakan lanjutkan saja. Saya siap bantu sampai selesai ✊

Perintah Ekspor Semua Tabel 1 Hari Terakhir

 

Sempurna, Guru Duan 🙌

Tabel mdl_local_jurnalmengajar_suratizinguru (Surat Izin Guru) menggunakan kolom waktuinput sebagai timestamp, jadi kita akan memakainya untuk ekspor data 1 hari terakhir.


✅ Rekap Perintah Ekspor Semua Tabel (1 Hari Terakhir)

1. Jurnal Mengajar

mysqldump -u root -p moodle2 mdl_local_jurnalmengajar \
--where="timecreated >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))" \
> jurnal_mengajar_1hari.sql

2. Surat Izin Siswa

mysqldump -u root -p moodle2 mdl_local_jurnalmengajar_suratizin \
--where="timecreated >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))" \
> suratizin_siswa_1hari.sql

3. Surat Izin Guru

mysqldump -u root -p moodle2 mdl_local_jurnalmengajar_suratizinguru \
--where="waktuinput >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))" \
> suratizin_guru_1hari.sql

🚀 Impor ke Server Guru

Setelah file .sql dipindah ke server guru, jalankan:

mysql -u root -p moodle < jurnal_mengajar_1hari.sql
mysql -u root -p moodle < suratizin_siswa_1hari.sql
mysql -u root -p moodle < suratizin_guru_1hari.sql

⚠️ Catatan Penting

  1. Hindari ID konflik: Kalau data dari server lab dan guru saling bertumpuk, edit file .sql dulu → ganti nilai kolom id jadi NULL, atau hapus dari INSERT agar pakai AUTO_INCREMENT.

  2. Pastikan userid di server guru valid, kalau tidak akan tampil kosong di laporan karena referensi ke mdl_user tidak cocok.


Kalau Guru Duan ingin, saya bisa bantu buat skrip otomatis (Bash) agar bisa dijalankan berkala (misal: cron). Tinggal bilang saja ya. 💪

Table Jurnal Mengajar

 > SHOW TABLES LIKE '%jurnalmengajar%';
+-------------------------------------------+
| Tables_in_moodle2 (%jurnalmengajar%)      |
+-------------------------------------------+
| mdl_local_jurnalmengajar                  |
| mdl_local_jurnalmengajar_beban            |
| mdl_local_jurnalmengajar_suratizin        |
| mdl_local_jurnalmengajar_suratizin_backup |
| mdl_local_jurnalmengajar_suratizinguru    |
+-------------------------------------------+
5 rows in set (0.003 sec)

Terima kasih Guru Duan. Dari hasil tersebut, sekarang kita tahu tabel-tabel yang digunakan plugin jurnalmengajar adalah:

  1. mdl_local_jurnalmengajarJurnal Mengajar

  2. mdl_local_jurnalmengajar_suratizinSurat Izin Siswa

  3. mdl_local_jurnalmengajar_suratizinguruSurat Izin Guru

  4. mdl_local_jurnalmengajar_beban → Data beban jam guru (biasanya statis)

  5. mdl_local_jurnalmengajar_suratizin_backup → Backup dari surat izin siswa (tidak perlu ikut diekspor)


🔜 Ayo kita lanjutkan dengan:

✅ 1. Tampilkan struktur suratizin (siswa):

SHOW CREATE TABLE mdl_local_jurnalmengajar_suratizin\G

✅ 2. Tampilkan struktur suratizinguru (guru):

SHOW CREATE TABLE mdl_local_jurnalmengajar_suratizinguru\G

Setelah Restore sql

 Karena tidak pakai Docker, maka proses restore dilakukan langsung di sistem host (Debian atau Ubuntu), dan langkahnya akan sedikit berbeda.


✅ Ringkasan kondisi saat ini

  • Database moodle2 sudah direstore.

  • moodle-code (folder Moodle)belum direstore.

  • moodledata (data file pengguna)belum direstore.

  • Entry wwwroot di tabel mdl_configbelum ada.


🔧 Langkah Restore Tanpa Docker

1. Restore folder Moodle codebase

Misalnya file backup ada di /var/backup/moodle-code.tar.gz dan ingin meletakkannya di /var/www/html/moodle:

# Buat folder target jika belum ada
sudo mkdir -p /var/www/html/moodle

# Pindah ke folder target
cd /var/www/html/moodle

# Ekstrak backup
sudo tar -xvzf /var/backup/moodle-code.tar.gz -C /var/www/html/moodle --strip-components=1

Sesuaikan nama file dan path jika berbeda.


2. Restore folder moodledata

Misalnya file backup ada di /var/backup/moodledata.tar.gz dan ingin meletakkannya di /var/moodledata:

sudo mkdir -p /var/moodledata
sudo tar -xvzf /var/backup/moodledata.tar.gz -C /var/moodledata

Setelah itu, ubah permission agar bisa diakses oleh webserver (misalnya www-data):

sudo chown -R www-data:www-data /var/moodledata
sudo chmod -R 755 /var/moodledata

3. Periksa config.php

Pastikan config.php yang berada di /var/www/html/moodle/config.php sudah sesuai, terutama bagian ini:

$CFG->wwwroot   = 'http://sim.sman2kandangan.sch.id'; // Sesuaikan
$CFG->dataroot  = '/var/moodledata';
$CFG->dbname    = 'moodle2';
$CFG->dbuser    = 'root';
$CFG->dbpass    = 'isi_password_mysql';

Kalau file config.php belum ada, bisa dibuat manual dari config-dist.php.


4. Masukkan nilai wwwroot ke database

Masuk ke MySQL:

mysql -u root -p moodle2

Jalankan:

INSERT INTO mdl_config (name, value) VALUES ('wwwroot', 'http://sim.sman2kandangan.sch.id');

Ganti URL dengan yang benar sesuai domain Guru Duan.


🚀 Terakhir: Akses di browser

Setelah semua di atas selesai:

  • Buka: http://sim.sman2kandangan.sch.id

  • Moodle harus langsung menampilkan halaman login atau halaman depan jika restore sukses.

Kalau muncul error atau blank page, cukup kirim isi lognya (biasanya di /var/log/nginx/error.log atau php-fpm.log), saya bantu cek.


Sunday, 20 July 2025

Salin file backup Moodle dari server lab ke server guru melalui SSH dari laptop,

 

Baik Guru Duan. Kalau ingin menyalin file backup Moodle dari server lab ke server guru melalui SSH dari laptop, dan hanya file yang mengandung tanggal 2025-07-20 di namanya, bisa menggunakan perintah scp (secure copy) dari laptop, seperti ini:

scp username_lab@IP_SERVER_LAB:/var/backup/*2025-07-20* username_guru@IP_SERVER_GURU:/var/backups/

Penjelasan:

  • username_lab → nama user SSH untuk server lab

  • IP_SERVER_LAB → alamat IP server lab

  • /var/backup/*2025-07-20* → hanya file yang mengandung 2025-07-20 di namanya

  • username_guru → nama user SSH untuk server guru

  • IP_SERVER_GURU → alamat IP server guru

  • /var/backups/ → direktori tujuan di server guru

Contoh jika semua pakai user root dan IP:

scp root@192.168.10.5:/var/backup/*2025-07-20* root@192.168.10.6:/var/backups/

Catatan: perintah di atas akan menyalin langsung dari satu server ke server lain, melalui laptop sebagai perantara perintah (bukan file). Namun data tetap mengalir dari server lab ke server guru, bukan ke laptop.


Alternatif jika laptop tidak punya akses langsung ke server guru:

Jika laptop hanya bisa masuk ke server lab, lalu dari sana ingin salin ke server guru:

  1. SSH ke server lab:

    ssh username_lab@IP_SERVER_LAB
    
  2. Dari dalam server lab, jalankan:

    scp /var/backup/*2025-07-20* username_guru@IP_SERVER_GURU:/var/backups/
    

Butuh bantuan menyusun skrip otomatisnya juga?

Saturday, 19 July 2025

Perintah sql milih user aktif moodle

 SELECT id, username, firstname, lastname
FROM mdl_user
WHERE deleted = 0
  AND suspended = 0
  AND confirmed = 1
  AND username <> 'guest';
785 rows in set (0.004 sec)



SELECT id, username, firstname, lastname
FROM mdl_user
WHERE deleted = 0
  AND suspended = 0
  AND confirmed = 1
  AND username <> 'guest'
INTO OUTFILE '/tmp/user_Active2025.csv'
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n';

Tab Switch Button

 

Kalau Guru Duan memilih untuk menyalin kode tab switch ke masing-masing file (tanpa fungsi), pastikan tetap konsisten seperti ini:


✅ Di today.php:

echo html_writer::start_div('mb-3');
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today.php'), '⏰ Urut Waktu', ['class' => 'btn btn-primary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today_perguru.php'), '🧑‍🏫 Per Guru', ['class' => 'btn btn-outline-secondary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/bydate.php'), '📅 Per Tanggal', ['class' => 'btn btn-outline-secondary']);
echo html_writer::end_div();

✅ Di today_perguru.php:

echo html_writer::start_div('mb-3');
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today.php'), '⏰ Urut Waktu', ['class' => 'btn btn-outline-secondary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today_perguru.php'), '🧑‍🏫 Per Guru', ['class' => 'btn btn-primary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/bydate.php'), '📅 Per Tanggal', ['class' => 'btn btn-outline-secondary']);
echo html_writer::end_div();

✅ Di bydate.php:

echo html_writer::start_div('mb-3');
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today.php'), '⏰ Urut Waktu', ['class' => 'btn btn-outline-secondary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/today_perguru.php'), '🧑‍🏫 Per Guru', ['class' => 'btn btn-outline-secondary']);
echo ' ';
echo html_writer::link(new moodle_url('/local/jurnalmengajar/bydate.php'), '📅 Per Tanggal', ['class' => 'btn btn-primary']);
echo html_writer::end_div();

Catatan:

  • Jangan tukar urutan, biar tampilan antar halaman tetap familiar bagi pengguna.

  • Jangan ubah btn-primary dan btn-outline-secondary secara acak — pastikan hanya satu yang aktif per halaman.

Kalau nanti ingin tambahkan tab baru (misalnya "📊 Rekap"), akan lebih merepotkan karena harus ubah semua file. Kalau begitu, mungkin saat itu bisa dipertimbangkan pakai fungsi ya Guru 😊

BACKUP MOODLE Sabtu 19 Juli 2025

 # Backup code Moodle
sudo tar -czvf /var/backup/moodle-code-$(date +%F).tar.gz -C /var/www/html moodle

# Backup moodledata
sudo tar -czvf /var/backup/moodledata-$(date +%F).tar.gz -C /var moodledata

# Backup database
mysqldump -u root -p moodle2 > /var/backup/moodle-db-$(date +%F).sql



============================
Untuk mengecek detail semua file di dalam /var/backup, termasuk ukuran (size), waktu, dan hak akses, jalankan perintah berikut di terminal:
ls -lh /var/backup
============================
Kompresi database agar hemat ruang:
gzip /var/backup/moodle-db-2025-07-19.sql

============================
kirim ke laptop
PERHATIKAN ADA TITIK DI AKHIR tanda titik (.) di akhir perintah itu penting untuk menunjukkan bahwa file akan disalin ke direktori saat ini.

dari terminal laptop:
cd ~/Downloads
scp root@36.90.101.113:/var/backup/*2025-07-19* .


rsync -avP 'root@36.90.101.113:/var/backup/moodle-db-2025-07-19.sql.gz' .

scp root@36.90.101.113:/var/backup/moodledata-2025-07-19.tar.gz .


Ekstrak PDF ke PNG atau JPEG

 🔧 Konversi Semua Halaman PDF ke PNG (resolusi 300 dpi)

pdftoppm -png -rx 300 -ry 300 deep.pdf deep_page
 

 (Opsional) Pindahkan Semua ke Folder

mkdir hasil_deep
mv deep_page-*.png hasil_deep/
 

(Opsional) Kompres ke ZIP 

zip -r deep_gambar.zip hasil_deep/
 

Kalau Guru ingin hasilnya dalam JPEG

 pdftoppm -jpeg -rx 300 -ry 300 deep.pdf deep_page

Perintah edit file PDF hasil asc timetables

 $ ps2pdf Perkelas.prn Perkelas.pdf
$ ps2pdf semuaguru.prn semuaguru.pdf
$ ps2pdf Perguru.prn Perguru.pdf
$ pdftk Perguru.pdf cat 1-16east output Perguru_ok.pdf
$ pdftk semuaguru.pdf cat 1-2east output semuaguru_ok.pdf
$ pdftk Perkelas.pdf cat 1-7east output Perkelas_ok.pdf