File: app/controllers/news_controller.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  class: NewsController#18
inherits from
  ApplicationController   
has properties
method: index #32
method: show #60
method: new #65
method: create #69
method: edit #82
method: update #85
method: destroy #97
method: find_optional_project #104

Class Hierarchy

Code

   1  # Redmine - project management software
   2  # Copyright (C) 2006-2011  Jean-Philippe Lang
   3  #
   4  # This program is free software; you can redistribute it and/or
   5  # modify it under the terms of the GNU General Public License
   6  # as published by the Free Software Foundation; either version 2
   7  # of the License, or (at your option) any later version.
   8  #
   9  # This program is distributed in the hope that it will be useful,
  10  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  # GNU General Public License for more details.
  13  #
  14  # You should have received a copy of the GNU General Public License
  15  # along with this program; if not, write to the Free Software
  16  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17 
  18  class NewsController < ApplicationController
  19    default_search_scope :news
  20    model_object News
  21    before_filter :find_model_object, :except => [:new, :create, :index]
  22    before_filter :find_project_from_association, :except => [:new, :create, :index]
  23    before_filter :find_project_by_project_id, :only => [:new, :create]
  24    before_filter :authorize, :except => [:index]
  25    before_filter :find_optional_project, :only => :index
  26    accept_rss_auth :index
  27    accept_api_auth :index
  28 
  29    helper :watchers
  30    helper :attachments
  31 
  32    def index
  33      case params[:format]
  34      when 'xml', 'json'
  35        @offset, @limit = api_offset_and_limit
  36      else
  37        @limit =  10
  38      end
  39 
  40      scope = @project ? @project.news.visible : News.visible
  41 
  42      @news_count = scope.count
  43      @news_pages = Paginator.new self, @news_count, @limit, params['page']
  44      @offset ||= @news_pages.current.offset
  45      @newss = scope.all(:include => [:author, :project],
  46                                         :order => "#{News.table_name}.created_on DESC",
  47                                         :offset => @offset,
  48                                         :limit => @limit)
  49 
  50      respond_to do |format|
  51        format.html {
  52          @news = News.new # for adding news inline
  53          render :layout => false if request.xhr?
  54        }
  55        format.api
  56        format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
  57      end
  58    end
  59 
  60    def show
  61      @comments = @news.comments
  62      @comments.reverse! if User.current.wants_comments_in_reverse_order?
  63    end
  64 
  65    def new
  66      @news = News.new(:project => @project, :author => User.current)
  67    end
  68 
  69    def create
  70      @news = News.new(:project => @project, :author => User.current)
  71      @news.safe_attributes = params[:news]
  72      @news.save_attachments(params[:attachments])
  73      if @news.save
  74        render_attachment_warning_if_needed(@news)
  75        flash[:notice] = l(:notice_successful_create)
  76        redirect_to :controller => 'news', :action => 'index', :project_id => @project
  77      else
  78        render :action => 'new'
  79      end
  80    end
  81 
  82    def edit
  83    end
  84 
  85    def update
  86      @news.safe_attributes = params[:news]
  87      @news.save_attachments(params[:attachments])
  88      if @news.save
  89        render_attachment_warning_if_needed(@news)
  90        flash[:notice] = l(:notice_successful_update)
  91        redirect_to :action => 'show', :id => @news
  92      else
  93        render :action => 'edit'
  94      end
  95    end
  96 
  97    def destroy
  98      @news.destroy
  99      redirect_to :action => 'index', :project_id => @project
 100    end
 101 
 102    private
 103 
 104    def find_optional_project
 105      return true unless params[:project_id]
 106      @project = Project.find(params[:project_id])
 107      authorize
 108    rescue ActiveRecord::RecordNotFound
 109      render_404
 110    end
 111  end