I am currently working on codeIgniter 3 calendar library where I can add new rows of information to database on each day of the month
If a day has 2 rows that are inserted I should be able to see the two calendar events on that day.
2015-12-25 has to rows as shown in image.
I would like to be able to show instead of just one event but to show what ever is on that day.
Question: How could I get the get_calendar_data function to be able to get rows that are on that day of calendar. Currently on 2015-12-25 it only displays one row.
Get Data Function
public function get_calendar_data($year, $month) {
$cell_data = array();
$query = $this->db->get('calendar');
if ($query->num_rows() > 0) {
$row = $query->row();
$this->db->select('*');
$this->db->from('calendar');
$this->db->where('year', $year);
$this->db->where('month', $month);
$this->db->where('day', $row->day);
$query = $this->db->get();
foreach ($query->result() as $result) {
$cell_data[$result->day] = $result->data;
}
return $cell_data;
}
}
Controller
<?php
class Calendar extends MX_Controller {
public function __construct() {
parent::__construct();
$this->load->model('dashboard/model_calendar');
$this->load->library('calendar');
}
public function index() {
if ($this->uri->segment(3) == FALSE) {
$year = date('Y');
} else {
$year = $this->uri->segment(3);
}
$data['year'] = $year;
if ($this->uri->segment(4) == FALSE) {
$month = date('m');
} else {
$month = $this->uri->segment(4);
}
$data['month'] = $month;
$prefs = array(
'start_day' => 'monday',
'show_next_prev' => true,
'day_type' => 'long',
'next_prev_url' => base_url('dashboard/calendar')
);
$prefs['template'] = '
{table_open}<div class="table-responsive"><table border="0" cellpadding="0" cellspacing="0" class="table table-striped table-bordered calendar">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><i class="fa fa-chevron-left fa-2x "></i></a></th>{/heading_previous_cell}
{heading_title_cell}<th class="text-center" colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th class="text-right"><a href="{next_url}"><i class="fa fa-chevron-right fa-2x"></i></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr class="days">{/cal_row_start}
{cal_cell_start}<td class="day">{/cal_cell_start}
{cal_cell_content}
<div class="day_number">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content}
{cal_cell_content_today}
<div class="day_number highlight">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content_today}
{cal_cell_no_content}
<div class="day_number">{day}</div>
{/cal_cell_no_content}
{cal_cell_no_content_today}
<div class="day_number highlight">{day}</div>
{/cal_cell_no_content_today}
{cal_cell_blank} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table></div>{/table_close}
';
$this->calendar->initialize($prefs);
$this->delete_calendar_event();
if ($this->input->post('day')) {
//if ($this->check_calendar_event($year, $month, $this->input->post('day'))) {
// $this->update_calendar_event($year, $month);
//} else {
$this->add_calendar_event($year, $month);
//}
}
$data = $this->get_calendar_data($year, $month);
$data['calendar'] = $this->calendar->generate($year, $month, $data);
if ($this->uri->segment(3) == TRUE) {
$data['view_more'] = site_url('report/events/'. $year .'/'. $month);
} else {
$data['view_more'] = site_url('report/events');
}
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
//echo $date;
// echo '<br/>';
//echo $this->test();
$this->load->view('dashboard/calender_view', $data);
}
public function test() {
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
$this->db->where('date <', $date);
$query = $this->db->get('calendar');
return $query->num_rows();
}
public function add_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'date' => $date,
'data' => $this->input->post('event_data')
);
$this->db->insert('calendar', $calendar);
}
public function update_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'data' => $this->input->post('event_data')
);
$this->db->where('date', $date);
$this->db->update('calendar', $calendar);
}
public function delete_calendar_event() {
$this->db->where("date <", date('Y-m-d'));
$this->db->or_where('data', '');
$this->db->delete('calendar');
}
public function get_calendar_data($year, $month) {
$cell_data = array();
$query = $this->db->get('calendar');
if ($query->num_rows() > 0) {
$row = $query->row();
$this->db->select('*');
$this->db->from('calendar');
$this->db->where('year', $year);
$this->db->where('month', $month);
$this->db->where('day', $row->day);
$query = $this->db->get();
foreach ($query->result() as $result) {
$cell_data[$result->day] = $result->data;
}
return $cell_data;
}
}
public function check_calendar_event($year, $month, $day) {
$date = $year .'-'. $month .'-'. $day;
$this->db->select('year, month, day');
$this->db->from('calendar');
$this->db->where('date', $date);
$results = $this->db->count_all_results();
return $results;
}
public function check_calendar_event_date() {
}
}
After a long time searching the web and trying out new things I found that this code function array_key_exists below lets me get multiple events for each day.
public function get_events($year, $month) {
$calendar = array();
$this->db->where('year', $year);
$this->db->where('month', $month);
$query = $this->db->get('calendar');
$results = $query->result_array();
foreach ($results as $event) {
if (array_key_exists($event['day'], $calendar)) {
$calendar[$event['day']] = $calendar[$event['day']] .'<ul class="list-unstyled"><li>'. anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
} else {
$calendar[$event['day']] = '<ul class="list-unstyled"><li>' . anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
}
}
return $calendar;
}
Ash shown here in image working:
Controller
<?php
class Calendar extends MX_Controller {
public function __construct() {
parent::__construct();
$this->load->model('dashboard/model_calendar');
$this->load->library('calendar');
}
public function index() {
if ($this->uri->segment(3) == FALSE) {
$year = date('Y');
} else {
$year = $this->uri->segment(3);
}
$data['year'] = $year;
if ($this->uri->segment(4) == FALSE) {
$month = date('m');
} else {
$month = $this->uri->segment(4);
}
$data['month'] = $month;
$prefs = array(
'start_day' => 'monday',
'show_next_prev' => true,
'day_type' => 'long',
'next_prev_url' => base_url('dashboard/calendar')
);
$prefs['template'] = '
{table_open}<div class="table-responsive"><table border="0" cellpadding="0" cellspacing="0" class="table table-striped table-bordered calendar">{/table_open}
{heading_row_start}<tr>{/heading_row_start}
{heading_previous_cell}<th><a href="{previous_url}"><i class="fa fa-chevron-left fa-2x "></i></a></th>{/heading_previous_cell}
{heading_title_cell}<th class="text-center" colspan="{colspan}">{heading}</th>{/heading_title_cell}
{heading_next_cell}<th class="text-right"><a href="{next_url}"><i class="fa fa-chevron-right fa-2x"></i></a></th>{/heading_next_cell}
{heading_row_end}</tr>{/heading_row_end}
{week_row_start}<tr>{/week_row_start}
{week_day_cell}<td>{week_day}</td>{/week_day_cell}
{week_row_end}</tr>{/week_row_end}
{cal_row_start}<tr class="days">{/cal_row_start}
{cal_cell_start}<td class="day">{/cal_cell_start}
{cal_cell_content}
<div class="day_number">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content}
{cal_cell_content_today}
<div class="day_number highlight">{day}</div>
<div class="content" style="margin-top: 10px;">{content}</div>
{/cal_cell_content_today}
{cal_cell_no_content}
<div class="day_number">{day}</div>
{/cal_cell_no_content}
{cal_cell_no_content_today}
<div class="day_number highlight">{day}</div>
{/cal_cell_no_content_today}
{cal_cell_blank} {/cal_cell_blank}
{cal_cell_end}</td>{/cal_cell_end}
{cal_row_end}</tr>{/cal_row_end}
{table_close}</table></div>{/table_close}
';
$this->calendar->initialize($prefs);
$this->model_calendar->delete_calendar_event($year, $month);
if ($this->input->post('day')) {
if ($this->model_calendar->check_calendar_event($year, $month, $this->input->post('day'))) {
$this->model_calendar->update_calendar_event($year, $month);
} else {
$this->vadd_calendar_event($year, $month);
}
}
$events = $this->model_calendar->get_events($year, $month);
$data['calendar'] = $this->calendar->generate($year, $month, $events);
if ($this->uri->segment(3) == TRUE) {
$data['view_more'] = site_url('report/events/'. $year .'/'. $month);
} else {
$data['view_more'] = site_url('report/events');
}
$this->load->view('dashboard/calender_view', $data);
}
}
Model
<?php
class Model_calendar extends CI_Model {
public function test() {
$date = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 3, date('Y')));
$this->db->where('date <', $date);
$query = $this->db->get('calendar');
return $query->num_rows();
}
public function add_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'date' => $date,
'data' => $this->input->post('event_data')
);
$this->db->insert('calendar', $calendar);
}
public function update_calendar_event($year, $month) {
$date = $year .'-'. $month .'-'. $this->input->post('day');
$calendar = array(
'year' => $year,
'month' => $month,
'day' => $this->input->post('day', TRUE),
'data' => $this->input->post('event_data')
);
$this->db->where('date', $date);
$this->db->update('calendar', $calendar);
}
public function delete_calendar_event() {
$this->db->where("date <", date('Y-m-d'));
$this->db->or_where('data', '');
$this->db->delete('calendar');
}
public function get_events($year, $month) {
$calendar = array();
$this->db->where('year', $year);
$this->db->where('month', $month);
$query = $this->db->get('calendar');
$results = $query->result_array();
foreach ($results as $event) {
if (array_key_exists( $event['day'], $calendar ) ) {
$calendar[$event['day']] = $calendar[$event['day']] .'<ul class="list-unstyled"><li>'. anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
} else {
$calendar[$event['day']] = '<ul class="list-unstyled"><li>' . anchor(base_url() .'report/events/'. $year .'/'. $month .'/'. $event['calendar_id'], $event['data']) . '</li></ul>';
}
}
return $calendar;
}
public function check_calendar_event($year, $month, $day) {
$date = $year .'-'. $month .'-'. $day;
$this->db->select('year, month, day');
$this->db->from('calendar');
$this->db->where('date', $date);
$results = $this->db->count_all_results();
return $results;
}
public function check_calendar_event_date() {
}
}