Jadi ceritanya minggu ini saya lagi dalam proses memahami Nextcloud lebih dalam, mulai dari instalasi sampai monitoring. Nah, waktu saya buka Log Reader di Settings, saya menemukan warning yang terus muncul berulang:

Warning ini muncul dalam selang waktu yang berdekatan, sekitar jam 1 siang. Levelnya “Warning” dari aplikasi PHP. Karena penasaran, saya coba telusuri sendiri penyebabnya. Dan ternyata cukup menarik.
Sedikit Teori
Sebelum masuk ke proses troubleshoot-nya, saya mau jelasin dulu beberapa konsep yang relevan biar lebih mudah dipahami.
Apa itu occ? occ adalah command-line tool milik Nextcloud, semacam “remote control” untuk server Nextcloud kalian. Hampir semua konfigurasi, pengecekan, dan perbaikan bisa dilakukan lewat sini tanpa harus buka browser.
Apa itu Undefined array key? Di PHP, ini adalah warning yang muncul ketika sebuah kode mencoba mengakses key tertentu dari sebuah array, tapi key itu tidak ada. Analoginya seperti kalian mencari laci bernama “node” di lemari, tapi lacinya tidak ada โ PHP akan komplain, tapi tidak langsung crash.
Apa itu Destructuring Assignment? Ini adalah cara PHP modern untuk mengambil beberapa nilai dari array sekaligus dalam satu baris. Contohnya:
['nama' => $nama, 'umur' => $umur] = $dataOrang;
Artinya: ambil nilai dari key ‘nama’ masukkan ke variabel ‘nama’ dan key ‘umur’ masuk ke variabel ‘umur’. Kalau salah satu key tidak ada di array-nya, PHP akan kasih warning Undefined array key.
Langkah 1 โ Cek Versi dan Status Aplikasi Notes
Langkah pertama yang saya lakukan adalah mengecek versi aplikasi Notes yang terpasang, sekaligus mencoba update kalau ada versi baru.
sudo -u www-data php /var/www/nextcloud/occ app:list | grep notes
Output:

Lalu saya coba update:
sudo -u www-data php /var/www/nextcloud/occ app:update notes
Output:

Ternyata Notes sudah di versi terbaru. Artinya bug ini bukan karena versi yang ketinggalan, melainkan memang ada di kode versi tersebut. Ini petunjuk bahwa saya perlu masuk lebih dalam ke kodenya.
Langkah 2 โ Lihat Langsung Baris yang Bermasalah
Karena log sudah menunjukkan lokasi persis masalahnya (NoteUtil.php#201), saya langsung buka baris tersebut:
sed -n '201p' /var/www/nextcloud/apps/notes/lib/Service/NoteUtil.php
Output:

Baris ini menggunakan destructuring assignment. Kode ini mengharapkan fungsi getDefaultNotesNode() mengembalikan array yang punya key 'path' dan 'node'. Tapi kalau salah satu key tidak ada, PHP langsung lempar warning. Pertanyaannya sekarang: apa yang sebenarnya dikembalikan oleh fungsi getDefaultNotesNode()?
Langkah 3 โ Cari dan Baca Fungsi Sumbernya
Kemudian saya tanya ClaudeAI fungsi tersebut dan akhirnya disarankan mencari di file SettingsService.php di mana fungsi getDefaultNotesNode itu didefinisikan:
grep -n "getDefaultNotesNode" /var/www/nextcloud/apps/notes/lib/Service/SettingsService.php
Output:

Lalu saya baca isi fungsinya:
nano /var/www/nextcloud/apps/notes/lib/Service/SettingsService.php
Output:

Nah, ketemu. Fungsi getDefaultNotesNode() di SettingsService.php selalu mengembalikan array dengan key 'folder', bukan 'node'. Tapi di NoteUtil.php baris 201, kode justru mengharapkan key 'node'. Ini inkonsistensi yang jelas โ satu file bilang 'folder', file lain ekspektasi 'node'. Inilah penyebab warning yang terus muncul.
Langkah 4 โ Backup File Sebelum Edit
Sebelum mengubah apapun, saya backup file aslinya dulu. Ini kebiasaan yang sebaiknya tidak pernah dilewati:
cp /var/www/nextcloud/apps/notes/lib/Service/NoteUtil.php /var/www/nextcloud/apps/notes/lib/Service/NoteUtil.php.bak
Output:

File backup ini akan berguna kalau edit yang dilakukan ternyata malah memperburuk keadaan. Tinggal restore dari file .bak dan kondisi kembali seperti semula.
Langkah 5 โ Perbaiki Baris
Sekarang saatnya perbaiki. Buka file NoteUtil.php dan cari baris 201:
nano /var/www/nextcloud/apps/notes/lib/Service/NoteUtil.php
Cari baris ini (Ctrl + / lalu ketik 201 untuk langsung ke baris 201 di nano):
Sebelum:

Sesudah:

Simpan dengan Ctrl + X lalu Y dan Enter.
Perubahan yang dilakukan sangat kecil โ hanya mengganti kata 'node' menjadi 'folder' agar sesuai dengan key yang benar-benar dikembalikan oleh fungsi getDefaultNotesNode(). Sekarang destructuring assignment-nya akan berhasil menemukan key yang dicari.
Langkah 6 โ Bersihkan Cache dan Repair
Setelah edit kode, saya jalankan repair untuk membersihkan cache dan memastikan tidak ada efek samping:
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
Output:

Perintah maintenance:repair akan membersihkan cache, memeriksa ulang struktur database, dan menjalankan berbagai perbaikan otomatis. Ini langkah standar setelah melakukan perubahan manual di file Nextcloud.
Langkah 7 โ Verifikasi, Cek Log Lagi
Terakhir, saya buka lagi Notes di browser dan pantau log:
sudo -u www-data php /var/www/nextcloud/occ log:tail
Output:


Warning tidak muncul lagi. Fix berhasil.
Ternyata penyebab warning ini bukan dari konfigurasi server yang salah, bukan dari instalasi yang keliru, dan bukan dari masalah permission. Ini murni bug inkonsistensi nama key di kode aplikasi Notes itu sendiri fungsi di satu file mengembalikan key 'folder', tapi file lain mengharapkan key 'node'.
Hal yang saya pelajari dari troubleshoot kali ini:
- Log Nextcloud sangat informatif dan menunjukkan lokasi masalah dengan tepat (saya pakai cron setiap 5 menit)
- Selalu backup sebelum edit file apapun
- Bug di aplikasi pihak ketiga Nextcloud bisa saja ada meski sudah versi terbaru
sed -n 'Np'adalah cara cepat untuk melihat baris tertentu di file tanpa harus membuka seluruh file

































































