Custom PHP scripts can be automatically executed when the users perform one of the many monitored actions.
For example, to automatically run custom PHP code after a file is uploaded, you can simply place a PHP file named “upload.php
” inside the folder “customizables/events/
”.
Here's an example script:
Set file permissions after upload:
<?php chmod($data['full_path'], 0644);
Scan a file with ClamAV:
<?php if ($data['filesize'] > 0) { $pathToClamAV = 'clamscan'; $command = \FileRun\Utils\CLI::escapeshellcmd($pathToClamAV)." ".escapeshellarg($data['full_path']); $return_text = []; $return_code = 0; exec($command, $return_text, $return_code); $return_text = implode("\n", $return_text); if (!str_contains($return_text, 'Scanned files: 1')) { jsonOutput([ 'success' => false, 'skip' => true, 'msg' => 'No files were scanned' ]); } else if (!str_contains($return_text, 'Infected files: 0')) { jsonOutput([ 'success' => false, 'skip' => true, 'msg' => 'Viruses were found inside this file' ]); } }
In the above, you might want to make sure ClamAV daemon is running and use “clamdscan” instead, to speed this process up. You might also want to add command line options for handling the file (move or remove it).
Debug $data
for the available information.
The following can be used to find out what filename should you use for the event PHP script.
//more used 'upload' => 'File uploaded', 'receive_upload' => 'File received (via upload)', 'receive_copy' => 'File received (via copy)', 'receive_move' => 'File received (via move)', 'folder_receive_copy' => 'Folder received (via copy)', 'folder_receive_move' => 'Folder received (via move)', 'download' => 'File downloaded', 'provide_download' => 'File downloaded by another user', 'preview' => 'File previewed', 'weblink_access' => 'WebLink folder access', 'weblink_download' => 'WebLink download', 'weblink_upload' => 'File received (via WebLink)', 'shared_folder_available' => 'New shared folder available', 'shared_file_available' => 'New shared file available', 'comment_added' => 'File comment added', 'comment_received' => 'File comment received', 'metadata_changed' => 'Metadata changed', 'login' => 'Login', 'folder_shared' => 'Folder shared', 'file_shared' => 'File shared', 'weblink_create' => 'WebLink created', 'file_encrypted' => 'File encrypted', 'file_decrypted' => 'File decrypted', 'label_set' => 'Label changed', 'label_received' => 'Label received', 'star_set' => 'Star added', 'star_removed' => 'Star removed', 'collection_created' => 'Collection created', 'collection_add_item' => 'Item added to collection', 'collection_removed' => 'Collection removed', 'collection_item_removed' => 'Item removed from collection', 'collection_renamed' => 'Collection renamed', //less used 'weblink_update' => 'WebLink modified', 'weblink_remove' => 'WebLink removed', 'logout' => 'Logout', 'login_failed' => 'Login failed', 'login_failed_account_deactivated' => 'Account deactivated', 'password_changed' => 'Password changed', 'user_manually_activated' => 'User manual activation', 'user_manually_deactivated' => 'User manual deactivation', 'comment_removed' => 'File comment removed', 'folder_unshared' => 'Folder unshared', 'file_unshared' => 'File unshared', //successful file actions 'file_moved' => 'File moved', 'file_copied' => 'File copied', 'file_deleted' => 'File deleted', 'deleted_file_restored' => 'Restored deleted file', 'trash_delete_file' => 'File permanently deleted', 'file_renamed' => 'File renamed', 'zip_files' => 'Files zipped', 'file_sent_by_email' => 'File sent by email', 'file_locked' => 'File locked', 'file_unlocked' => 'File unlocked', 'version_restored' => 'File version restored', 'version_deleted' => 'File version deleted', 'archive_extracted' => 'Archive extracted', //successful folder actions 'new_folder' => 'New folder created', 'folder_moved' => 'Folder moved', 'folder_deleted' => 'Folder deleted', 'deleted_folder_restored' => 'Restored deleted folder', 'trash_delete_folder' => 'Folder permanently deleted', 'folder_renamed' => 'Folder renamed', 'folder_copied' => 'Folder copied', 'trash_empty' => 'Trash emptied', 'trash_empty_fail' => 'Failed to empty trash', //failed file actions 'upload_failed' => 'Upload failed', 'download_failed' => 'Download failed', 'weblink_upload_failed' => 'WebLink upload failed', 'file_copy_failed' => 'Failed to copy file', 'file_deletion_failed' => 'Failed to delete file', 'file_move_failed' => 'Failed to move file', 'failed_file_rename' => 'Failed to rename file', 'zip_files_failed' => 'Failed to zip files', 'file_lock_failed' => 'Failed to lock file', 'file_unlock_failed' => 'Failed to unlock file', 'failed_to_add_comment' => 'Failed to add comment to file', 'failed_to_remove_comment' => 'Failed to remove comment from file', 'version_restoration_failed' => 'Failed to restore file version', 'version_deletion_failed' => 'Failed to delete file version', //failed folder actions 'new_folder_failed' => 'Failed to create new folder', 'failed_folder_rename' => 'Failed to rename folder', 'folder_copy_failed' => 'Failed to copy folder', 'folder_deletion_failed' => 'Failed to delete folder', 'folder_move_failed' => 'Failed to move folder', //failed collection action 'collection_create_failed' => 'Failed to create collection', 'collection_add_item_failed' => 'Failed to add item to collection', 'collection_removal_failed' => 'Collection removal failed', 'collection_item_removal_failed' => 'Failed to remove collection item', 'collection_rename_failed' => 'Failed to rename collection', //misc 'folder_notification_settings_changed' => 'Folder notification settings changed', 'new_user_registration' => 'New user registration', 'password_recovery' => 'Password recovery', //administrative 'user_added' => 'User added', 'guest_user_added' => 'Guest user added', 'user_edited' => 'User edited', 'user_deleted' => 'User deleted', 'role_added' => 'Role added', 'role_edited' => 'Role edited', 'role_deleted' => 'Role deleted', 'space_quota_warning' => 'Space quota warning', 'user_added_to_group' => 'User added to group', 'user_removed_from_group' => 'User removed from group'
To automatically run custom PHP code before a file is downloaded, you can simply place a PHP file named “file.download.php
” inside the folder “customizables/events/
”.
To prevent the download action with an custom error message, here is a sample code:
<?php // Your business logic goes here // Return an Array like the following for preventing the action from continuing return [ 'error' => [ 'private' => 'The user is not allowed', //used for logging 'public' => 'You are not allowed to download this file' //shown to user ] ];
Here is a complete list of hook names:
folder.read folder.download folder.create folder.copy folder.move folder.rename folder.delete folder.metadata.read folder.metadata.write folder.comments.read folder.comments.write folder.star folder.notifications.change folder.share folder.weblink.info folder.weblink file.weblink folder.zip file.read file.download file.preview file.write file.write.string file.write.upload file.write.move file.write.copy file.move file.rename file.copy file.delete file.extract file.metadata.read file.metadata.write file.comments.read file.comments.write file.star file.notifications.change file.share file.weblink.info file.zip collection.add.folder collection.add.collection collection.add.file collection.remove.item collection.create collection.remove collection.rename collection.item.read collection.read collection.weblink.info collection.weblink