Merge pull request #54 from finnlabs/hotfix/15176_internal_error_clicking_on_preview_for_agenda_or_minutes

[Hotfix] 15176 internal error clicking on preview for agenda or minutes
pull/6827/head
ulferts 10 years ago
commit 829a0958d8
  1. 17
      app/controllers/meeting_contents_controller.rb
  2. 2
      app/controllers/meeting_minutes_controller.rb
  3. 11
      app/views/meeting_contents/_form.html.erb
  4. 41
      spec/controllers/meeting_agendas_controller_spec.rb
  5. 43
      spec/controllers/meeting_minutes_controller_spec.rb
  6. 43
      spec/routing/previews_routing_spec.rb

@ -21,6 +21,7 @@
class MeetingContentsController < ApplicationController class MeetingContentsController < ApplicationController
include PaginationHelper include PaginationHelper
include OpenProject::Concerns::Preview
menu_item :meetings menu_item :meetings
@ -93,15 +94,10 @@ class MeetingContentsController < ApplicationController
redirect_back_or_default :controller => '/meetings', :action => 'show', :id => @meeting redirect_back_or_default :controller => '/meetings', :action => 'show', :id => @meeting
end end
def preview
(render_403; return) unless @content.editable?
@text = params[:text]
render :partial => 'common/preview'
end
def default_breadcrumb def default_breadcrumb
MeetingsController.new.send(:default_breadcrumb) MeetingsController.new.send(:default_breadcrumb)
end end
private private
def find_meeting def find_meeting
@ -111,4 +107,13 @@ class MeetingContentsController < ApplicationController
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
render_404 render_404
end end
def parse_preview_data
text = { }
text = { WikiContent.human_attribute_name(:content) => params[@content_type][:text] } if @content.editable?
return text, [], @content
end
end end

@ -28,4 +28,4 @@ class MeetingMinutesController < MeetingContentsController
@content = @meeting.minutes || @meeting.build_minutes @content = @meeting.minutes || @meeting.build_minutes
@content_type = "meeting_minutes" @content_type = "meeting_minutes"
end end
end end

@ -27,17 +27,12 @@ See doc/COPYRIGHT.md for more details.
<%= f.hidden_field :lock_version %> <%= f.hidden_field :lock_version %>
<p><label for="<%= content_type %>_comment"><%= Meeting.human_attribute_name(:comments) %></label><br /><%= f.text_field :comment, :size => 120 %></p> <p><label for="<%= content_type %>_comment"><%= Meeting.human_attribute_name(:comments) %></label><br /><%= f.text_field :comment, :size => 120 %></p>
<p><%= submit_tag l(:button_save) %> <p><%= submit_tag l(:button_save) %>
<%= link_to_remote l(:label_preview), <% path = send("preview_#{content_type}_path", content.meeting) %>
{:url => {:controller => '/' + content_type.pluralize, :action => 'preview', :meeting_id => content.meeting}, <%= preview_link path, "#{content_type}_form", { class: 'preview' } %>
:method => :post,
:update => "#{content_type}_preview",
:with => "'text=' + encodeURIComponent($('#{content_type}_text').value)",
:complete => "Element.scrollTo('#{content_type}_preview')"
}, :accesskey => accesskey(:preview) %> |
<%= link_to l(:button_cancel), "#", :onclick => "$$('.show-#{content_type}').invoke('show'); $$('.edit-#{content_type}').invoke('hide'); return false;" %></p> <%= link_to l(:button_cancel), "#", :onclick => "$$('.show-#{content_type}').invoke('show'); $$('.edit-#{content_type}').invoke('hide'); return false;" %></p>
<%= wikitoolbar_for "#{content_type}_text" %> <%= wikitoolbar_for "#{content_type}_text" %>
<% end %> <% end %>
<div id="<%= content_type %>_preview" class="wiki"></div> <div id="preview" class="wiki"></div>
<%= render :partial => 'shared/meeting_header' %> <%= render :partial => 'shared/meeting_header' %>

@ -0,0 +1,41 @@
#-- copyright
# OpenProject Meeting Plugin
#
# Copyright (C) 2011-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.md for more details.
#++
require File.dirname(__FILE__) + '/../spec_helper'
describe MeetingAgendasController do
let(:meeting) { FactoryGirl.create(:meeting) }
let(:user) { FactoryGirl.create(:admin) }
before { User.stub(:current).and_return(user) }
describe 'preview' do
let(:text) { "Meeting agenda content" }
it_behaves_like 'valid preview' do
let(:preview_texts) { [text] }
let(:preview_params) { { meeting_id: meeting.id, meeting_agenda: { text: text } } }
end
it_behaves_like 'authorizes object access' do
let(:preview_params) { { meeting_id: meeting.id, meeting_agenda: { } } }
end
end
end

@ -0,0 +1,43 @@
#-- copyright
# OpenProject Meeting Plugin
#
# Copyright (C) 2011-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.md for more details.
#++
require File.dirname(__FILE__) + '/../spec_helper'
describe MeetingMinutesController do
let(:meeting) { FactoryGirl.create(:meeting) }
let(:user) { FactoryGirl.create(:admin) }
before { User.stub(:current).and_return(user) }
describe 'preview' do
let(:text) { "Meeting minutes content" }
before { MeetingMinutes.any_instance.stub(:editable?).and_return(true) }
it_behaves_like 'valid preview' do
let(:preview_texts) { [text] }
let(:preview_params) { { meeting_id: meeting.id, meeting_minutes: { text: text } } }
end
it_behaves_like 'authorizes object access' do
let(:preview_params) { { meeting_id: meeting.id, meeting_minutes: { } } }
end
end
end

@ -0,0 +1,43 @@
#-- copyright
# OpenProject is a project management system.
# Copyright (C) 2012-2014 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.rdoc for more details.
#++
require 'spec_helper'
describe 'preview' do
it "should connect POST /meetings/:meeting_id/agenda/preview to meeting_agendas#preview" do
expect(post("/meetings/1/agenda/preview")).to route_to(controller: 'meeting_agendas',
meeting_id: '1',
action: 'preview')
end
it "should connect POST /meetings/:meeting_id/agenda/preview to meeting_minutes#preview" do
expect(post("/meetings/1/minutes/preview")).to route_to(controller: 'meeting_minutes',
meeting_id: '1',
action: 'preview')
end
end
Loading…
Cancel
Save