284 lines
11 KiB
PHP
284 lines
11 KiB
PHP
<?php
|
|
defined('BASEPATH') or exit('No direct script access allowed');
|
|
|
|
/**
|
|
* @property CI_Db $db
|
|
* @property CI_Session $session
|
|
* @property CI_Form_validation $form_validation
|
|
* @property CI_Input $input
|
|
* @property CI_Berita_model $berita_model
|
|
* @property CI_Upload $upload
|
|
*/
|
|
|
|
class Berita extends CI_Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->model('berita_model');
|
|
is_logged_in();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$data['title'] = 'Berita';
|
|
$data['berita'] = $this->berita_model->get_data('tb_berita')->result();
|
|
$data['admin'] = $this->db->get_where('admin', ['email' => $this->session->userdata('email')])->row_array();
|
|
|
|
$this->load->view('templates/header', $data);
|
|
$this->load->view('templates/sidebar', $data);
|
|
$this->load->view('admin/berita');
|
|
$this->load->view('templates/footer');
|
|
}
|
|
|
|
public function tambah()
|
|
{
|
|
$data['title'] = 'Tambah Berita';
|
|
$data['berita'] = $this->berita_model->get_data('tb_berita')->result();
|
|
$data['admin'] = $this->db->get_where('admin', ['email' => $this->session->userdata('email')])->row_array();
|
|
|
|
$this->load->view('templates/header', $data);
|
|
$this->load->view('templates/sidebar', $data);
|
|
$this->load->view('admin/tambah_berita', $data);
|
|
$this->load->view('templates/footer');
|
|
}
|
|
|
|
public function tambah_aksi()
|
|
{
|
|
$this->_rules();
|
|
|
|
if ($this->form_validation->run() == FALSE) {
|
|
$this->tambah();
|
|
} else {
|
|
// Konfigurasi upload
|
|
$config['upload_path'] = './assets/img/berita/';
|
|
$config['allowed_types'] = 'jpg|jpeg|png|gif';
|
|
$config['max_size'] = 2048; // 2MB
|
|
|
|
$this->load->library('upload', $config);
|
|
|
|
if (!$this->upload->do_upload('gambar')) {
|
|
// Jika upload gagal
|
|
$this->session->set_flashdata('pesan', '<div class="alert alert-danger">Gagal mengunggah gambar!</div>');
|
|
redirect('berita/tambah');
|
|
} else {
|
|
$gambar = $this->upload->data('file_name');
|
|
$tanggal_input = $this->input->post('tanggal');
|
|
$tanggal_formatted = date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $tanggal_input)));
|
|
$data = array(
|
|
'gambar' => $gambar,
|
|
'judul' => $this->input->post('judul'),
|
|
'deskripsi' => $this->input->post('deskripsi'),
|
|
'tanggal' => $tanggal_formatted
|
|
);
|
|
|
|
$this->berita_model->insert_data($data, 'tb_berita');
|
|
|
|
$this->load->library('Notif');
|
|
$notif = new Notif();
|
|
|
|
$title = 'Nufaku - Berita Terkini';
|
|
$body = $this->input->post('judul');
|
|
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
|
|
if (strpos($host, 'localhost') !== false || strpos($host, '127.0.0.1') !== false) {
|
|
$host = '192.168.0.80:8080'; // Ganti dengan IP kamu
|
|
}
|
|
|
|
$gambar_url = 'http://' . $host . '/admin-nufa/assets/img/berita/' . $gambar;
|
|
|
|
$dataPayload = [
|
|
'type' => 'berita',
|
|
'judul' => $this->input->post('judul'),
|
|
'gambar' => $gambar_url,
|
|
'tanggal' => $tanggal_formatted,
|
|
'deskripsi' => $this->input->post('deskripsi'),
|
|
'from_notif' => 'true'
|
|
];
|
|
|
|
|
|
$tokens = $this->db->get('fcm_tokens')->result();
|
|
|
|
foreach ($tokens as $row) {
|
|
$token = $row->token;
|
|
if (!empty($token)) {
|
|
$response = $notif->send($token, $title, $body, $dataPayload);
|
|
log_message('debug', 'RESPON FCM: ' . print_r($response, true));
|
|
}
|
|
}
|
|
|
|
$this->session->set_flashdata('pesan', '<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
Data berhasil ditambahkan!
|
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span></button></div>');
|
|
redirect('berita');
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function edit($id_berita)
|
|
{
|
|
$this->form_validation->set_rules('judul', 'Judul', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
$this->form_validation->set_rules('deskripsi', 'Deskripsi', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
$this->form_validation->set_rules('tanggal', 'Tanggal', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
|
|
if ($this->form_validation->run() == FALSE) {
|
|
$this->index();
|
|
} else {
|
|
$judul = $this->input->post('judul');
|
|
$deskripsi = $this->input->post('deskripsi');
|
|
$tanggal_input = $this->input->post('tanggal');
|
|
$tanggal_formatted = date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $tanggal_input)));
|
|
// Ambil gambar lama, bahkan jika tidak upload gambar baru
|
|
$berita_lama = $this->berita_model->get_data_by_id($id_berita);
|
|
$gambar_lama = $berita_lama ? $berita_lama->gambar : '';
|
|
$upload_gambar = $_FILES['gambar']['name'];
|
|
|
|
if ($upload_gambar) {
|
|
$config['upload_path'] = 'assets/img/berita/';
|
|
$config['allowed_types'] = 'jpg|jpeg|png|gif';
|
|
$config['max_size'] = 2048;
|
|
$config['encrypt_name'] = TRUE;
|
|
|
|
$this->load->library('upload', $config);
|
|
|
|
if ($this->upload->do_upload('gambar')) {
|
|
// Ambil gambar lama
|
|
$berita_lama = $this->berita_model->get_data_by_id($id_berita); // kamu harus buat fungsi ini kalau belum ada
|
|
$gambar_lama = $berita_lama->gambar;
|
|
|
|
// Hapus gambar lama jika bukan default
|
|
if ($gambar_lama && file_exists(FCPATH . 'assets/img/berita/' . $gambar_lama)) {
|
|
unlink(FCPATH . 'assets/img/berita/' . $gambar_lama);
|
|
}
|
|
|
|
// Simpan nama gambar baru
|
|
$gambar_baru = $this->upload->data('file_name');
|
|
} else {
|
|
$this->session->set_flashdata('pesan', '<div class="alert alert-danger">' . $this->upload->display_errors() . '</div>');
|
|
redirect('berita');
|
|
}
|
|
}
|
|
|
|
// Data array
|
|
$data = array(
|
|
'id_berita' => $id_berita,
|
|
'judul' => $judul,
|
|
'deskripsi' => $deskripsi,
|
|
'tanggal' => $tanggal_formatted,
|
|
);
|
|
|
|
// Jika upload gambar baru, tambahkan ke data
|
|
if (!empty($gambar_baru)) {
|
|
$data['gambar'] = $gambar_baru;
|
|
}
|
|
|
|
$this->berita_model->update_data($data, 'tb_berita');
|
|
|
|
$this->load->library('Notif');
|
|
$notif = new Notif();
|
|
|
|
$title = 'Nufaku - Pembaruan Berita';
|
|
$body = $this->input->post('judul');
|
|
|
|
$gambar = !empty($gambar_baru) ? $gambar_baru : $gambar_lama;
|
|
|
|
// Dapatkan host
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
|
|
// Jika localhost, ganti ke IP lokal kamu (ganti dengan IP sesuai hasil ipconfig)
|
|
$host = $_SERVER['HTTP_HOST']; // bisa jadi 'localhost:8080'
|
|
|
|
if (strpos($host, 'localhost') !== false || strpos($host, '127.0.0.1') !== false) {
|
|
$host = '192.168.0.80:8080'; // Ganti dengan IP kamu
|
|
}
|
|
|
|
// Buat URL gambar yang bisa diakses Android
|
|
$gambar_url = 'http://' . $host . '/admin-nufa/assets/img/berita/' . $gambar;
|
|
|
|
// Payload untuk notifikasi
|
|
$dataPayload = [
|
|
'type' => 'berita',
|
|
'judul' => $judul,
|
|
'gambar' => $gambar_url,
|
|
'tanggal' => $tanggal_formatted,
|
|
'deskripsi' => $deskripsi,
|
|
'from_notif' => 'true'
|
|
];
|
|
|
|
log_message('debug', 'URL GAMBAR: ' . $gambar_url);
|
|
|
|
$tokens = $this->db->get('fcm_tokens')->result();
|
|
|
|
foreach ($tokens as $row) {
|
|
$token = $row->token;
|
|
if (!empty($token)) {
|
|
$response = $notif->send($token, $title, $body, $dataPayload);
|
|
log_message('debug', 'RESPON FCM: ' . print_r($response, true));
|
|
}
|
|
}
|
|
|
|
$this->session->set_flashdata('pesan', '<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
Data berhasil diubah! <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span>
|
|
</button></div>');
|
|
redirect('berita');
|
|
}
|
|
}
|
|
|
|
public function view($id_berita)
|
|
{
|
|
// Load model jika belum diload
|
|
$this->load->model('berita_model');
|
|
|
|
// Ambil data wali santri berdasarkan id_santri dari model
|
|
$data['berita'] = $this->berita_model->get_berita_by_id($id_berita);
|
|
|
|
// Periksa apakah data ditemukan
|
|
if ($data['berita']) {
|
|
// Kirim data ke view untuk ditampilkan dalam modal
|
|
$this->load->view('berita', $data);
|
|
} else {
|
|
// Jika data tidak ditemukan, redirect ke halaman utama dengan pesan error
|
|
$this->session->set_flashdata('pesan', 'Berita tidak ditemukan');
|
|
redirect('berita'); // Ubah sesuai route halaman utama Anda
|
|
}
|
|
}
|
|
|
|
public function _rules()
|
|
{
|
|
$this->form_validation->set_rules('judul', 'Judul', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
$this->form_validation->set_rules('deskripsi', 'Deskripsi', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
$this->form_validation->set_rules('tanggal', 'Tanggal', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
// Validasi manual untuk file
|
|
if (empty($_FILES['gambar']['name'])) {
|
|
$this->form_validation->set_rules('gambar', 'Gambar', 'required', array(
|
|
'required' => '%s harus diisi!!'
|
|
));
|
|
}
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$where = array('id_berita' => $id);
|
|
|
|
$this->berita_model->delete($where, 'tb_berita');
|
|
$this->session->set_flashdata('pesan', '<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
|
Data berhasil dihapus! <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span>
|
|
</button></div>');
|
|
redirect('berita');
|
|
}
|
|
}
|