From a3fb48a4bb43f74cf8a48156a76c6f6eaf9ee991 Mon Sep 17 00:00:00 2001 From: wanglinchun Date: Tue, 3 Jun 2014 18:24:55 +0800 Subject: [PATCH] 0603 --- .../contestnotifications_controller.rb | 33 +++--- app/models/contest.rb | 2 +- app/models/contestnotification.rb | 11 +- app/views/contestnotifications/index.html.erb | 101 ++++++++++++++++ app/views/contestnotifications/new.html.erb | 6 +- app/views/roles/roles_controller.rb | 108 ++++++++++++++++++ config/routes.rb | 9 +- 7 files changed, 242 insertions(+), 28 deletions(-) create mode 100644 app/views/roles/roles_controller.rb diff --git a/app/controllers/contestnotifications_controller.rb b/app/controllers/contestnotifications_controller.rb index 110f26466..675efd7f0 100644 --- a/app/controllers/contestnotifications_controller.rb +++ b/app/controllers/contestnotifications_controller.rb @@ -3,16 +3,19 @@ class ContestnotificationsController < ApplicationController # GET /contestnotifications.json layout 'base_newcontest' default_search_scope :contestnotifications - model_object Contestnotifications + # model_object Contestnotifications before_filter :find_model_object_contest, :except => [:new, :create, :index] before_filter :find_contest_from_association, :except => [:new, :create, :index] before_filter :find_contest_by_contest_id, :only => [:new, :create] before_filter :authorize, :except => [:index] - before_filter :find_optional_contest, :only => :index + before_filter :find_optional_contest, :only => [:index] accept_rss_auth :index accept_api_auth :index + + def index + @user = @contest.author # @contestnotifications = Contestnotification.all # # respond_to do |format| @@ -28,13 +31,13 @@ class ContestnotificationsController < ApplicationController @limit = 10 end - scope = @contest ? @contest.contestnotifications.visible : Contestnotifications.visible + scope = @contest ? @contest.contestnotifications.visible : Contestnotification.visible @contestnotifications_count = scope.count @contestnotifications_pages = Paginator.new @contestnotifications_count, @limit, params['page'] @offset ||= @contestnotifications_pages.offset @contestnotificationss = scope.all(:include => [:author, :contest], - :order => "#{Contestnotifications.table_name}.created_on DESC", + :order => "#{Contestnotification.table_name}.created_at DESC", :offset => @offset, :limit => @limit) @@ -67,14 +70,14 @@ class ContestnotificationsController < ApplicationController # GET /contestnotifications/new # GET /contestnotifications/new.json def new - # @contestnotification = Contestnotification.new -# - # respond_to do |format| - # format.html # new.html.erb - # format.json { render json: @contestnotification } - # end - @contestnotifications = Contestnotifications.new(:contest => @contest, :author => User.current) - render :layout => 'base_contest' + @contestnotification = Contestnotification.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @contestnotification } + end + # @contestnotifications = Contestnotifications.new(:contest => @contest, :author => User.current) + # render :layout => 'base_contest' end # GET /contestnotifications/1/edit @@ -151,9 +154,9 @@ class ContestnotificationsController < ApplicationController private def find_optional_contest - return true unless params[:contest_id] - @contest = Contest.find(params[:contest_id]) - authorize + return true unless params[:id] + @contest = Contest.find(params[:id]) + # authorize rescue ActiveRecord::RecordNotFound render_404 end diff --git a/app/models/contest.rb b/app/models/contest.rb index 4234f7519..d41506b87 100644 --- a/app/models/contest.rb +++ b/app/models/contest.rb @@ -13,7 +13,7 @@ class Contest < ActiveRecord::Base has_many :join_in_competitions, foreign_key: 'competition_id', :dependent => :destroy has_many :join_in_contests, class_name: 'JoinInCompetition', foreign_key: 'competition_id', :dependent => :destroy has_many :praise_tread, as: :praise_tread_object, dependent: :destroy - has_many :contestnotification, :dependent => :destroy, :include => :author + has_many :contestnotifications, :dependent => :destroy, :include => :author diff --git a/app/models/contestnotification.rb b/app/models/contestnotification.rb index 75b0f5814..f6b0fd168 100644 --- a/app/models/contestnotification.rb +++ b/app/models/contestnotification.rb @@ -12,9 +12,9 @@ class Contestnotification < ActiveRecord::Base validates_length_of :title, :maximum => 60 validates_length_of :summary, :maximum => 255 - acts_as_attachable :delete_permission => :manage_contestnotification + acts_as_attachable :delete_permission => :manage_contestnotifications acts_as_searchable :columns => ['title', 'summary', "#{table_name}.description"], :include => :contest - acts_as_event :url => Proc.new {|o| {:controller => 'contestnotification', :action => 'show', :id => o.id}} + acts_as_event :url => Proc.new {|o| {:controller => 'contestnotifications', :action => 'show', :id => o.id}} acts_as_activity_provider :find_options => {:include => [:contest, :author]}, :author_key => :author_id acts_as_watchable @@ -24,9 +24,10 @@ class Contestnotification < ActiveRecord::Base after_create :act_as_activity - # scope :visible, lambda {|*args| - # includes(:contest).where(Contest.allowed_to_condition(args.shift || User.current, :view_news, *args)) - # } + scope :visible, lambda {|*args| + nil + #includes(:contest).where(Contest.allowed_to_condition(args.shift || User.current, :view_contestnotifications, *args)) + } safe_attributes 'title', 'summary', 'description' diff --git a/app/views/contestnotifications/index.html.erb b/app/views/contestnotifications/index.html.erb index e69de29bb..73adc758c 100644 --- a/app/views/contestnotifications/index.html.erb +++ b/app/views/contestnotifications/index.html.erb @@ -0,0 +1,101 @@ + + + +<% + btn_tips = l(:label_news_new) + label_tips = l(:label_news) +%> + + + <%= label_tips %> + + +<%= link_to(btn_tips, + new_contest_contestnotification_path(@contest), + :class => 'icon icon-add', + :onclick => 'showAndScrollTo("add-news", "news_title"); return false;') %> + +<% if @contest && User.current.allowed_to?(:manage_contestnotifications, @contest) %> + +<% end %> +
+ <% if @contestnotificationss.empty? %> +

+ <%= l(:label_no_data) %> +

+ <% else %> + <% @contestnotificationss.each do |contestnotifications| %> + + + + + + +
<%= link_to image_tag(url_to_avatar(contestnotifications.author), :class => "avatar"), user_path(contestnotifications.author) %> + + + + + + + + + + + + +
+ <%= link_to_user(contestnotifications.author) if contestnotifications.respond_to?(:author) %><%= l(:label_project_notice) %><%= link_to h(contestnotifications.title), contestnotification_path(contestnotifications) %> + <%= delete_link contestnotification_path(contestnotifications) if User.current.allowed_to?(:manage_contestnotification, @contest) %> +
+ <%= textilizable(contestnotifications, :description) %>
<%= l :label_update_time %> +  <%= format_time(contestnotifications.created_at) %><%= link_to l(:label_project_newother), contestnotification_path(contestnotifications) %><%= "(#{l(:label_x_comments, :count => contestnotifications.comments_count)})" if contestnotifications.comments_count >= 0 %>
+
+ <% end %> + <% end %> +
+ +
+ + + <% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:contest_id => @contest, :key => User.current.rss_key} %> + <% end %> + + <% content_for :header_tags do %> + <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %> + <%= stylesheet_link_tag 'scm' %> + <% end %> + + <% html_title(l(:label_news_plural)) -%> +
+ + + + \ No newline at end of file diff --git a/app/views/contestnotifications/new.html.erb b/app/views/contestnotifications/new.html.erb index 6e474b4ea..8b84b9685 100644 --- a/app/views/contestnotifications/new.html.erb +++ b/app/views/contestnotifications/new.html.erb @@ -7,10 +7,10 @@ -<%= labelled_form_for @contestnotifications, :url => contest_contestnotifications_index_path(@contest), +<%= labelled_form_for @contestnotifications, :url => contest_contestnotifications_path(@contest), :html => { :id => 'news-form', :multipart => true } do |f| %> - <%= render :partial => 'news/form', :locals => { :f => f } %> + <%= render :partial => 'contestnotifications/form', :locals => { :f => f } %> <%= submit_tag l(:button_create), :class => "whiteButton m3p10 h30" %> - <%= preview_link preview_news_path(:contest_id => @contest), 'news-form' ,target='preview',{:class => 'whiteButton m3p10'}%> + <%#= preview_link preview_contestnotifications_path(:contest_id => @contest), 'news-form' ,target='preview',{:class => 'whiteButton m3p10'}%> <% end %>
diff --git a/app/views/roles/roles_controller.rb b/app/views/roles/roles_controller.rb new file mode 100644 index 000000000..f4bae1e81 --- /dev/null +++ b/app/views/roles/roles_controller.rb @@ -0,0 +1,108 @@ +# Redmine - project management software +# Copyright (C) 2006-2013 Jean-Philippe Lang +# +# 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. + +class RolesController < ApplicationController + layout 'admin' + + before_filter :require_admin, :except => [:index, :show] + before_filter :require_admin_or_api_request, :only => [:index, :show] + before_filter :find_role, :only => [:show, :edit, :update, :destroy] + accept_api_auth :index, :show + + def index + respond_to do |format| + format.html { + @role_pages, @roles = paginate Role.sorted, :per_page => 25 + render :action => "index", :layout => false if request.xhr? + } + format.api { + @roles = Role.givable.all + } + end + end + + def show + respond_to do |format| + format.api + end + end + + def new + # Prefills the form with 'Non member' role permissions by default + @role = Role.new(params[:role] || {:permissions => Role.non_member.permissions}) + if params[:copy].present? && @copy_from = Role.find_by_id(params[:copy]) + @role.copy_from(@copy_from) + end + @roles = Role.sorted.all + end + + def create + @role = Role.new(params[:role]) + if request.post? && @role.save + # workflow copy + if !params[:copy_workflow_from].blank? && (copy_from = Role.find_by_id(params[:copy_workflow_from])) + @role.workflow_rules.copy(copy_from) + end + flash[:notice] = l(:notice_successful_create) + redirect_to roles_path + else + @roles = Role.sorted.all + render :action => 'new' + end + end + + def edit + end + + def update + if request.put? and @role.update_attributes(params[:role]) + flash[:notice] = l(:notice_successful_update) + redirect_to roles_path + else + render :action => 'edit' + end + end + + def destroy + @role.destroy + redirect_to roles_path + rescue + flash[:error] = l(:error_can_not_remove_role) + redirect_to roles_path + end + + def permissions + @roles = Role.sorted.all + @permissions = Redmine::AccessControl.permissions.select { |p| !p.public? } + if request.post? + @roles.each do |role| + role.permissions = params[:permissions][role.id.to_s] + role.save + end + flash[:notice] = l(:notice_successful_update) + redirect_to roles_path + end + end + + private + + def find_role + @role = Role.find(params[:id]) + rescue ActiveRecord::RecordNotFound + render_404 + end +end diff --git a/config/routes.rb b/config/routes.rb index c6a727ca6..6876f1af9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,17 +16,16 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. RedmineApp::Application.routes.draw do - resources :contestnotifications + match '/contests/:id/contestnotifications', :controller => 'contestnotifications', :action => 'index' resources :homework_users - resources :no_uses delete 'no_uses', :to => 'no_uses#delete' - resources :apply_project_masters + resources :apply_project_masters delete 'apply_project_masters', :to => 'apply_project_masters#delete' resources :homework_attach do @@ -79,6 +78,7 @@ RedmineApp::Application.routes.draw do match 'new_join' , via: :post match 'new' , via: :post end + resources :contestnotifications member do match 'add_softapplication' match 'update_contest' , via: [:put] @@ -95,7 +95,8 @@ RedmineApp::Application.routes.draw do match 'create' , via: :post match 'settings' , via: [:get, :post] - end + end + end resources :stores do