diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index 457b3bfa1..2dd6ce474 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -84,9 +84,6 @@ class OrganizationsController < ApplicationController @subfield_content = @organization.org_subfields.order("priority") @organization = Organization.find(params[:id]) - # 统计访问量 - @organization.update_column(:visits, @organization.visits.to_i + 1) - # @org_subfield = OrgSubfield.find(params[:org_subfield_id]) # @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0 # @org_acts = OrgActivity.where("(org_act_type='OrgDocumentComment'and org_act_id in (#{@org_subfield_ids.join(",")})) || (container_type='OrgSubfield' and container_id=#{@org_subfield.id})").order('updated_at desc').page(params[:page] || 1).per(10) @@ -116,15 +113,13 @@ class OrganizationsController < ApplicationController #@project_acts_issues = get_project_activities_org @organization #@course_acts = get_course_activities_org @organization - render :layout => 'base_org_newstyle' + render :layout => 'base_org2' else render_403 end else if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization) @organization = Organization.find(params[:id]) - # 统计访问量 - @organization.update_column(:visits, @organization.visits.to_i + 1) if params[:org_subfield_id] @org_subfield = OrgSubfield.find(params[:org_subfield_id]) @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0 diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5c8d194b9..c8b272480 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -319,9 +319,25 @@ class ProjectsController < ApplicationController else @events_pages = ForgeActivity.includes(:project).where("forge_activities.project_id = ? and projects.is_public = ? and forge_act_type != ? ",@project,1, "Document").order("created_at desc").page(params['page'|| 1]).per(10); end - g = Gitlab.client - unless @project.gpid.nil? - @static_total_per_user = g.rep_stats(@project.gpid) + # g = Gitlab.client + unless @project.gpid.nil? || @project.project_score.changeset_num == 0 + # rep_statics_commit = @project.rep_statics.order("commits_num desc") + rep_statics_commit = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by commits_num desc limit 10") + rep_statics_code = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by changeset desc limit 10") + # rep_statics_code = @project.rep_statics.sort_by {|u| u.changeset}.reverse + @a_uname = rep_statics_commit.map {|s| s.uname } + @a_uname_code = rep_statics_code.map {|s| s.uname } + @a_commits_num = rep_statics_commit.map {|s| s.commits_num.to_i } + @a_commits_add = rep_statics_code.map {|s| s.add.to_i } + @a_commits_del = rep_statics_code.map {|s| s.del.to_i } + @a_commits_changeset = rep_statics_code.map {|s| s.changeset.to_i } + g = Gitlab.client + begin + g_branch = g.project(@project.gpid).default_branch.to_s + rescue + logger.error("get gitlab project failed!") + end + @rev = g_branch.nil? ? "master" : g_branch end # 根据对应的请求,返回对应的数据 respond_to do |format| diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 82a6196cb..b73ecf9b9 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -325,31 +325,17 @@ update end end - # unless @repository.gitlab? - # # redirect_to to_gitlab_project_repository_path(@project, @repository) - # render :to_gitlab - # return - # end - - #if( !User.current.member_of?(@project) || @project.hidden_repo) - # @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty? - - # :name, :path, :kind, :size, :lastrev, :changeset @entries = @repository.entries(@path, @rev) - # @trees = g.trees(project, @path) @changeset = @repository.find_changeset_by_name(@rev) - #@project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT - #@ip = RepositoriesHelper::REPO_IP_ADDRESS - if request.xhr? @entries ? render(:partial => 'dir_list_content') : render(:nothing => true) else - #Modified by young - # (show_error_not_found; return) unless @entries g = Gitlab.client @changesets = g.commits(@project.gpid, :ref_name => @rev) + g_project = g.project(@project.gpid) # 总的提交数 - @changesets_all_count = @project.gpid.nil? ? 0 : g.project(@project.gpid).commit_count + @changesets_all_count = @project.gpid.nil? ? 0 : g_project.commit_count + @g_default_branch = g_project.default_branch.nil? ? "master" : g_project.default_branch # 访问该页面的是会后则刷新 if @project.project_score.nil? ProjectScore.create(:project_id => @project.id, :score => false) @@ -358,17 +344,16 @@ update if @changesets_all_count != @project.project_score.changeset_num && @changesets_all_count != 0 update_commits_count(@project, @changesets_all_count) end - # end # 最近一次提交 @changesets_latest_coimmit = @changesets[0] unless @changesets[0].blank? update_commits_date(@project, @changesets_latest_coimmit) end @creator = User.where("id =?", @project.user_id).first.try(:login) - @properties = @repository.properties(@path, @rev) - @repositories = @project.repositories - project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT - ip = RepositoriesHelper::REPO_IP_ADDRESS + # @properties = @repository.properties(@path, @rev) + # @repositories = @project.repositories + # project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT + # ip = RepositoriesHelper::REPO_IP_ADDRESS gitlab_address = Redmine::Configuration['gitlab_address'] if @repository.type.to_s == "Repository::Gitlab" @repos_url = gitlab_address.to_s+"/"+@project.owner.to_s+"/"+@repository.identifier+"."+"git" @@ -573,9 +558,17 @@ update g = Gitlab.client begin @static_total_per_user = g.rep_stats(project_id, :rev => rev) - @static_total_per_user - # @static_month__per_user = g.rep_stats(project_id, :rev => rev, :creator => creator, :period => 2) - # @static_week_per_user = g.rep_stats(project_id, :rev => rev, :creator => creator, :period => 3) + # 更新rep_statics统计数 + @static_total_per_user.each do |static| + rep_static = RepStatics.where("project_id =? and email =?", @project.id, static.email.to_s).first + if rep_static.nil? + RepStatics.create(:project_id => @project.id, :uname => static.uname, :commits_num => static.commits_num, :email => static.email, :add => static.add, :del => static.del, :changeset => static.changes) + else + if @rev == params[:default_branch] + rep_static.update_attributes(:uname => static.uname, :commits_num => static.commits_num, :email => static.email, :add => static.add, :del => static.del, :changeset => static.changes) + end + end + end rescue render_404 return diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 50b117da2..d7c72b805 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -120,60 +120,53 @@ module ApplicationHelper case type when "HomeworkCommon" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0, :homework_journal_num => 1) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :homework_journal_num => 1) else - score = course_contributor_score.homework_journal_num + 1 - course_contributor_score.update_attributes(:homework_journal_num => score) + score = course_contributor_score.homework_journal_num.to_i + 1 + course_contributor_score.update_column(:homework_journal_num, score) end # 课程留言 when "Course" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 1, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :journal_num => 1) else - score = course_contributor_score.journal_num + 1 - course_contributor_score.update_attributes(:journal_num => score) + score = course_contributor_score.journal_num.to_i + 1 + course_contributor_score.update_column(:journal_num, score) end when "Message" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1) else - score = course_contributor_score.message_num + 1 - course_contributor_score.update_attributes(:message_num => score) + score = course_contributor_score.message_num.to_i + 1 + course_contributor_score.update_column(:message_num, score) end when "MessageReply" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 1, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_reply_num => 1) else - score = course_contributor_score.message_reply_num + 1 - course_contributor_score.update_attributes(:message_reply_num => score) + score = course_contributor_score.message_reply_num.to_i + 1 + course_contributor_score.update_column(:message_reply_num, score) end when "NewReply" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_reply_num => 1) else - score = course_contributor_score.news_reply_num + 1 - course_contributor_score.update_attributes(:news_reply_num => score) + score = course_contributor_score.news_reply_num.to_i + 1 + course_contributor_score.update_column(:news_reply_num, score) end when "News" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :news_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_num => 1) else - score = course_contributor_score.news_num + 1 - course_contributor_score.update_attributes(:news_num => score) + score = course_contributor_score.news_num.to_i + 1 + course_contributor_score.update_column(:news_num, score) end when "Attachment" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :news_num => 0, :resource_num => 1, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :resource_num => 1) else - score = course_contributor_score.resource_num + 1 - course_contributor_score.update_attributes(:resource_num => score) + score = course_contributor_score.resource_num.to_i + 1 + course_contributor_score.update_column(:resource_num, score) end end end @@ -184,39 +177,39 @@ module ApplicationHelper case type when "HomeworkCommon" unless course_contributor_score.nil? - score = course_contributor_score.homework_journal_num - 1 - course_contributor_score.update_attribute(:homework_journal_num, score < 0 ? 0 : score) + score = course_contributor_score.homework_journal_num.to_i - 1 + course_contributor_score.update_column(:homework_journal_num, score < 0 ? 0 : score) end # 课程留言 when "Course" unless course_contributor_score.nil? - score = course_contributor_score.journal_num - 1 - course_contributor_score.update_attribute(:journal_num, score < 0 ? 0 : score) + score = course_contributor_score.journal_num.to_i - 1 + course_contributor_score.update_column(:journal_num, score < 0 ? 0 : score) end when "Message" unless course_contributor_score.nil? - score = course_contributor_score.message_num - 1 - course_contributor_score.update_attribute(:message_num, score < 0 ? 0 : score) + score = course_contributor_score.message_num.to_i - 1 + course_contributor_score.update_column(:message_num, score < 0 ? 0 : score) end when "MessageReply" unless course_contributor_score.nil? - score = course_contributor_score.message_reply_num - 1 - course_contributor_score.update_attribute(:message_reply_num, score < 0 ? 0 : score) + score = course_contributor_score.message_reply_num.to_i - 1 + course_contributor_score.update_column(:message_reply_num, score < 0 ? 0 : score) end when "NewReply" unless course_contributor_score.nil? - score = course_contributor_score.news_reply_num - 1 - course_contributor_score.update_attribute(:news_reply_num, score < 0 ? 0 : score) + score = course_contributor_score.news_reply_num.to_i - 1 + course_contributor_score.update_column(:news_reply_num, score < 0 ? 0 : score) end when "News" unless course_contributor_score.nil? - score = course_contributor_score.news_num - 1 - course_contributor_score.update_attribute(:news_num, score < 0 ? 0 : score) + score = course_contributor_score.news_num.to_i - 1 + course_contributor_score.update_column(:news_num, score < 0 ? 0 : score) end when "Attachment" unless course_contributor_score.nil? - score = course_contributor_score.resource_num - 1 - course_contributor_score.update_attribute(:resource_num, score < 0 ? 0 : score) + score = course_contributor_score.resource_num.to_i - 1 + course_contributor_score.update_column(:resource_num, score < 0 ? 0 : score) end end end diff --git a/app/helpers/organizations_helper.rb b/app/helpers/organizations_helper.rb index 4faa802a5..3fdfc3aa0 100644 --- a/app/helpers/organizations_helper.rb +++ b/app/helpers/organizations_helper.rb @@ -63,14 +63,67 @@ module OrganizationsHelper def subfield_status_option type = [] option1 = [] - option1 << "列表" + option1 << "左上" option1 << "1" type << option1 option2 = [] - option2 << "图片" - option2 << "0" + option2 << "中一" + option2 << "2" type << option2 + option3 = [] + option3 << "中二" + option3 << "3" + type << option3 + option4 = [] + option4 << "中下" + option4 << "4" + type << option4 + option5 = [] + option5 << "左下" + option5 << "5" + type << option5 + option6 = [] + option6 << "右上" + option6 << "6" + type << option6 + option7 = [] + option7 << "右中" + option7 << "7" + type << option7 + option8 = [] + option8 << "右下" + option8 << "8" + type << option8 type end + def subfield_list_type subfield + case subfield.to_i + when 1 + resulet = "左上" + when 2 + resulet = "中一" + when 3 + resulet = "中二" + when 4 + resulet = "中下" + when 5 + resulet = "左下" + when 6 + resulet = "右上" + when 7 + resulet = "右中" + when 8 + resulet = "右下" + end + end + + + def get_subfield_acts field + org_subfield = OrgSubfield.find(field.id) + org_subfield_ids = org_subfield.org_document_comments.map(&:id) << 0 + org_acts = OrgActivity.where("(org_act_type='OrgDocumentComment'and org_act_id in (#{org_subfield_ids.join(",")})) || (container_type='OrgSubfield' and container_id=#{org_subfield.id})").order('updated_at desc') + org_acts + end + end diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 36187b460..3cf781f76 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -41,6 +41,23 @@ module RepositoriesHelper identifiers.include?(iden) ? false :true end + # 获取文件目录的最新动态 + def get_trees_last_changes(project_id, rev, ent_name) + g = Gitlab.client + begin + tree_changes = g.rep_last_changes(project_id, :rev => rev, :path => ent_name) + tree_changes + rescue + logger.error("faile to get tress activities!") + end + end + + def translate_time time + case time + when time.include("") + end + end + # 获取diff内容行号 def diff_line_num content content.scan(/@@ -(\d+),\d+ \+\d+,\d+ @@/).first.join("").to_i diff --git a/app/models/message.rb b/app/models/message.rb index d697db236..bb12473be 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -77,12 +77,10 @@ class Message < ActiveRecord::Base validates_length_of :subject, :maximum => 255 validate :cannot_reply_to_locked_topic, :on => :create - after_create :add_author_as_watcher, :reset_counters!, :add_boards_count + # after_create :add_author_as_watcher, :reset_counters!, :add_boards_count after_update :update_messages_board, :update_activity after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets, :decrease_boards_count, :down_course_score - - after_create :act_as_activity,:act_as_course_activity,:be_user_score,:act_as_forge_activity, - :act_as_system_message, :send_mail, :act_as_student_score, act_as_at_message(:content, :author_id) + after_create :act_as_course_activity, :act_as_forge_activity, :act_as_system_message, :send_mail, :act_as_student_score, act_as_at_message(:content, :author_id), :add_author_as_watcher, :reset_counters!, :add_boards_count #before_save :be_user_score scope :visible, lambda {|*args| @@ -134,11 +132,11 @@ class Message < ActiveRecord::Base if self.project && !project.project_score.nil? # 讨论区 if self.parent_id.nil? - count = self.project.project_score.board_num + 1 - self.project.project_score.update_attribute(:board_num, count) + count = self.project.project_score.board_num.to_i + 1 + self.project.project_score.update_column(:board_num, count) else # 回复 - count = self.project.project_score.board_message_num + 1 - self.project.project_score.update_attribute(:board_message_num, count) + count = self.project.project_score.board_message_num.to_i + 1 + self.project.project_score.update_column(:board_message_num, count) end end end @@ -259,13 +257,13 @@ class Message < ActiveRecord::Base def act_as_system_message if self.course if self.parent_id.nil? # 主贴 - self.course.members.each do |m| + self.course.members.includes(:user).each do |m| if self.author.allowed_to?(:as_teacher, self.course) && m.user_id != self.author_id # 老师 自己的帖子不给自己发送消息 self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false) end end else # 回帖 - self.course.members.each do |m| + self.course.members.includes(:user).each do |m| if m.user_id == Message.find(self.parent_id).author_id && m.user_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息 self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false) end @@ -273,13 +271,13 @@ class Message < ActiveRecord::Base end elsif self.project # 项目相关 if self.parent_id.nil? # 主贴 - self.project.members.each do |m| + self.project.members.includes(:user).each do |m| if m.user_id != self.author_id self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.board.project_id, :viewed => false) end end else # 回帖 - self.project.members.each do |m| + self.project.members.includes(:user).each do |m| if m.user_id == Message.find(self.parent_id).author_id && m.user_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息 self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.board.project_id, :viewed => false) end diff --git a/app/models/project.rb b/app/models/project.rb index 184b3c7af..ceec0e182 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -115,6 +115,7 @@ class Project < ActiveRecord::Base has_many :org_projects,:dependent => :destroy has_many :organization,:through => :org_projects + has_many :rep_statics, :class_name => 'RepStatics' # has_many :journals diff --git a/app/models/rep_statics.rb b/app/models/rep_statics.rb new file mode 100644 index 000000000..584af6560 --- /dev/null +++ b/app/models/rep_statics.rb @@ -0,0 +1,4 @@ +class RepStatics < ActiveRecord::Base + belongs_to :project + attr_accessible :add, :commits_num, :del, :email, :project_id, :uname, :changeset +end diff --git a/app/models/repository.rb b/app/models/repository.rb index 571bba1b9..305c82f97 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -44,7 +44,7 @@ class Repository < ActiveRecord::Base # validates_uniqueness_of :identifier, :allow_blank => true validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph) # donwcase letters, digits, dashes, underscores but not digits only - validates_format_of :identifier, :with => /^[a-z0-9_\-]+$/, :allow_blank => true + validates_format_of :identifier, :with => /^[a-zA-Z0-9_\-]*[a-zA-Z_\-]+[a-zA-Z0-9_\-]*$/, :allow_blank => true # Checks if the SCM is enabled when creating a repository validate :repo_create_validation, :on => :create diff --git a/app/views/layouts/_logined_header.html.erb b/app/views/layouts/_logined_header.html.erb index c04081128..f5b421f62 100644 --- a/app/views/layouts/_logined_header.html.erb +++ b/app/views/layouts/_logined_header.html.erb @@ -5,17 +5,18 @@