course新增列并更改相关逻辑
This commit is contained in:
parent
ea3b80fdc6
commit
e15bad7462
|
@ -171,7 +171,7 @@ class CoursesController < ApplicationController
|
|||
per_page_option = 10
|
||||
|
||||
@courses_all = Course.active.visible.
|
||||
joins("LEFT JOIN #{ProjectStatus.table_name} ON #{Project.table_name}.id = #{ProjectStatus.table_name}.couse_id")
|
||||
joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.couse_id")
|
||||
|
||||
@course_count = @courses_all.count
|
||||
@course_pages = Paginator.new @course_count, per_page_option, params['page']
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
<p >
|
||||
<%= content_tag('span', "#{l(:label_institution_name)}:", :class => "course-font")%>
|
||||
<% @admin = @project.project_infos%>
|
||||
<%if @admin&&@admin.first&&@admin.first.user&&@admin.first.user.user_extensions%>
|
||||
<!-- <%= @admin.first.user.user_extensions.occupation %> -->
|
||||
<%if @admin&&@adadminmin.first&&@admin.first.user&&@admin.first.user.user_extensions%>
|
||||
<!-- <%= @.first.user.user_extensions.occupation %> -->
|
||||
<%# unless @project.course_extra.school.nil? %>
|
||||
<%= @project.course_extra.teacher.user_extensions.school.try(:name) %>
|
||||
<%# end %>
|
||||
|
|
|
@ -3,45 +3,45 @@
|
|||
<% end %>
|
||||
|
||||
<div class="top-content">
|
||||
<%= form_tag(projects_search_path, :method => :get) do %>
|
||||
<%= form_tag(courses_search_path, :method => :get) do %>
|
||||
<table width="940px">
|
||||
<tr>
|
||||
<td class="info_font" style="width: 220px; color: #15bccf"><%= l(:label_project_deposit) %></td>
|
||||
<td class="info_font" style="width: 220px; color: #15bccf"><%= l(:label_course_deposit) %></td>
|
||||
<td class="location-list"><strong><%= l(:label_user_location) %> :</strong></td>
|
||||
<td rowspan="2">
|
||||
<% if User.current.logged? %>
|
||||
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new', :course => 0, :project_type =>( @project_type||=0)}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %>
|
||||
<%= link_to(l(:label_course_new), {:controller => 'courses', :action => 'new', :course => 0, :course_type =>( @course_type||=0)}, :class => 'icon icon-add') if User.current.allowed_to?(:add_course, nil, :global => true) %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td rowspan="2" >
|
||||
<div class="project-search" style="float: right">
|
||||
<div class="course-search" style="float: right">
|
||||
<%= text_field_tag 'name', params[:name], :size => 30 %>
|
||||
<%= hidden_field_tag 'project_type', params[:project_type] %>
|
||||
<%= hidden_field_tag 'course_type', params[:course_type] %>
|
||||
<%= submit_tag l(:label_search), :class => "enterprise", :name => nil %>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding-left: 8px"><a><%= link_to request.host()+"/projects", :controller => 'projects', :action => 'index', :project_type => 0 %> </a></td>
|
||||
<td ><%=link_to l(:field_homepage), home_path %> > <%=link_to l(:label_project_deposit), :controller => 'projects', :action => 'index', :project_type => 0 %></td>
|
||||
<td style="padding-left: 8px"><a><%= link_to request.host()+"/courses", :controller => 'courses', :action => 'index', :course_type => 0 %> </a></td>
|
||||
<td ><%=link_to l(:field_homepage), home_path %> > <%=link_to l(:label_course_deposit), :controller => 'courses', :action => 'index', :course_type => 0 %></td>
|
||||
</tr>
|
||||
</table>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= sort_courses(@s_type) %>
|
||||
<div id="projects-index">
|
||||
<%= render_course_hierarchy(@projects)%>
|
||||
<div id="courses-index">
|
||||
<%= render_course_hierarchy(@courses)%>
|
||||
</div>
|
||||
|
||||
<div class="pagination">
|
||||
<ul>
|
||||
<%= pagination_links_full @project_pages, @project_count %>
|
||||
<%= pagination_links_full @course_pages, @course_count %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<% if User.current.logged? %>
|
||||
<p style="text-align:right;">
|
||||
<span class="my-project"><%= l(:label_my_projects) %></span>
|
||||
<span class="my-course"><%= l(:label_my_courses) %></span>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
|
@ -52,12 +52,12 @@
|
|||
<% content_for :sidebar do %>
|
||||
|
||||
<%= form_tag({}, :method => :get) do %>
|
||||
<h3><%= l(:label_project_plural) %></h3>
|
||||
<label for="closed"><%= check_box_tag 'closed', 1, params[:closed] %> <%= l(:label_show_closed_projects) %></label>
|
||||
<h3><%= l(:label_course_plural) %></h3>
|
||||
<label for="closed"><%= check_box_tag 'closed', 1, params[:closed] %> <%= l(:label_show_closed_courses) %></label>
|
||||
<p>
|
||||
<%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_project_plural)) -%>
|
||||
<% html_title(l(:label_course_plural)) -%>
|
||||
|
|
|
@ -0,0 +1,392 @@
|
|||
class StoredCourseProcedure < ActiveRecord::Migration
|
||||
def up
|
||||
# 需要完成的数据导入:
|
||||
# project中所有的课程导入至course
|
||||
# Project_status导入至course_status
|
||||
#
|
||||
def self.up
|
||||
Project.find_all.each do |project|
|
||||
if project.project_type == 1
|
||||
course = Course.find_by_extra(project.identifier)
|
||||
if course
|
||||
course.name = project.name
|
||||
|
||||
end
|
||||
Course.new do |comment|
|
||||
comment.name = 'Welcome.'
|
||||
comment.body = "Article '#{article.name}' is open for comments."
|
||||
ments << comment
|
||||
comment.save
|
||||
article.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
execute "
|
||||
CREATE PROCEDURE `sp_course_data_change` ()
|
||||
BEGIN
|
||||
DECLARE user_uid bigint(22);
|
||||
DECLARE user_changesets_count int(10);
|
||||
DECLARE _done tinyint(1) DEFAULT 0;
|
||||
DECLARE cur_user CURSOR FOR
|
||||
SELECT
|
||||
users.id
|
||||
FROM users
|
||||
WHERE users.type = 'User' AND users.status = 1 AND users.admin = 0;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1;
|
||||
OPEN cur_user;
|
||||
loop_xxx:
|
||||
LOOP
|
||||
FETCH cur_user INTO user_uid ;
|
||||
IF _done = 1 THEN
|
||||
LEAVE loop_xxx;
|
||||
END IF;
|
||||
BEGIN
|
||||
DECLARE journals_for_messages_count int(10);
|
||||
DECLARE journals_count int(10);
|
||||
DECLARE comments_count int(10);
|
||||
DECLARE messages_count int(10);
|
||||
DECLARE news_count int(10);
|
||||
DECLARE wiki_contents_count int(10);
|
||||
DECLARE activities_count int(10);
|
||||
DECLARE total_count numeric(8, 2);
|
||||
|
||||
SELECT
|
||||
COUNT(*) INTO journals_for_messages_count
|
||||
FROM journals_for_messages
|
||||
WHERE user_id = user_uid ;
|
||||
SELECT
|
||||
COUNT(*) INTO journals_count
|
||||
FROM journals
|
||||
WHERE user_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO comments_count
|
||||
FROM comments
|
||||
WHERE author_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO messages_count
|
||||
FROM messages
|
||||
WHERE author_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO news_count
|
||||
FROM news
|
||||
WHERE author_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO wiki_contents_count
|
||||
FROM wiki_contents
|
||||
WHERE author_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO activities_count
|
||||
FROM activities
|
||||
WHERE user_id = user_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO user_changesets_count
|
||||
FROM changesets
|
||||
WHERE changesets.user_id = user_uid;
|
||||
|
||||
|
||||
|
||||
SET total_count = journals_for_messages_count * 0.05 +
|
||||
journals_count * 0.1 +
|
||||
comments_count * 0.1 +
|
||||
messages_count * 0.05 +
|
||||
news_count * 0.1 +
|
||||
wiki_contents_count * 0.1 +
|
||||
activities_count * 0.2 +
|
||||
user_changesets_count * 0.3;
|
||||
|
||||
UPDATE user_statuses
|
||||
SET changesets_count = user_changesets_count,
|
||||
grade = total_count
|
||||
WHERE user_id = user_uid;
|
||||
COMMIT;
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
"
|
||||
execute "
|
||||
CREATE EVENT IF NOT EXISTS e_test
|
||||
ON SCHEDULE EVERY 1 DAY STARTS '2013-08-27 01:50:00'
|
||||
ON COMPLETION PRESERVE
|
||||
DO CALL `sp_user_status_cursor`();
|
||||
"
|
||||
execute "
|
||||
CREATE PROCEDURE `sp_project_status_cursor` ()
|
||||
BEGIN
|
||||
DECLARE project_uid bigint(22);
|
||||
DECLARE project_changesets_count int(10);
|
||||
DECLARE _done tinyint(1) DEFAULT 0;
|
||||
|
||||
DECLARE cur_project CURSOR FOR
|
||||
SELECT
|
||||
projects.id
|
||||
FROM projects
|
||||
WHERE projects.status <> 9
|
||||
AND projects.is_public = 1 AND projects.project_type = 0 ;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1;
|
||||
OPEN cur_project;
|
||||
loop_xxx:
|
||||
LOOP
|
||||
FETCH cur_project INTO project_uid;
|
||||
IF _done = 1 THEN
|
||||
LEAVE loop_xxx;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
DECLARE total_count numeric(8, 2);
|
||||
DECLARE news_id int(10);
|
||||
DECLARE issues_id int(10);
|
||||
DECLARE issues_count int(10);
|
||||
DECLARE news_count int(10);
|
||||
DECLARE time_entries_count int(10);
|
||||
DECLARE documents_count int(10);
|
||||
DECLARE issues_jour_count_total int(10) DEFAULT 0;
|
||||
DECLARE issues_jour_count int(10);
|
||||
DECLARE news_jour_count_total int(10) DEFAULT 0;
|
||||
DECLARE news_jour_count int(10);
|
||||
DECLARE boards_messages_count int(10);
|
||||
|
||||
DECLARE cur_user_id int(10);
|
||||
DECLARE cur_user_issues_journals_count int(10);
|
||||
DECLARE cur_user_news_journals_count int(10);
|
||||
DECLARE cur_user_issues_count int(10);
|
||||
DECLARE cur_user_news_count int(10);
|
||||
DECLARE cur_user_issues_id int(10);
|
||||
DECLARE cur_user_news_id int(10);
|
||||
|
||||
|
||||
|
||||
|
||||
DECLARE _inner_done_one tinyint(1) DEFAULT 0;
|
||||
DECLARE cur_issues CURSOR FOR
|
||||
SELECT
|
||||
issues.id
|
||||
FROM issues
|
||||
WHERE project_id = project_uid;
|
||||
DECLARE cur_news CURSOR FOR
|
||||
SELECT
|
||||
news.id
|
||||
FROM news
|
||||
WHERE project_id = project_uid;
|
||||
DECLARE cur_user CURSOR FOR
|
||||
SELECT
|
||||
members.user_id
|
||||
FROM members
|
||||
INNER JOIN users
|
||||
ON members.user_id = users.id
|
||||
WHERE members.project_id = project_uid
|
||||
AND (users.type = 'User' AND users.status = 1);
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _inner_done_one = 1;
|
||||
|
||||
OPEN cur_issues;
|
||||
loop_issues:
|
||||
LOOP
|
||||
FETCH cur_issues INTO issues_id;
|
||||
IF _inner_done_one = 1 THEN
|
||||
LEAVE loop_issues;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
COUNT(*) INTO issues_jour_count
|
||||
FROM `journals`
|
||||
WHERE `journals`.`journalized_id` = issues_id AND `journals`.`journalized_type` = 'Issue';
|
||||
SET issues_jour_count_total = issues_jour_count_total + issues_jour_count;
|
||||
END;
|
||||
END LOOP;
|
||||
-- CLOSE cur_issues;
|
||||
|
||||
SET _inner_done_one = 0;
|
||||
|
||||
OPEN cur_news;
|
||||
loop_news:
|
||||
LOOP
|
||||
FETCH cur_news INTO news_id;
|
||||
IF _inner_done_one = 1 THEN
|
||||
LEAVE loop_news;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
COUNT(*) INTO news_jour_count
|
||||
FROM `journals`
|
||||
WHERE `journals`.`journalized_id` = news_id AND `journals`.`journalized_type` = 'News';
|
||||
SET news_jour_count_total = news_jour_count_total + news_jour_count;
|
||||
END;
|
||||
END LOOP;
|
||||
-- CLOSE cur_news;
|
||||
|
||||
SET _inner_done_one = 0;
|
||||
|
||||
OPEN cur_user;
|
||||
loop_user:
|
||||
LOOP
|
||||
FETCH cur_user INTO cur_user_id;
|
||||
IF _inner_done_one = 1 THEN
|
||||
LEAVE loop_user;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
DECLARE total_cur_user_issues_journals_count int(10) DEFAULT 0;
|
||||
DECLARE total_cur_user_news_journals_count int(10) DEFAULT 0;
|
||||
DECLARE cur_user_changesets_count INT(10);
|
||||
DECLARE user_total_count numeric(8, 2);
|
||||
DECLARE _inner_inner_done tinyint(1) DEFAULT 0;
|
||||
DECLARE cur_user_issues CURSOR FOR
|
||||
SELECT
|
||||
issues.id
|
||||
FROM issues
|
||||
WHERE project_id = project_uid AND author_id = cur_user_id;
|
||||
DECLARE cur_user_news CURSOR FOR
|
||||
SELECT
|
||||
news.id
|
||||
FROM news
|
||||
WHERE project_id = project_uid AND author_id = cur_user_id;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _inner_inner_done = 1;
|
||||
|
||||
OPEN cur_user_issues;
|
||||
loop_user_issues:
|
||||
LOOP
|
||||
FETCH cur_issues INTO cur_user_issues_id;
|
||||
IF _inner_inner_done = 1 THEN
|
||||
LEAVE loop_user_issues;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
COUNT(*) INTO cur_user_issues_journals_count
|
||||
FROM journals
|
||||
WHERE journalized_id = cur_user_issues_id AND user_id = cur_user_id
|
||||
AND journalized_type = 'Issues';
|
||||
SET total_cur_user_issues_journals_count = total_cur_user_issues_journals_count +
|
||||
cur_user_issues_journals_count;
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
-- CLOSE cur_user_issues;
|
||||
|
||||
SET _inner_inner_done = 0;
|
||||
|
||||
OPEN cur_user_news;
|
||||
loop_user_news:
|
||||
LOOP
|
||||
FETCH cur_user_news INTO cur_user_news_id;
|
||||
IF _inner_inner_done = 1 THEN
|
||||
LEAVE loop_user_news;
|
||||
END IF;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
COUNT(*) INTO cur_user_news_journals_count
|
||||
FROM journals
|
||||
WHERE journalized_id = cur_user_news_id AND user_id = cur_user_id AND journalized_type = 'News';
|
||||
SET total_cur_user_news_journals_count = total_cur_user_news_journals_count +
|
||||
cur_user_news_journals_count;
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
SELECT
|
||||
COUNT(*) INTO cur_user_issues_count
|
||||
FROM issues
|
||||
WHERE project_id = project_uid AND author_id = cur_user_id;
|
||||
SELECT
|
||||
COUNT(*) INTO cur_user_news_count
|
||||
FROM news
|
||||
WHERE project_id = project_uid AND author_id = cur_user_id;
|
||||
SELECT
|
||||
COUNT(*) INTO cur_user_changesets_count
|
||||
FROM changesets
|
||||
WHERE user_id = cur_user_id AND
|
||||
repository_id IN (SELECT
|
||||
id
|
||||
FROM repositories
|
||||
WHERE project_id = project_uid);
|
||||
SET user_total_count = cur_user_issues_count*0.2 +
|
||||
cur_user_news_count*0.2 +
|
||||
total_cur_user_issues_journals_count*0.1 +
|
||||
total_cur_user_news_journals_count*0.1 +
|
||||
cur_user_changesets_count*0.4;
|
||||
UPDATE user_grades
|
||||
SET grade = user_total_count
|
||||
WHERE user_id = cur_user_id AND project_id = project_uid;
|
||||
COMMIT;
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
SELECT
|
||||
COUNT(*) INTO issues_count
|
||||
FROM issues
|
||||
WHERE project_id = project_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO news_count
|
||||
FROM news
|
||||
WHERE project_id = project_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO documents_count
|
||||
FROM documents
|
||||
WHERE project_id = project_uid;
|
||||
SELECT
|
||||
SUM(boards.messages_count) INTO boards_messages_count
|
||||
FROM boards
|
||||
WHERE project_id = project_uid;
|
||||
SELECT
|
||||
COUNT(*) INTO project_changesets_count
|
||||
FROM `changesets`
|
||||
INNER JOIN `repositories` ON `changesets`.`repository_id` = `repositories`.`id`
|
||||
WHERE `repositories`.`project_id` = project_uid AND (is_default = 1);
|
||||
|
||||
SET total_count = issues_count * 0.2 +
|
||||
issues_jour_count_total * 0.1 +
|
||||
news_count * 0.1 +
|
||||
news_jour_count_total * 0.1 +
|
||||
documents_count * 0.1 +
|
||||
project_changesets_count * 0.3 +
|
||||
boards_messages_count * 0.1;
|
||||
|
||||
|
||||
IF total_count IS NOT NULL THEN
|
||||
|
||||
UPDATE project_statuses
|
||||
SET changesets_count = project_changesets_count,
|
||||
grade = total_count
|
||||
WHERE project_id = project_uid;
|
||||
ELSE
|
||||
UPDATE project_statuses
|
||||
SET changesets_count = project_changesets_count,
|
||||
grade = 0
|
||||
WHERE project_id = project_uid;
|
||||
END IF;
|
||||
|
||||
COMMIT;
|
||||
END;
|
||||
END LOOP;
|
||||
END;
|
||||
"
|
||||
execute "
|
||||
CREATE EVENT IF NOT EXISTS e_project_status_test
|
||||
ON SCHEDULE EVERY 1 DAY STARTS '2013-08-27 01:50:00'
|
||||
ON COMPLETION PRESERVE
|
||||
DO CALL `sp_project_status_cursor`();
|
||||
"
|
||||
execute "
|
||||
SET GLOBAL event_scheduler = ON;
|
||||
"
|
||||
end
|
||||
|
||||
def down
|
||||
execute " DROP PROCEDURE IF EXISTS `sp_user_status_cursor`;
|
||||
"
|
||||
execute "
|
||||
DROP EVENT IF EXISTS e_test;
|
||||
"
|
||||
execute "
|
||||
DROP PROCEDURE IF EXISTS `sp_project_status_cursor`;
|
||||
"
|
||||
execute "
|
||||
DROP EVENT IF EXISTS e_project_status_test;
|
||||
"
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
class AddStatusToCourse < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :courses, :description, :text
|
||||
add_column :courses, :status, :int ,default: 1
|
||||
add_column :courses, :attachmenttype, :int ,default: 2
|
||||
add_column :courses, :lft, :int
|
||||
add_column :courses, :rgt, :int
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue