]> source.dussan.org Git - redmine.git/commitdiff
ProjectsController#add_news moved to NewsController#new.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 3 Feb 2008 14:38:04 +0000 (14:38 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 3 Feb 2008 14:38:04 +0000 (14:38 +0000)
Preview added when adding/editing a news (#590).

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1111 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/news_controller.rb
app/controllers/projects_controller.rb
app/views/news/edit.rhtml
app/views/news/index.rhtml
app/views/news/new.rhtml [new file with mode: 0644]
app/views/news/show.rhtml
app/views/projects/add_news.rhtml [deleted file]
lib/redmine.rb
test/functional/news_controller_test.rb

index 109afe454c28dbabe020dda0920377572a561641..66ed61cf4061670d48c1fdc86673273dfeb43228 100644 (file)
@@ -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])
index 30e7ef85fd7bc774537625999eb1c79b0c0bfeaa..9560a451fe620f8daf594c3e2a8495091f7270de 100644 (file)
@@ -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])
index 5e015c4c737c0a22aff16dd88766e09590ebced7..a7e5e6e36603e0c1a278e5c76b68937e6bcf009d 100644 (file)
@@ -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 %>
\ No newline at end of file
+<%= 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>
index c6bb9ad5a4d89a5a27a5a203a66bd0ebdcd4d262..369eaf1b13d48a7f55b247b3b7686811c46cff4c 100644 (file)
@@ -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>
diff --git a/app/views/news/new.rhtml b/app/views/news/new.rhtml
new file mode 100644 (file)
index 0000000..9208d88
--- /dev/null
@@ -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>
index bff737f40372f5553800d66eaaf593071bd53185..cc9eed0430c6e105d19c601373f93cdd3489772b 100644 (file)
 <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 %>
diff --git a/app/views/projects/add_news.rhtml b/app/views/projects/add_news.rhtml
deleted file mode 100644 (file)
index a6ecd3d..0000000
+++ /dev/null
@@ -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 %>
\ No newline at end of file
index 92a1cef1496bff4a24bd84a3c3ea2bf1ca378aee..c4c55a9324b9247551b462b93a30291105e8d770 100644 (file)
@@ -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
index 8a02345fd775f6410d0c9f9fc1527b2ed05ca054..397e928f1e85ffcf6b660cb165100bab8716f586 100644 (file)
@@ -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