parent
7677e092e0
commit
3165d97417
|
@ -38,31 +38,52 @@ class NewsController < ApplicationController
|
||||||
@limit = 10
|
@limit = 10
|
||||||
end
|
end
|
||||||
|
|
||||||
scope = @project ? @project.news.visible : News.visible
|
# modify by nwb
|
||||||
|
if params[:course_id] && @course==nil
|
||||||
@news_count = scope.count
|
@course = Course.find(params[:course_id])
|
||||||
@news_pages = Paginator.new @news_count, @limit, params['page']
|
|
||||||
@offset ||= @news_pages.offset
|
|
||||||
@newss = scope.all(:include => [:author, :project],
|
|
||||||
:order => "#{News.table_name}.created_on DESC",
|
|
||||||
:offset => @offset,
|
|
||||||
:limit => @limit)
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html {
|
|
||||||
@news = News.new # for adding news inline
|
|
||||||
# huang
|
|
||||||
|
|
||||||
if @project.project_type == 1
|
|
||||||
render :layout => 'base_courses'
|
|
||||||
else
|
|
||||||
render :layout => false if request.xhr?
|
|
||||||
end
|
|
||||||
}
|
|
||||||
format.api
|
|
||||||
format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
|
|
||||||
end
|
end
|
||||||
end
|
if @project
|
||||||
|
scope = @project ? @project.news.visible : News.visible
|
||||||
|
|
||||||
|
@news_count = scope.count
|
||||||
|
@news_pages = Paginator.new @news_count, @limit, params['page']
|
||||||
|
@offset ||= @news_pages.offset
|
||||||
|
@newss = scope.all(:include => [:author, :project],
|
||||||
|
:order => "#{News.table_name}.created_on DESC",
|
||||||
|
:offset => @offset,
|
||||||
|
:limit => @limit)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
@news = News.new # for adding news inline
|
||||||
|
# huang
|
||||||
|
|
||||||
|
render :layout => false if request.xhr?
|
||||||
|
}
|
||||||
|
format.api
|
||||||
|
format.atom { render_feed(@newss, :title => (@project ? @project.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
|
||||||
|
end
|
||||||
|
elsif @course
|
||||||
|
scope = @course ? @course.news.visible : News.visible
|
||||||
|
|
||||||
|
@news_count = scope.count
|
||||||
|
@news_pages = Paginator.new @news_count, @limit, params['page']
|
||||||
|
@offset ||= @news_pages.offset
|
||||||
|
@newss = scope.all(:include => [:author, :course],
|
||||||
|
:order => "#{News.table_name}.created_on DESC",
|
||||||
|
:offset => @offset,
|
||||||
|
:limit => @limit)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
@news = News.new
|
||||||
|
render :layout => 'base_courses'
|
||||||
|
}
|
||||||
|
format.api
|
||||||
|
format.atom { render_feed(@newss, :title => (@course ? @course.name : Setting.app_title) + ": #{l(:label_news_plural)}") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@comments = @news.comments
|
@comments = @news.comments
|
||||||
|
|
|
@ -26,6 +26,7 @@ class Course < ActiveRecord::Base
|
||||||
has_many :enabled_modules, :dependent => :delete_all
|
has_many :enabled_modules, :dependent => :delete_all
|
||||||
has_many :boards, :dependent => :destroy, :order => "position ASC"
|
has_many :boards, :dependent => :destroy, :order => "position ASC"
|
||||||
has_many :course_journals_for_messages, :class_name => 'CourseJournalsForMessage', :as => :jour, :dependent => :destroy
|
has_many :course_journals_for_messages, :class_name => 'CourseJournalsForMessage', :as => :jour, :dependent => :destroy
|
||||||
|
has_many :news, :dependent => :destroy, :include => :author
|
||||||
|
|
||||||
acts_as_taggable
|
acts_as_taggable
|
||||||
acts_as_nested_set :order => 'name', :dependent => :destroy
|
acts_as_nested_set :order => 'name', :dependent => :destroy
|
||||||
|
|
|
@ -35,6 +35,7 @@ class News < ActiveRecord::Base
|
||||||
:author_key => :author_id
|
:author_key => :author_id
|
||||||
acts_as_watchable
|
acts_as_watchable
|
||||||
|
|
||||||
|
|
||||||
after_create :add_author_as_watcher
|
after_create :add_author_as_watcher
|
||||||
# fq
|
# fq
|
||||||
after_create :act_as_activity
|
after_create :act_as_activity
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
<%
|
||||||
|
btn_tips = l(:label_news_notice)
|
||||||
|
label_tips = l(:label_course_news)
|
||||||
|
%>
|
||||||
|
|
||||||
|
<span style="font-size: 16px; border-bottom:1px solid #f0f0f0; margin-right: 15px;">
|
||||||
|
<%= label_tips %>
|
||||||
|
</span>
|
||||||
|
<%= link_to(btn_tips,
|
||||||
|
new_course_news_path(@course),
|
||||||
|
:class => 'icon icon-add',
|
||||||
|
:onclick => 'showAndScrollTo("add-news", "news_title"); return false;') %>
|
||||||
|
|
||||||
|
<% if @course && User.current.allowed_to?(:manage_news, @course) %>
|
||||||
|
<div id="add-news" class="add_frame" style="display:none;">
|
||||||
|
<%= labelled_form_for @news, :url => course_news_index_path(@course),
|
||||||
|
:html => {:id => 'news-form', :multipart => true} do |f| %>
|
||||||
|
<%= render :partial => 'news/form', :locals => {:f => f} %>
|
||||||
|
<%= submit_tag l(:button_create), :class => 'whiteButton m3p10 h30', :name => nil %><!-- button-submit --> |
|
||||||
|
<%= preview_link preview_news_path(:course_id => @course), 'news-form', target='preview', {:class => 'whiteButton m3p10'} %>
|
||||||
|
|
|
||||||
|
<%= link_to l(:button_cancel), "#", :onclick => '$("#add-news").hide()', :class => 'whiteButton m3p10' %>
|
||||||
|
<% end if @course %>
|
||||||
|
<div id="preview" class="wiki"></div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<div>
|
||||||
|
<% if @newss.empty? %>
|
||||||
|
<p class="nodata">
|
||||||
|
<%= l(:label_no_data) %>
|
||||||
|
</p>
|
||||||
|
<% else %>
|
||||||
|
<% @newss.each do |news| %>
|
||||||
|
|
||||||
|
<table class="content-text-list">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" valign="top" width="50"><%= link_to image_tag(url_to_avatar(news.author), :class => "avatar"), user_path(news.author) %></td>
|
||||||
|
<td>
|
||||||
|
<table width="580px" border="0">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" valign="top">
|
||||||
|
<strong><%= link_to_user(news.author) if news.respond_to?(:author) %></strong><span style="margin-left: 4px;" class="font_lighter"><%= l(:label_project_notice) %></span><span><%= link_to h(news.title), news_path(news) %></span>
|
||||||
|
<span style="float: right"><%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @couese) %> </span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" width="580px">
|
||||||
|
<span class="font_description"><%= textilizable(news, :description) %></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"><span class="font_lighter"> <%= l :label_update_time %>
|
||||||
|
: <%= format_time(news.created_on) %></span></td>
|
||||||
|
<td width="350" align="right" class="a"><%= link_to l(:label_project_newother), news_path(news) %><%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count >= 0 %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<!--end-->
|
||||||
|
<div style="padding-right: 10px">
|
||||||
|
<div class="pagination">
|
||||||
|
<ul>
|
||||||
|
<%= pagination_links_full @news_pages %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% other_formats_links do |f| %>
|
||||||
|
<%= f.link_to 'Atom', :url => {:course_id => @course, :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)) -%>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type='text/javascript'>
|
||||||
|
$(document).ready(function ($) {
|
||||||
|
$('.content-text-list').each(function () {
|
||||||
|
$(this).find('.delete_icon').hide();
|
||||||
|
$(this).mouseenter(function (event) {
|
||||||
|
$(this).find('.delete_icon').show();
|
||||||
|
});
|
||||||
|
$(this).mouseleave(function (event) {
|
||||||
|
$(this).find('.delete_icon').hide();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,108 @@
|
||||||
|
<%
|
||||||
|
if @project.project_type == Project::ProjectType_course
|
||||||
|
btn_tips = l(:label_news_notice)
|
||||||
|
label_tips = l(:label_course_news)
|
||||||
|
else
|
||||||
|
btn_tips = l(:label_news_new)
|
||||||
|
label_tips = l(:label_news)
|
||||||
|
end
|
||||||
|
%>
|
||||||
|
|
||||||
|
<span style="font-size: 16px; border-bottom:1px solid #f0f0f0; margin-right: 15px;">
|
||||||
|
<%= label_tips %>
|
||||||
|
</span>
|
||||||
|
<%= link_to(btn_tips,
|
||||||
|
new_project_news_path(@project),
|
||||||
|
:class => 'icon icon-add',
|
||||||
|
:onclick => 'showAndScrollTo("add-news", "news_title"); return false;') %>
|
||||||
|
|
||||||
|
<% if @project && User.current.allowed_to?(:manage_news, @project) %>
|
||||||
|
<div id="add-news" class="add_frame" style="display:none;">
|
||||||
|
<%= labelled_form_for @news, :url => project_news_index_path(@project),
|
||||||
|
:html => {:id => 'news-form', :multipart => true} do |f| %>
|
||||||
|
<%= render :partial => 'news/form', :locals => {:f => f} %>
|
||||||
|
<%= submit_tag l(:button_create), :class => 'whiteButton m3p10 h30', :name => nil %><!-- button-submit --> |
|
||||||
|
<%= preview_link preview_news_path(:project_id => @project), 'news-form', target='preview', {:class => 'whiteButton m3p10'} %>
|
||||||
|
|
|
||||||
|
<%= link_to l(:button_cancel), "#", :onclick => '$("#add-news").hide()', :class => 'whiteButton m3p10' %>
|
||||||
|
<% end if @project %>
|
||||||
|
<div id="preview" class="wiki"></div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<div>
|
||||||
|
<% if @newss.empty? %>
|
||||||
|
<p class="nodata">
|
||||||
|
<%= l(:label_no_data) %>
|
||||||
|
</p>
|
||||||
|
<% else %>
|
||||||
|
<% @newss.each do |news| %>
|
||||||
|
|
||||||
|
<table class="content-text-list">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" valign="top" width="50"><%= link_to image_tag(url_to_avatar(news.author), :class => "avatar"), user_path(news.author) %></td>
|
||||||
|
<td>
|
||||||
|
<table width="580px" border="0">
|
||||||
|
<% if @project.project_type == 1 %>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" valign="top">
|
||||||
|
<strong><%= link_to_user(news.author) if news.respond_to?(:author) %></strong><span style="margin-left: 4px;" class="font_lighter"><%= l(:label_project_notice) %></span><span><%= link_to h(news.title), news_path(news) %></span>
|
||||||
|
<span style="float: right"><%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> </span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% else %>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" valign="top">
|
||||||
|
<strong><%= link_to_user(news.author) if news.respond_to?(:author) %></strong><span style="margin-left: 4px;" class="font_lighter"><%= l(:label_project_newshare) %></span><span> <%= link_to h(news.title), news_path(news) %></span>
|
||||||
|
<span style="float: right" class='delete_icon'> <%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> </span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" width="580px">
|
||||||
|
<span class="font_description"><%= textilizable(news, :description) %></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"><span class="font_lighter"> <%= l :label_update_time %>
|
||||||
|
: <%= format_time(news.created_on) %></span></td>
|
||||||
|
<td width="350" align="right" class="a"><%= link_to l(:label_project_newother), news_path(news) %><%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count >= 0 %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<!--end-->
|
||||||
|
<div style="padding-right: 10px">
|
||||||
|
<div class="pagination">
|
||||||
|
<ul>
|
||||||
|
<%= pagination_links_full @news_pages %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% other_formats_links do |f| %>
|
||||||
|
<%= f.link_to 'Atom', :url => {:project_id => @project, :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)) -%>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type='text/javascript'>
|
||||||
|
$(document).ready(function ($) {
|
||||||
|
$('.content-text-list').each(function () {
|
||||||
|
$(this).find('.delete_icon').hide();
|
||||||
|
$(this).mouseenter(function (event) {
|
||||||
|
$(this).find('.delete_icon').show();
|
||||||
|
});
|
||||||
|
$(this).mouseleave(function (event) {
|
||||||
|
$(this).find('.delete_icon').hide();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1,108 +1,5 @@
|
||||||
<%
|
<% if @project %>
|
||||||
if @project.project_type == Project::ProjectType_course
|
<%= render :partial => 'project_news', locals: {project: @project} %>
|
||||||
btn_tips = l(:label_news_notice)
|
<% elsif @course %>
|
||||||
label_tips = l(:label_course_news)
|
<%= render :partial => 'course_news', locals: {course: @course} %>
|
||||||
else
|
|
||||||
btn_tips = l(:label_news_new)
|
|
||||||
label_tips = l(:label_news)
|
|
||||||
end
|
|
||||||
%>
|
|
||||||
|
|
||||||
<span style="font-size: 16px; border-bottom:1px solid #f0f0f0; margin-right: 15px;">
|
|
||||||
<%= label_tips %>
|
|
||||||
</span>
|
|
||||||
<%= link_to(btn_tips,
|
|
||||||
new_project_news_path(@project),
|
|
||||||
:class => 'icon icon-add',
|
|
||||||
:onclick => 'showAndScrollTo("add-news", "news_title"); return false;') %>
|
|
||||||
|
|
||||||
<% if @project && User.current.allowed_to?(:manage_news, @project) %>
|
|
||||||
<div id="add-news" class="add_frame" style="display:none;">
|
|
||||||
<%= labelled_form_for @news, :url => project_news_index_path(@project),
|
|
||||||
:html => {:id => 'news-form', :multipart => true} do |f| %>
|
|
||||||
<%= render :partial => 'news/form', :locals => {:f => f} %>
|
|
||||||
<%= submit_tag l(:button_create), :class => 'whiteButton m3p10 h30', :name => nil %><!-- button-submit --> |
|
|
||||||
<%= preview_link preview_news_path(:project_id => @project), 'news-form', target='preview', {:class => 'whiteButton m3p10'} %>
|
|
||||||
|
|
|
||||||
<%= link_to l(:button_cancel), "#", :onclick => '$("#add-news").hide()', :class => 'whiteButton m3p10' %>
|
|
||||||
<% end if @project %>
|
|
||||||
<div id="preview" class="wiki"></div>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<div>
|
|
||||||
<% if @newss.empty? %>
|
|
||||||
<p class="nodata">
|
|
||||||
<%= l(:label_no_data) %>
|
|
||||||
</p>
|
|
||||||
<% else %>
|
|
||||||
<% @newss.each do |news| %>
|
|
||||||
|
|
||||||
<table class="content-text-list">
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" valign="top" width="50"><%= link_to image_tag(url_to_avatar(news.author), :class => "avatar"), user_path(news.author) %></td>
|
|
||||||
<td>
|
|
||||||
<table width="580px" border="0">
|
|
||||||
<% if @project.project_type == 1 %>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" valign="top">
|
|
||||||
<strong><%= link_to_user(news.author) if news.respond_to?(:author) %></strong><span style="margin-left: 4px;" class="font_lighter"><%= l(:label_project_notice) %></span><span><%= link_to h(news.title), news_path(news) %></span>
|
|
||||||
<span style="float: right"><%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> </span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% else %>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" valign="top">
|
|
||||||
<strong><%= link_to_user(news.author) if news.respond_to?(:author) %></strong><span style="margin-left: 4px;" class="font_lighter"><%= l(:label_project_newshare) %></span><span> <%= link_to h(news.title), news_path(news) %></span>
|
|
||||||
<span style="float: right" class='delete_icon'> <%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> </span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" width="580px">
|
|
||||||
<span class="font_description"><%= textilizable(news, :description) %></span></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="left"><span class="font_lighter"> <%= l :label_update_time %>
|
|
||||||
: <%= format_time(news.created_on) %></span></td>
|
|
||||||
<td width="350" align="right" class="a"><%= link_to l(:label_project_newother), news_path(news) %><%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count >= 0 %></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<!--end-->
|
|
||||||
<div style="padding-right: 10px">
|
|
||||||
<div class="pagination">
|
|
||||||
<ul>
|
|
||||||
<%= pagination_links_full @news_pages %>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% other_formats_links do |f| %>
|
|
||||||
<%= f.link_to 'Atom', :url => {:project_id => @project, :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)) -%>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type='text/javascript'>
|
|
||||||
$(document).ready(function ($) {
|
|
||||||
$('.content-text-list').each(function () {
|
|
||||||
$(this).find('.delete_icon').hide();
|
|
||||||
$(this).mouseenter(function (event) {
|
|
||||||
$(this).find('.delete_icon').show();
|
|
||||||
});
|
|
||||||
$(this).mouseleave(function (event) {
|
|
||||||
$(this).find('.delete_icon').hide();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
class AddCourseidToNews < ActiveRecord::Migration
|
||||||
|
#迁移原课程新闻数据
|
||||||
|
def change
|
||||||
|
add_column :news, :course_id, :int
|
||||||
|
|
||||||
|
News.where('project_id IN (SELECT id FROM projects WHERE project_type=1)').update_all("course_id = project_id")
|
||||||
|
News.where('project_id IN (SELECT id FROM projects WHERE project_type=1)').update_all(project_id: -1)
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue