Postingan ini berkaitan dengan postingan sebelumnya yaitu Drupal 7: Cara Ambil URL File yang Disimpan Melalui Custom Form Halaman Admin.
Pada postingan tersebut, ada bagian snippet yang fungsinya sebagai form handler dari fungsi form submit, sebagai berikut.
function mymodule_set_default_header_image_form_submit($form, &$form_state){ $form['mymodule_default_header']['#file']->status = FILE_STATUS_PERMANENT; file_save($form['mymodule_default_header']['#file']); }
fungsi di atas gunanya untuk membuat file berstatus di system-nya drupal menjadi permanent. Artinya dia tidak akan dihapus saat pembersihan reguler file-file yang dianggap temporary oleh drupal. Tapi ternyata dalam kasus saya tidak berfungsi.
Saya cari-cari di berbagai sumber, akhirnya menemukan solusi yang sudah saya test berhasil dari forum drupal, yaitu mengganti fungsi form handlernya menjadi seperti dibawah:
function mymodule_set_default_header_image_form_submit($form, &$form_state){ global $user; $account = user_load($user->uid); $fid = $form_state['values']['mymodule_default_header']; $file = file_load($fid); $file->status = FILE_STATUS_PERMANENT; file_save($file); file_usage_add($file, 'user', 'user', $account->uid); }
Perbedaan utamanya yaitu pada “file ID” dan “file_usage_add”. pada baris ke-7 ada pemanggilan fungsi untuk memanggil file id yang hendak kita ubah statusnya menjadi permanent (bukan temporary). Selanjutnya baru di-set permanent pada baris ke-8.
Sedangkan baris ke-9 yaitu untuk mendefinisikan file tersebut digunakan oleh “siapa”, agar tidak muncul error “failed reference”.
O iya, sebagai monitoring tool bahwa form handler ini benar-benar dipanggil ketika submit form, bisa menggunakan drupal_set_message drupal.
drupal_set_message(t('The form has been submitted.'));
kalau message ini muncul setelah submit form, berarti fungsi diatas harusnya sudah dijalankan dan status file menjadi permanent.