load->model('user_model'); if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } // Load language files $this->lang->load('notes'); } private function is_public_station_diary_enabled() { $configValue = $this->config->item('public_station_diary_enabled'); if ($configValue === NULL) { $configValue = TRUE; } $optionValue = $this->optionslib->get_option('public_station_diary_enabled'); if ($optionValue !== NULL && $optionValue !== '') { return ($optionValue === '1' || $optionValue === 'true' || $optionValue === 1 || $optionValue === TRUE); } return (bool)$configValue; } private function handle_diary_images_upload($note_id) { if (!isset($_FILES['diary_images']) || !isset($_FILES['diary_images']['name']) || !is_array($_FILES['diary_images']['name'])) { return null; } $names = array_filter($_FILES['diary_images']['name']); if (empty($names)) { return null; } $noteResult = $this->note->view($note_id); if ($noteResult->num_rows() === 0) { return 'Unable to attach images: note not found.'; } $noteRow = $noteResult->row(); if (strtoupper(trim((string)$noteRow->cat)) !== 'STATION DIARY') { return 'Images are only supported for Station Diary entries.'; } $user_id = (int)$this->session->userdata('user_id'); $uploadDir = FCPATH . 'uploads/diary/' . $user_id . '/'; if (!is_dir($uploadDir)) { if (!@mkdir($uploadDir, 0755, TRUE)) { return 'Unable to create upload directory.'; } } $this->load->library('upload'); $this->load->library('image_lib'); $errors = array(); $savedImages = array(); $totalFiles = count($_FILES['diary_images']['name']); for ($i = 0; $i < $totalFiles; $i++) { if (empty($_FILES['diary_images']['name'][$i])) { continue; } $_FILES['single_diary_image']['name'] = $_FILES['diary_images']['name'][$i]; $_FILES['single_diary_image']['type'] = $_FILES['diary_images']['type'][$i]; $_FILES['single_diary_image']['tmp_name'] = $_FILES['diary_images']['tmp_name'][$i]; $_FILES['single_diary_image']['error'] = $_FILES['diary_images']['error'][$i]; $_FILES['single_diary_image']['size'] = $_FILES['diary_images']['size'][$i]; $uploadConfig = array( 'upload_path' => $uploadDir, 'allowed_types' => 'jpg|jpeg|png|gif|webp', 'max_size' => 2048, 'encrypt_name' => TRUE, 'detect_mime' => TRUE, 'mod_mime_fix' => TRUE, ); $this->upload->initialize($uploadConfig); if (!$this->upload->do_upload('single_diary_image')) { $errors[] = trim(strip_tags($this->upload->display_errors('', ''))); continue; } $uploadData = $this->upload->data(); $imageConfig = array( 'image_library' => 'gd2', 'source_image' => $uploadData['full_path'], 'maintain_ratio' => TRUE, 'quality' => '80%', 'master_dim' => 'width', 'width' => 1600, 'height' => 1600, ); $this->image_lib->clear(); $this->image_lib->initialize($imageConfig); $this->image_lib->resize(); $savedImages[] = array( 'filename' => 'uploads/diary/' . $user_id . '/' . $uploadData['file_name'], ); } if (!empty($savedImages)) { $this->note->add_diary_images($note_id, $savedImages); } if (!empty($errors)) { return implode(' ', $errors); } return null; } /* Displays all notes in a list */ public function index() { $this->load->model('note'); $filters = array( 'search' => $this->input->get('q', TRUE), 'category' => $this->input->get('category', TRUE), 'date_from' => $this->input->get('date_from', TRUE), 'date_to' => $this->input->get('date_to', TRUE) ); $data['filters'] = $filters; $data['categories'] = $this->note->list_categories(); $data['notes'] = $this->note->list_all(null, $filters); $data['public_station_diary_enabled'] = $this->is_public_station_diary_enabled(); $data['public_diary_url'] = site_url('station-diary/' . rawurlencode((string)$this->session->userdata('user_callsign'))); // Check if there are any Station Diary entries $diary_filter = array('category' => 'Station Diary'); $diary_entries = $this->note->list_all(null, $diary_filter); $data['has_diary_entries'] = $diary_entries->num_rows() > 0; $data['page_title'] = "Notes"; $this->load->view('interface_assets/header', $data); $this->load->view('notes/main'); $this->load->view('interface_assets/footer'); } /* Provides function for adding notes to the system. */ function add() { $this->load->model('note'); $this->load->model('logbooks_model'); $data['categories'] = $this->note->list_categories(); $data['public_station_diary_enabled'] = $this->is_public_station_diary_enabled(); $data['user_logbooks'] = $this->logbooks_model->show_all(); $this->load->library('form_validation'); $this->form_validation->set_rules('title', 'Note Title', 'required'); $this->form_validation->set_rules('content', 'Content', 'required'); if ($this->form_validation->run() == FALSE) { $data['page_title'] = "Add Notes"; $this->load->view('interface_assets/header', $data); $this->load->view('notes/add'); $this->load->view('interface_assets/footer'); } else { $note_id = $this->note->add(); $upload_error = $this->handle_diary_images_upload($note_id); if (!empty($upload_error)) { $this->session->set_flashdata('notice', $upload_error); } redirect('notes'); } } /* Quick add note via HTMX (for Station Diary modal) */ function quick_add() { $this->load->model('note'); $this->load->library('form_validation'); $this->form_validation->set_rules('title', 'Note Title', 'required'); $this->form_validation->set_rules('content', 'Content', 'required'); $this->form_validation->set_rules('category', 'Category', 'required'); if ($this->form_validation->run() == FALSE) { echo '