Drupal 7: File Status Permanent

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.