Preview added when adding/editing a news (#590). git-svn-id: http://redmine.rubyforge.org/svn/trunk@1111 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/0.7.0-RC1
@@ -17,7 +17,9 @@ | |||
class NewsController < ApplicationController | |||
layout 'base' | |||
before_filter :find_project, :authorize, :except => :index | |||
before_filter :find_news, :except => [:new, :index, :preview] | |||
before_filter :find_project, :only => :new | |||
before_filter :authorize, :except => [:index, :preview] | |||
before_filter :find_optional_project, :only => :index | |||
accept_key_auth :index | |||
@@ -36,6 +38,18 @@ class NewsController < ApplicationController | |||
def show | |||
end | |||
def new | |||
@news = News.new(:project => @project, :author => User.current) | |||
if request.post? | |||
@news.attributes = params[:news] | |||
if @news.save | |||
flash[:notice] = l(:notice_successful_create) | |||
Mailer.deliver_news_added(@news) if Setting.notified_events.include?('news_added') | |||
redirect_to :controller => 'news', :action => 'index', :project_id => @project | |||
end | |||
end | |||
end | |||
def edit | |||
if request.post? and @news.update_attributes(params[:news]) | |||
flash[:notice] = l(:notice_successful_update) | |||
@@ -64,14 +78,25 @@ class NewsController < ApplicationController | |||
redirect_to :action => 'index', :project_id => @project | |||
end | |||
def preview | |||
@text = (params[:news] ? params[:news][:description] : nil) | |||
render :partial => 'common/preview' | |||
end | |||
private | |||
def find_project | |||
def find_news | |||
@news = News.find(params[:id]) | |||
@project = @news.project | |||
rescue ActiveRecord::RecordNotFound | |||
render_404 | |||
end | |||
def find_project | |||
@project = Project.find(params[:project_id]) | |||
rescue ActiveRecord::RecordNotFound | |||
render_404 | |||
end | |||
def find_optional_project | |||
return true unless params[:project_id] | |||
@project = Project.find(params[:project_id]) |
@@ -259,19 +259,6 @@ class ProjectsController < ApplicationController | |||
render :layout => false if request.xhr? | |||
end | |||
# Add a news to @project | |||
def add_news | |||
@news = News.new(:project => @project, :author => User.current) | |||
if request.post? | |||
@news.attributes = params[:news] | |||
if @news.save | |||
flash[:notice] = l(:notice_successful_create) | |||
Mailer.deliver_news_added(@news) if Setting.notified_events.include?('news_added') | |||
redirect_to :controller => 'news', :action => 'index', :project_id => @project | |||
end | |||
end | |||
end | |||
def add_file | |||
if request.post? | |||
@version = @project.versions.find_by_id(params[:version_id]) |
@@ -1,6 +1,14 @@ | |||
<h2><%=l(:label_news)%></h2> | |||
<% labelled_tabular_form_for :news, @news, :url => { :action => "edit" } do |f| %> | |||
<% labelled_tabular_form_for :news, @news, :url => { :action => "edit" }, | |||
:html => { :id => 'news-form' } do |f| %> | |||
<%= render :partial => 'form', :locals => { :f => f } %> | |||
<%= submit_tag l(:button_save) %> | |||
<% end %> | |||
<%= link_to_remote l(:label_preview), | |||
{ :url => { :controller => 'news', :action => 'preview' }, | |||
:method => 'post', | |||
:update => 'preview', | |||
:with => "Form.serialize('news-form')" | |||
}, :accesskey => accesskey(:preview) %> | |||
<% end %> | |||
<div id="preview" class="wiki"></div> |
@@ -1,17 +1,25 @@ | |||
<div class="contextual"> | |||
<%= link_to_if_authorized(l(:label_news_new), | |||
{:controller => 'projects', :action => 'add_news', :id => @project}, | |||
{:controller => 'news', :action => 'new', :project_id => @project}, | |||
:class => 'icon icon-add', | |||
:onclick => 'Element.show("add-news"); return false;') if @project %> | |||
</div> | |||
<div id="add-news" style="display:none;"> | |||
<h2><%=l(:label_news_new)%></h2> | |||
<% labelled_tabular_form_for :news, @news, :url => { :controller => 'projects', :action => "add_news", :id => @project } do |f| %> | |||
<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'new', :project_id => @project }, | |||
:html => { :id => 'news-form' } do |f| %> | |||
<%= render :partial => 'news/form', :locals => { :f => f } %> | |||
<%= submit_tag l(:button_create) %> | |||
<%= link_to_remote l(:label_preview), | |||
{ :url => { :controller => 'news', :action => 'preview' }, | |||
:method => 'post', | |||
:update => 'preview', | |||
:with => "Form.serialize('news-form')" | |||
}, :accesskey => accesskey(:preview) %> | | |||
<%= link_to l(:button_cancel), "#", :onclick => 'Element.hide("add-news")' %> | |||
<% end if @project %> | |||
<div id="preview" class="wiki"></div> | |||
</div> | |||
<h2><%=l(:label_news_plural)%></h2> |
@@ -0,0 +1,14 @@ | |||
<h2><%=l(:label_news_new)%></h2> | |||
<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'new', :project_id => @project }, | |||
:html => { :id => 'news-form' } do |f| %> | |||
<%= render :partial => 'news/form', :locals => { :f => f } %> | |||
<%= submit_tag l(:button_create) %> | |||
<%= link_to_remote l(:label_preview), | |||
{ :url => { :controller => 'news', :action => 'preview' }, | |||
:method => 'post', | |||
:update => 'preview', | |||
:with => "Form.serialize('news-form')" | |||
}, :accesskey => accesskey(:preview) %> | |||
<% end %> | |||
<div id="preview" class="wiki"></div> |
@@ -10,11 +10,19 @@ | |||
<h2><%=h @news.title %></h2> | |||
<div id="edit-news" style="display:none;"> | |||
<% labelled_tabular_form_for :news, @news, :url => { :action => "edit", :id => @news } do |f| %> | |||
<% labelled_tabular_form_for :news, @news, :url => { :action => "edit", :id => @news }, | |||
:html => { :id => 'news-form' } do |f| %> | |||
<%= render :partial => 'form', :locals => { :f => f } %> | |||
<%= submit_tag l(:button_save) %> | |||
<%= link_to_remote l(:label_preview), | |||
{ :url => { :controller => 'news', :action => 'preview' }, | |||
:method => 'post', | |||
:update => 'preview', | |||
:with => "Form.serialize('news-form')" | |||
}, :accesskey => accesskey(:preview) %> | | |||
<%= link_to l(:button_cancel), "#", :onclick => 'Element.hide("edit-news")' %> | |||
<% end %> | |||
<div id="preview" class="wiki"></div> | |||
</div> | |||
<p><em><% unless @news.summary.empty? %><%=h @news.summary %><br /><% end %> |
@@ -1,6 +0,0 @@ | |||
<h2><%=l(:label_news_new)%></h2> | |||
<% labelled_tabular_form_for :news, @news, :url => { :action => "add_news" } do |f| %> | |||
<%= render :partial => 'news/form', :locals => { :f => f } %> | |||
<%= submit_tag l(:button_create) %> | |||
<% end %> |
@@ -51,7 +51,7 @@ Redmine::AccessControl.map do |map| | |||
end | |||
map.project_module :news do |map| | |||
map.permission :manage_news, {:projects => :add_news, :news => [:edit, :destroy, :destroy_comment]}, :require => :member | |||
map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member | |||
map.permission :view_news, {:news => [:index, :show]}, :public => true | |||
map.permission :comment_news, {:news => :add_comment} | |||
end |
@@ -45,4 +45,15 @@ class NewsControllerTest < Test::Unit::TestCase | |||
assert_template 'index' | |||
assert_not_nil assigns(:newss) | |||
end | |||
def test_preview | |||
get :preview, :project_id => 1, | |||
:news => {:title => '', | |||
:description => 'News description', | |||
:summary => ''} | |||
assert_response :success | |||
assert_template 'common/_preview' | |||
assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' }, | |||
:content => /News description/ | |||
end | |||
end |