Adding/editing/deleting personal events + qtip2 lib added for preview event description, all_day fill added in the personal main table (work in progress)

skala
Julio Montoya 14 years ago
parent 1a458badb6
commit 7bf7035529
  1. 73
      main/calendar/agenda.lib.php
  2. 6
      main/calendar/agenda_js.php
  3. 23
      main/inc/ajax/agenda.ajax.php
  4. 1
      main/inc/lib/javascript/qtip2/jquery.qtip.min.css
  5. 13
      main/inc/lib/javascript/qtip2/jquery.qtip.min.js
  6. 7
      main/install/db_user.sql
  7. 3
      main/install/migrate-db-1.8.8-1.9.0-pre.sql
  8. 106
      main/template/default/agenda/month.tpl

@ -23,19 +23,50 @@ class Agenda {
* @param string agendaDay, agendaWeek, month
* @param string personal, course or global (only works for personal by now)
*/
function add_event($start, $end, $view, $type, $title, $content) {
function add_event($start, $end, $all_day, $view, $type, $title, $content) {
$attributes = array();
$start = date('Y-m-d H:i:s', $start);
$end = date('Y-m-d H:i:s', $end);
$start = api_get_utc_datetime($start);
$end = api_get_utc_datetime($end);
$all_day = isset($all_day) && $all_day == 'true' ? 1:0;
$attributes['user'] = api_get_user_id();
$attributes['title'] = $title;
$attributes['text'] = $content;
$attributes['date'] = $start;
$attributes['enddate'] = $end;
$attributes['all_day'] = $all_day;
$id = Database::insert($this->tbl_personal_agenda, $attributes);
return $id;
}
function edit_event($id, $start, $end, $all_day, $view, $type, $title, $content) {
$attributes = array();
$start = date('Y-m-d H:i:s', $start);
$start = api_get_utc_datetime($start);
$end = api_get_utc_datetime($end);
$title = Database::escape_string($title);
$content = Database::escape_string($content);
if ($all_day == '0') {
$end = date('Y-m-d H:i:s', $end);
$end = api_get_utc_datetime($end);
$attributes['enddate'] = $end;
}
$all_day = isset($all_day) && $all_day == '1' ? 1:0;
// we are adding a new item
$sql = "INSERT INTO $this->tbl_personal_agenda (user, title, text, date, enddate) VALUES ('".api_get_user_id()."','$title', '$content', '$start', '$end')";
$result = Database::query($sql);
//$attributes['user'] = api_get_user_id();
$attributes['title'] = $title;
$attributes['text'] = $content;
$attributes['date'] = $start;
//$attributes['all_day'] = $all_day;
Database::update($this->tbl_personal_agenda, $attributes, array('id = ?' =>$id));
}
function delete_event($id, $type) {
Database::delete($this->tbl_personal_agenda, array('id = ?' =>$id));
}
/**
@ -48,14 +79,20 @@ class Agenda {
* @param day $day
* @param type all, global (platform), course
*/
function get_events($start, $end, $user_id) {
function get_events($start, $end, $user_id, $course_id = null) {
$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);
foreach($my_course_list as $course_item) {
if (isset($course_id) && !empty($course_id)) {
if ($course_item['course_id'] == $course_id) {
$this->get_course_events($start, $end, $course_item);
}
} else {
$this->get_course_events($start, $end, $course_item);
}
}
if (!empty($this->events)) {
@ -102,7 +139,7 @@ class Agenda {
$end = api_get_utc_datetime($end);
$sql = "SELECT * FROM ".$this->tbl_personal_agenda."
WHERE date>='".$start."' AND (enddate <='".$end."' OR enddate IS NULL) ";
WHERE date >= '".$start."' AND (enddate <='".$end."' OR enddate IS NULL) ";
$result = Database::query($sql);
if (Database::num_rows($result)) {
@ -114,7 +151,6 @@ class Agenda {
$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']);
}
@ -122,8 +158,8 @@ class Agenda {
if (!empty($row['enddate']) && $row['enddate'] != '0000-00-00 00:00:00') {
$event['end'] = $this->format_event_date($row['enddate']);
}
$event['allDay'] = false;
$event['description'] = $row['text'];
$event['allDay'] = isset($row['all_day']) && $row['all_day'] == 1 ? $row['all_day'] : 0;
$my_events[] = $event;
$this->events[]= $event;
}
@ -211,7 +247,12 @@ class Agenda {
$events = array();
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
//Only show events from the session
if (api_get_course_int_id()) {
if ($row['session_id'] != api_get_session_id()) {
continue;
}
}
$event = array();
$event['id'] = 'course_'.$row['id'];
$event['title'] = $row['title'];
@ -248,7 +289,7 @@ class Agenda {
return $events;
}
function format_event_date($utc_time) {
function format_event_date($utc_time) {
return date('c', api_strtotime(api_get_local_time($utc_time)));
}

@ -16,16 +16,14 @@ $use_anonymous = true;
require_once '../inc/global.inc.php';
$htmlHeadXtra[] = api_get_jquery_ui_js();
$htmlHeadXtra[] = api_get_js('qtip2/jquery.qtip.min.js');
$htmlHeadXtra[] = api_get_js('fullcalendar/fullcalendar.min.js');
$htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/fullcalendar/fullcalendar.css');
$htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/qtip2/jquery.qtip.min.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);

@ -15,9 +15,24 @@ $agenda = new Agenda();
switch ($action) {
case 'add_event':
$agenda->add_event($_REQUEST['start'], $_REQUEST['end'], $_REQUEST['view'], 'personal',$_REQUEST['title'], $_REQUEST['content']);
//For now we only save personal events
echo $agenda->add_event($_REQUEST['start'], $_REQUEST['end'], $_REQUEST['all_day'], $_REQUEST['view'], 'personal',$_REQUEST['title'], $_REQUEST['content']);
break;
case 'edit_event':
$id_list = explode('_', $_REQUEST['id']);
$type = $id_list[0];
$id = $id_list[1];
$agenda->edit_event($id, $_REQUEST['start'], $_REQUEST['end'], $_REQUEST['all_day'], $_REQUEST['view'], $type ,$_REQUEST['title'], $_REQUEST['content']);
break;
case 'delete_event':
$id_list = explode('_', $_REQUEST['id']);
$type = $id_list[0];
$id = $id_list[1];
$agenda->delete_event($id, $type);
break;
case 'move_event':
$day_delta = $_REQUEST['day_delta'];
$minute_delta = $_REQUEST['minute_delta'];
@ -29,9 +44,9 @@ switch ($action) {
break;
case 'get_events':
$start = $_REQUEST['start'];
$end = $_REQUEST['end'];
$events = $agenda->get_events($start, $end, 1);
$end = $_REQUEST['end'];
$events = $agenda->get_events($start, $end, api_get_user_id(), api_get_course_int_id());
echo $events;
break;
case 'get_user_agenda':

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -13,10 +13,11 @@ CREATE TABLE personal_agenda (
user int unsigned,
title text,
`text` text,
`date` datetime default NULL,
enddate datetime default NULL,
`date` datetime DEFAULT NULL,
enddate datetime DEFAULT NULL,
course varchar(255),
parent_event_id int null,
parent_event_id int NULL,
all_day int NOT NULL DEFAULT 0,
PRIMARY KEY id (id)
);
CREATE TABLE personal_agenda_repeat (

@ -18,6 +18,9 @@ UPDATE settings_current SET selected_value = '1.9.0.15605' WHERE variable = 'cha
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('filter_terms', NULL, 'textarea', 'Security', '', 'FilterTermsTitle', 'FilterTermsComment', NULL, NULL, 0);
ALTER TABLE personal_agenda ADD COLUMN 'all_day' INTEGER NOT NULL DEFAULT 0;
-- xxSTATSxx
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';
--CREATE TABLE track_filtered_terms (id int, user_id int, course_id int, session_id int, tool_id char(12), filtered_term varchar(255), created_at datetime);

@ -25,26 +25,82 @@ $(document).ready(function() {
var start_date = Math.round(start.getTime() / 1000);
var end_date = Math.round(end.getTime() / 1000);
var url = '{$_p.web_ajax}agenda.ajax.php?a=add_event&start='+start_date+'&end='+end_date+'&view='+view.name;
var url = '{$_p.web_ajax}agenda.ajax.php?a=add_event&start='+start_date+'&end='+end_date+'&all_day='+allDay+'&view='+view.name;
$('#start_date').html(start.getDate() +"/"+ start.getMonth() +"/"+start.getFullYear());
$('#end_date').html(end.getDate() +"/"+ end.getMonth() +"/"+end.getFullYear());
$("#dialog-form").dialog("open");
$("#dialog-form").dialog({
buttons: {
"Add event": function() {
var params = $("#add_event_form").serialize();
$.ajax({
url: url+'&'+params,
success:function(data) {
calendar.fullCalendar("refetchEvents");
calendar.fullCalendar("rerenderEvents");
$("#dialog-form").dialog("close");
}
});
},
},
close: function() {
$("#title").attr('value', '');
$("#content").attr('value', '');
}
});
//prevent the browser to follow the link
return false;
calendar.fullCalendar('unselect');
},
eventRender: function(event, element) {
if (event.description) {
element.qtip({
content: event.description
});
}
},
eventClick: function(calEvent, jsEvent, view) {
var start_date = Math.round(calEvent.start.getTime() / 1000);
if (calEvent.allDay == 1) {
var end_date = '';
} else {
var end_date = Math.round(calEvent.end.getTime() / 1000);
}
$('#start_date').html(calEvent.start.getDate() +"/"+ calEvent.start.getMonth() +"/"+calEvent.start.getFullYear());
if (end_date != '') {
$('#end_date').html(calEvent.end.getDate() +"/"+ calEvent.end.getMonth() +"/"+calEvent.end.getFullYear());
}
$("#title").attr('value', calEvent.title);
$("#content").attr('value', calEvent.description);
$("#dialog-form").dialog("open");
var url = '{$_p.web_ajax}agenda.ajax.php?a=edit_event&id='+calEvent.id+'&start='+start_date+'&end='+end_date+'&all_day='+calEvent.allDay+'&view='+view.name;
var delete_url = '{$_p.web_ajax}agenda.ajax.php?a=delete_event&id='+calEvent.id;
$("#dialog-form").dialog({
buttons: {
"Edit event": function() {
var params = $("#add_event_form").serialize();
$.ajax({
url: url+'&'+params,
success:function() {
calendar.fullCalendar('renderEvent',
{
title: $("#title").val(),
start: start,
end: end,
allDay: allDay
},
calEvent.title = $("#title").val();
calEvent.start = calEvent.start;
calEvent.end = calEvent.end;
calEvent.allDay = calEvent.allDay;
calEvent.description = $("#content").val();
calendar.fullCalendar('updateEvent',
calEvent,
true // make the event "stick"
);
@ -52,20 +108,28 @@ $(document).ready(function() {
}
});
},
},
close: function() {
"Delete": function() {
$.ajax({
url: delete_url,
success:function() {
calendar.fullCalendar('removeEvents',
calEvent
);
calendar.fullCalendar("refetchEvents");
calendar.fullCalendar("rerenderEvents");
$("#dialog-form").dialog( "close" );
}
});
}
},
close: function() {
$("#title").attr('value', '');
$("#content").attr('value', '');
}
});
});
//prevent the browser to follow the link
return false;
calendar.fullCalendar('unselect');
},
dayClick: function(date, allDay, jsEvent, view) {
},
editable: true,
events: "{$ajax_url}?a=get_events",
@ -89,9 +153,9 @@ $(document).ready(function() {
});
</script>
<div id="dialog-form" title="{"AddEvent"|get_lang}" style="display:none">
<div id="dialog-form" style="display:none">
<form id="add_event_form" name="form">
<span id="start_date" ></span> - <span id="end_date" ></span>
<span id="start_date" ></span><span id="end_date" ></span>
<div class="row">
<label for="name">{"Title"|get_lang}</label>
</div>

Loading…
Cancel
Save