diff --git a/app/assets/javascripts/calendar.js b/app/assets/javascripts/calendar.js index cf921a4..c2e2fc9 100644 --- a/app/assets/javascripts/calendar.js +++ b/app/assets/javascripts/calendar.js @@ -634,6 +634,7 @@ var EventDialog = function(calendar,event){ template += '
'; } } @@ -654,6 +655,40 @@ var EventDialog = function(calendar,event){ event_quick_view.find(".event-close-btn").one("click",function(){_t.dismiss();}); event_quick_view.find("a.delete").one("click",function(){calendar.deleteEvent(_this_event.delete_url,_this_event._id);return false;}); event_quick_view.find("a.edit").one("click",function(){calendar.editEvent(_this_event.edit_url,_this_event.allDay);return false;}); + event_quick_view.find("a.hide_event").off("click").on("click", function(){ + var _this = $(this); + var new_hide = _this.attr('data-new-hide'); + if(new_hide == "true"){ + if(!(window.confirm(I18n.locale == 'zh_tw' ? "您確定要隱藏該事件嗎?" : "Are you sure to hide event?"))){ + return false; + } + } + $.get(_this.attr('href') + "&hide="+ new_hide).done(function(data){ + if(data["success"]){ + if(new_hide == "true"){ + if($('#display_hide').length != 0 && $('#display_hide').prop('checked')){ + _this.removeClass('btn-danger').addClass('btn-success'); + _this.text("Show"); + _this.attr('data-new-hide', "false"); + _this_event.event.setProp('color', _this_event.hide_color); + _this_event.event.setExtendedProp('hide', true); + }else{ + _this_event.event.remove(); + } + }else{ + _this.removeClass('btn-success').addClass('btn-danger'); + _this.text("Hide"); + _this.attr('data-new-hide', "true"); + _this_event.event.setProp('color', _this_event.org_color); + _this_event.event.setExtendedProp('hide', false); + } + event_quick_view.remove(); + }else{ + alert("Something went wrong!") + } + }) + return false; + }) var window_width = $(window).width(), window_height = $(window).height(); var dialog_width = event_quick_view.width(), diff --git a/app/controllers/admin/calendars_controller.rb b/app/controllers/admin/calendars_controller.rb index d44d40d..ae413c8 100644 --- a/app/controllers/admin/calendars_controller.rb +++ b/app/controllers/admin/calendars_controller.rb @@ -15,15 +15,12 @@ class Admin::CalendarsController < OrbitAdminController if params[:start].present? && params[:end].present? sdt = Time.at(params[:start].to_i) edt = Time.at(params[:end].to_i) - @monthly_events = Event.monthly_event(sdt,edt).with_categories(filters("category")) - .with_tags(filters("tag")).convert_front - @re = Event.with_categories(filters("category")).with_tags(filters("tag")).recurring_event(sdt,edt) - allevents = @monthly_events.inject(@re, :<<).sort_by{|e| e[:start]} - events = allevents.to_json - events = JSON.parse(events) - events.each_with_index do |e,i| - e["can_edit"] = can_edit_or_delete_event?(allevents[i]) - @events << e + allevents = Event.with_categories(filters("category")) + .with_tags(filters("tag")).agenda_events(sdt,edt, params[:display_hide] == 'true') + allevents.each do |e| + event_json = e.as_json + event_json["can_edit"] = can_edit_or_delete_event?(e) + @events << event_json end end if request.xhr? @@ -94,17 +91,29 @@ class Admin::CalendarsController < OrbitAdminController # GET /events/1/edit def edit @event = Event.find(params[:id]) - categories = user_authenticated_categories rescue [] - if categories.first == "all" - @categories = CalendarType.all + if params[:hide] + hide_mode = (params[:hide] == 'true') + start = params[:start] + if hide_mode + @event.hide_start << start + else + @event.hide_start.delete(start) + end + @event.save + render :json => {:success=>true}.to_json else - @categories = CalendarType.where(:category_id.in => categories) rescue [] + categories = user_authenticated_categories rescue [] + if categories.first == "all" + @categories = CalendarType.all + else + @categories = CalendarType.where(:category_id.in => categories) rescue [] + end + @end_d_t = @event.end.strftime("%Y/%m/%d %H:%M").to_s + @start_d_t = @event.start.strftime("%Y/%m/%d %H:%M").to_s + @all_day = @event.all_day + @recurring = @event.recurring + render :layout => false end - @end_d_t = @event.end.strftime("%Y/%m/%d %H:%M").to_s - @start_d_t = @event.start.strftime("%Y/%m/%d %H:%M").to_s - @all_day = @event.all_day - @recurring = @event.recurring - render :layout => false end # POST /events @@ -138,8 +147,7 @@ class Admin::CalendarsController < OrbitAdminController bulletin.update_attributes(calendar_start_date: p1[:start],calendar_end_date: p1[:end],calendar_all_day: p1[:all_day],calendar_type_id: p1[:calendar_type_id]) end if @event.update_attributes(p1) - e = @event.to_json - e = JSON.parse(e) + e = @event.as_json({}, true) e["can_edit"] = true render json: e.to_json else diff --git a/app/models/event.rb b/app/models/event.rb index c8d749d..573cfd1 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -29,6 +29,7 @@ class Event belongs_to :calendar_type field :url field :url_translations, type: Hash, default: {} + field :hide_start, type: Array, default: [] # store date string, ex: ["2022-07-29"] 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) @@ -66,11 +67,15 @@ class Event self['title'] = self.title self['note'] = self.note self['url'] = self.url + if self.hide_start_changed? + self.hide_start.sort! + end if self.is_weekdays self.weekdays = (1..5).to_a #平日 else self.weekdays = self.weekdays.map{|s| s.to_i}.sort end + true end ######################################## validates_presence_of :title, :message => "Please fill the title of the Event", :if => lambda { self['title_translations'].blank? } @@ -108,7 +113,7 @@ class Event "Yearly" ] - def as_json(options = {}) + def as_json(options = {}, preserve_hide = false) tmp_note = self.note || "" if self.recurring freq = self.frequency.to_i @@ -149,55 +154,72 @@ class Event tmp_note = I18n.t("calendar.every_year_day", {:every_n_years=>every_n_years,:date=>date}) + "