From 7f8dba854916313e68910474ba45629d6495d2a9 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Wed, 17 Jul 2019 14:58:01 +0800 Subject: [PATCH] library modify --- app/controllers/libraries_controller.rb | 11 +++-- app/controllers/praise_tread_controller.rb | 4 ++ app/helpers/libraries_helper.rb | 7 +-- app/models/library.rb | 19 ++++++-- app/services/libraries/save_service.rb | 32 +++++++------ app/views/libraries/_form.html.erb | 24 +++++----- app/views/libraries/_library_list.html.erb | 23 ++++++---- app/views/libraries/index.html.erb | 20 +++++---- app/views/libraries/show.html.erb | 11 +++-- app/views/praise_tread/_new_praise.html.erb | 42 ++++++++++++++++++ config/locales/libraries/zh.yml | 2 + ...20190708024123_add_columns_to_libraries.rb | 7 +++ .../images/educoder/library-default-cover.png | Bin 0 -> 18033 bytes public/stylesheets/educoder/edu-all.css | 5 ++- 14 files changed, 147 insertions(+), 60 deletions(-) create mode 100644 app/views/praise_tread/_new_praise.html.erb create mode 100644 db/migrate/20190708024123_add_columns_to_libraries.rb create mode 100644 public/images/educoder/library-default-cover.png diff --git a/app/controllers/libraries_controller.rb b/app/controllers/libraries_controller.rb index 16efc0c5..db5d20b0 100644 --- a/app/controllers/libraries_controller.rb +++ b/app/controllers/libraries_controller.rb @@ -8,17 +8,22 @@ class LibrariesController < ApplicationController libraries = Library.where(nil) libraries = - if params[:type] == 'mine' + if current_user.logged? && params[:type] == 'mine' libraries.where(user_id: current_user.id).order('created_at desc') else libraries.where(status: :published).order('visited_count desc') end search = params[:search].to_s.strip - libraries = libraries.where('title LIKE :search OR uuid LIKE :search', search: "%#{search}%") if search.present? + if search.present? + libraries = libraries.where('title LIKE :search OR author_name LIKE :search OR author_school_name LIKE :search', + search: "%#{search}%") + end per_page = params[:per_page].to_i <= 0 ? 20 : params[:per_page].to_i - @libraries = paginateHelper libraries.includes(user: :user_extensions), per_page + @libraries = paginateHelper libraries.includes(:library_tags, :praise_tread_cache, user: :user_extensions), per_page + + @download_count_map = Attachment.where(container_type: 'Library', container_id: @libraries.map(&:id)).group(:container_id).count end def show diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index d56ffa31..7368e0fb 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -47,6 +47,7 @@ class PraiseTreadController < ApplicationController end respond_to do |format| format.js + format.json { render_api_ok } end end end @@ -85,6 +86,7 @@ class PraiseTreadController < ApplicationController #@obj = User.find_by_id(@obj) respond_to do |format| format.js + format.json { render_api_ok } end end @@ -177,6 +179,8 @@ class PraiseTreadController < ApplicationController @obj = Challenge.find_by_id(id) when 'Discuss' @obj = Discuss.find_by_id(id) + when 'Library' + @obj = Library.find_by_id(id) else @obj = nil end diff --git a/app/helpers/libraries_helper.rb b/app/helpers/libraries_helper.rb index 60beab53..14c6ce37 100644 --- a/app/helpers/libraries_helper.rb +++ b/app/helpers/libraries_helper.rb @@ -1,8 +1,9 @@ module LibrariesHelper - def show_library_tags(library) + def show_library_tags(library, opts = {}) html = '' library.library_tags.each do |tag| - html += content_tag(:span, tag.name, class: "edu-filter-btn fl cdefault mt10 ml10 #{library_tag_class(tag)}") + klass = "edu-filter-btn fl cdefault #{library_tag_class(tag)} #{opts[:class]}" + html += content_tag(:span, tag.name, class: klass) end raw html @@ -10,7 +11,7 @@ module LibrariesHelper def library_tag_class(tag) case tag.name - when '获奖案例' then 'edu-activity-red' + when '优秀案例' then 'edu-activity-red' when '入库案例' then 'edu-activity-blue' end end diff --git a/app/models/library.rb b/app/models/library.rb index 2ff3c4c4..c0fe35ee 100644 --- a/app/models/library.rb +++ b/app/models/library.rb @@ -2,17 +2,22 @@ class Library < ActiveRecord::Base include AASM belongs_to :user + belongs_to :cover, class_name: 'Attachment', foreign_key: :cover_id has_many :library_applies, dependent: :delete_all has_many :attachments, as: :container has_many :library_library_tags, dependent: :delete_all has_many :library_tags, through: :library_library_tags - attr_accessible :title, :content + has_one :praise_tread_cache, as: :object - validates :title, presence: true + attr_accessible :title, :content, :author_name, :author_school_name, :cover_id + + validates :title, presence: true, length: { maximum: 255 } validates :content, presence: true validates :uuid, presence: true, uniqueness: true + validates :author_name, presence: true, length: { maximum: 10 } + validates :author_school_name, length: { maximum: 50 }, allow_blank: true acts_as_attachable @@ -44,7 +49,13 @@ class Library < ActiveRecord::Base self.uuid = uuid end - def increment_visited_count! - Library.connection.execute("update libraries set visited_count = COALESCE(visited_count, 0) + 1 where id = #{id}") + def increment_visited_count!(num = 1) + increment_column!(:visited_count, num) + end + + private + + def increment_column!(column, num = 1) + self.class.connection.execute("update #{self.class.table_name} set #{column} = COALESCE(#{column}, 0) + #{num} where id = #{id}") end end \ No newline at end of file diff --git a/app/services/libraries/save_service.rb b/app/services/libraries/save_service.rb index 393d3911..88a85fc8 100644 --- a/app/services/libraries/save_service.rb +++ b/app/services/libraries/save_service.rb @@ -23,20 +23,10 @@ class Libraries::SaveService library.assign_attributes(params) library.save! - new_tag_ids = LibraryTag.where(id: params[:tag_ids].presence || []).pluck(:id) - old_tag_ids = library.library_library_tags.pluck(:library_tag_id) + deal_library_tag! - # 删除标签 - destroy_ids = old_tag_ids - new_tag_ids - library.library_library_tags.where(library_tag_id: destroy_ids).delete_all - - # 创建标签 - created_ids = new_tag_ids - old_tag_ids - created_ids.each do |id| - library.library_library_tags.create!(library_tag_id: id) - end - - Attachment.where(id: attachment_ids).update_all(container_id: library.id, container_type: 'Library') + Attachment.where(id: attachment_ids, author_id: user.id) + .update_all(container_id: library.id, container_type: 'Library') end library @@ -46,5 +36,21 @@ class Libraries::SaveService def validate_params! raise Error, '附件不能为空' if params[:attachment_ids].try(:compact).blank? + raise Error , '封面不能为空' if params[:cover_id].blank? + end + + def deal_library_tag! + new_tag_ids = LibraryTag.where(id: params[:tag_ids].presence || []).pluck(:id) + old_tag_ids = library.library_library_tags.pluck(:library_tag_id) + + # 删除标签 + destroy_ids = old_tag_ids - new_tag_ids + library.library_library_tags.where(library_tag_id: destroy_ids).delete_all + + # 创建标签 + created_ids = new_tag_ids - old_tag_ids + created_ids.each do |id| + library.library_library_tags.create!(library_tag_id: id) + end end end diff --git a/app/views/libraries/_form.html.erb b/app/views/libraries/_form.html.erb index 5b9506b5..4e27d52a 100644 --- a/app/views/libraries/_form.html.erb +++ b/app/views/libraries/_form.html.erb @@ -20,11 +20,11 @@
作者
  • - +

    请输入姓名

  • - +

    请输入作者单位名称

  • @@ -63,14 +63,15 @@
    + <% cover_exists = @library.cover_id.present? %> 封面图 (上传尺寸:120*90 px) - <% if File.exist?(disk_filename("Career", career.id)) %> - <%= image_tag(url_to_avatar(career), :class => "w120 h90 ml5 shixun_image_show", :id => "shixun_image_show_#{career.id}") %> + <% if cover_exists %> + <%= image_tag(named_attachment_path(@library.cover.id, @library.cover.filename), :class => "w120 h90 ml5 shixun_image_show") %> <% else %> - + <% end %> - <%= file_field_tag 'avatar[image]', - :id => "upload_img_#{career.id}", + <%= file_field_tag 'library[cover_id]', + :id => "upload_img_#{@library.id}", :style => 'display:none;', :size => "1", :multiple => false, @@ -81,14 +82,11 @@ :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, :file_type => Redmine::Configuration['pic_types'].to_s, :type_support_message => l(:error_pic_type), - :upload_path => upload_avatar_path(:format => 'js'), + :upload_path => uploads_path(:format => 'js',:project =>nil), :description_placeholder => nil ,# l(:label_optional_description) - :source_type => "Career", - :source_id => career.id, - :is_direct => 1 } %> - - <%= File.exist?(disk_filename("Career", career.id)) ? "重新上传" : "上传图片" %> + + <%= cover_exists ? "重新上传" : "上传图片" %>
    diff --git a/app/views/libraries/_library_list.html.erb b/app/views/libraries/_library_list.html.erb index 21e96536..2b142b44 100644 --- a/app/views/libraries/_library_list.html.erb +++ b/app/views/libraries/_library_list.html.erb @@ -2,24 +2,31 @@ <% if @libraries.present? %> <% @libraries.each do |library| %>
  • - <%= link_to image_tag(url_to_avatar(library.user), width: 120, height: 90, class: ' mr15 mt3'), user_path(library.user) %> + <% image_url = library.cover.present? ? named_attachment_path(library.cover.id, library.cover.filename) : 'educoder/library-default-cover.png' %> + <%= image_tag(image_url, width: 120, height: 90, class: 'mr15 mt3 radius4') %>

    <%= link_to library.title, library_path(library),:class => "task-hide font-22 library_l_name" %> - <%= show_library_tags(library) %> + <%= show_library_tags(library, class: 'mt10 ml10') %> + <% if params[:type] == 'mine' %> - 上传时间:<%= library.created_at.strftime('%Y-%m-%d %H:%M') %> + 上传时间:<%= library.created_at.strftime('%Y-%m-%d %H:%M') %> <% else %> - 发布时间:<%= library.published_at.try(:strftime, '%Y-%m-%d %H:%M') %> + 发布时间:<%= library.published_at.try(:strftime, '%Y-%m-%d %H:%M') %> <% end %>

    作者: - <%= link_to library.user.show_real_name, user_path(library.user) %> - 学校 + <%= library.author_name %> + <%= library.author_school_name %> <%= library.visited_count || 0 %> 浏览 - <%= library.visited_count || 0 %> 下载 - <%= library.visited_count || 0 %> 赞 + <% download_count = @download_count_map.try(:fetch, library.id, 0) || library.attachments.count %> + <% if download_count.nonzero? %> + <%= download_count %> 下载 + <% end %> + <% if library.praise_tread_cache.try(:praise_num).to_i.nonzero? %> + <%= library.praise_tread_cache.try(:praise_num) %> 赞 + <% end %>

  • diff --git a/app/views/libraries/index.html.erb b/app/views/libraries/index.html.erb index 1c15217c..08495304 100644 --- a/app/views/libraries/index.html.erb +++ b/app/views/libraries/index.html.erb @@ -6,14 +6,18 @@ <%= link_to '发布案例', new_library_path, class: 'white-btn edu-filter-btn-blue fr mr10 mt8', style: 'color: #4CACFF' %>

    - + <% if User.current.logged? %> + + <% end %>
    <%= hidden_field_tag(:type, params[:type]) %> diff --git a/app/views/libraries/show.html.erb b/app/views/libraries/show.html.erb index 9fe19994..09515dd6 100644 --- a/app/views/libraries/show.html.erb +++ b/app/views/libraries/show.html.erb @@ -10,7 +10,7 @@ <%= @library.title %> - <%= show_library_tags(@library) %> + <%= show_library_tags(@library, class: 'mt3 ml10') %> <% if admin_or_self %> <% if @library.pending? %> 草稿 @@ -53,7 +53,7 @@
    作者: - 张丹/南京大学 + <%= @library.author_name %>/<%= @library.author_school_name %>
    @@ -64,10 +64,9 @@ <%= render partial: 'attachments/links', locals: { attachments: @library.attachments, options: {} } %>
    - -


    0

    - -

    已赞
    0

    +
    + <%= render partial: 'praise_tread/new_praise', locals: { object: @library } %> +
    diff --git a/app/views/praise_tread/_new_praise.html.erb b/app/views/praise_tread/_new_praise.html.erb new file mode 100644 index 00000000..facdabad --- /dev/null +++ b/app/views/praise_tread/_new_praise.html.erb @@ -0,0 +1,42 @@ +<% + praised = PraiseTread.praised(object) + praise_num = get_praise_num(object) || 0 +%> +


    <%= praise_num %>

    +

    已赞
    <%= praise_num %>

    + + \ No newline at end of file diff --git a/config/locales/libraries/zh.yml b/config/locales/libraries/zh.yml index 3dae730c..fd514c72 100644 --- a/config/locales/libraries/zh.yml +++ b/config/locales/libraries/zh.yml @@ -6,3 +6,5 @@ library: title: '标题' content: '描述' + author_name: '作者姓名' + author_school_name: '作者单位名称' diff --git a/db/migrate/20190708024123_add_columns_to_libraries.rb b/db/migrate/20190708024123_add_columns_to_libraries.rb new file mode 100644 index 00000000..50566344 --- /dev/null +++ b/db/migrate/20190708024123_add_columns_to_libraries.rb @@ -0,0 +1,7 @@ +class AddColumnsToLibraries < ActiveRecord::Migration + def change + add_column :libraries, :author_name, :string + add_column :libraries, :author_school_name, :string + add_column :libraries, :cover_id, :integer + end +end diff --git a/public/images/educoder/library-default-cover.png b/public/images/educoder/library-default-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..d54b8df0ce3792f1e8e9e6716e7e43c5a2b0de82 GIT binary patch literal 18033 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 Z3;;@!aq1OtFQNbd002ovPDHLkV1nJ{30MFC literal 0 HcmV?d00001 diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index 9ea717ba..f1cfa765 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -3466,9 +3466,10 @@ line-height: 16px;display: inline-block;color: rgba(65, 140, 205, 1) !important; margin-bottom: 30px; } .library_list_item{ - background: #fff;padding:30px;margin-bottom: 30px;display: flex; + background: #fff;padding:20px 30px;margin-bottom: 30px;display: flex; } -.library_list_item .library_l_name{max-width: 900px;float: left;} +.library_list_item:hover { box-shadow:0px 4px 8px rgba(158,158,158,0.16); } +.library_list_item .library_l_name{max-width: 600px;float: left;} .upload_Title{ position: relative;margin-right: 30px;float: left;line-height: 35px;font-size: 16px;width: 32px; }