Adding agenda fullcalendar you can see the preview here: main/calendar/agenda_js.php

skala
Julio Montoya 15 years ago
parent e06d87ddf0
commit 766eff34b9
  1. 228
      main/calendar/agenda.lib.php
  2. 33
      main/calendar/agenda_js.php
  3. 3
      main/css/base.css
  4. 18
      main/inc/ajax/agenda.ajax.php
  5. 40
      main/template/default/agenda/month.tpl

@ -0,0 +1,228 @@
<?php
class Agenda {
function __construct() {
$this->tbl_global_agenda = Database::get_main_table(TABLE_MAIN_SYSTEM_CALENDAR);
$this->tbl_personal_agenda = Database::get_user_personal_table(TABLE_PERSONAL_AGENDA);
$this->events = array();
$this->event_platform_color = 'red';
$this->event_course_color = 'green';
$this->event_session_color = 'blue';
$this->event_personal_color = 'light blue';
}
/**
*
* Get agenda events
* @param string $course_code
* @param int $session_id
* @param int $month
* @param year $year
* @param day $day
* @param type all, global (platform), course
*/
function get_events($start, $end, $user_id) {
$this->get_personal_events($start, $end);
$this->get_platform_events($start, $end);
$my_course_list = CourseManager::get_courses_list_by_user_id(api_get_user_id(), true);
foreach($my_course_list as $course_item) {
$this->get_course_events($start, $end, $course_item);
}
if (!empty($this->events)) {
return json_encode($this->events);
}
return '';
}
function move_event($id, $type, $day_delta, $minute_delta) {
// we convert the hour delta into minutes and add the minute delta
$delta = ($day_delta * 60 * 24) + $minute_delta;
//$table_agenda = Database::get_course_table ( TABLE_AGENDA );
switch($type) {
case 'personal':
$personal_event = $this->get_personal_event($id);
if (!empty($personal_event)) {
$sql = "UPDATE $this->tbl_personal_agenda SET date = DATE_ADD(date,INTERVAL $delta MINUTE), enddate = DATE_ADD(enddate,INTERVAL $delta MINUTE)
WHERE id=".intval($id);
$result = Database::query($sql);
}
break;
}
return 1;
}
function get_personal_event($id) {
// make sure events of the personal agenda can only be seen by the user himself
$user = api_get_user_id();
$sql = " SELECT * FROM ".$this->tbl_personal_agenda." WHERE id=".$id." AND user = ".$user;
$result = Database::query($sql);
$item = null;
if (Database::num_rows($result)==1) {
$item = Database::fetch_array($result);
}
return $item;
}
function get_personal_events($start, $end) {
$start = intval($start);
$end = intval($end);
$start = api_get_utc_datetime($start);
$end = api_get_utc_datetime($end);
$sql = "SELECT * FROM ".$this->tbl_personal_agenda."
WHERE date>='".$start."' AND (enddate <='".$end."' OR enddate IS NULL) ";
$result = Database::query($sql);
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$event = array();
$event['id'] = 'personal_'.$row['id'];
$event['title'] = $row['title'];
$event['className'] = 'personal';
$event['borderColor'] = $event['backgroundColor'] = $this->event_personal_color;
$event['editable'] = true;
if (!empty($row['date']) && $row['date'] != '0000-00-00 00:00:00') {
$event['start'] = $this->format_event_date($row['date']);
}
if (!empty($row['enddate']) && $row['enddate'] != '0000-00-00 00:00:00') {
$event['end'] = $this->format_event_date($row['enddate']);
}
$event['allDay'] = false;
$my_events[] = $event;
$this->events[]= $event;
}
}
return $my_events;
}
function get_platform_events($start, $end) {
$start = intval($start);
$end = intval($end);
$start = api_get_utc_datetime($start);
$end = api_get_utc_datetime($end);
$access_url_id = api_get_current_access_url_id();
$sql = "SELECT * FROM ".$this->tbl_global_agenda."
WHERE start_date>='".$start."' AND end_date<='".$end."' AND access_url_id = $access_url_id ";
$result = Database::query($sql);
$my_events = array();
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$event = array();
$event['id'] = 'platform_'.$row['id'];
$event['title'] = $row['title'];
$event['className'] = 'platform';
$event['allDay'] = 'false';
$event['borderColor'] = $event['backgroundColor'] = $this->event_platform_color;
$event['editable'] = false;
if (!empty($row['start_date']) && $row['start_date'] != '0000-00-00 00:00:00') {
$event['start'] = $this->format_event_date($row['start_date']);
}
if (!empty($row['end_date']) && $row['end_date'] != '0000-00-00 00:00:00') {
$event['end'] = $this->format_event_date($row['end_date']);
$event['allDay'] = false;
} else {
$event['allDay'] = true;
}
$my_events[] = $event;
$this->events[]= $event;
}
}
return $my_events;
}
function get_course_events($start, $end, $course_info, $group_id = 0) {
$group_memberships = GroupManager::get_group_ids($course_info['db_name'], api_get_user_id());
$tlb_course_agenda = Database::get_course_table(TABLE_AGENDA, $course_info['db_name']);
$tbl_property = Database::get_course_table(TABLE_ITEM_PROPERTY, $course_info['db_name']);
$user_id = api_get_user_id();
if (is_array($group_memberships) && count($group_memberships)>0) {
$sql = "SELECT agenda.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.ref
FROM ".$tlb_course_agenda." agenda, ".$tbl_property." ip
WHERE agenda.id = ip.ref ".$show_all_current."
AND ip.tool='".TOOL_CALENDAR_EVENT."'
AND ( ip.to_user_id=$user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") )
AND ip.visibility='1'
";
} else {
if (api_get_user_id()) {
$sql="SELECT agenda.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.ref
FROM ".$tlb_course_agenda." agenda, ".$tbl_property." ip
WHERE agenda.id = ip.ref ".$show_all_current."
AND ip.tool='".TOOL_CALENDAR_EVENT."'
AND ( ip.to_user_id=$user_id OR ip.to_group_id='0')
AND ip.visibility='1'
";
} else {
$sql="SELECT agenda.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.ref
FROM ".$tlb_course_agenda." agenda, ".$tbl_property." ip
WHERE agenda.id = ip.ref ".$show_all_current."
AND ip.tool='".TOOL_CALENDAR_EVENT."'
AND ip.to_group_id='0'
AND ip.visibility='1'
";
}
}
$result = Database::query($sql);
$events = array();
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$event = array();
$event['id'] = 'course_'.$row['id'];
$event['title'] = $row['title'];
$event['className'] = 'course';
$event['allDay'] = 'false';
$event['borderColor'] = $event['backgroundColor'] = $this->event_course_color;
if (isset($row['session_id']) && !empty($row['session_id'])) {
$event['borderColor'] = $event['backgroundColor'] = $this->event_session_color;
}
$event['editable'] = false;
if (!empty($row['start_date']) && $row['start_date'] != '0000-00-00 00:00:00') {
$event['start'] = $this->format_event_date($row['start_date']);
}
if (!empty($row['end_date']) && $row['end_date'] != '0000-00-00 00:00:00') {
$event['end'] = $this->format_event_date($row['end_date']);
$event['allDay'] = false;
} else {
$event['allDay'] = true;
}
$my_events[] = $event;
$this->events[] = $event;
}
}
return $events;
}
function format_event_date($utc_time) {
return date('c', api_strtotime(api_get_local_time($utc_time)));
}
}

@ -0,0 +1,33 @@
<?php
/* For licensing terms, see /license.txt */
/**
* @package chamilo.calendar
*/
/**
* INIT SECTION
*/
// name of the language file that needs to be included
$language_file = array('agenda','group');
// use anonymous mode when accessing this course tool
$use_anonymous = true;
require_once '../inc/global.inc.php';
$htmlHeadXtra[] = api_get_jquery_ui_js();
$htmlHeadXtra[] = api_get_js('fullcalendar/fullcalendar.min.js');
$htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/fullcalendar/fullcalendar.css');
$tpl = new Template();
$tpl->assign('ajax_url', api_get_path(WEB_AJAX_PATH).'agenda.ajax.php');
$content = $tpl->fetch('default/agenda/month.tpl');
$tpl->assign('content', $content);
$template_file = $tpl->get_template('layout/layout_1_col.tpl');
$tpl->display($template_file);

@ -2652,4 +2652,5 @@ div.admin_section h4 {
background : #EFEFEF;
margin:10px 21px;
padding:10px;
}
}

@ -8,12 +8,30 @@ require_once '../global.inc.php';
require_once api_get_path(SYS_CODE_PATH).'calendar/agenda.inc.php';
require_once api_get_path(SYS_CODE_PATH).'calendar/myagenda.inc.php';
require_once api_get_path(SYS_CODE_PATH).'calendar/agenda.lib.php';
api_protect_admin_script();
$action = $_REQUEST['a'];
$agenda = new Agenda();
switch ($action) {
case 'move_event':
$day_delta = $_REQUEST['day_delta'];
$minute_delta = $_REQUEST['minute_delta'];
$type = $_REQUEST['type'][0];
$id = explode('_', $_REQUEST['id']);
$id = $id[1];
$agenda->move_event($id, $type, $day_delta, $minute_delta);
break;
case 'get_events':
$start = $_REQUEST['start'];
$end = $_REQUEST['end'];
$events = $agenda->get_events($start, $end, 1);
echo $events;
break;
case 'get_user_agenda':
if (api_is_allowed_to_edit(null, true)) {
//@todo move this in the agenda class

@ -0,0 +1,40 @@
<script type='text/javascript'>
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: "{$ajax_url}?a=get_events",
eventDrop: function(event, day_delta, minute_delta, all_day, revert_func) {
$.ajax({
url: '{$ajax_url}',
data: {
a: 'move_event', id: event.id, day_delta: day_delta, minute_delta: minute_delta, type: event.className
}
});
},
axisFormat: 'HH(:mm)',
timeFormat: 'HH:mm{ - HH:mm}',
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
}
});
});
</script>
<div id='loading' style='display:none'>{"Loading"|get_lang}...</div>
<div id='calendar'></div>
Loading…
Cancel
Save