From fc61616c53181a0484d773a08f9b0411896a5064 Mon Sep 17 00:00:00 2001
From: Fabio Comuni <fabrix.xm@gmail.com>
Date: Tue, 24 Apr 2012 08:12:30 +0200
Subject: [PATCH] events page: set calendar start date from url
 (events/[year]/[month]/) and show event popup from url anchor (#link-[event
 id])

---
 boot.php            |   8 +--
 view/event_head.tpl | 135 ++++++++++++++++++++++++--------------------
 2 files changed, 79 insertions(+), 64 deletions(-)

diff --git a/boot.php b/boot.php
index d2758c643c..f024d64ce1 100644
--- a/boot.php
+++ b/boot.php
@@ -1249,11 +1249,11 @@ if(! function_exists('get_events')) {
 			$o .= '<div id="event-title-end"></div>';
 
 			foreach($r as $rr) {
-
 				if($rr['adjust'])
-					$md = datetime_convert('UTC',$a->timezone,$rr['start'],'Y/m\#\l\i\n\k\-j');
+					$md = datetime_convert('UTC',$a->timezone,$rr['start'],'Y/m');
 				else
-					$md = datetime_convert('UTC','UTC',$rr['start'],'Y/m\#\l\i\n\k\-j');
+					$md = datetime_convert('UTC','UTC',$rr['start'],'Y/m');
+				$md .= "/#link-".$rr['id'];
 
 				$title = substr(strip_tags(bbcode($rr['desc'])),0,32) . '... ';
 				if(! $title)
@@ -1262,7 +1262,7 @@ if(! function_exists('get_events')) {
 				$strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']);
 				$today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false);
 
-				$o .= '<div class="event-list" id="event-' . $rr['eid'] . '"></a> <a href="events/' . $md . '">' . $title . '</a>'
+				$o .= '<div class="event-list" id="event-' . $rr['id'] . '"></a> <a href="events/' . $md . '">' . $title . '</a>'
 				. day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ?  ' ' . t('[today]') : '')
 				. '</div>' ;
 			}
diff --git a/view/event_head.tpl b/view/event_head.tpl
index 97201e7229..471748b97a 100644
--- a/view/event_head.tpl
+++ b/view/event_head.tpl
@@ -3,8 +3,17 @@
           src="$baseurl/library/fullcalendar/fullcalendar.min.js"></script>
 
 <script>
+	function showEvent(eventid) {
+		$.get(
+			'$baseurl/events/?id='+eventid,
+			function(data){
+				$.fancybox(data);
+			}
+		);			
+	}
+	
 	$(document).ready(function() {
-	    $('#events-calendar').fullCalendar({
+		$('#events-calendar').fullCalendar({
 			events: '$baseurl/events/json/',
 			header: {
 				left: 'prev,next today',
@@ -13,12 +22,7 @@
 			},			
 			timeFormat: 'H(:mm)',
 			eventClick: function(calEvent, jsEvent, view) {
-				$.get(
-					'$baseurl/events/?id='+calEvent.id,
-					function(data){
-						$.fancybox(data);
-					}
-				);
+				showEvent(calEvent.id);
 			},
 			
 			eventRender: function(event, element, view) {
@@ -55,70 +59,81 @@
 			}
 			
 		})
+		
+		// center on date
+		var args=location.href.replace(baseurl,"").split("/");
+		if (args.length>=4) {
+			$("#events-calendar").fullCalendar('gotoDate',args[2] , args[3]-1);
+		} 
+		
+		// show event popup
+		var hash = location.hash.split("-")
+		if (hash.length==2 && hash[0]=="#link") showEvent(hash[1]);
+		
 	});
 </script>
 
 
 <script language="javascript" type="text/javascript"
           src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
-          <script language="javascript" type="text/javascript">
+<script language="javascript" type="text/javascript">
 
 
-tinyMCE.init({
-	theme : "advanced",
-	mode : "textareas",
-	plugins : "bbcode,paste",
-	theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
-	theme_advanced_buttons2 : "",
-	theme_advanced_buttons3 : "",
-	theme_advanced_toolbar_location : "top",
-	theme_advanced_toolbar_align : "center",
-	theme_advanced_blockformats : "blockquote,code",
-	gecko_spellcheck : true,
-	paste_text_sticky : true,
-	entity_encoding : "raw",
-	add_unload_trigger : false,
-	remove_linebreaks : false,
-	force_p_newlines : false,
-	force_br_newlines : true,
-	forced_root_block : '',
-	content_css: "$baseurl/view/custom_tinymce.css",
-	theme_advanced_path : false,
-	setup : function(ed) {
-		ed.onInit.add(function(ed) {
-			ed.pasteAsPlainText = true;
-		});
-	}
-
-});
-
-
-$(document).ready(function() { 
-
-	$('#event-share-checkbox').change(function() {
-
-		if ($('#event-share-checkbox').is(':checked')) { 
-			$('#acl-wrapper').show();
-		}
-		else {
-			$('#acl-wrapper').hide();
-		}
-	}).trigger('change');
-
-
-	$('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
-		var selstr;
-		$('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
-			selstr = $(this).text();
-			$('#jot-public').hide();
-		});
-		if(selstr == null) {
-			$('#jot-public').show();
+	tinyMCE.init({
+		theme : "advanced",
+		mode : "textareas",
+		plugins : "bbcode,paste",
+		theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
+		theme_advanced_buttons2 : "",
+		theme_advanced_buttons3 : "",
+		theme_advanced_toolbar_location : "top",
+		theme_advanced_toolbar_align : "center",
+		theme_advanced_blockformats : "blockquote,code",
+		gecko_spellcheck : true,
+		paste_text_sticky : true,
+		entity_encoding : "raw",
+		add_unload_trigger : false,
+		remove_linebreaks : false,
+		force_p_newlines : false,
+		force_br_newlines : true,
+		forced_root_block : '',
+		content_css: "$baseurl/view/custom_tinymce.css",
+		theme_advanced_path : false,
+		setup : function(ed) {
+			ed.onInit.add(function(ed) {
+				ed.pasteAsPlainText = true;
+			});
 		}
 
-	}).trigger('change');
+	});
 
-});
+
+	$(document).ready(function() { 
+
+		$('#event-share-checkbox').change(function() {
+
+			if ($('#event-share-checkbox').is(':checked')) { 
+				$('#acl-wrapper').show();
+			}
+			else {
+				$('#acl-wrapper').hide();
+			}
+		}).trigger('change');
+
+
+		$('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
+			var selstr;
+			$('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
+				selstr = $(this).text();
+				$('#jot-public').hide();
+			});
+			if(selstr == null) {
+				$('#jot-public').show();
+			}
+
+		}).trigger('change');
+
+	});
 
 </script>