");
switch (position){
case "first":
- var first_line_first_day = new Date(year,month,firstDay.getDate()-firstDay.getDay())
+ var offset = firstDay.getDay() - (window.calendar_variable.sunday_first ? 0 : 1);
+ var first_line_first_day = new Date(year,month,firstDay.getDate() - offset)
var first_line_first_date = first_line_first_day.getDate()
var first_line_first_month = first_line_first_day.getMonth()
var first_line_first_year = first_line_first_day.getFullYear()
first_target_day = new Date(first_line_first_year,first_line_first_month,first_line_first_date)
for(var i = 0;i < 7;i++){
var td = $("
");
switch (position){
case "first":
- var first_line_first_day = new Date(year,month,firstDay.getDate()-firstDay.getDay())
+ var offset = firstDay.getDay() - (window.calendar_variable.sunday_first ? 0 : 1);
+ var first_line_first_day = new Date(year,month,firstDay.getDate() - offset)
var first_line_first_date = first_line_first_day.getDate()
var first_line_first_month = first_line_first_day.getMonth()
var first_line_first_year = first_line_first_day.getFullYear()
first_target_day = new Date(first_line_first_year,first_line_first_month,first_line_first_date)
for(var i = 0;i < 7;i++){
var td = $("
");
- if(i >= firstDay.getDay()){
+ if(i >= offset){
if(today != 0 && last_inserted_date == today){
td.addClass("w-calendar-today");
}
diff --git a/app/assets/javascripts/category_type.js b/app/assets/javascripts/category_type.js
index 98d1b8d..63023e0 100644
--- a/app/assets/javascripts/category_type.js
+++ b/app/assets/javascripts/category_type.js
@@ -5,21 +5,20 @@ $(function() {
$.pageslide.loadComplete(function(pageslide, item) {
$('.filter-item').removeClass("active");
item.closest('li').addClass('active');
+ $('.color-picker').miniColors("destroy");
+ setForm(item.data('form'));
if(item.data('id') == 'new') {
- resetForm();
pageslide.find('form').attr('method', 'post');
$("#update_patch").remove();
}
else {
- $('.color-picker').miniColors("destroy");
- setForm(item.data('form'));
pageslide.find('form').attr("action",item.data("href"));
if($("#update_patch").length == 0){
pageslide.find("form").append("");
}
pageslide.find('input[type="checkbox"]').prop( 'checked', item.data('disable') );
- $('.color-picker').miniColors();
- $('.miniColors-trigger').addClass('btn');
}
+ $('.color-picker').miniColors();
+ $('.miniColors-trigger').addClass('btn');
});
})
\ No newline at end of file
diff --git a/app/controllers/admin/calendars_controller.rb b/app/controllers/admin/calendars_controller.rb
index f2b91ee..1ba9bbd 100644
--- a/app/controllers/admin/calendars_controller.rb
+++ b/app/controllers/admin/calendars_controller.rb
@@ -49,8 +49,8 @@ class Admin::CalendarsController < OrbitAdminController
end
def agenda
- agenda_start = Time.at(params[:unix_start].to_i).to_s
- agenda_end = Time.at(params[:unix_end].to_i).to_s
+ agenda_start = Time.at(params[:unix_start].to_i).utc
+ agenda_end = Time.at(params[:unix_end].to_i).utc
@events = Event.agenda_events(agenda_start,agenda_end)
# re = Event.recurring_event(Time.at(params[:unix_start].to_i), Time.at(params[:unix_end].to_i))
# @events = @events.inject(re, :<<)
diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb
index 705869a..e71d380 100644
--- a/app/controllers/calendars_controller.rb
+++ b/app/controllers/calendars_controller.rb
@@ -10,7 +10,7 @@ class CalendarsController < ApplicationController
{
"modes_info" => @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
2 ? 'active' : '')}},
- "week_title" => @calendar_setting.week_title.map{|t| {'week_title'=> t}},
+ "week_title" => @calendar_setting.week_title.map{|t| {'week_title'=> t}}.rotate(@calendar_setting.sunday_first ? 0 : 1),
"extras" => {
"page_id" => OrbitHelper.params[:page_id],
'widget_title' => page.name,
@@ -43,7 +43,7 @@ class CalendarsController < ApplicationController
{
"modes_info" => @calendar_setting.get_modes_info.map.with_index{|(trans, mode),i| {trans: trans, mode: mode, active_class: (i ==
2 ? 'active' : '')}},
- "week_title" => @calendar_setting.week_title.map{|t| {'week_title'=> t}},
+ "week_title" => @calendar_setting.week_title.map{|t| {'week_title'=> t}}.rotate(@calendar_setting.sunday_first ? 0 : 1),
"extras" => {
"subpart-id" => part.id.to_s,
"more_url" => OrbitHelper.widget_more_url,
@@ -94,8 +94,8 @@ class CalendarsController < ApplicationController
calendar_types = []
end
if params[:unix_start].present? && params[:unix_end].present?
- agenda_start = Time.at(params[:unix_start].to_i).utc.to_s
- agenda_end = Time.at(params[:unix_end].to_i).utc.to_s
+ agenda_start = Time.at(params[:unix_start].to_i).utc
+ agenda_end = Time.at(params[:unix_end].to_i).utc
event = Event.where("title_translations.#{locale}".to_sym.ne=>"")
events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end)
end
@@ -115,8 +115,8 @@ class CalendarsController < ApplicationController
calendar_types = []
end
if params[:unix_start].present? && params[:unix_end].present?
- agenda_start = Time.at(params[:unix_start].to_i).utc.to_s
- agenda_end = Time.at(params[:unix_end].to_i).utc.to_s
+ agenda_start = Time.at(params[:unix_start].to_i).utc
+ agenda_end = Time.at(params[:unix_end].to_i).utc
event = Event.where("title_translations.#{locale}".to_sym.ne=>"")
events = event.with_categories(calendar_types).agenda_events(agenda_start,agenda_end)
end
diff --git a/app/models/event.rb b/app/models/event.rb
index 10756a2..ecc1581 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -9,24 +9,26 @@ class Event
field :title
field :note
- field :title_translations,type: Hash,default: {}
- field :note_translations,type: Hash,default: {}
+ field :title_translations,type: Hash, default: {}
+ field :note_translations,type: Hash, default: {}
field :start, type: DateTime
field :end, type: DateTime
- field :all_day, type: Boolean,default: false
- field :recurring, type: Boolean,default: false
+ field :all_day, type: Boolean, default: false
+ field :recurring, type: Boolean, default: false
field :frequency
field :period
+ field :weekdays, type: Array, default: []
field :recurring_end_date, type: DateTime
field :create_user_id
field :update_user_id
field :module_key
field :model_cat
field :model_page_id
- field :model_tags,type: Array,default: []
+ field :model_tags, type: Array, default: []
+ field :is_weekdays, type: Boolean, default: false
belongs_to :calendar_type
field :url
- field :url_translations,type: Hash,default: {}
+ field :url_translations, type: Hash, default: {}
def get_module_url
page = !self.model_page_id.blank? ? Page.find(self.model_page_id): Page.where(:module => self.module_key).where(:categories.in => Array(self.model_cat)+[[]],:tags.in=>Array(self.model_tags)+[[]]).first
page.nil? ? '' : (page.url+'/'+eval(self.model_class).where(:id=>self.model_id).first.to_calendar_param)
@@ -64,6 +66,11 @@ class Event
self['title'] = self.title
self['note'] = self.note
self['url'] = self.url
+ if self.is_weekdays
+ self.weekdays = (1..5).to_a #平日
+ else
+ self.weekdays = self.weekdays.map{|s| s.to_i}.sort
+ end
end
########################################
validates_presence_of :title, :message => "Please fill the title of the Event", :if => lambda { self['title_translations'].blank? }
@@ -158,6 +165,7 @@ class Event
is_year = false
days = 1
interval = nil
+ weekdays = nil
if re.period == 'Daily'
period_str = 'day'
interval = 1.day
@@ -165,6 +173,8 @@ class Event
period_str = 'week'
days = 7
interval = 1.week
+ weekdays = re.weekdays
+ weekdays = nil if weekdays.blank?
elsif re.period == 'Monthly'
period_str = 'month'
is_month = true
@@ -195,12 +205,31 @@ class Event
add_interval += (freq - rest)
end
add_interval = add_interval.send(period_str)
+ need_check_start = false
+ if weekdays
+ add_interval -= @start_date.wday.day
+ need_check_start = true
+ end
+ start_date = [start_date, @start_date].max
@start_date += add_interval
@end_date += add_interval
new_end_date = has_recurring_end_date ? [re.recurring_end_date,end_date].min : end_date
while @start_date <= new_end_date do
- if @start_date >= start_date && @start_date != org_start
- @recurring << data.merge({:start => @start_date.to_json.gsub('"',''), :end => @end_date.to_json.gsub('"','')})
+ if weekdays
+ weekdays.each do |w|
+ new_start = (@start_date + w.day)
+ if need_check_start && new_start < start_date
+ next
+ end
+ if new_start != org_start
+ @recurring << data.merge({:start => new_start.to_json.gsub('"',''), :end => (@end_date + w.day).to_json.gsub('"','')})
+ end
+ end
+ need_check_start = false
+ else
+ if @start_date != org_start
+ @recurring << data.merge({:start => @start_date.to_json.gsub('"',''), :end => @end_date.to_json.gsub('"','')})
+ end
end
@start_date += interval
@end_date += interval
diff --git a/app/views/admin/calendar_types/_form.html.erb b/app/views/admin/calendar_types/_form.html.erb
index df75bce..00ac204 100644
--- a/app/views/admin/calendar_types/_form.html.erb
+++ b/app/views/admin/calendar_types/_form.html.erb
@@ -1,6 +1,6 @@
<%= label_tag("color", t("calendar.color")) %>