Wednesday, 29 October 2025

tabel di install.xml dan di DB beda

 

Betul, Guru Duan. install.xml Anda saat ini hanya mendefinisikan 3 tabel:

  • local_jurnalmengajar

  • local_jurnalmengajar_suratizin

  • local_jurnallayananbk

Sementara di DB ada 9 tabel:

  • mdl_local_jm_nilaihariantidak ada di install.xml

  • mdl_local_jurnalguruwalitidak ada

  • mdl_local_jurnallayananbk ← sudah ada

  • mdl_local_jurnalmengajar ← sudah ada

  • mdl_local_jurnalmengajar_bebantidak ada

  • mdl_local_jurnalmengajar_suratizin ← sudah ada

  • mdl_local_jurnalmengajar_suratizingurutidak ada

  • mdl_local_jurnalpembinaantidak ada

  • mdl_local_jurnalpramukatidak ada

Jadi, ada 6 tabel “local_…” yang tidak tercantum di install.xml.

Apa artinya?

  • install.xml hanya dipakai saat instalasi baru plugin.

  • Perubahan setelah itu harus lewat db/upgrade.php (Moodle tidak pernah menghapus/menurunkan skema otomatis untuk mencegah kehilangan data).

  • Karena sebagian tabel lahir dari versi sebelumnya/SQL manual/upgrade steps, DB Anda bisa lebih “kaya” dari install.xml.

Rekomendasi aman

  1. Konsolidasikan skema: pastikan semua tabel yang memang bagian plugin masuk ke install.xml dan/atau dibuat lewat upgrade.php.

    • Pilihan A (disarankan): Lengkapi install.xml dengan definisi 6 tabel yang belum ada, sehingga instalasi baru akan lengkap.

    • Pilihan B: Biarkan install.xml tetap minimal, tapi pastikan upgrade.php meng-create tabel-tabel tersebut ketika upgrade dari versi lawas.

  2. Jangan drop tabel “tambahan” kecuali Anda yakin tidak dipakai. Selalu backup dulu:

    mysqldump -u root -p moodle mdl_local_jurnalguruwali mdl_local_jurnalpembinaan ... > backup_local_extra.sql
    

Cara cepat sinkron

  • XMLDB Editor (Site administration → Development → XMLDB editor)
    Buat/rapikan definisi tabel-tabel yang belum ada (nama tanpa prefix mdl_).

  • Contoh kerangka install.xml untuk satu tabel yang belum ada (sesuaikan kolomnya):

    <TABLE NAME="local_jurnalmengajar_beban" COMMENT="Beban jam mengajar per guru/kelas">
      <FIELDS>
        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true"/>
        <FIELD NAME="kelas" TYPE="char" LENGTH="20" NOTNULL="true"/>
        <FIELD NAME="jam_per_minggu" TYPE="int" LENGTH="3" NOTNULL="true" DEFAULT="0"/>
        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0"/>
      </FIELDS>
      <KEYS>
        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
        <KEY NAME="userid_fk" TYPE="foreign" FIELDS="userid" REFTABLE="user" REFFIELDS="id"/>
      </KEYS>
    </TABLE>
    
  • Contoh upgrade.php untuk membuat tabel jika belum ada (aman untuk site yang sudah jalan):

    if ($oldversion < 2025102901) {
        $table = new xmldb_table('local_jurnalmengajar_beban');
    
        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
        $table->add_field('kelas', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null);
        $table->add_field('jam_per_minggu', XMLDB_TYPE_INTEGER, '3', null, XMLDB_NOTNULL, null, '0');
        $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
    
        $table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
        $table->add_key('userid_fk', XMLDB_KEY_FOREIGN, ['userid'], 'user', ['id']);
    
        if (!$dbman->table_exists($table)) {
            $dbman->create_table($table);
        }
    
        upgrade_plugin_savepoint(true, 2025102901, 'local', 'jurnalmengajar');
    }
    

    Ulangi pola itu untuk:

    • local_jurnalguruwali

    • local_jurnalmengajar_suratizinguru

    • local_jurnalpembinaan

    • local_jurnalpramuka

    • local_jm_nilaiharian

Tips teknis

  • Prefix mdl_: di XML jangan pakai mdl_; Moodle menambahkan prefix otomatis sesuai $CFG->prefix.

  • VERSION & version.php: setelah memperbarui install.xml/upgrade.php, naikkan $plugin->version di version.php agar langkah upgrade dieksekusi.

  • Audit cepat kolom: untuk menulis skema akurat, lihat struktur tiap tabel:

    DESCRIBE mdl_local_jurnalguruwali;
    DESCRIBE mdl_local_jurnalmengajar_suratizinguru;
    DESCRIBE mdl_local_jurnalpembinaan;
    DESCRIBE mdl_local_jurnalpramuka;
    DESCRIBE mdl_local_jm_nilaiharian;
    DESCRIBE mdl_local_jurnalmengajar_beban;
    

    Samakan tipe/NOT NULL/default/foreign key di XML/upgrade.

Kalau Guru mau, saya bisa bantu tuliskan blok XML lengkap untuk ke-6 tabel itu berdasarkan output DESCRIBE masing-masing (tinggal ditempel di sini).

Share:

0 comments:

Post a Comment