add the project what one watch

exceptionHandle
xianbo 12 years ago
parent 5d0b5812b3
commit 2589d429b0

@ -307,11 +307,14 @@ class BidsController < ApplicationController
# a = [1]
# @project = Project.where("id in []", a)
@user = @bid.author
@bidding_project = @bid.biding_projects
@bidding_project = @bid.biding_projects.all
@bidding_project = @bidding_project.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
if @bid.homework_type == 1
@homework = HomeworkAttach.new
@homework_list = @bid.homeworks
end
respond_to do |format|
if @bid.reward_type == 3
format.html {

@ -48,12 +48,14 @@ class MembersController < ApplicationController
def create
members = []
project_info = []
user_grade = []
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
user_grade << UserGrade.new(:user_id => user_id, :project_id => @project.id)
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id)
@ -65,13 +67,14 @@ class MembersController < ApplicationController
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
project_info << ProjectInfo.new(:project_id => @project.id, :user_id => params[:membership][:user_id])
end
## end
end
@project.members << members
# added by nie
@project.project_infos << project_info
@project.user_grades << user_grade
# end
end
@ -124,13 +127,20 @@ class MembersController < ApplicationController
def destroy
if request.delete? && @member.deletable?
@member.destroy
end
# end
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
if user_admin.size > 0
user_admin.each do |user|
user.destroy
end
end
user_grade = UserGrade.where("user_id = ? and project_id = ?", @member.user_id, @project.id)
if user_grade.size > 0
user_grade.each do |grade|
grade.destroy
end
end
end
respond_to do |format|
format.html { redirect_to_settings_in_projects }
format.js

@ -146,8 +146,20 @@ class ProjectsController < ApplicationController
#
# end
# end
# @projects = Project.where("project_type <> ? or project_type is null", 1)
# @projects.each do |project|
# ProjectStatus.create(:changesets_count => project.changesets.count, :project_id => project.id, :watchers_count => project.watcher_users.count)
# @id = project.id
# @users = Member.find_by_sql("SELECT
# members.user_id
# FROM members
# INNER JOIN users
# ON members.user_id = users.id
# WHERE members.project_id = #{@id}
# AND (users.type = 'User' AND users.status = 1);")
# @users.each do |user|
# UserGrade.create(:project_id => project.id, :user_id => user.user_id)
# end
# #ProjectStatus.create(:changesets_count => project.changesets.count, :project_id => project.id, :watchers_count => project.watcher_users.count)
# end
# @projects_status = Project.visible.like(params[:name]) if params[:name].present?
@project_count = @projects_status.count
@ -175,13 +187,13 @@ class ProjectsController < ApplicationController
when '1'
@offset ||= @project_pages.reverse_offset
unless @offset == 0
@projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse
@projects_status = @projects_status.reorder('grade').offset(@offset).limit(@limit).all.reverse
else
limit = @project_count % @limit
if limit == 0
limit = @limit
end
@projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(limit).all.reverse
@projects_status = @projects_status.reorder('grade').offset(@offset).limit(limit).all.reverse
end
@s_type = 1
@ -202,13 +214,13 @@ class ProjectsController < ApplicationController
else
@offset ||= @project_pages.reverse_offset
unless @offset == 0
@projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse
@projects_status = @projects_status.reorder('grade').offset(@offset).limit(@limit).all.reverse
else
limit = @project_count % @limit
if limit == 0
limit = @limit
end
@projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(limit).all.reverse
@projects_status = @projects_status.reorder('grade').offset(@offset).limit(limit).all.reverse
end
@s_type = 1
# @projects = @projects.sort {|x,y| y.created_on <=> x.created_on }
@ -524,8 +536,9 @@ class ProjectsController < ApplicationController
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => User.current, :roles => [r])
project = ProjectInfo.new(:user_id => User.current.id, :project_id => @project.id)
if (params[:project][:is_public] == '1' && @course_tag != "1") || (@course_tag=="1" && params[:project][:is_public] == '1')
project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :project_type => @course_tag)
UserGrade.create(:user_id => User.current.id, :project_id => @project.id, :grade => 0)
if params[:project][:is_public] == '1'
project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :project_type => @course_tag)
end
@project.members << m
@project.project_infos << project
@ -747,6 +760,20 @@ class ProjectsController < ApplicationController
if @project.project_type == 1
render :layout => 'base_courses'
end
# roles = Role.find_all_givable
# members = @project.member_principals.includes(:roles, :principal).all.sort
#
# users = UserGrade.find_by_sql("select * from user_grades where project_id = #{@project.id}").sort {|a,b| a[:grade] <=> b[:grade]}
#
# temp = []
# users.each do |user|
# members.each do |member|
# if member[:user_id] == user[:user_id]
# temp << member
# end
# end
# end
# temps = temp.reverse
end
# def news
@ -790,7 +817,7 @@ class ProjectsController < ApplicationController
project_status = ProjectStatus.find_by_project_id(@project.id)
project_status.destroy
elsif params[:project][:is_public] == '1'
project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :project_type => 1)
project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0,:grade => 0, :project_type => 1)
end
respond_to do |format|

@ -1,6 +1,7 @@
# encoding: utf-8
class SharesController < ApplicationController
before_filter :require_login, :except => [:index]
before_filter :require_admin, :only => [:index]
# GET /shares
# GET /shares.json
def index

@ -21,7 +21,7 @@ class UsersController < ApplicationController
menu_item :user_information, :only => :info
menu_item :user_course, :only => :user_courses
menu_item :user_homework, :only => :user_homeworks
menu_item :user_project, :only => :user_projects
menu_item :user_project, :only => [:user_projects, :watch_projects]
menu_item :requirement_focus, :only => :watch_bids
menu_item :user_newfeedback, :only => :user_newfeedback
@ -29,10 +29,12 @@ class UsersController < ApplicationController
#Ended by young
before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info, :user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks]
before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info,
:user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks, :watch_projects]
#edit has been deleted by huang, 2013-9-23
before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, :user_homeworks,
:destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info]
:destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info,
:watch_projects]
accept_api_auth :index, :show, :create, :update, :destroy,:tag_save
#william
@ -559,6 +561,22 @@ class UsersController < ApplicationController
@auth_sources = AuthSource.all
@membership ||= Member.new
end
def watch_projects
@watch_type = Watcher.visible.where("watchable_type = ? and user_id = ?", 'Project', @user.id)
@watch_projects = []
unless @watch_type.nil?
@watch_type.each do |obj|
@watch_projects << Project.find(obj.watchable_id) if(Project.find(obj.watchable_id))
end
end
respond_to do |format|
format.html {
render :layout => 'base_users'
}
format.api
end
end
def update
@user.admin = params[:user][:admin] if params[:user][:admin]

@ -254,11 +254,13 @@ module ApplicationHelper
s << "</span>"
end
if @project.project_type == 1
unless Course.find_by_extra(@project.identifier).tea_id == User.current.id
unless Course.find_by_extra(@project.identifier).nil?
unless Course.find_by_extra(@project.identifier).tea_id == User.current.id
s << "<span style = 'float: right;'>"
s << join_in_course(@project, User.current)#, ['whiteButton'])
s << "</span>"
end
end
end
s << (render :partial => 'projects/project', :locals => {:project => project}).to_s
s << "</div>\n"

@ -70,6 +70,7 @@ class Project < ActiveRecord::Base
has_one :project_status, :class_name => "ProjectStatus", :dependent => :destroy
has_one :project_status, :class_name => "ProjectStatus", :dependent => :destroy
has_one :project_status, :class_name => "ProjectStatus", :dependent => :destroy
has_many :user_grades, :class_name => "UserGrade", :dependent => :destroy
#end
has_one :wiki, :dependent => :destroy
@ -88,7 +89,7 @@ class Project < ActiveRecord::Base
has_many :tags, :through => :project_tags, :class_name => 'Tag'
has_many :project_tags, :class_name => 'ProjectTags'
has_many :project_tags, :class_name => 'ProjectTags', :dependent => :destroy
acts_as_nested_set :order => 'name', :dependent => :destroy
acts_as_attachable :view_permission => :view_files,
@ -122,7 +123,10 @@ class Project < ActiveRecord::Base
after_save :update_position_under_parent, :if => Proc.new {|project| project.name_changed?}
after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?}
before_destroy :delete_all_members
def remove_references_before_destroy
return if self.id.nil?
Watcher.delete_all ['watchable_id = ?', id]
end
scope :has_module, lambda {|mod|
where("#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s)
}

@ -95,10 +95,13 @@ class User < Principal
has_many :project_infos, :dependent => :destroy
has_one :user_status, :dependent => :destroy
#####
has_many :shares ,:dependent => :destroy
scope :logged, lambda { where("#{User.table_name}.status <> #{STATUS_ANONYMOUS}") }
scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) }
scope :visible, lambda {|*args|
nil
}
acts_as_customizable
@ -774,4 +777,4 @@ class AnonymousUser < User
def destroy
false
end
end
end

@ -0,0 +1,4 @@
class UserGrade < ActiveRecord::Base
# attr_accessible :title, :body
belongs_to :project
end

@ -26,7 +26,10 @@ class Watcher < ActiveRecord::Base
validates_presence_of :user
validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id]
validate :validate_user
scope :visible, lambda {|*args|
nil
}
# Unwatch things that users are no longer allowed to view
def self.prune(options={})
if options.has_key?(:user)

@ -8,12 +8,14 @@
<td width="50px" valign="top" colspan="2" align="middle">
<div style="width: 50px; height: 50px;">
<%= link_to image_tag(url_to_avatar(b_project.project), :class => 'avatar3'), :class => "avatar" %>
</div></td>
<td width="65%" valign="top">
<table width="100%" valign="top">
<tr>
<td colspan="2" valign="top" width="50%"><strong>
<%= link_to(b_project.project.name, project_path(b_project.project)) %>
</strong><a class="font_lighter"><%= l(:label_join_bidding)%></a>
</td>
@ -21,7 +23,7 @@
<td style="color: red;" align="right" valign="0.1em" width="15%">
<strong><span id="reward_result_<%=b_project.id%>">
<%= l(:label_system_grade) %>:<%= (b_project.project.project_status.grade.nil? ? 0 : b_project.project.project_status.grade) unless (b_project.project.project_status.nil? && b_project.project.nil?) %>
<% if get_prize(b_project).nil? or get_prize(b_project) == "" %>
<% if @bid.deadline < Date.today %>
<%= l(:label_noawards)%>

@ -1,11 +1,13 @@
<!-- fq -->
<%= render_flash_messages %>
<% if @bid.reward_type == 3 %>
<% if @bid.reward_type == 3 %>
<% unless User.current.nil?%>
<% if User.current.user_extensions.identity == 1 %>
<div class="font_lighter">
<p><%= l(:label_homework_prompt) %></p>
<P><%= l(:label_homework_prompt_content) %></P>
</div>
<% end %>
<% end %>
<table width="1000px" border="0" style="padding-left: 15px">
<td class="font_lighter" style="font-size: 15px;"><%= l(:label_homework_project) %>(<%= bidding_project.count%>)</td>

@ -87,19 +87,12 @@
<div class="licences">
<%= content_tag('span', "#{l(:label_create_time)}: ") %><%= content_tag('span', format_time(@project.created_on)) %>
</div>
<div class="grade">
<%= content_tag('span', "#{l(:label_project_grade)}: ")%><span style='color:red'><%= @project.project_status.grade%></span>
</div>
<!-- added by liuping -->
<!-- <% unless User.current.member_of?(@project) %>
<%= watcher_link(@project, User.current) %>
<% end %>
<span style="float: right; margin-right: 100px">
<% if @project.project_type == 1 %>
<% unless Course.find_by_extra(@project.identifier).tea_id == User.current.id %>
<%= join_in_course(@project, User.current)%>
<% end %>
<% end %> -->
</span>
</div>

@ -4,16 +4,29 @@
<%= error_messages_for 'member' %>
<% roles = Role.find_all_givable
members = @project.member_principals.includes(:roles, :principal).all.sort %>
<% if members.any? %>
<% members.each do |member| %>
<%
users = UserGrade.find_by_sql("select * from user_grades where project_id = #{@project.id}").sort {|a,b| a[:grade] <=> b[:grade]}
%>
<% temp = [] %>
<% users.each do |user|%>
<% members.each do |member|%>
<% if member[:user_id] == user[:user_id] %>
<% temp << member%>
<% end %>
<% end %>
<% end %>
<% temps = temp.reverse %>
<% if temps.any? %>
<% temps.each do |member| %>
<div class="well">
<!--Modified by nie-->
<% next if member.new_record? %>
<% unless member.created_on.nil? %>
<% next if member.new_record? %>
<% unless member.created_on.nil? %>
<%= content_tag "p", "#{format_date(member.created_on)}#{l(:label_member_since)}", :class => "float_right member_since" %>
<% end %>
<%= member.user.nil? ? '' : (link_to image_tag(url_to_avatar(member.user), :class => 'avatar'), :class => "avatar") %>
<%= content_tag "div", link_to_user(member.principal), :class => "nomargin avatar_name" %>
<!-- added by huang modified by bai-->
<% if @project.project_type == 1 %>
<div class ="clear avatar_name"> <p>
@ -26,9 +39,17 @@
<% else %>
<% end %>
</p></div>
</p>
</div>
<% else%>
<%= content_tag "div", content_tag("p", member.roles.sort.collect(&:to_s).join(', ')), :class => "clear avatar_name" %>
<% users.each do |user|%>
<% if user[:user_id] == member[:user_id]%>
<div class="clear avatar_user">
<p><%= l(:label_user_for_project_grade) %>: <span style="color:red"><%= user[:grade] %></span></p>
</div>
<% end %>
<% end %>
<% end %>
<!-- end -->
<%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %>
@ -40,4 +61,6 @@
<%= l(:label_no_data) %>
</p>
<% end %>
</div>
</div>

@ -28,25 +28,13 @@
</div>
<%end%>
<!-- <div class="pagination_list">
<ul>
<li>
<%= link_to l(:label_sort_by_time), projects_path(:project_sort_type => '0'),:class=>"test_new" %>
</li>
<li>
<%= link_to l(:label_sort_by_active), projects_path(:project_sort_type => '1'),:class=>"test_new" %>
</li>
<li>
<%= link_to l(:label_sort_by_influence), projects_path(:project_sort_type => '2'),:class=>"test_new" %>
</li>
</ul>
</div> -->
<div id="projects-index">
<%= render_project_hierarchy(@projects)%>
</div>
<!-- <p class="pagination"><%= pagination_links_full @project_pages%></p> -->
<div class="pagination">
<ul>
<%= pagination_links_full @project_pages %>

@ -117,11 +117,17 @@
<div>
<%= link_to image_tag(url_to_avatar(user), :class => 'avatar'), user_path(user) %>
<%= content_tag "span", link_to_user(user), :class => "nomargin avatar_name" %>
<!-- <%= content_tag "div", "#{l(:label_user_grade)}:" %><%= user.user_status.grade %> -->
</div>
<div style="margin-top: 20px;margin-left:66px">
<%= l(:label_x_has_fans,:count=>user.watcher_users.count)%>
<%= l(:label_has_watchers,:count=>User.watched_by(user.id).count) %>
</div>
<div style="position:relative;float:left;margin-top:-20px;margin-left: 724px">
<%= l(:label_user_grade) %>: <span style="color:red"><%= user.user_status.grade %></span>
</div>
<div class="user-bottom">
<% unless user.memberships.empty? %>
@ -139,7 +145,7 @@
<div class="pagination">
<ul>
<%= pagination_links_full @user_pages, @user_count %>
<ul>
</ul>
</div>
<% html_title(l(:label_user_plural)) -%>
<% end -%>

@ -1,8 +1,11 @@
<!--add by huang-->
<div class="content_frame">
<p><%= link_to "关注的项目" , {:controller => 'users', :action => 'watch_projects', :id => @user.id}%>
<% unless @memberships.empty? %>
<% if @user == User.current %>
<p><%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new', :course => 0, :project_type => @project_type}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %></p>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new', :course => 0, :project_type => @project_type}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %></p>
<% end %>
<ul class="user_project_sort">
<% for membership in @memberships %>
@ -14,7 +17,7 @@
<table width="580" border="0">
<tr>
<td colspan="2" valign="top"><strong> <%= link_to_user(membership.user) if membership.respond_to?(:user) %></strong>
<span class="font_lighter"> <%= l(:label_create_project) %></span> <%= link_to_project(membership.project) %></td>
<span class="font_lighter"> <%= l(:label_watch_project) %></span> <%= link_to_project(membership.project) %></td>
</tr>
<tr>
<td colspan="2" width="580" >

@ -0,0 +1,34 @@
<p><%= link_to "关注的项目" , {:controller => 'users', :action => 'watch_projects', :id => @user.id}%>
<% if @user == User.current %>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new', :course => 0, :project_type => @project_type}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %></p>
<% end %>
<% unless @watch_projects.nil?&&watch_projects.project.nil? %>
<% for watch_project in @watch_projects %>
<table width="660" border="0" align="center" style="border-bottom: 1px dashed rgb(204, 204, 204); margin-bottom: 10px;font-size:14px;">
<tr>
<td colspan="2" valign="top" width="50" ><%= link_to image_tag(url_to_avatar(watch_project.project), :class => 'avatar'), project_path(watch_project.project) %></td>
<td>
<table width="580" border="0">
<tr>
<td colspan="2" valign="top"><strong> <%= link_to_user(@user) if watch_project.respond_to?(:user) %></strong>
<span class="font_lighter"> <%= @user.name%><%= l(:label_watch_project) %></span> <%= link_to_project(watch_project.project) %></td>
</tr>
<tr>
<td colspan="2" width="580" >
<p class="font_description">
<%= watch_project.project.description%>
</p></td>
</tr>
<tr>
<td align="left"><span class="font_lighter"> <%= format_time(watch_project.created_on) %></span></td><!-- modified by ming -->
</tr>
</table></td>
</tr>
</table>
</li>
<% end %>
<% else %>
还米有关注任何项目
<% end %>

@ -1631,9 +1631,19 @@ zh:
role_of_course: 课程角色
label_student: 学生
label_project_grade: 项目得分
label_user_grade: 个人得分
label_user_for_project_grade: 个人得分
label_system_grade: 系统评分
label_teacher: 老师
label_ta: 助教
label_in_course: 在课程中
label_assign_homework: 中布置了作业
label_noawards: 未评奖
label_course_modify_settings: 配置课程
label_module_share: dts测试工具
label_homework_prompt: 贴心小提示:
label_homework_prompt_content: 亲,在这里我们的作业将以项目的形式提交,如果小伙伴们还没有创建项目,请先创建一个项目。项目创建成功后,就可以
label_create_homework: 布置了作业:
label_watch_project: 关注了

@ -16,7 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
RedmineApp::Application.routes.draw do
resources :shares, only: [:new, :create, :destroy]
resources :shares
#added by william
get "tags/index"
@ -94,10 +94,13 @@ RedmineApp::Application.routes.draw do
match 'user_fanslist', :to => 'users#user_fanslist', :via => :get, :as => "user_fanslist" #add by huang
match 'user_courses', :to => 'users#user_courses', :via => :get
match 'user_homeworks', :to => 'users#user_homeworks', :via => :get
match 'watch_projects', :to => 'users#watch_projects', :via => :get
end
end
match 'users/:id/user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "feedback"
match 'users/:id/user_projects', :controller => 'users', :action => 'user_projects', :via => :get
#end
match 'my/account', :controller => 'my', :action => 'account', :via => [:get, :post]
match 'my/account/destroy', :controller => 'my', :action => 'destroy', :via => [:get, :post]
@ -128,6 +131,7 @@ RedmineApp::Application.routes.draw do
# Specific routes for issue watchers API
post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue'
delete 'issues/:object_id/watchers/:user_id' => 'watchers#destroy', :object_type => 'issue'
resources :projects do
member do

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
class AddGradeToProjectStatuses < ActiveRecord::Migration
def change
add_column :project_statuses, :grade, :float, :default => 0
end
end

@ -0,0 +1,5 @@
class AddGradeToUserStatuses < ActiveRecord::Migration
def change
add_column :user_statuses, :grade, :float, :default => 0
end
end

@ -0,0 +1,10 @@
class CreateUserGrades < ActiveRecord::Migration
def change
create_table :user_grades do |t|
t.integer :user_id, :null => false
t.integer :project_id, :null => false
t.float :grade, :default => 0
t.timestamps
end
end
end

@ -0,0 +1,7 @@
class AddIndexToUserGrades < ActiveRecord::Migration
def change
add_index :user_grades, :grade
add_index :user_grades, :project_id
add_index :user_grades, :user_id
end
end

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save