diff --git a/application/controllers/Debug.php b/application/controllers/Debug.php index 1d60cbd51..793d53567 100644 --- a/application/controllers/Debug.php +++ b/application/controllers/Debug.php @@ -12,6 +12,7 @@ class Debug extends CI_Controller { /* User Facing Links to Backup URLs */ public function index() { + $this->load->library('Permissions'); $this->load->helper('file'); $this->load->model('MigrationVersion'); @@ -19,15 +20,15 @@ class Debug extends CI_Controller { $data['migration_version'] = $this->MigrationVersion->getMigrationVersion(); // Test writing to backup folder - $backup_folder = $this->is_really_writable('backup'); + $backup_folder = $this->permissions->is_really_writable('backup'); $data['backup_folder'] = $backup_folder; // Test writing to updates folder - $updates_folder = $this->is_really_writable('updates'); + $updates_folder = $this->permissions->is_really_writable('updates'); $data['updates_folder'] = $updates_folder; // Test writing to uploads folder - $uploads_folder = $this->is_really_writable('uploads'); + $uploads_folder = $this->permissions->is_really_writable('uploads'); $data['uploads_folder'] = $uploads_folder; $data['page_title'] = "Debug"; @@ -37,31 +38,4 @@ class Debug extends CI_Controller { $this->load->view('interface_assets/footer'); } - private function is_really_writable($folder) - { - // Get the absolute path to the folder - $path = FCPATH . $folder; - - // Check if the folder exists - if (!file_exists($path)) { - return false; - } - - // Check if the folder is writable - if (is_writable($path)) { - // Check if the subdirectories are writable (recursive check) - $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); - foreach ($iterator as $item) { - if ($item->isDir() && basename($item->getPathName()) != '..') { - if (!is_writable($item->getRealPath())) { - return false; - } - } - } - - return true; - } - - return false; - } } diff --git a/application/controllers/Lotw.php b/application/controllers/Lotw.php index 4bb744ee2..80859adc4 100644 --- a/application/controllers/Lotw.php +++ b/application/controllers/Lotw.php @@ -38,6 +38,7 @@ class Lotw extends CI_Controller { | */ public function index() { + $this->load->library('Permissions'); $this->load->model('user_model'); if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } @@ -55,6 +56,10 @@ class Lotw extends CI_Controller { // Set Page Title $data['page_title'] = "Logbook of the World"; + // Check folder permissions + $uploads_folder = $this->permissions->is_really_writable('uploads'); + $data['uploads_folder'] = $uploads_folder; + // Load Views $this->load->view('interface_assets/header', $data); $this->load->view('lotw_views/index'); diff --git a/application/language/bulgarian/lotw_lang.php b/application/language/bulgarian/lotw_lang.php index 8a96496f5..b7fac293b 100644 --- a/application/language/bulgarian/lotw_lang.php +++ b/application/language/bulgarian/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/chinese_simplified/lotw_lang.php b/application/language/chinese_simplified/lotw_lang.php index 5b53957dc..8dcb516e6 100644 --- a/application/language/chinese_simplified/lotw_lang.php +++ b/application/language/chinese_simplified/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = '至少有一个LoTW证书已经过期!'; // Lotw User $lang['lotw_user'] = '这个电台使用 LOTW'; $lang['lotw_last_upload'] = '最后一次上传是'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/czech/lotw_lang.php b/application/language/czech/lotw_lang.php index 8ddc26ea2..a8b167a35 100644 --- a/application/language/czech/lotw_lang.php +++ b/application/language/czech/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/dutch/lotw_lang.php b/application/language/dutch/lotw_lang.php index 1f151d667..d7c2488a8 100644 --- a/application/language/dutch/lotw_lang.php +++ b/application/language/dutch/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/english/lotw_lang.php b/application/language/english/lotw_lang.php index abaeacddf..ce3d63fe2 100644 --- a/application/language/english/lotw_lang.php +++ b/application/language/english/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/finnish/lotw_lang.php b/application/language/finnish/lotw_lang.php index e8b8853da..9f10ca4f2 100644 --- a/application/language/finnish/lotw_lang.php +++ b/application/language/finnish/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'Vähintään yksi LoTW:n kutsumerkin varmenteesi o // Lotw User $lang['lotw_user'] = 'Tämä asmea käyttää LoTW-palvelua. Viimeinen yhteyksien lähetys oli'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/french/lotw_lang.php b/application/language/french/lotw_lang.php index de9de8fc8..3b14f3e6e 100644 --- a/application/language/french/lotw_lang.php +++ b/application/language/french/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = "Au moins un de vos certificats LoTW est expiré !" // Lotw User $lang['lotw_user'] = "Cette station utilise LoTW"; $lang['lotw_last_upload'] = "Dernier téléchargement"; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/german/lotw_lang.php b/application/language/german/lotw_lang.php index fde758d20..3b281051a 100644 --- a/application/language/german/lotw_lang.php +++ b/application/language/german/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'Mindestens eines deiner LoTW-Zertifikate ist abgel // Lotw User $lang['lotw_user'] = 'Diese Station nutzt LoTW.'; $lang['lotw_last_upload'] = 'Letzter Upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Das Upload-Verzeichnis ist nicht beschreibbar. Bitte kontaktiere den Administrator.'; diff --git a/application/language/greek/lotw_lang.php b/application/language/greek/lotw_lang.php index fb052d09f..5bdc75bbf 100644 --- a/application/language/greek/lotw_lang.php +++ b/application/language/greek/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'Τουλάχιστον ένα από τα πιστ // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/italian/lotw_lang.php b/application/language/italian/lotw_lang.php index 68a2a940d..01dca4701 100644 --- a/application/language/italian/lotw_lang.php +++ b/application/language/italian/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/polish/lotw_lang.php b/application/language/polish/lotw_lang.php index 05e84dd89..e2865f791 100644 --- a/application/language/polish/lotw_lang.php +++ b/application/language/polish/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/russian/lotw_lang.php b/application/language/russian/lotw_lang.php index 81361366b..43b797c00 100644 --- a/application/language/russian/lotw_lang.php +++ b/application/language/russian/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'Один из ваших сертификатов // Lotw User $lang['lotw_user'] = 'Эта станция использует LoTW.'; $lang['lotw_last_upload'] = 'Последняя загрузка'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/spanish/lotw_lang.php b/application/language/spanish/lotw_lang.php index d8051b65d..5776ddd0f 100644 --- a/application/language/spanish/lotw_lang.php +++ b/application/language/spanish/lotw_lang.php @@ -64,3 +64,6 @@ $lang['lotw_last_upload'] = 'Última subida'; $lang['lotw_active'] = 'activos'; $lang['lotw_not_found'] = 'no encontrado'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/swedish/lotw_lang.php b/application/language/swedish/lotw_lang.php index d45d6aef9..eba3a91a8 100644 --- a/application/language/swedish/lotw_lang.php +++ b/application/language/swedish/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'Minst ett av dina LoTW-certifikat har löpt ut!'; // Lotw User $lang['lotw_user'] = 'Denna station använder LoTW. Den senaste uppladdningen var'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/language/turkish/lotw_lang.php b/application/language/turkish/lotw_lang.php index 2728c3591..3c519eb29 100644 --- a/application/language/turkish/lotw_lang.php +++ b/application/language/turkish/lotw_lang.php @@ -61,3 +61,6 @@ $lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired! // Lotw User $lang['lotw_user'] = 'This station uses LoTW.'; $lang['lotw_last_upload'] = 'Last upload'; + +// Upload folder permissions +$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.'; diff --git a/application/libraries/Permissions.php b/application/libraries/Permissions.php new file mode 100644 index 000000000..e9d0b4ab1 --- /dev/null +++ b/application/libraries/Permissions.php @@ -0,0 +1,37 @@ +isDir() && basename($item->getPathName()) != '..') { + if (!is_writable($item->getRealPath())) { + return false; + } + } + } + + return true; + } + + return false; + } +} + +/* End of file Permissions.php */ diff --git a/application/views/lotw_views/index.php b/application/views/lotw_views/index.php index 28f0a5b99..64a53a166 100644 --- a/application/views/lotw_views/index.php +++ b/application/views/lotw_views/index.php @@ -1,4 +1,9 @@