From 15f4820c341cf979d0594e8ff62c25b685ce5df5 Mon Sep 17 00:00:00 2001 From: Christian Reichmann Date: Tue, 27 Nov 2012 08:52:35 +0100 Subject: [PATCH] portage to redmine 2.1.x --- app/controllers/doodle_answers_controller.rb | 18 +-- app/controllers/doodles_controller.rb | 17 ++- app/models/doodle.rb | 25 +++- app/models/doodle_answers.rb | 3 +- app/models/doodle_answers_edits.rb | 2 +- app/views/doodles/_doodle.html.erb | 54 +++++--- .../doodles/_doodle_create_answer.html.erb | 2 +- .../doodles/_doodle_update_answer.html.erb | 4 +- app/views/doodles/_form.html.erb | 10 +- app/views/doodles/_options.html.erb | 6 +- app/views/doodles/index.html.erb | 56 ++++---- app/views/doodles/new.html.erb | 8 +- app/views/doodles/show.html.erb | 65 +++++---- assets/stylesheets/redmine_doodles.css | 127 +++++++++++++++++- config/locales/de.yml | 36 ++--- config/locales/en.yml | 35 ++--- config/routes.rb | 22 ++- init.rb | 7 +- 18 files changed, 348 insertions(+), 149 deletions(-) diff --git a/app/controllers/doodle_answers_controller.rb b/app/controllers/doodle_answers_controller.rb index 0b120be..c21e2b5 100644 --- a/app/controllers/doodle_answers_controller.rb +++ b/app/controllers/doodle_answers_controller.rb @@ -7,17 +7,17 @@ class DoodleAnswersController < ApplicationController before_filter :find_doodle_answer, :only => [:update] before_filter :authorize, :is_doodle_active? - verify :method => :post, :only => [:create], :redirect_to => {:controller => 'doodles', :action => 'show', :id => :doodle_id} + #verify :method => :post, :only => [:create], :redirect_to => {:controller => 'doodles', :action => 'show', :id => :doodle_id} def create - @response.answers = Array.new(@doodle.options.size) {|index| (params[:answers] || []).include?(index.to_s)} - @response.save ? flash[:notice] = l(:doodle_answer_create_successful) : flash[:warning] = l(:doodle_answer_create_unsuccessful) + @res.answers = Array.new(@doodle.options.size) {|index| (params[:answers] || []).include?(index.to_s)} + @res.save ? flash[:notice] = l(:doodle_answer_create_successful) : flash[:warning] = l(:doodle_answer_create_unsuccessful) redirect_to :controller => 'doodles', :action => 'show', :id => @doodle end def update - @response.answers = Array.new(@doodle.options.size) {|index| (params[:answers] || []).include?(index.to_s)} - @response.save ? flash[:notice] = l(:doodle_answer_update_successful) : flash[:warning] = l(:doodle_answer_update_unsuccessful) + @res.answers = Array.new(@doodle.options.size) {|index| (params[:answers] || []).include?(index.to_s)} + @res.save ? flash[:notice] = l(:doodle_answer_update_successful) : flash[:warning] = l(:doodle_answer_update_unsuccessful) redirect_to :controller => 'doodles', :action => 'show', :id => @doodle end @@ -25,16 +25,16 @@ def update def find_doodle @doodle = Doodle.find(params[:doodle_id], :include => [:project, :responses]) - @response = @doodle.responses.new(:author => User.current) + @res = @doodle.responses.new(:author => User.current) @project = @doodle.project rescue ActiveRecord::RecordNotFound render_404 end def find_doodle_answer - @response = DoodleAnswers.find(params[:id], :include => [:author, {:doodle => :project}]) - puts @response - @doodle = @response.doodle + @res = DoodleAnswers.find(params[:id], :include => [:author, {:doodle => :project}]) + puts @res + @doodle = @res.doodle @project = @doodle.project end diff --git a/app/controllers/doodles_controller.rb b/app/controllers/doodles_controller.rb index 528b77c..b5a8063 100644 --- a/app/controllers/doodles_controller.rb +++ b/app/controllers/doodles_controller.rb @@ -5,7 +5,7 @@ class DoodlesController < ApplicationController before_filter :find_doodle, :only => [:show, :destroy, :update, :lock, :edit] before_filter :authorize - verify :method => :post, :only => [:lock], :redirect_to => { :action => :show } + #verify :method => :post, :only => [:lock], :redirect_to => { :action => :show } helper :watchers include WatchersHelper @@ -15,21 +15,23 @@ def index end def new + @doodle = Doodle.new() end def edit end def show + @doodle = Doodle.find(params[:id]) @author = @doodle.author @responses = @doodle.responses @winners = @doodle.winning_columns # Give the current user an empty answer if she hasn't answered yet and the doodle is active if @doodle.active? && User.current.allowed_to?(:answer_doodles, @project) - @response = @responses.find_by_author_id(User.current.id) - @response ||= DoodleAnswers.new :author => User.current - @response.answers ||= Array.new(@doodle.options.size, false) - @responses = @responses | [ @response ] + @res = @responses.find_by_author_id(User.current.id) + @res ||= DoodleAnswers.new :author => User.current + @res.answers = Array.new(@doodle.options.size, false) if @res.answers.empty? || @res.answers.nil? + @responses = @responses | [ @res ] end # Code later needed for comments #@comments = @doodle.comments @@ -54,6 +56,8 @@ def create end def update + expiry_date = Date.strptime(params[:doodle][:expiry_date], t("date.formats.default")) + params[:doodle][:expiry_date] = params[:doodle][:expiry_date].empty? ? '' : expiry_date.strftime("%d.%m.%Y") @doodle.attributes = params[:doodle] if @doodle.save flash[:notice] = l(:doodle_update_successful) @@ -65,8 +69,9 @@ def update end def lock + @doodle = Doodle.find(params[:id]) @doodle.update_attribute :locked, params[:locked] - redirect_to :action => 'show', :id => @doodle + redirect_to :action => 'show', :id => @doodle.id end def preview diff --git a/app/models/doodle.rb b/app/models/doodle.rb index 4985db9..832fc83 100644 --- a/app/models/doodle.rb +++ b/app/models/doodle.rb @@ -15,14 +15,29 @@ class Doodle < ActiveRecord::Base acts_as_activity_provider :find_options => {:include => [:project, :author]}, :author_key => :author_id - validates_presence_of :title, :options + validates :title, :options, :presence => true before_validation :sanitize_options after_create :add_author_as_watcher, :send_mails def results - @results ||= responses.empty? ? Array.new(options.length, 0) : responses.map(&:answers).transpose.map { |x| x.select { |v| v }.length } + old_answers = responses.map(&:answers)[0] + new_answers = responses.map(&:answers)[1] + answers = nil + if( !(old_answers.nil?) && !(new_answers.nil?) && !(old_answers.length == new_answers.length)) + temp = Array.new(new_answers.length, false) + temp2 = old_answers.length < new_answers.length ? old_answers : new_answers + temp2.each_with_index do |el,i| + temp[i] = old_answers[i] + end + answers = [temp,new_answers] + responses.map(&:answers)[0] = temp + else + answers = responses.map(&:answers) + end + @results ||= responses.empty? ? Array.new(options.length, 0) : answers.transpose.map { |x| x.select { |v| v }.length } +# @results ||= responses.empty? ? Array.new(options.length, 0) : responses.map(&:answers).transpose.map { |x| x.select { |v| v }.length } end def active? @@ -30,7 +45,7 @@ def active? end def winning_columns - @winning_columns ||= self.results.max == 0 ? [] : self.results.enum_with_index.collect {|v,i| i if v == self.results.max}.compact + @winning_columns ||= self.results.max == 0 ? [] : self.results.each_with_index.collect {|v,i| i if v == self.results.max}.compact end def previewfy @@ -61,8 +76,8 @@ def sanitize_options end def send_mails - Mailer.deliver_doodle_added(self) - Mailer.deliver_doodle_added_with_answer_request(self) + #Mailer.deliver_doodle_added(self) + #Mailer.deliver_doodle_added_with_answer_request(self) end def add_author_as_watcher diff --git a/app/models/doodle_answers.rb b/app/models/doodle_answers.rb index 6ba5a2b..984f944 100644 --- a/app/models/doodle_answers.rb +++ b/app/models/doodle_answers.rb @@ -7,7 +7,7 @@ class DoodleAnswers < ActiveRecord::Base belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' has_many :edits, :class_name => 'DoodleAnswersEdits', :dependent => :delete_all - validates_presence_of :answers + validates :answers,:presence => true after_save :create_edit @@ -18,6 +18,7 @@ def answers_with_css_classes def css_classes return @css_classes unless @css_classes.nil? @css_classes = [] + self.answers.each_with_index do |answer,i| css = "answer" css << (answer ? " yes" : " no") diff --git a/app/models/doodle_answers_edits.rb b/app/models/doodle_answers_edits.rb index d3df037..d8189f3 100644 --- a/app/models/doodle_answers_edits.rb +++ b/app/models/doodle_answers_edits.rb @@ -28,6 +28,6 @@ def created_on private def send_mails - Mailer.deliver_doodle_answered(self) + #Mailer.deliver_doodle_answered(self) end end diff --git a/app/views/doodles/_doodle.html.erb b/app/views/doodles/_doodle.html.erb index 49fb79c..bc9a509 100644 --- a/app/views/doodles/_doodle.html.erb +++ b/app/views/doodles/_doodle.html.erb @@ -1,33 +1,57 @@ -
- +
+
+
<% @doodle.options.each_index do |i| %> - /> + /> <% end %> - + <% @doodle.options.each_with_index do |option,i| %> - ><%=h option %> + align="center"><%=h option %> <% end %> - <% @responses.each do |response| %> - - - <% response.answers_with_css_classes.each_with_index do |answer_with_css,i| %> - <% answer, css = *answer_with_css %> - + + <% @responses.each do |res| %> + + + + <% p res.answers_with_css_classes %> + <% res.answers_with_css_classes.each_with_index do |answer_with_css,i| %> + <% unless @doodle.options[i].nil? %> + <% answer, css = *answer_with_css %> + + <% end %> + <% end %> + <% diff = @doodle.options.length - res.answers_with_css_classes.length %> + <% if diff > 0 %> + <% i = res.answers_with_css_classes.length %> + <% diff.times do %> + <% i += 1 %> + + <% end %> <% end %> <% end %> - - <% @doodle.results.each_with_index do |res,i| %> - ><%= res %> + + + <% @doodle.results.each_with_index do |res,i| %> + <% unless @doodle.options[i].nil? %> + + <% end %> + <% end %> + <% diff = @doodle.options.length - @doodle.results.length %> + <% if diff > 0 %> + <% diff.times do %> + + <% end %> <% end %>
<%= avatar(response.author, :size => "24") %><%=h response.author.name %><%= check_box_tag "answers[]", i, answer, :disabled => (!@doodle.active? || !@response || !(response.author == User.current)), :onclick => "$(this).up('.answer').toggleClassName('yes').toggleClassName('no')" %>
<%= h res.author.name %><%= check_box_tag "answers[]", i, answer, :disabled => (!@doodle.active? || !@res || !(res.author == User.current)), :onclick => "$(this).closest('.answer').toggleClass('yes').toggleClass('no')" %><%= check_box_tag "answers[]", i, nil, :disabled => (!@doodle.active? || !@res || !(res.author == User.current)), :onclick => "$(this).closest('.answer').toggleClass('yes').toggleClass('no')" %>
<%= l(:label_result_plural)%><%= l(:label_result_plural)%>" align="center"><%= res %>0
-
\ No newline at end of file + + \ No newline at end of file diff --git a/app/views/doodles/_doodle_create_answer.html.erb b/app/views/doodles/_doodle_create_answer.html.erb index 1bdb033..1ca1014 100644 --- a/app/views/doodles/_doodle_create_answer.html.erb +++ b/app/views/doodles/_doodle_create_answer.html.erb @@ -1,4 +1,4 @@ -<% form_tag({:controller => 'doodle_answers', :action => 'create', :doodle_id => @doodle}, {:method => :post}) do %> +<%= form_tag({:controller => 'doodle_answers', :action => 'create', :doodle_id => @doodle.id}, {:method => :post}) do %> <%= render :partial => 'doodle' %> diff --git a/app/views/doodles/_doodle_update_answer.html.erb b/app/views/doodles/_doodle_update_answer.html.erb index 867bb69..3e37f96 100644 --- a/app/views/doodles/_doodle_update_answer.html.erb +++ b/app/views/doodles/_doodle_update_answer.html.erb @@ -1,7 +1,7 @@ -<% form_tag({:controller => 'doodle_answers', :action => 'update', :id => @response}, {:method => :put}) do %> +<%= form_tag({:controller => 'doodle_answers', :action => 'update', :id => @res}, {:method => :put}) do %> <%= render :partial => 'doodle' %> -<%= submit_tag l(:button_update) %> +<%= submit_tag l(:label_doodle_answer) %> <% end %> \ No newline at end of file diff --git a/app/views/doodles/_form.html.erb b/app/views/doodles/_form.html.erb index 37fd940..b18d566 100644 --- a/app/views/doodles/_form.html.erb +++ b/app/views/doodles/_form.html.erb @@ -2,19 +2,19 @@

<%= f.text_field :title, :required => true, :size => 60 %>

-

<%= f.text_field :expiry_date, :size => 10 %><%= calendar_for('doodle_expiry_date') %>

-

<%= f.text_area :description, :cols => 60, :rows => 8, :class => 'wiki-edit' %> - <% if @doodle.new_record? %> +

<%= f.text_field :expiry_date, :value => format_date(@doodle[:expiry_date]) , :size => 10 %><%= calendar_for('doodle_expiry_date') %>

+

<%= f.text_area :description, :cols => 60, :rows => 8, :class => 'wiki-edit' %>

+ <%# if @doodle.new_record? %>
<%= render :partial => 'options', :locals => {:options => @doodle.options} %>
-

<%= link_to_function l(:label_add_options) do |page| +

<%= link_to_function l(:label_add_options),nil do |page| page.insert_html :bottom, :options, :partial => 'options', :locals => {:options => nil} end %>

<% @project.users.sort.each do |user| -%> - <% end -%> + <%# end -%>

<% end %>
diff --git a/app/views/doodles/_options.html.erb b/app/views/doodles/_options.html.erb index e1ac557..f74dd1c 100644 --- a/app/views/doodles/_options.html.erb +++ b/app/views/doodles/_options.html.erb @@ -1,5 +1,7 @@ -<% (options.nil? ? Array.new(5, "") : (options + Array.new(options.length < 5 ? (5 - options.length) : 0,""))).each do |option| %> +<% counter = 0; + (options.nil? ? Array.new(5, "") : (options + Array.new(options.length < 5 ? (5 - options.length) : 0,""))).each do |option| %>
-

<%= label "doodle_options_", nil, l(:field_option) %> <%= text_field_tag "doodle[options][]", option, :size => 60 %> <%= link_to_function l(:button_delete), "$(this).up('.option').remove()" %>

+ <% counter += 1 %> +

<%= label "doodle_options_", nil, l(:field_option) %> <%= text_field_tag "doodle[options][]", option, :size => 60, :id => "doodle_options_#{counter}" %><%= calendar_for('doodle_options_'+counter.to_s()) %> <%= link_to_function l(:button_delete), "$(this).up('.option').remove()" %>

<% end %> \ No newline at end of file diff --git a/app/views/doodles/index.html.erb b/app/views/doodles/index.html.erb index 3f22500..454dc86 100644 --- a/app/views/doodles/index.html.erb +++ b/app/views/doodles/index.html.erb @@ -1,38 +1,46 @@ -
-<%= link_to_if_authorized(l(:label_doodle_new), - {:controller => 'doodles', :action => 'new', :project_id => @project}, - :class => 'icon icon-add', - :onclick => 'Element.show("add-doodle"); Form.Element.focus("doodle_title"); return false;') if @project %> -
+<% content_for :sidebar_right do %> + <% if @project && User.current.allowed_to?({:controller => 'doodles', :action => 'new'}, @project) %> + <%= link_to l(:label_doodle_new), + {:controller => 'doodles', :action => 'new', :project_id => @project}, + :class => 'icon icon-add', + :onclick => '$("#add-doodle").show(); $("#doodle_title").focus(); $("#preview").hide(); return false;' %> + <% end %> +<%end%> - -

<%= l(:label_doodle_plural)%>

- -<% if @doodles.empty? %> -

<%= l(:label_no_data) %>

-<% else %> -<% @doodles.each do |doodle| %> -

<%= link_to h(doodle.title), :controller => 'doodles', :action => 'show', :id => doodle %>

-

<%= authoring doodle.created_on, doodle.author %>

-
- <%= textilizable(doodle.description[0,254] + (doodle.description[254].nil? ? "" : "…")) unless doodle.description.nil? %> -
-<% end %> -<% end %> +
+

<%= l(:label_doodle_plural)%>

+ + <% if @doodles.empty? %> +

<%= l(:label_no_data) %>

+ <% else %> + <% @doodles.each do |doodle| %> + <%= link_to(doodle, :class => "link_to_doodle") do %> +
+
+ <%= l(:doodle_ends) %> <%= format_date(doodle.expiry_date) %> +
+

<%= doodle.title %>

+

<%= strip_tags(authoring doodle.created_on, doodle.author) %>

+ <%= textilizable(doodle.description[0,254] + (doodle.description[254].nil? ? "" : "…")) unless doodle.description.nil? %> +
+ <% end %> + <% end %> + <% end %> +
<% html_title l(:label_doodle_plural) -%> diff --git a/app/views/doodles/new.html.erb b/app/views/doodles/new.html.erb index 041a2d1..dd48fc9 100644 --- a/app/views/doodles/new.html.erb +++ b/app/views/doodles/new.html.erb @@ -1,5 +1,5 @@

<%= l(:label_doodle_new) %>

-<% labelled_tabular_form_for :doodle, @doodle, :url => { :controller => 'doodles', :action => 'create', :project_id => @project }, :html => { :id => 'doodle-form' } do |f| %> +<%= labelled_form_for :doodle, @doodle, :url => { :controller => 'doodles', :action => 'create', :project_id => @project }, :html => { :id => 'doodle-form' } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= submit_tag l(:button_create) %> <%= link_to_remote l(:label_preview), @@ -9,4 +9,8 @@ :with => "Form.serialize('doodle-form')" }, :accesskey => accesskey(:preview) %> <% end if @project %> -
\ No newline at end of file +
+ +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'calendar' %> +<% end %> diff --git a/app/views/doodles/show.html.erb b/app/views/doodles/show.html.erb index f4a928c..00ac8ba 100644 --- a/app/views/doodles/show.html.erb +++ b/app/views/doodles/show.html.erb @@ -1,55 +1,64 @@ -
-<%= watcher_tag(@doodle, User.current) %> -<%= link_to_if_authorized(l(:button_lock), {:action => 'lock', :id => @doodle, :locked => 1}, :method => :post, :class => 'icon icon-lock') if !@doodle.locked? %> -<%= link_to_if_authorized(l(:button_unlock), {:action => 'lock', :id => @doodle, :locked => 0}, :method => :post, :class => 'icon icon-unlock') if @doodle.locked? %> -<%= link_to_if_authorized l(:button_edit), - {:action => 'edit', :id => @doodle}, - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => 'Element.show("edit-doodle"); return false;' %> -<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy'}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> -
+<% content_for :sidebar_right do %> + +<% end %> -

<%= l(:label_doodle)%> #<%= @doodle.id %>

+

<%= l(:label_doodle)%>

<% if authorize_for('doodles', 'edit') %> <% end %> - -
+
+
<%= avatar(@author, :size => "64") %> -

<%=h @doodle.title %>

-

+

<%=l(:field_expiry_date)%>: <%= format_date(@doodle.expiry_date) %>
+

<%=h @doodle.title %>

+
<%= authoring @doodle.created_on, @doodle.author %> -

-

<%=l(:field_expiry_date)%>: <%= format_date(@doodle.expiry_date) %>

- <% unless @doodle.should_answer.empty? -%> -

<%=l(:field_missing_answers)%>: <%= @doodle.users_missing_answer.size %> <%= "(#{@doodle.users_missing_answer.collect(&:name).join(", ")})" if User.current == @doodle.author && !@doodle.users_missing_answer.empty? %>

- <% end -%> -
+

<%=l(:field_description)%>

<%= textilizable(@doodle.description) %>
+ <% unless @doodle.should_answer.empty? -%> +

<%=l(:field_missing_answers)%>: <%= @doodle.users_missing_answer.size %> <%= "(#{@doodle.users_missing_answer.collect(&:name).join(", ")})" if User.current == @doodle.author && !@doodle.users_missing_answer.empty? %>

+ <% end -%>
-<% unless @response %> +<% unless @res %> <%= render :partial => 'doodle' %> <% else %> -<%= render :partial => @response.new_record? ? 'doodle_create_answer' : 'doodle_update_answer' %> +<%#= render :partial => 'doodle_create_answer' %> +<%= render :partial => @res.new_record? ? 'doodle_create_answer' : 'doodle_update_answer' %> <% end %> - +
<% html_title "Doodle #{@doodle.id}: #{@doodle.title}" -%> \ No newline at end of file diff --git a/assets/stylesheets/redmine_doodles.css b/assets/stylesheets/redmine_doodles.css index e78cd1c..4865274 100644 --- a/assets/stylesheets/redmine_doodles.css +++ b/assets/stylesheets/redmine_doodles.css @@ -1,16 +1,132 @@ -/* Doodle details */ +.doodle a.link_to_doodle h3, .doodle.details h2 { + margin-bottom: 3px; + color: #707070; +} -div.doodle.details { background: #ffffdd; padding: 6px; margin: 1em 0px; border: 1px solid #d7d7d7; } +.doodle a.link_to_doodle .author, .doodle.details .author { + margin-top: 0px; + color: #9D9D9D; +} +.doodle a.link_to_doodle { + text-decoration: none; + color: #707070; +} + +.doodle fieldset { + padding: 3px 15px; +} + +.doodle fieldset:hover { + background-color: #F4F4F4; +} + +.doodle .info { + float: right; + margin-top: 5px; + margin-rigth: -10px; + font-size: .9em; +} + +.doodle.details .description { + border-top: 1px solid #aaaaaa; + padding-top: 10px; +} + +.list.doodle .current td { + border-top: 1px solid #e2dfdf; + border-bottom: 1px solid #e2dfdf; + background-color: #ffffff; +} + +.list.doodle { + width: 530px; + overflow: auto; + padding-bottom: 20px; +} + +.list.doodle tbody tr:first-child td:first-child { + -moz-border-radius: 10px 0 0 0; + -webkit-border-radius: 10px 0 0 0; + -khtml-border-radius: 10px 0 0 0; + border-radius: 10px 0 0 0; + border-top: 1px solid #D0D0D0; + border-left: 1px solid #D0D0D0; +} + +.list.doodle tbody tr:first-child td:last-child { +-moz-border-radius: 0 10px 0 0; +-webkit-border-radius: 0 10px 0 0; +-khtml-border-radius: 0 10px 0 0; +border-radius: 0 10px 0 0; + border-top: 1px solid #D0D0D0; + border-right: 1px solid #D0D0D0; +} + +.list.doodle tbody tr:last-child td:first-child { + -moz-border-radius: 0 0 0 10px; + -webkit-border-radius: 0 0 0 10px; + -khtml-border-radius: 0 0 0 10px; + border-radius: 0 0 0 10px; + border-bottom: 1px solid #D0D0D0; + border-left: 1px solid #D0D0D0; +} + +.list.doodle tbody tr:last-child td:last-child { + -moz-border-radius: 0 0 10px 0; + -webkit-border-radius: 0 0 10px 0; + -khtml-border-radius: 0 0 10px 0; + border-radius: 0 0 10px 0; + border-bottom: 1px solid #D0D0D0; + border-right: 1px solid #D0D0D0; +} + +.list.doodle tbody tr:first-child td {border-top: 1px solid #D0D0D0;} +.list.doodle tbody tr td:first-child {border-left: 1px solid #D0D0D0; border-right: 1px solid #D0D0D0;} +.list.doodle tbody tr td:last-child {border-right: 1px solid #D0D0D0;} +.list.doodle tbody tr:last-child td {border-bottom: 1px solid #D0D0D0;} + +.list.doodle tr.even td {background-color: #FDFDFD;} +.list.doodle tr.odd td {background-color: #F4F4F4;} +.list.doodle tr.current td { + background-color: #FFF; + border-bottom: 2px solid #f86042; + border-top: 2px solid #f86042; +} +.list.doodle tr.current td:first-child { + outline; + border-left: 2px solid #f86042; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + -khtml-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.list.doodle tr.current td:last-child { + border-right: 2px solid #f86042; + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + -khtml-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} +.list.doodle tr.even td.yes {background-color: #ebfbe5;} +.list.doodle tr.odd td.yes {background-color: #defbd3;} +.list.doodle tr.results td {background-color: #cddebf} +.list.doodle tr.results td.winner {color:#ffffff; background-color: #7DB414} div.doodle.details div.subject div div { padding-left: 16px; } div.doodle.details div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;} div.doodle.details div.subject>div>p { margin-top: 0.5em; } div.doodle.details div.subject h3 {margin: 0; margin-bottom: 0.1em;} div.doodle.details img.gravatar { float: right; margin: 0 0 0 1em; padding: 5px; } div.doodle.details table img.gravatar { height: 14px; width: 14px; padding: 2px; float: left; margin: 0 0.5em 0 0; } +//div.doodle.details { padding: 6px; margin: 1em 0px; border: 1px solid #d7d7d7; } + + +/* Doodle details + +div.doodle.details { background: #ffffdd; padding: 6px; margin: 1em 0px; border: 1px solid #d7d7d7; } -/* Doodles view: */ + Doodles view: table.doodle { border: none; width: auto; } table.doodle th { white-space: normal; } table.doodle td { vertical-align: middle; text-align: center; } @@ -28,5 +144,6 @@ table.doodle col.winner { border: 2px solid #34FF34; } div.doodle { overflow: auto; } /* Activity view: */ -dt.doodle { background-image: url(../images/date.png); } -dt.doodle-answers { background-image: url(../images/date_edit.png); } \ No newline at end of file +/* dt.doodle { background-image: url(../images/date.png); } +dt.doodle-answers { background-image: url(../images/date_edit.png); } +*/ \ No newline at end of file diff --git a/config/locales/de.yml b/config/locales/de.yml index 76275f8..ac41e60 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1,27 +1,29 @@ # German strings go here for Rails i18n de: - doodle_inactive: "Doodle ist inaktiv" - doodle_update_successful: "Doodle erfolgreich aktualisiert" - doodle_update_unsuccessful: "Fehler beim Aktualisieren des Doodles" - doodle_answer_create_successful: "Doodle erfolgreich beantwortet" - doodle_answer_create_unsuccessful: "Fehler beim Beantworten des Doodles" + doodle_inactive: "Die Umfrage ist inaktiv" + doodle_ends: Umfrage endet am + doodle_update_successful: "Die Umfrage wurde erfolgreich aktualisiert" + doodle_update_unsuccessful: "Fehler beim Aktualisieren der Umfrage" + doodle_answer_create_successful: "Ihre Antwort wurde aufgenommen" + doodle_answer_create_unsuccessful: "Fehler beim Beantworten der Umfrage" doodle_answer_update_successful: "Antwort erfolgreich aktualisiert" doodle_answer_update_unsuccessful: "Fehler beim Aktualisieren der Antwort" - label_doodle: "Doodle" - label_doodle_new: "Neues doodle" - label_doodle_plural: "Doodles" + label_doodle: "Umfrage" + label_doodle_new: "Neue Umfrage" + label_doodle_plural: "Umfragen" + label_doodle_answer: "Stimme abgeben" label_add_options: "Optionen hinzufügen" label_doodle_watchers: "Beobachter (von diesen Benutzern wird auch eine Antwort erwartet)" - label_doodle_should_answer: "Benutzer die dieses Doodle beantworten sollten" + label_doodle_should_answer: "Benutzer die sich an dieser Umfrage beteiligen sollten" field_expiry_date: "Enddatum" field_option: "Option" field_options: "Optionen" field_missing_answers: "Ausstehende Antworten" - permission_manage_doodles: "Doodles verwalten" - permission_delete_doodles: "Doodles löschen" - permission_create_doodles: "Doodles erstellen" - permission_view_doodles: "Doodles ansehen" - permission_answer_doodles: "Doodles beantworten" - project_module_doodles: "Doodles" - text_doodle_answered: "{{author}} hat das Doodle beantwortet." - text_doodle_with_requested_answer: "{{author}} bittet dich, dieses Doodle zu beantworten." \ No newline at end of file + permission_manage_doodles: "Umfragen verwalten" + permission_delete_doodles: "Umfrage löschen" + permission_create_doodles: "Umfrage erstellen" + permission_view_doodles: "Umfragen ansehen" + permission_answer_doodles: "Umfragen beantworten" + project_module_doodles: "Umfragentool" + text_doodle_answered: "{{author}} hat die Umfrage beantwortet." + text_doodle_with_requested_answer: "{{author}} bittet Sie, diese Umfrage zu beantworten." diff --git a/config/locales/en.yml b/config/locales/en.yml index b96e1cc..f9e3b99 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,27 +1,28 @@ # English strings go here for Rails i18n en: - doodle_inactive: "Doodle is inactive" - doodle_update_successful: "Doodle successfully updated" + doodle_inactive: "Survey is inactive" + doodle_ends: Survey ends on + doodle_update_successful: "Survey successfully updated" doodle_update_unsuccessful: "Failure updating doodle" - doodle_answer_create_successful: "Doodle successfully answered" - doodle_answer_create_unsuccessful: "Failure answering doodle" + doodle_answer_create_successful: "Survey successfully answered" + doodle_answer_create_unsuccessful: "Failure answering survey" doodle_answer_update_successful: "Answer sucessfully updated" doodle_answer_update_unsuccessful: "Failure updating answer" - label_doodle: "Doodle" - label_doodle_new: "New doodle" - label_doodle_plural: "Doodles" + label_doodle: "Survey" + label_doodle_new: "New survey" + label_doodle_plural: "Surveys" label_add_options: "Add options" - label_doodle_watchers: "Watchers (those users will also be requested to answer the doodle)" - label_doodle_should_answer: "Users that should answer this doodle" + label_doodle_watchers: "Watchers (those users will also be requested to answer the survey)" + label_doodle_should_answer: "Users that should answer this survey" field_expiry_date: "Expiration date" field_option: "Option" field_options: "Options" field_missing_answers: "Pending answers" - permission_manage_doodles: "Manage doodles" - permission_delete_doodles: "Delete doodles" - permission_create_doodles: "Create doodles" - permission_view_doodles: "View doodles" - permission_answer_doodles: "Answer doodles" - project_module_doodles: "Doodles" # Name of the permission group in administration > roles and permissions - text_doodle_answered: "{{author}} answered the doodle." - text_doodle_with_requested_answer: "{{author}} requests that you answer this doodle." \ No newline at end of file + permission_manage_doodles: "Manage surveys" + permission_delete_doodles: "Delete surveys" + permission_create_doodles: "Create surveys" + permission_view_doodles: "View surveys" + permission_answer_doodles: "Answer surveys" + project_module_doodles: "Surveys" # Name of the permission group in administration > roles and permissions + text_doodle_answered: "{{author}} answered the survey." + text_doodle_with_requested_answer: "{{author}} requests that you answer this survey." \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index a0944a6..c71bfe2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,8 +1,22 @@ #custom routes for this plugin -ActionController::Routing::Routes.draw do |map| - map.resources :projects, :only => [] do |project| - project.resources :doodles, :shallow => true, :new => {:preview => :post}, :member => {:lock => :post} do |doodle| - doodle.resources :doodle_answers, :shallow => true, :only => [:create, :update] +#ActionController::Routing::Routes.draw do |map| +# map.resources :projects, :only => [] do |project| +# project.resources :doodles, :shallow => true, :new => {:preview => :post}, :member => {:lock => :post} do |doodle| +# doodle.resources :doodle_answers, :shallow => true, :only => [:create, :update] +# end +# end +#end + +#custom routes for this plugin +RedmineApp::Application.routes.draw do + shallow do + resources :projects, :only => [] do + resources :doodles do + post :preview + get :member + post :lock + resources :doodle_answers + end end end end \ No newline at end of file diff --git a/init.rb b/init.rb index 80d2bd5..6ae4d89 100644 --- a/init.rb +++ b/init.rb @@ -1,9 +1,6 @@ -# encoding: utf-8 - require 'redmine' -require 'dispatcher' -Dispatcher.to_prepare do +Rails.configuration.to_prepare do require_dependency 'project' require_dependency 'mailer' require 'redmine_doodles/patch_redmine_classes' @@ -16,7 +13,7 @@ Redmine::Plugin.register :redmine_doodles do name 'Redmine Doodles plugin' - author 'Felix Schäfer' + author 'Felix Schaefer' description 'Per project doodles' version '0.5.1' url 'https://orga.fachschaften.org/projects/redmine_doodles'