From 16c51a77a7b0a5ab90d6dcb2fdef4eff56bede49 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 24 Sep 2012 21:26:15 +0800 Subject: [PATCH] change in algo of event generation plus now multi week events enabled --- .../app/assets/javascripts/calendarAPI.js.erb | 154 +++++++++++------- .../calendar/back_end/cals_controller.rb | 12 +- .../calendar/back_end/events_controller.rb | 20 ++- .../calendar/app/models/event.rb | 3 + .../calendar/back_end/events/create.js.erb | 4 +- .../calendar/config/locales/zh_tw.yml | 3 +- .../gprs/back_end/locations_controller.rb | 15 +- vendor/built_in_modules/gprs/config/routes.rb | 4 +- 8 files changed, 145 insertions(+), 70 deletions(-) diff --git a/vendor/built_in_modules/calendar/app/assets/javascripts/calendarAPI.js.erb b/vendor/built_in_modules/calendar/app/assets/javascripts/calendarAPI.js.erb index 78089ac7..076e44b3 100644 --- a/vendor/built_in_modules/calendar/app/assets/javascripts/calendarAPI.js.erb +++ b/vendor/built_in_modules/calendar/app/assets/javascripts/calendarAPI.js.erb @@ -82,12 +82,12 @@ var calendarAPI = function(){ month = dt.getMonth()+1; year = dt.getFullYear(); } - // month = 2; + // month = 10; // year = 2008; c.cur_month = month; c.cur_year = year; $('#view_holder').load("cals/month_view?month="+month+"&year="+year, function() { - getEvents(month,year); + c.getEvents(month,year); $('.current_day_title').text(c.monthlist[c.cur_month]+" "+c.cur_year); if($('#calendar_month').length > 0){ var $c_table = $('#calendar_month'); @@ -111,71 +111,109 @@ var calendarAPI = function(){ }); } }) - var getEvents = function(month,year){ - $.getJSON("cals/getEvents",{"type":"monthview","month":month,"year":year},function(events){ - var $eventrow = $(""); - var nos = new Array(); - var currow = 0; - var lastno = 0; - nos.push(0); - $.each(events,function(i,evnt){ + + } + + this.getEvents = function(month,year){ + $.getJSON("cals/getEvents",{"type":"monthview","month":month,"year":year},function(events){ + makerow(events); + }) + var doneEventArray = new Array(); + var makerow = function(events){ + var $eventrow =null; + var currow = 0; + var curdate = 0; + var allow = false; + var curparent = null; + var lastno = 0; + var indexcount = events.length; + $.each(events,function(i,evnt){ + indexcount++; + if($.inArray(evnt.index,doneEventArray) == -1){ + var daydom = $("#calendar_month td[date="+evnt.start_date+"]"); - var curparent = daydom.parent().parent().parent(); - var thisrow = curparent.attr("row"); - var pos = daydom.attr("position"); + var thisparent = daydom.parent().parent().parent(); + var thisrow = thisparent.attr("row"); + var pos = parseInt(daydom.attr("position")); var thisno = daydom.attr("no"); + if(thisrow != currow){ + if(curparent){ + curparent.append($eventrow); + } + $eventrow = null; + $eventrow = $(""); + allow = true; + }else if(evnt.start_date > curdate){ + allow = true; + + } + var recordcurdate = true; - var index = "new"; - var smallcount = 0; - - for(x in nos){ - if(thisno > nos[x]){ - smallcount++; - } - if(smallcount > 0){ - index = x; - break; - } - } - if(index == "new"){ - nos=[] - $eventrow = null; - $eventrow = $(""); - } - - if(thisrow!=currow){ - $eventrow = null; - $eventrow = $(""); - - } - - if(index!="new"){ - nos[index] = (parseInt(thisno) + parseInt(evnt.total_days)) - 1; - }else{ - nos.push((parseInt(thisno) + parseInt(evnt.total_days)) - 1); - } - if(pos == 1){ - $eventrow.html('
'+evnt.title+'
'); - }else{ - if($eventrow.html()==""){ - $eventrow.append(''); - }else{ - if((lastno+1)!=thisno){ - var inposition = $eventrow.find("td.main_td").attr("pos"); - var colspan = parseInt(pos) - parseInt(inposition); - colspan--; - $eventrow.append(''); + if(allow){ + if(pos == 1){ + var colspan = 0; + if(evnt.total_days>7){ + colspan = 7; + var totaldays = parseInt(evnt.total_days) - colspan; + var stardate = parseInt(evnt.start_date) + colspan; + var index = i + 1; + var tempArray = {"index":indexcount,"id":evnt.id,"start_date":stardate,"total_days":totaldays,"title":evnt.title,"color":evnt.color,"show_link":evnt.show_link}; + events.splice(index,0,tempArray); + //recordcurdate = false; + }else{ + colspan = evnt.total_days; } + $eventrow.html('
'+evnt.title+'
'); + }else{ + if($eventrow.html()==""){ + $eventrow.append(''); + }else{ + if((lastno+1)!=thisno){ + var inposition = parseInt($eventrow.find("td.main_td:last").attr("pos")); + var curcolspan = $eventrow.find("td.main_td:last").attr("colspan"); + var colspan = pos - (inposition+parseInt(curcolspan)); + $eventrow.append(''); + } + } + var colspan = 0; + if((pos + parseInt(evnt.total_days))-1 > 7){ + colspan = 7-(pos-1); + var totaldays = parseInt(evnt.total_days) - colspan; + var stardate = parseInt(evnt.start_date) + colspan; + + var index = i + 1; + var tempArray = {"index":indexcount,"id":evnt.id,"start_date":stardate,"total_days":totaldays,"title":evnt.title,"color":evnt.color,"show_link":evnt.show_link}; + events.splice(index,0,tempArray); + // recordcurdate = false; + + }else{ + colspan = evnt.total_days; + } + // if(evnt.title == "Again") + // console.log(colspan); + $eventrow.append('
'+evnt.title+'
'); } - $eventrow.append('
'+evnt.title+'
'); + lastno = (parseInt(thisno) + parseInt(evnt.total_days)) - 1; + currow = thisrow; + curdate =(evnt.start_date + evnt.total_days) - 1; + allow = false; + curparent = thisparent; + if(recordcurdate) + doneEventArray.push(evnt.index); + } - lastno = (parseInt(thisno) + parseInt(evnt.total_days)) - 1; - currow = thisrow; - curparent.append($eventrow); - }) + } + }) + if(curparent){ + curparent.append($eventrow); + } + if(events.length != doneEventArray.length){ + makerow(events); + } } } + this.loadWeekView = function(){ $('#view_holder').load("cals/week_view", function() { $('.current_day_title').text('September 2 - 8, 2012'); diff --git a/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/cals_controller.rb b/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/cals_controller.rb index 6330e95b..38e3c18f 100644 --- a/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/cals_controller.rb +++ b/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/cals_controller.rb @@ -58,17 +58,19 @@ class Panel::Calendar::BackEnd::CalsController < OrbitBackendController def get_events month = params[:month] year = params[:year] - events = Event.where(:start_month => month).and(:start_year => year).asc(:start_date) + month = month.to_i + year = year.to_i + events = Event.where(:start_month => month).and(:start_year => year).asc(:start_date).desc(:total_days) @events = Array.new - events.each do |event| + events.each_with_index do |event,i| # @temp = Array.new - no_of_days = Date.new(event.end_year,event.end_month,event.end_date) - Date.new(event.start_year,event.start_month,event.start_date) + no_of_days = event.total_days no_of_days = no_of_days.to_i no_of_days += 1 color = Cal.find(event.cal_id).color - @events << {"start_date"=>event.start_date, "total_days" => no_of_days, "title" => event.title,"color"=>color,"show_link"=>panel_calendar_back_end_event_path(event)} + @events << {"id"=>event.id,"index"=>i,"start_date"=>event.start_date, "total_days" => no_of_days, "title" => event.title,"color"=>color,"show_link"=>panel_calendar_back_end_event_path(event)} end - @events = @events.sort{|k,v| v[:total_days] <=> k[:total_days]} + render :json => @events.to_json end diff --git a/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/events_controller.rb b/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/events_controller.rb index ea319cdb..a23a6c4c 100644 --- a/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/events_controller.rb +++ b/vendor/built_in_modules/calendar/app/controllers/panel/calendar/back_end/events_controller.rb @@ -23,8 +23,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController temp = $start.split("/") start_date = temp[0] start_month = temp[1] - star_year = temp[2] - + start_year = temp[2] + @m = start_month + @y = start_year temp = $end.split("/") end_date = temp[0] end_month = temp[1] @@ -35,10 +36,20 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController cal_id = params[:event][:cal_id] + # if start_am_pm == "PM" + # temp_start_time = $starttime + 12 + # end + # if end_am_pm == "PM" + # temp_end_time = $endtime + 12 + # end + + final_start_time = Date.new(start_year.to_i,start_month.to_i,start_date.to_i) + final_end_time = Date.new(end_year.to_i,end_month.to_i,end_date.to_i) + total_days = final_end_time - final_start_time @event = Event.new @event.title = title @event.note = note - @event.start_year = star_year + @event.start_year = start_year @event.end_year = end_year @event.start_month = start_month @event.end_month = end_month @@ -49,6 +60,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController @event.end_time = $endtime @event.end_am_pm = end_am_pm @event.cal_id = cal_id + @event.final_start_time = final_start_time + @event.final_end_time = final_end_time + @event.total_days = total_days @event.save! respond_to do |h| diff --git a/vendor/built_in_modules/calendar/app/models/event.rb b/vendor/built_in_modules/calendar/app/models/event.rb index 55f37e52..5d0bc3f3 100644 --- a/vendor/built_in_modules/calendar/app/models/event.rb +++ b/vendor/built_in_modules/calendar/app/models/event.rb @@ -14,6 +14,9 @@ class Event field :start_am_pm field :end_time, type: Float field :end_am_pm + field :final_start_time, type: Date + field :final_end_time, type: Date + field :total_days, type: Integer belongs_to :cal diff --git a/vendor/built_in_modules/calendar/app/views/panel/calendar/back_end/events/create.js.erb b/vendor/built_in_modules/calendar/app/views/panel/calendar/back_end/events/create.js.erb index 42efb25c..eee4491b 100644 --- a/vendor/built_in_modules/calendar/app/views/panel/calendar/back_end/events/create.js.erb +++ b/vendor/built_in_modules/calendar/app/views/panel/calendar/back_end/events/create.js.erb @@ -1,2 +1,4 @@ $("#event_create").empty().hide(); -$("#create_event_btn").removeClass("active"); \ No newline at end of file +$("#create_event_btn").removeClass("active"); +$("#calendar_month tr.event_row").remove(); +calendar.getEvents(<%= @m %>,<%= @y %>); \ No newline at end of file diff --git a/vendor/built_in_modules/calendar/config/locales/zh_tw.yml b/vendor/built_in_modules/calendar/config/locales/zh_tw.yml index d0bb3120..0e3ec155 100644 --- a/vendor/built_in_modules/calendar/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/calendar/config/locales/zh_tw.yml @@ -1,3 +1,4 @@ zh_tw: calendar: - calendars: Calendars \ No newline at end of file + calendars: Calendars + create: Create \ No newline at end of file diff --git a/vendor/built_in_modules/gprs/app/controllers/panel/gprs/back_end/locations_controller.rb b/vendor/built_in_modules/gprs/app/controllers/panel/gprs/back_end/locations_controller.rb index c20d44f2..c09b1379 100644 --- a/vendor/built_in_modules/gprs/app/controllers/panel/gprs/back_end/locations_controller.rb +++ b/vendor/built_in_modules/gprs/app/controllers/panel/gprs/back_end/locations_controller.rb @@ -7,7 +7,20 @@ class Panel::Gprs::BackEnd::LocationsController < OrbitBackendController def create debugger @newlocation = Location.new(params[:location]) - render :json => {"success"=>"true"}.to_json + @newlocation.save! + render :action => "index" + end + + def get_locations + locations = Location.all + @data = Array.new + + locations.each do |location| + picurl = "http://"+request.host + location.file.url + thumburl = "http://"+request.host + location.file.thumb.url + @data << {"name"=>location.name,"pic_url"=>picurl,"thumb_url"=>thumburl,"description"=>location.description} + end + render :json => @data.to_json end end diff --git a/vendor/built_in_modules/gprs/config/routes.rb b/vendor/built_in_modules/gprs/config/routes.rb index 501bc5d3..050b2cbd 100644 --- a/vendor/built_in_modules/gprs/config/routes.rb +++ b/vendor/built_in_modules/gprs/config/routes.rb @@ -3,7 +3,9 @@ Rails.application.routes.draw do namespace :gprs do namespace :back_end do - resources :locations + match "locations/get_locations" => "locations#get_locations" + + resources :locations end end