Добавление функциональности событий в мой календарь Redmine с использованием стека битнами

Я хочу добавить, обновить и удалить событие в моем календаре Redmine (почти как в календаре Google). Я установил Redmine в стеке Bitnami. Но я не могу понять структуру кода, так как у меня нет надлежащей документации. Есть ли кто-нибудь, кто может мне в этом помочь. Приведенный ниже код - это мой контроллер календаря.

       class CalendarsController < ApplicationController
      menu_item :calendar
       before_action :find_optional_project

      rescue_from Query::StatementInvalid, :with => :query_statement_invalid

      helper :issues
      helper :projects
      helper :queries
      include QueriesHelper

      def show
if params[:year] and params[:year].to_i > 1900
  @year = params[:year].to_i
  if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
    @month = params[:month].to_i
  end
end
@year ||= User.current.today.year
@month ||= User.current.today.month

@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
retrieve_query
@query.group_by = nil
@query.sort_criteria = nil
if @query.valid?
  events = []
  events += @query.issues(:include => [:tracker, :assigned_to, :priority],
                          :conditions => ["((start_date BETWEEN ? AND ?) OR (due_date BETWEEN ? AND ?))", @calendar.startdt, @calendar.enddt, @calendar.startdt, @calendar.enddt]
                          )
  events += @query.versions(:conditions => ["effective_date BETWEEN ? AND ?", @calendar.startdt, @calendar.enddt])

  @calendar.events = events
end

render :action => 'show', :layout => false if request.xhr?


end
end

Ниже приведен файл calender_helper.rb.

        module CalendarsHelper
  def link_to_previous_month(year, month, options = {})
    target_year, target_month = if month == 1
                                  [year - 1, 12]
                                else
                                  [year, month - 1]
                                end

    name = if target_month == 12
             "#{month_name(target_month)} #{target_year}"
           else
             "#{month_name(target_month)}"
           end

    # \xc2\xab(utf-8) = &#171;
    link_to_month(("\xc2\xab " + name), target_year, target_month, options)
  end

  def link_to_next_month(year, month, options = {})
    target_year, target_month = if month == 12
                                  [year + 1, 1]
                                else
                                  [year, month + 1]
                                end

    name = if target_month == 1
             "#{month_name(target_month)} #{target_year}"
           else
             "#{month_name(target_month)}"
           end

    # \xc2\xbb(utf-8) = &#187;
    link_to_month((name + " \xc2\xbb"), target_year, target_month, options)
  end

  def link_to_month(link_name, year, month, options = {})
    link_to(link_name, {:params => request.query_parameters.merge(:year => year, :month => month)}, options)
  end
end

Ниже представлен вид show.html.erb.

<h2><%= @query.new_record? ? l(:label_calendar) : @query.name %></h2>

<%= form_tag({:controller => 'calendars', :action => 'show', :project_id => @project},
             :method => :get, :id => 'query_form') do %>
<%= hidden_field_tag 'set_filter', '1' %>
<fieldset id = "filters" class = "collapsible <%= @query.new_record? ? "" : "collapsed" %>">
  <legend onclick = "toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
  <div style = "<%= @query.new_record? ? "" : "display: none;" %>">
    <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
  </div>
</fieldset>

<p style = "float:right;">
  <%= link_to_previous_month(@year, @month, :accesskey => accesskey(:previous)) %> | <%= link_to_next_month(@year, @month, :accesskey => accesskey(:next)) %>
</p>

<p class = "buttons">
<%= label_tag('month', l(:label_month)) %>
<%= select_month(@month, :prefix => "month", :discard_type => true) %>
<%= label_tag('year', l(:label_year)) %>
<%= select_year(@year, :prefix => "year", :discard_type => true) %>

<%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
</p>
<% end %>

<%= error_messages_for 'query' %>
<% if @query.valid? %>
<%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %>

<%= call_hook(:view_calendars_show_bottom, :year => @year, :month => @month, :project => @project, :query => @query) %>

<p class = "legend cal">
  <span class = "starting"><%= l(:text_tip_issue_begin_day) %></span>
  <span class = "ending"><%= l(:text_tip_issue_end_day) %></span>
  <span class = "starting ending"><%= l(:text_tip_issue_begin_end_day) %></span>
</p>
<% end %>

<% content_for :sidebar do %>
    <%= render :partial => 'issues/sidebar' %>
<% end %>

<% html_title(l(:label_calendar)) -%>

Это единственный код, связанный с календарем в routes.rb

      get '/projects/:project_id/issues/calendar', :to => 'calendars#show', :as => 'project_calendar'
      get '/issues/calendar', :to => 'calendars#show'
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
0
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом контроллере у вас есть только действие show (HTTP GET). Если вам нужны update и delete, вы должны добавить для них методы и логику. Вам также понадобятся маршруты в config/routes.rb.

Я также рекомендую вам взглянуть на другие контроллеры, так как этот больше похож на средство визуализации календаря и не более того. Я также не вижу действия create (HTTP POST), что означает, что вы создаете объект где-то еще, и update и delete также должны присутствовать там (если они еще не определены).

Спасибо за ваш ответ. Я отредактировал свой вопрос с помощью представления и вспомогательного кода, а также маршрутов. Пожалуйста, дайте мне знать, как продолжить создание событий.

anaj 14.06.2018 09:21

Другие вопросы по теме