37 Commits
Author SHA1 Message Date
spen 4fbea06642 fix show pagination 2014-11-24 10:32:41 +08:00
spen ce2ec4fc1a add sync_data 2014-08-21 17:27:52 +08:00
spen 39386930ef update back end index list 2014-07-25 15:04:57 +08:00
spen ca2b66a210 Merge branch 'ydu' of gitlab.tp.rulingcom.com:root/orbit-announcement into ydu 2014-06-17 09:55:30 +08:00
spen a39d979a54 fix field 2014-06-16 15:04:22 +08:00
spen d88b2a4e32 ydu 2014-06-16 15:04:21 +08:00
manson a7005c6e8b Removed impressionist counter cache 2014-06-16 15:03:25 +08:00
spen 768f03954f fix field 2014-05-20 17:49:18 +08:00
spen 64b80092f6 ydu 2014-05-13 16:29:23 +08:00
spen 8e89a1647d update default_widget field i18n 2014-05-12 11:16:06 +08:00
spen 7121223a4d fix widget reload_web_links 2014-05-08 14:12:06 +08:00
spen eb7627a28a add backend form append note and fix show image 2014-05-02 13:52:02 +08:00
rulingcom 7193e2efb4 fix search result page 2014-04-10 10:56:30 +08:00
Manson Wang 45d9bbc342 Remove elasticsearch 2014-03-27 11:27:43 +08:00
spen 5bab384195 Updated Facebook set 2014-03-13 15:20:44 +08:00
Saurabh Bhatia cfda9365ab Readme updated for test 2014-03-10 15:29:01 +08:00
Saurabh Bhatia f38985bb34 Updated readme for test 2014-03-10 15:17:39 +08:00
Saurabh Bhatia dc3a44d181 Updated Readme 2014-03-10 12:45:05 +08:00
Saurabh Bhatia 592692eefd Update readme for test 2014-03-10 11:42:06 +08:00
Saurabh Bhatia c10800acd7 Readme for testing tags 2014-03-10 11:08:06 +08:00
Saurabh Bhatia c96646844a Updated Readme 2014-03-10 10:31:23 +08:00
Saurabh Bhatia 5efebe2ab2 Changed readme 2014-03-07 17:03:54 +08:00
Saurabh Bhatia 60dce13fd8 modified readme 2014-03-07 16:30:36 +08:00
Saurabh Bhatia 16aacf3d2a Updated Readme 2014-03-07 14:48:01 +08:00
spen 0e5909c1f5 Added email reminder for bulletin 2014-03-07 11:14:45 +08:00
harrybomrah 758ceaf5e3 announcement update with emtpy tag 2014-03-07 11:09:25 +08:00
Manson Wang 1dfa7e91ee Added API for bulletin 2014-03-07 10:08:16 +08:00
harrybomrah caad66cfb8 removed old share links 2014-02-24 16:55:22 +08:00
harrybomrah 781a49750e facebook toggle added in the gem. can now set facebook sharing enabled or disabled using facebook_enabled true/false 2014-02-24 14:59:12 +08:00
harrybomrah 0af4fb0502 change url share setting 2014-02-21 18:49:46 +08:00
harrybomrah 62fbcee0f0 2 2014-02-21 18:38:29 +08:00
harrybomrah 8306511819 1 2014-02-21 18:25:02 +08:00
harrybomrah beac76f29a title added with share url 2014-02-21 18:21:07 +08:00
harrybomrah 725bfcac5a url encoding for share button 2014-02-21 17:57:48 +08:00
harrybomrah c9dd3cb9eb url changes for the gem 2014-02-21 17:45:34 +08:00
harrybomrah c0473a3f13 share button with popup 2014-02-21 17:16:36 +08:00
harrybomrah 0587c118d1 facebook share button added 2014-02-21 17:04:24 +08:00
19 changed files with 587 additions and 54 deletions

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
Orbit Announcement
Version 0.0.3
+3 -1
View File
@@ -1,3 +1,5 @@
= Announcement = Announcement
This project rocks and uses MIT-LICENSE. This project rocks and uses MIT-LICENSE.
* Tagging
* Categories
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,83 @@
# API for Announcement Module
#
# Simple access control
# params[:access_token] = Site ID
# ex: /panel/announcement/api/bulletins.json?access_token=5301d8be45d5f42f4f000001
#
# Set Language
# Language can be "zh_tw" or "en"
# ex: /panel/announcement/api/bulletins.json?lang=en&access_token=5301d8be45d5f42f4f000001
#
# Get Categories and Tags
# ex: /panel/announcement/api/categories_tags.json&access_token=5301d8be45d5f42f4f000001
#
# Query Bulletins
# Set page number use params[:page_num]
# Set number of results per page use params[:per_page]
# ex: /panel/announcement/api/bulletins.json?page_num=3&per_page=15&access_token=5301d8be45d5f42f4f000001
#
# Filter bulletins with categories use params[:categories]
# ex: /panel/announcement/api/bulletins.json?categories[]=53046e4045d5f462a2000006&access_token=5301d8be45d5f42f4f000001
#
# Filter bulletins with tags use params[:tags]
# ex: /panel/announcement/api/bulletins.json?tags[]=5318e58d45d5f41127000007&access_token=5301d8be45d5f42f4f000001
#
# Filter bulletins with "is_hot" use params[:is_hot]
# ex: /panel/announcement/api/bulletins.json?is_hot=1&access_token=5301d8be45d5f42f4f000001
#
# Search bulletin title, subtitle, text with params[:keyword]
# ex: /panel/announcement/api/bulletins.json?keyword=大學&access_token=5301d8be45d5f42f4f000001
class Panel::Announcement::Api::BulletinsController < OrbitWidgetController
before_filter :set_I18n, :check_site_id
def get_categories_tags
module_id = ModuleApp.where(:key=>"announcement").first.id
categories = Category.where(:module_app_id => module_id).collect{|c| {"id"=>c.id, "title"=>c.title_translations}}
module_tags = ModuleTag.where(:module_app_id => module_id).collect{|t| t.id}
tags = Tag.any_of({:tag_lease_id.in => module_tags}).collect{|t| {"id"=>t.id, "title"=>t.name_translations}}
render :json => {
"categories" => categories,
"tags" => tags
}
end
def get_bulletins
page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i
per_page = params[:per_page].blank? ? 10 : params[:per_page].to_i
per_page = per_page > 0 ? per_page : 10
if !params[:keyword].blank?
keyword = Regexp.new(".*"+params[:keyword]+".*")
bulletins = Bulletin.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword}).available_for_lang(I18n.locale)
else
bulletins = Bulletin.available_for_lang(I18n.locale)
end
bulletins = bulletins.where(:is_hot => params[:is_hot]) if !params[:is_hot].blank?
bulletins = bulletins.where(:category_id.in => params[:categories]) if !params[:categories].blank?
bulletins = bulletins.where(:tagged_ids.in => params[:tags]) if !params[:tags].blank?
bulletins = bulletins.desc( :is_top, :postdate).page(page_num).per(per_page)
total_pages = (bulletins.count / per_page) + 1
render :json => {
"bulletins" => bulletins,
"bulletins_count" => bulletins.count,
"page_num" => page_num,
"total_pages" => total_pages,
"lang"=>I18n.locale
}
end
protected
def set_I18n
I18n.locale = params[:lang] if params[:lang].present?
end
def check_site_id
raise ActionController::RoutingError.new('Not Found') if Site.first.id.to_s != params['access_token']
end
end
@@ -1,3 +1,4 @@
# encoding: utf-8
class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# include OrbitControllerLib::DivisionForDisable # include OrbitControllerLib::DivisionForDisable
@@ -24,7 +25,12 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
@statuses = get_statuses @statuses = get_statuses
category_ids = @categories.collect{|t| t.id} category_ids = @categories.collect{|t| t.id}
@bulletins = get_sorted_and_filtered("bulletin", :category_id.in => category_ids) if is_manager? or is_admin?
@bulletins = get_sorted_and_filtered("bulletin", :category_id.in => category_ids)
else
@bulletins = get_sorted_and_filtered("bulletin", {:category_id.in => category_ids, :create_user_id => current_user.id})
end
respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
format.js { } format.js { }
@@ -48,7 +54,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# GET /bulletins/new.xml # GET /bulletins/new.xml
def new def new
if(session[:in_validate_object].blank?) if(session[:in_validate_object].blank?)
@bulletin = Bulletin.new(:postdate => DateTime.now) @bulletin = Bulletin.new(:postdate => DateTime.now, :email_sentdate => DateTime.now)
else else
@bulletin = session[:in_validate_object] @bulletin = session[:in_validate_object]
session[:in_validate_object] = {} session[:in_validate_object] = {}
@@ -65,11 +71,12 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# GET /bulletins/1/edit # GET /bulletins/1/edit
def edit def edit
@bulletin = Bulletin.find(params[:id]) @bulletin = Bulletin.find(params[:id])
@users = @bulletin.get_users @email_users = @bulletin.get_email_users
@tags = get_tags @tags = get_tags
is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil is_authorized_sub_manager = @bulletin.category.auth_sub_manager.authorized_user_ids rescue nil
if !(is_manager? || is_admin? || is_authorized_sub_manager.include?(current_user.id)) if !(is_manager? || is_admin? || (is_authorized_sub_manager.include?(current_user.id) and @bulletin.create_user_id == current_user.id))
redirect_to :action => :index redirect_to :action => :index
else else
# @summary_variable = @bulletin.summary_variable # @summary_variable = @bulletin.summary_variable
@@ -84,6 +91,10 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
# POST /bulletins.xml # POST /bulletins.xml
def create def create
@tags = get_tags @tags = get_tags
params[:bulletin][:email_user_ids] = params[:bulletin][:email_user_ids].uniq
params[:bulletin][:email_user_ids].delete('')
@bulletin = Bulletin.new(params[:bulletin]) @bulletin = Bulletin.new(params[:bulletin])
@bulletin.deadline = nil if (@bulletin.deadline < @bulletin.postdate rescue nil) @bulletin.deadline = nil if (@bulletin.deadline < @bulletin.postdate rescue nil)
@@ -98,6 +109,14 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
respond_to do |format| respond_to do |format|
if @bulletin.save if @bulletin.save
if @bulletin.email_sent == true && (is_manager? || is_admin?)
send_email_data(@bulletin)
@bulletin.email_sent = false
@bulletin.save
end
format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('announcement.create_bulletin_success')) } format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('announcement.create_bulletin_success')) }
format.xml { render :xml => @bulletin, :status => :created, :location => @bulletin } format.xml { render :xml => @bulletin, :status => :created, :location => @bulletin }
# format.js # format.js
@@ -124,10 +143,24 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
def update def update
@bulletin = Bulletin.find(params[:id]) @bulletin = Bulletin.find(params[:id])
params[:bulletin][:tag_ids] = (params[:bulletin][:tag_ids] ? params[:bulletin][:tag_ids] : [])
params[:bulletin][:email_user_ids] = params[:bulletin][:email_user_ids].uniq
params[:bulletin][:email_user_ids].delete('')
params[:bulletin][:update_user_id] = current_user.id
delete_out_invalid_date_from_params delete_out_invalid_date_from_params
respond_to do |format| respond_to do |format|
if @bulletin.update_attributes(params[:bulletin]) if @bulletin.update_attributes(params[:bulletin])
if @bulletin.email_sent == true && (is_manager? || is_admin?)
send_email_data(@bulletin)
@bulletin.email_sent = false
@bulletin.save
end
format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('bulletin.update_bulletin_success')) } format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('bulletin.update_bulletin_success')) }
format.js { render 'toggle_enable' } format.js { render 'toggle_enable' }
format.xml { head :ok } format.xml { head :ok }
@@ -165,6 +198,45 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
protected protected
def send_email_data(bulletin)
@site = Site.first
@user = User.find(bulletin.create_user_id)
@host = request.host_with_port
@group_mail = MailCron.get_send_group_mail( bulletin.email_user_ids , bulletin.other_mailaddress )
if !@group_mail.join.blank?
@mail_content = {
"host" => @host,
"lang" => I18n.locale,
"site_title" => @site.title,
"title" => bulletin.title,
"template" => 'announcement_mailer/cron_mail',
"url" => "http://#{@host}#{panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.category.id)}"
}
@mail_cron = {
:mail_from_app => 'announcement',
# :mail_from => @user.email,
# :mail_reply_to => @user.email,
:mail_subject => "#{t("announcement.mail_subject",:site_title => @site.title)}:#{bulletin.title}",
:mail_to => @group_mail.join(','),
:mail_content => @mail_content ,
:mail_sentdate => bulletin.email_sentdate,
:create_user_id => bulletin.create_user_id,
:update_user_id => bulletin.create_user_id
}
@mail_cron = MailCron.new(@mail_cron)
@mail_cron.save
end
end
def delete_out_invalid_date_from_params def delete_out_invalid_date_from_params
if((params[:bulletin]["deadline(1i)"] && params[:bulletin]["deadline(1i)"].blank?) or (params[:bulletin]["deadline(2i)"] && params[:bulletin]["deadline(2i)"].blank?) or (params[:bulletin]["deadline(3i)"] && params[:bulletin]["deadline(3i)"].blank?)) if((params[:bulletin]["deadline(1i)"] && params[:bulletin]["deadline(1i)"].blank?) or (params[:bulletin]["deadline(2i)"] && params[:bulletin]["deadline(2i)"].blank?) or (params[:bulletin]["deadline(3i)"] && params[:bulletin]["deadline(3i)"].blank?))
params[:bulletin].delete("deadline(1i)") params[:bulletin].delete("deadline(1i)")
@@ -12,8 +12,13 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
if params[:search_query] == "" if params[:search_query] == ""
@bulletins = get_bulletins_for_index @bulletins = get_bulletins_for_index
else else
@search = Bulletin.tire.search "#{params[:search_query]}" key_string = params[:search_query]
search_result = @search.collect{|result| result.id} keywords = key_string.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/)
regex = Regexp.union(keywords.map{|word| Regexp.new(".*"+word+".*", "i")})
query = ["title","subtitle","text"].map{|f| {f.to_sym => regex} }
res = Bulletin.any_of(query)
search_result = res.collect{|result| result.id}
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result).page( params[:page_main]).per(@page_num) @bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result).page( params[:page_main]).per(@page_num)
end end
@@ -146,7 +146,15 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
@selected_tag = Tag.find(params[:tag_id]).first @selected_tag = Tag.find(params[:tag_id]).first
@ModuleApp = ModuleApp.first(:conditions => {:key=>'web_resource'}) @ModuleApp = ModuleApp.first(:conditions => {:key=>'web_resource'})
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp.id}) @link_module_tag = ModuleTag.first(:conditions => {:name => @selected_tag.name, :module_app_id => @ModuleApp.id})
# @link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :tag_lease_id => @ModuleApp.id})
if !@link_module_tag.blank?
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :tag_lease_id => @link_module_tag.id})
else
@link_selected_tag = @link_module_tag
end
@web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil @web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil
end end
@@ -158,5 +166,25 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
def bulletins_search_block def bulletins_search_block
@part = PagePart.find params[:part_id] @part = PagePart.find params[:part_id]
end end
def sync_data
@create_users = ( params[:dept].blank? or !params[:dept].kind_of?(Array)) ? [] : User.where(:sid.in => params[:dept]).collect{|p| p.id}
@page_num = params[:page_num].blank? ? '10' : params[:page_num]
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.where(:category_id.nin => ['53abbd0b45ef444e6a0001a0','53abbd2045ef444e6a00095d','53abbd0745ef444e6a000001'], :create_user_id.in => @create_users).desc( :is_top, :postdate).page( params[:page_main]).per(@page_num)
end
def show_sync_data
@bulletin = Bulletin.all.can_display.where(_id: params[:id]).first
if @bulletin and !@bulletin.disable?
if @bulletin.enabled_for_lang(I18n.locale.to_s)
impressionist(@bulletin)
else
render :text => "<div class='alert alert-error'>#{t('sys.can_not_display_due_to_no_context')}</div>".html_safe
end
else
render :nothing => true, :status => 403
end
end
end end
+21 -10
View File
@@ -13,10 +13,10 @@ class Bulletin
include OrbitModel::TimeFrame include OrbitModel::TimeFrame
include OrbitTag::Taggable include OrbitTag::Taggable
include Tire::Model::Search # include Tire::Model::Search
include Tire::Model::Callbacks # include Tire::Model::Callbacks
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable
field :title, localize: true field :title, localize: true
field :subtitle, localize: true field :subtitle, localize: true
@@ -24,13 +24,15 @@ class Bulletin
field :create_user_id field :create_user_id
field :update_user_id, :class_name => "User" field :update_user_id, :class_name => "User"
field :user_ids
field :view_count, :type => Integer, :default => 0 field :view_count, :type => Integer, :default => 0
field :public, :type => Boolean, :default => true field :public, :type => Boolean, :default => true
field :rss_link
field :email_sent, :type => Boolean, :default => false
field :email_sentdate , :type => DateTime
field :email_user_ids
field :other_mailaddress
mount_uploader :image, ImageUploader mount_uploader :image, ImageUploader
@@ -42,9 +44,9 @@ class Bulletin
validates :title, :at_least_one => true validates :title, :at_least_one => true
def to_indexed_json # def to_indexed_json
self.to_json # self.to_json
end # end
# search_in :title, :subtitle, :text # search_in :title, :subtitle, :text
@@ -64,6 +66,11 @@ class Bulletin
def bulletin_category_with_title def bulletin_category_with_title
self.category.title self.category.title
end end
def bulletin_create_dept
unit_field = User.get_member_list_attribute_field("staff","unit")
User.get_member_list_attribute_value(self.create_user_id,unit_field.id).get_value_by_locale(I18n.locale) rescue nil
end
def get_bulletin_category def get_bulletin_category
self.category self.category
@@ -152,8 +159,12 @@ class Bulletin
preview_object preview_object
end end
def get_users def get_email_users
User.find(self.user_ids) rescue [] User.find(self.email_user_ids) rescue []
end
def view_count
Impression.where(:impressionable_id=>self.id).count
end end
protected protected
@@ -0,0 +1,32 @@
<% # encoding: utf-8 %>
<% I18n.locale = @data.mail_content["lang"] %>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body bgcolor="#FFFFFF">
<div style="text-ident:20px">
</div>
<%= t('announcement.mail_hi') %> <br /><br />
<%= t('announcement.mail_url_view') %> <br /><br />
<a href="<%= @data.mail_content["url"] %>" target="_blank"> <%= @data.mail_content["title"] %> </a> <br /><br />
</div>
<span style="color:#555">--<br />
<%= t('announcement.mail_source') %> :<a href="http://<%= @data.mail_content["host"] %>" target="_blank"> <%= @data.mail_content["site_title"] %> </a><br />
<%= t('announcement.mail_time') %> <%= DateTime.now %>
</span>
</body>
</html>
@@ -9,7 +9,8 @@
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/modal-preview" %> <%= javascript_include_tag "lib/modal-preview" %>
<%= javascript_include_tag "lib/file-type" %> <%= javascript_include_tag "lib/file-type" %>
<%= javascript_include_tag "lib/module-area" %> <%= javascript_include_tag "lib/module-area" %>
<%= javascript_include_tag "member-selection" %>
<% end %> <% end %>
<%= f.error_messages %> <%= f.error_messages %>
@@ -32,8 +33,11 @@
<a href="#tag" data-toggle="tab"><%= t(:tags) %></a> <a href="#tag" data-toggle="tab"><%= t(:tags) %></a>
</li> </li>
<li> <li>
<a href="#imageupload" data-toggle="tab"><%= t(:image) %></a> <a href="#imageupload" data-toggle="tab"><%= t("announcement.image") %></a>
</li> </li>
<li>
<a href="#mail-group" data-toggle="tab"><%= t('announcement.email_reminder')%></a>
</li>
</ul> </ul>
<!-- Module --> <!-- Module -->
@@ -64,14 +68,6 @@
<%= f.datetime_picker :deadline, :no_label => true %> <%= f.datetime_picker :deadline, :no_label => true %>
</div> </div>
</div> </div>
<!-- Promoter -->
<div class="control-group">
<label class="control-label muted"><%= t(:promoter) %></label>
<div class="controls">
<%= render partial: 'admin/member_selects/selection_box', locals: {field: 'bulletin[user_ids][]', users: @users} %>
</div>
</div>
</div> </div>
@@ -108,7 +104,6 @@
<% @tags.each do |tag| %> <% @tags.each do |tag| %>
<label class="checkbox inline btn <%= 'active' if @bulletin.tag_ids.include?(tag.id) %>"> <label class="checkbox inline btn <%= 'active' if @bulletin.tag_ids.include?(tag.id) %>">
<%= check_box_tag 'bulletin[tag_ids][]', tag.id, @bulletin.tag_ids.include?(tag.id) %> <%= tag.name %> <%= check_box_tag 'bulletin[tag_ids][]', tag.id, @bulletin.tag_ids.include?(tag.id) %> <%= tag.name %>
<%= hidden_field_tag 'bulletin[tag_ids][]', '' %>
</label> </label>
<% end %> <% end %>
</div> </div>
@@ -121,7 +116,7 @@
<!-- Images Upload --> <!-- Images Upload -->
<div class="control-group"> <div class="control-group">
<label class="control-label muted"><%= t(:image) %></label> <label class="control-label muted"><%= t("announcement.image") %></label>
<div class="controls"> <div class="controls">
<div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if @bulletin.image.file %>" data-provides="fileupload"> <div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if @bulletin.image.file %>" data-provides="fileupload">
<div class="fileupload-new thumbnail pull-left"> <div class="fileupload-new thumbnail pull-left">
@@ -144,11 +139,52 @@
</label> </label>
</div> </div>
</div> </div>
<div class="image_note"><%= t("announcement.image_note")%></div>
</div> </div>
</div> </div>
</div> </div>
<!-- Mail Group Module -->
<div class="tab-pane fade" id="mail-group">
<!-- Mail Group -->
<div class="control-group">
<label class="control-label muted"><%= t("announcement.email_to") %></label>
<div class="controls">
<label class="checkbox inline">
<%= check_box_tag('bulletin[email_sent]', '1', (!@bulletin.email_sent.blank? ? true : false), :id=>'remind-check') %><%= t('announcement.activate_email_reminder')%>
</label>
<div class="content-box">
<p>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'bulletin[email_user_ids][]', users: @email_users} %>
</p>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label muted"></label>
<div class="controls">
<div class="content-box">
<span class="help-block"><%= "#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%> </span>
<%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %>
</div>
</div>
</div>
<div class="content-box">
<div class="control-group">
<label class="control-label muted"><%= t("announcement.email_sentdate") %></label>
<div class="controls">
<%= f.datetime_picker :email_sentdate, :no_label => true %>
</div>
</div>
</div>
</div>
</div> </div>
<!-- Language Tabs --> <!-- Language Tabs -->
@@ -206,6 +242,10 @@
<% end %> <% end %>
<div class="control-group">
<div class="controls add-input"><%= t('announcement.append_note')%></div>
</div>
<!-- Link --> <!-- Link -->
<div class="control-group"> <div class="control-group">
<label class="control-label muted"><%= t(:link) %></label> <label class="control-label muted"><%= t(:link) %></label>
@@ -310,6 +350,12 @@
$(this).parents('.start-line').hide(); $(this).parents('.start-line').hide();
} }
}); });
$('#remind-check').prop('checked') ? '':$('.content-box').addClass('hide')
$('#remind-check').on('change', function() {
$(this).prop('checked') ? $('.content-box').removeClass('hide'):$('.content-box').addClass('hide')
})
}); });
</script> </script>
<% end %> <% end %>
@@ -1,4 +1,8 @@
<% set_default_index do <%
@unit_field = User.get_member_list_attribute_field("staff","unit")
set_default_index do
objects @bulletins objects @bulletins
quick_edit_link type: 'edit', quick_edit_link type: 'edit',
link: 'edit_panel_announcement_back_end_bulletin_path' link: 'edit_panel_announcement_back_end_bulletin_path'
@@ -37,6 +41,11 @@
field type: 'tags', field type: 'tags',
hide: 'all', hide: 'all',
sort: 'tags' sort: 'tags'
field db_field: 'email_user_ids',
hide: 'all',
translation: 'announcement.email_to',
display_option: '"<br />#{MailCron.get_send_group_mail(object.email_user_ids , object.other_mailaddress).join(", ").html_safe}"',
sort: 'email_user_ids'
field type: 'id', field type: 'id',
db_field: 'update_user_id', db_field: 'update_user_id',
model: User, model: User,
@@ -44,6 +53,11 @@
translation: 'last_modified', translation: 'last_modified',
hide: 'phone', hide: 'phone',
sort: 'last_modified' sort: 'last_modified'
field db_field: 'update_user_id',
translation: 'announcement.default_widget.bulletin_create_dept',
display_option: 'User.get_member_list_attribute_value(object.create_user_id,@unit_field.id).get_value_by_locale(I18n.locale) rescue nil',
sort: 'last_modified'
filter_field type: 'array', filter_field type: 'array',
values: @statuses, values: @statuses,
translation: 'status' translation: 'status'
@@ -32,3 +32,4 @@
</table> </table>
<%= paginate( @bulletins, :param_name => :page_main, :params => {:inner => 'false'} ) rescue nil%>
@@ -4,14 +4,13 @@
<div class="info1"> <div class="info1">
<span class="pull-right"><%= dislpay_view_count(@bulletin) %></span> <span class="pull-right"><%= dislpay_view_count(@bulletin) %></span>
<span class="date"><%= display_date_time(@bulletin.postdate) %></span> <span class="date"><%= display_date_time(@bulletin.postdate) %></span>
<% unit = @bulletin.cache_dept[I18n.locale.to_s] rescue nil %> <%
<span><%= link_to unit,panel_announcement_front_end_index_bulletins_by_unit_path(:name=>unit) unless unit.blank? %></span> unit_field = User.get_member_list_attribute_field("staff","unit")
unit = User.get_member_list_attribute_value(@bulletin.create_user_id,unit_field.id).get_value_by_locale(I18n.locale) rescue nil
%>
<span><%= t('announcement.default_widget.bulletin_create_dept') + ": " + unit unless unit.blank? %></span>
</div> </div>
</div> </div>
<div class="news_image">
<%#= image_tag(@bulletin.image.url, :size => "320x240") if @bulletin.image.file %>
<%= link_to image_tag(@bulletin.image.url, :size => "320x240"), @bulletin.image.url, {:target => '_blank', :title => @bulletin.image_identifier} if @bulletin.image.file %>
</div>
<div class="news_paragraph"> <div class="news_paragraph">
<%= @bulletin.text.html_safe rescue '' %> <%= @bulletin.text.html_safe rescue '' %>
</div> </div>
@@ -36,21 +35,6 @@
</div> </div>
</div> </div>
<% end %> <% end %>
<% unless @bulletin.rss_link.blank? %>
<div>
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
</div>
<% end %>
</div> </div>
<% unless @bulletin.user_ids.blank? %> <%= share_links(@bulletin, 'announcement') %>
<div class="promoter">
<div>
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %>
</div>
</div>
<% end %>
<%= share_links(@bulletin, 'announcement') %>
@@ -0,0 +1,110 @@
<% # encoding: utf-8 %>
<style type="text/css">
.h1{
font: 22px/1.5 'open sans','微軟正黑體',sans-serif;
margin: 0 0 10px;
padding: 0;
}
.info {
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #DDDDDD;
font: 13px/1 'arial',sans-serif;
margin: 0 0 20px;
overflow: hidden;
padding: 10px;
}
.info span {
margin: 0 7px 0 0;
border-right: 1px solid #ddd;
padding: 0 10px 0 0;
}
.news_paragraph{
margin: 0 0 20px;
}
.linkAndFile{
border-top: 1px solid #CCCCCC;
border-left: 1px solid #CCCCCC;
border-right: 1px solid #CCCCCC;
border-radius: 5px 5px 0 0;
clear: both;
overflow: hidden;
padding: 10px 10px 0 10px;
}
.fb{
border-bottom : 1px solid #CCCCCC;
border-left: 1px solid #CCCCCC;
border-right: 1px solid #CCCCCC;
border-radius: 0 0 5px 5px;
clear: both;
overflow: hidden;
padding: 5px 10px 5px 10px;
}
.linkAndFile>div{
border-bottom: 1px solid #CCCCCC;
display: block;
margin: 0 0 5px;
overflow: hidden;
padding: 0 0 5px;
}
.icons-link, .icons-paperclip{
float: left;
margin: 0 10px 0 0;
}
.showLink, .showFile {
float: left;
}
.showLink a, .showFile a{
margin: 0 10px 0 0;
}
.fb a{
margin: 0 5px 0 0;
}
.showLink:before, .showFile:before {
content: "●";
margin: 0 10px 0 5px;
color: #333;
}
</style>
<h1 class="h1"><%= @bulletin.title %></h1>
<div class="info">
<div class="info1">
<span class="category"><%= t('announcement.categories') %> : <%= @bulletin.category.title rescue nil %></span>
<span class="date"><%= display_date_time(@bulletin.postdate) %></span>
<%
unit_field = User.get_member_list_attribute_field("staff","unit")
unit = User.get_member_list_attribute_value(@bulletin.create_user_id,unit_field.id).get_value_by_locale(I18n.locale) rescue nil
%>
<span><%= t('announcement.default_widget.bulletin_create_dept') + ": " + unit unless unit.blank? %></span>
<span class="pull-right"><%= dislpay_view_count(@bulletin) %></span>
</div>
</div>
<div class="news_paragraph">
<%= @bulletin.text.html_safe rescue '' %>
</div>
<div class="linkAndFile">
<% if @bulletin.bulletin_links.size > 0 %>
<div>
<i class="icons-link"></i>
<div class="showLink">
<% @bulletin.bulletin_links.each do | blink | %>
<%= link_to blink.title, blink.url, :target => '_blank' %>
<% end %>
</div>
</div>
<% end %>
<% if @bulletin.bulletin_files.size > 0 %>
<div>
<i class="icons-paperclip"></i>
<div class="showFile">
<% @bulletin.bulletin_files.each do | bfile | %>
<%= link_to bfile.title, bfile.file.url, {:target => '_blank', :title => bfile.description} if bfile.file.file %>
<% end %>
</div>
</div>
<% end %>
</div>
<%= share_links(@bulletin, 'announcement') %>
@@ -0,0 +1,103 @@
<% # encoding: utf-8 %>
<style type="text/css">
th {
background: #fff;
border-bottom: 2px solid #333;
padding: 10px 5px;
font: 15px/1 '微軟正黑體',sans-serif;
text-align: left;
}
table {
border-collapse: collapse;
width: 100%;
}
td {
padding: 10px 5px;
font: 13px/1.5 'arial',sans-serif;
vertical-align: top;
text-align: left;
border-bottom: 1px solid #eee;
}
tr{
background: #fafafa
}
.odd{
background: #fff;
}
td a {
text-decoration: none;
color: #333;
}
td a:hover {
color: #000;
}
.pagination{
margin: 10px 0;
}
.pagination ul{
margin: 0;
padding: 0;
}
.pagination li:first-child {
border-radius: 5px 0 0 5px;
}
.pagination li {
background: none repeat scroll 0 0 #FFFFFF !important;
border: 1px solid #ccc;
border-right: 0px solid #ccc;
display: block;
float: left;
font: 13px/30px 'open sans',sans-serif !important;
padding: 0 10px !important;
}
.pagination li:last-child {
border-radius: 0 5px 5px 0;
border-right: 1px solid #ccc;
}
.pagination li a {
color: #333;
text-decoration: none;
}
.pagination li a:hover {
color: #000;
}
</style>
<script type="text/javascript">
// Popup window code
function newPopup(url) {
popupWindow = window.open(
url,'popUpWindow','height=700,width=800,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
}
</script>
<table class="table table-bordered">
<tr>
<th><%= t('announcement.categories') %></th>
<th><%= t('announcement.default_widget.title') %></th>
<th><%= t('announcement.default_widget.postdate') %></th>
<th><%= t('announcement.default_widget.bulletin_create_dept') %></th>
</tr>
<% @bulletins.each_with_index do |post, i| %>
<tr <%= (i % 2 == 0) ? 'class=odd' : '' %>>
<td><%= post.category.title rescue nil %></td>
<td><a href="JavaScript:newPopup('<%= panel_announcement_widget_show_sync_data_path(post) %>');"><%= post.title %></a></td>
<td><%= display_date(post.postdate) %></td>
<%
unit_field = User.get_member_list_attribute_field("staff","unit")
unit = User.get_member_list_attribute_value(post.create_user_id,unit_field.id).get_value_by_locale(I18n.locale) rescue nil
%>
<td><%= unit %></td>
</tr>
<% end %>
</table>
<%= paginate( @bulletins, :param_name => :page_main, :params => {:inner => 'false'} ) rescue nil if params[:show_page] == 'true' %>
+16
View File
@@ -4,6 +4,7 @@ en:
add_new: Add New add_new: Add New
all_articles: All Articles all_articles: All Articles
announcement: Announcement announcement: Announcement
append_note: Suggest to input underside Link and File's annotation to show correct info in frontend
approval_setting: Approval Setting approval_setting: Approval Setting
approve_bulletin_fail: Approval Fail approve_bulletin_fail: Approval Fail
approve_bulletin_success: Approve Successfully approve_bulletin_success: Approve Successfully
@@ -17,6 +18,7 @@ en:
postdate: Post Date postdate: Post Date
subtitle: Subtitle subtitle: Subtitle
title: Title title: Title
bulletin_create_dept: Unit
editing_announcement: Edit Announcement editing_announcement: Edit Announcement
editing_announcement_category: Edit Category editing_announcement_category: Edit Category
file: Attachment file: Attachment
@@ -25,6 +27,8 @@ en:
frontend: frontend:
bulletins: Announcement front-end bulletins: Announcement front-end
search_result: Search result search_result: Search result
image: Cover image
image_note: The image will not show in content
link_name: Link Name link_name: Link Name
new_bulletin_category: New Bulletin Category new_bulletin_category: New Bulletin Category
picture: Cover Picture picture: Cover Picture
@@ -36,3 +40,15 @@ en:
bulletins_and_web_links: Differential Nav. bulletins_and_web_links: Differential Nav.
index: Index index: Index
search: Search search: Search
email_reminder: Email Reminder
activate_email_reminder: Activate Email Reminder
email_sentdate: Email Time
email_to: Email To
mail_subject: this is an announcement reminder from【%{site_title}】
other_mailaddress: Other Email
other_mailaddress_note: Divide different email accounts with ","
mail_hi: Hi
mail_url_view: This email is the reminder of an announcement, please click the link for the details
mail_source: Source
mail_time: Time
image_upload_size_note: The following recommendations %{image_upload_size} upload size
+16
View File
@@ -4,6 +4,7 @@ zh_tw:
add_new: 新建 add_new: 新建
all_articles: 文章列表 all_articles: 文章列表
announcement: 公告 announcement: 公告
append_note: 以下之附加連結與檔案,為使前台顯示名稱,建議您輸入註解。
approval_setting: 審核設定 approval_setting: 審核設定
approve_bulletin_fail: 審核失敗 approve_bulletin_fail: 審核失敗
approve_bulletin_success: 審核成功 approve_bulletin_success: 審核成功
@@ -17,6 +18,7 @@ zh_tw:
postdate: 張貼日期 postdate: 張貼日期
subtitle: 副標題 subtitle: 副標題
title: 標題 title: 標題
bulletin_create_dept: 單位
editing_announcement: 編輯類別 editing_announcement: 編輯類別
editing_announcement_category: 編輯類別 editing_announcement_category: 編輯類別
error: error:
@@ -27,6 +29,8 @@ zh_tw:
frontend: frontend:
bulletins: 公告前台 bulletins: 公告前台
search_result: 搜尋結果頁 search_result: 搜尋結果頁
image: 封面圖片
image_note: 此處上傳的圖片不會在公告內文出現
link_name: 連結名稱 link_name: 連結名稱
new_bulletin_category: 新增公告類別 new_bulletin_category: 新增公告類別
picture: 刊頭圖片 picture: 刊頭圖片
@@ -39,3 +43,15 @@ zh_tw:
index: 索引 index: 索引
search: 搜尋 search: 搜尋
more: 更多+ more: 更多+
email_reminder: 寄送提醒
activate_email_reminder: 開啟寄送提醒
email_sentdate: 寄送時間
email_to: 寄送對象
other_mailaddress: 其他Mail
other_mailaddress_note: 輸入多組mail時,請用","逗號隔開
mail_subject: 來自【%{site_title}】的公告事件提醒
mail_hi: 您好
mail_url_view: 此封信件為公告事件提醒,請點選以下連結詳細觀看
mail_source: 來源
mail_time: 時間
image_upload_size_note: 建議檔案小於%{image_upload_size}
+6
View File
@@ -40,6 +40,12 @@ Rails.application.routes.draw do
match "reload_web_links" => "bulletins#reload_web_links" match "reload_web_links" => "bulletins#reload_web_links"
match "bulletins_side_bar" => "bulletins#bulletins_side_bar" match "bulletins_side_bar" => "bulletins#bulletins_side_bar"
match "bulletins_search_block" => "bulletins#bulletins_search_block" match "bulletins_search_block" => "bulletins#bulletins_search_block"
match "sync_data" => "bulletins#sync_data",:as => :sync_data,:via => :get
match "show_sync_data/:id" => "bulletins#show_sync_data",:as => :show_sync_data,:via => :get
end
namespace :api do
get "categories_tags.json" => "bulletins#get_categories_tags"
get "bulletins.json" => "bulletins#get_bulletins"
end end
end end
end end
+1
View File
@@ -41,6 +41,7 @@ module Announcement
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self} link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self}
link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:category,:id]}} link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:category,:id]}}
field :subtitle field :subtitle
field :bulletin_create_dept
link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus' link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
end end