فهرست منبع

Adding google calendar URL in the user profile in order to load public events (only for the personal agenda)

Julio Montoya 13 سال پیش
والد
کامیت
c51ea235b3

+ 4 - 5
main/calendar/agenda.lib.php

@@ -240,7 +240,7 @@ class Agenda {
 				break;
 		}
 	}
-	
+
 	/**
 	 * 
 	 * Get agenda events
@@ -262,7 +262,7 @@ class Agenda {
 				$this->get_course_events($start, $end, $course_info, $group_id);
 				break;
 			case 'personal':
-			default:
+			default:                
                 //Getting personal events
 				$this->get_personal_events($start, $end);
                 
@@ -509,8 +509,7 @@ class Agenda {
                     continue;
                 }
                 
-                $events_added[]         = $row['id'];
-                
+                $events_added[]         = $row['id'];                
                 
                 $attachment = get_attachment($row['id'], $course_id);
                 
@@ -542,7 +541,7 @@ class Agenda {
 				
 				if (api_is_allowed_to_edit() && $this->type == 'course') {
 					$event['editable'] 		= true;
-				}	
+				}
 	
 				if (!empty($row['start_date']) && $row['start_date'] != '0000-00-00 00:00:00') {
 					$event['start'] = $this->format_event_date($row['start_date']);

+ 11 - 3
main/calendar/agenda_js.php

@@ -20,6 +20,7 @@ require_once 'agenda.inc.php';
 $htmlHeadXtra[] = api_get_jquery_libraries_js(array('jquery-ui','jquery-ui-i18n'));
 $htmlHeadXtra[] = api_get_js('qtip2/jquery.qtip.min.js');
 $htmlHeadXtra[] = api_get_js('fullcalendar/fullcalendar.min.js');
+$htmlHeadXtra[] = api_get_js('fullcalendar/gcal.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');
 
@@ -31,6 +32,11 @@ if (api_is_platform_admin() && $type == 'admin') {
 if (isset($_REQUEST['cidReq']) && !empty($_REQUEST['cidReq'])) {	
 	$type = 'course';
 }
+
+$tpl	= new Template(get_lang('Agenda'));
+
+$tpl->assign('use_google_calendar', 0);
+
 switch($type) {
 	case 'admin':		
 		$this_section = SECTION_PLATFORM_ADMIN;
@@ -41,12 +47,16 @@ switch($type) {
 	case 'personal':
         if (api_is_anonymous()) {
             api_not_allowed();
+        }
+        $extra_field_data = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'google_calendar_url');
+        if (!empty($extra_field_data) && isset($extra_field_data['google_calendar_url']) && !empty($extra_field_data['google_calendar_url'])) {            
+            $tpl->assign('use_google_calendar', 1);
+            $tpl->assign('google_calendar_url', $extra_field_data['google_calendar_url']);
         }
 		$this_section = SECTION_MYAGENDA;
 		break;
 }
 
-$tpl	= new Template(get_lang('Agenda'));
 $can_add_events = 0;
 if (api_is_platform_admin() && $type == 'admin') {
 	$can_add_events = 1;
@@ -89,7 +99,6 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed
     if ($type == 'course') {
         $actions = display_courseadmin_links();
     }
-
 	$tpl->assign('actions', $actions);
 }
 
@@ -108,7 +117,6 @@ $tpl->assign('web_agenda_ajax_url', $agenda_ajax_url);
 
 $course_code  = api_get_course_id();
 
-
 if (api_is_allowed_to_edit() && $course_code != '-1' && $type == 'course') {
     $order = 'lastname';
     if (api_is_western_name_order) {

+ 1 - 0
main/install/db_main.sql

@@ -1438,6 +1438,7 @@ INSERT INTO user_field (field_type, field_variable, field_display_text, field_vi
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_invitation',   'MailNotifyInvitation',1,1,'1');
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_message',      'MailNotifyMessage',1,1,'1');
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_group_message','MailNotifyGroupMessage',1,1,'1');
+INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES (1, 'google_calendar_url','Google Calendar URL',0,0);
 
 INSERT INTO user_field_options (field_id, option_value, option_display_text, option_order) values (8, '1', 'AtOnce',1);
 INSERT INTO user_field_options (field_id, option_value, option_display_text, option_order) values (8, '8', 'Daily',2);

+ 2 - 0
main/install/migrate-db-1.8.8-1.9.0-pre.sql

@@ -136,6 +136,8 @@ CREATE TABLE chat (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, from_user INTEGE
 ALTER TABLE chat ADD INDEX idx_chat_to_user (to_user);
 ALTER TABLE chat ADD INDEX idx_chat_from_user (from_user);
 
+INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES (1, 'google_calendar_url','Google Calendar URL',0,0);
+
 -- Course ranking
 
 CREATE TABLE track_course_ranking (id   int unsigned not null PRIMARY KEY AUTO_INCREMENT,c_id  int unsigned not null, session_id  int unsigned not null default 0, url_id  int unsigned not null default 0, accesses int unsigned not null default 0, total_score int unsigned not null default 0, users int unsigned not null default 0, creation_date datetime not null);

+ 153 - 65
main/template/default/agenda/month.tpl

@@ -41,7 +41,14 @@ $(document).ready(function() {
 		width	: 550, 
 		height	: 450,
         zIndex: 20000 // added because of qtip2
-
+   	});
+    
+    $("#simple-dialog-form").dialog({
+		autoOpen: false,
+		modal	: false, 
+		width	: 550, 
+		height	: 450,
+        zIndex: 20000 // added because of qtip2
    	});
 
 	var title = $( "#title" ),
@@ -89,6 +96,15 @@ $(document).ready(function() {
 			center: 'title',
 			right: 'month,agendaWeek,agendaDay',	
 		},	
+        {if $use_google_calendar == 1 }
+            eventSources: [
+                '{$google_calendar_url}',  //if you want to add more just add URL in this array
+                {
+                    className: 'gcal-event',           // an option!                    
+                }
+            ],
+        {/if}
+        
 		buttonText: 	{$button_text}, 
 		monthNames: 	{$month_names},
 		monthNamesShort:{$month_names_short},
@@ -205,14 +221,19 @@ $(document).ready(function() {
 	        
 	    },
 		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 	= '';	
+                if (calEvent.end && calEvent.end != '') {
+                    var end_date 	= Math.round(calEvent.end.getTime() / 1000);				
+                }
+            }
+
 			//edit event
-			if (calEvent.editable) {									
-				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);				
-				}
+			if (calEvent.editable) {	       
 				
 				$('#visible_to_input').hide();                
                 $('#add_as_announcement_div').hide();
@@ -222,23 +243,22 @@ $(document).ready(function() {
                     $("#visible_to_read_only_users").html(calEvent.sent_to);
 				{/if}
                     
-				$('#color_calendar').html('{$type_label}');
-				$('#color_calendar').addClass('label_tag');
-								
-				$('#color_calendar').removeClass('course_event');
-				$('#color_calendar').removeClass('personal_event');
-				$('#color_calendar').removeClass('group_event');
-				
-				$('#color_calendar').addClass(calEvent.type+'_event');
-				
-				$('#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);
+                $('#color_calendar').html('{$type_label}');            
+                $('#color_calendar').addClass('label_tag');								
+                $('#color_calendar').removeClass('course_event');
+                $('#color_calendar').removeClass('personal_event');
+                $('#color_calendar').removeClass('group_event');				
+                $('#color_calendar').addClass(calEvent.type+'_event');	
+                
+                $('#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);			
+                
 				allFields.removeClass( "ui-state-error" );
 				
 				$("#dialog-form").dialog("open");
@@ -246,7 +266,7 @@ $(document).ready(function() {
 				var url = '{$web_agenda_ajax_url}&a=edit_event&id='+calEvent.id+'&start='+start_date+'&end='+end_date+'&all_day='+calEvent.allDay+'&view='+view.name;
 				var delete_url = '{$web_agenda_ajax_url}&a=delete_event&id='+calEvent.id;
 				
-				$("#dialog-form").dialog({				
+				$("#dialog-form").dialog({
 					buttons: {
 						{"Edit"|get_lang} : function() {
 							
@@ -292,7 +312,64 @@ $(document).ready(function() {
 						$("#content").attr('value', '');				
 					}
 				});
-			}
+			} else { //simple form    
+            
+                $('#simple_start_date').html(calEvent.start.getDate() +"/"+ calEvent.start.getMonth() +"/"+calEvent.start.getFullYear());
+
+                if (end_date != '') {
+                    $('#simple_start_date').html(calEvent.start.getDate() +"/"+ calEvent.start.getMonth() +"/"+calEvent.start.getFullYear() +" - "+calEvent.start.toLocaleTimeString());
+                    $('#simple_end_date').html(' '+calEvent.end.getDate() +"/"+ calEvent.end.getMonth() +"/"+calEvent.end.getFullYear() +" - "+calEvent.end.toLocaleTimeString());
+                }
+                
+                $("#simple_title").html(calEvent.title);
+                $("#simple_content").html(calEvent.description);	                
+                $("#simple-dialog-form").dialog("open");
+                
+                
+                $("#simple-dialog-form").dialog({
+					buttons: {
+						{"Export"|get_lang} : function() {
+							
+						
+							var params = $("#add_event_form").serialize();						
+							$.ajax({
+								url: url+'&'+params,
+								success:function() {
+									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"
+									);
+									
+									$("#dialog-form").dialog("close");										
+								}							
+							});
+						},
+						{"Export"|get_lang}: function() { 
+							$.ajax({
+								url: delete_url,
+								success:function() {
+									calendar.fullCalendar('removeEvents',										
+										calEvent										
+									);								
+									calendar.fullCalendar("refetchEvents");
+									calendar.fullCalendar("rerenderEvents");
+									$("#dialog-form").dialog( "close" );		
+								}
+							});
+						}
+					},				
+					close: function() {		
+							
+					}
+				});
+                
+            }
 		},
 		editable: true,		
 		events: "{$web_agenda_ajax_url}&a=get_events",
@@ -314,71 +391,82 @@ $(document).ready(function() {
 });
 </script>
 
+<div id="simple-dialog-form" style="display:none;">
+    <div style="width:500px">
+        <form name="form-simple" class="form-vertical" >        
+            <div class="control-group">
+                <label class="control-label"><b>{"Date"|get_lang}</b></label>			
+                <div class="controls">
+                    <span id="simple_start_date"></span><span id="simple_end_date"></span>                
+                </div>					
+            </div>
+            <div class="control-group">			
+                <label class="control-label"><b>{"Title"|get_lang}</b></label>
+                <div class="controls">				
+                    <div id="simple_title"></div>
+                </div>
+            </div>
+
+            <div class="control-group">			
+                <label class="control-label"><b>{"Description"|get_lang}</b></label>			
+                <div class="controls">
+                    <div id="simple_content"></div>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+
 <div id="dialog-form" style="display:none;">
 	<div style="width:500px">
-	<form id="add_event_form" name="form">
+	<form class="form-horizontal" id="add_event_form" name="form">
 	      
 	    {if !empty($visible_to) } 
-    	    <div id="visible_to_input" class="row">      
-                <div class="label">
-                    <label for="date">{"To"|get_lang}</label>
-                </div>
-                <div class="formw">
+    	    <div id="visible_to_input" class="control-group">                      
+                <label class="control-label" for="date">{"To"|get_lang}</label>                
+                <div class="controls">
                     {$visible_to}                    
                 </div>                  
             </div>
         {/if}
         
-         <div id="visible_to_read_only" class="row" style="display:none">      
-                <div class="label">
-                    <label for="date">{"To"|get_lang}</label>
-                </div>
-                <div class="formw">
+         <div id="visible_to_read_only" class="control-group" style="display:none">                      
+                <label class="control-label" for="date">{"To"|get_lang}</label>                
+                <div class="controls">
                     <div id="visible_to_read_only_users"></div>                  
                 </div>                  
          </div>        	
-		<div class="row">		
-			<div class="label">
-				<label for="date">{"Agenda"|get_lang}</label>
-			</div>
-			<div class="formw">
+		<div class="control-group">					
+            <label class="control-label" for="date">{"Agenda"|get_lang}</label>			
+			<div class="controls">
 				<div id="color_calendar"></div>
 			</div>					
 		</div>
-		<div class="row">		
-			<div class="label">
-				<label for="date">{"Date"|get_lang}</label>
-			</div>
-			<div class="formw">
-				<span id="start_date"></span><span id="end_date"></span>
-                <!-- <input type="text" id="start_date_input" class="datetime"/>
-                <input type="text" id="end_date_input" class="datetime"/> -->
+		<div class="control-group">					
+			<label class="control-label" for="date">{"Date"|get_lang}</label>			
+			<div class="controls">
+				<span id="start_date"></span><span id="end_date"></span>                
 			</div>					
 		</div>
-		<div class="row">
-			<div class="label">
-				<label for="name">{"Title"|get_lang}</label>
-			</div>		
-			<div class="formw">
+		<div class="control-group">			
+			<label class="control-label" for="name">{"Title"|get_lang}</label>			
+			<div class="controls">
 				<input type="text" name="title" id="title" size="40" />				
 			</div>
 		</div>
 				
-		<div class="row">
-			<div class="label">
-				<label for="name">{"Description"|get_lang}</label>
-			</div>		
-			<div class="formw">
+		<div class="control-group">			
+			<label class="control-label" for="name">{"Description"|get_lang}</label>			
+			<div class="controls">
 				<textarea name="content" id="content" cols="40" rows="7"></textarea>
 			</div>
 		</div>	
 		
 		{if $type == 'course'}
 		<div id="add_as_announcement_div">
-    		 <div class="row">
-                <div class="label">                    
-                </div>
-                <div class="formw">
+    		 <div class="control-group">
+                <label class="control-label" for="name"></label>
+                <div class="controls">
                     <input type="checkbox" name="add_as_annonuncement" id="add_as_annonuncement" />
                     <label for="add_as_annonuncement">{"AddAsAnnouncement"|get_lang}</label>
                 </div>