Compare commits

...
Author SHA1 Message Date
chris 09bb318d6a Changes for NTU Student Affairs 2013-09-13 15:10:33 +08:00
chris d766eea9f4 Changes for NTU common
Conflicts:
	lib/tasks/migrate.rake

Conflicts:
	lib/tasks/migrate.rake

Conflicts:
	config/resque_schedule.yml
	lib/tasks/migrate.rake
2013-09-13 15:10:10 +08:00
chris d5dc3ef793 Fix for user and role relationship (from role and sub-role side) 2013-09-13 15:02:31 +08:00
Spen b3366b48a1 announcement add new widget bulletins_and_links 2013-09-13 13:39:39 +08:00
saurabhbhatia 36e7e3d3e8 Fixed Locale settings for location navigation 2013-09-13 12:44:13 +08:00
saurabhbhatia 06c2240d34 Categories working tested and added link to sidebar
Conflicts:
	Gemfile
	config/mongoid.yml
2013-09-13 12:43:42 +08:00
harrybomrah c4e8ed96a9 location category 2013-09-13 12:40:18 +08:00
chris 8ad015af7f Remove before filter in user.rb in addition to the previous fix (Fix for user and role relationship) 2013-09-13 11:56:57 +08:00
chris 1857ad428c Fix for user and role relationship
Conflicts:
	lib/tasks/migrate.rake
2013-09-12 15:35:53 +08:00
Matt K. Fu 134b639465 fix announcement language 2013-09-09 17:35:22 +08:00
Matt K. Fu 45136f915d fix news default widget shows un-checked bulletins. 2013-09-09 11:14:31 +08:00
Matt K. Fu 2c3924d92c fix kaminari 2013-09-04 16:38:52 +08:00
Matt K. Fu 41b562d3f7 fix zip by limit version number 2013-09-04 15:20:55 +08:00
Matt K. Fu 4074ac677d fix rake zip 2013-09-04 10:36:16 +08:00
Matthew K. Fu JuYuan e1c57c6843 fixed default widget for tags 2013-09-03 16:17:45 +08:00
Matthew K. Fu JuYuan 915ea066d6 fixing bulletin default widget 2013-09-02 17:24:28 +08:00
Matt K. Fu e7aa7ea1fa added sorting DSL 2013-09-02 16:33:50 +08:00
Matt K. Fu 1ccfd6e48c fix sorting for default widget 2013-08-30 16:52:46 +08:00
Matt K. Fu 23516277f3 fix default widget query 2013-08-30 10:15:18 +08:00
Matt K. Fu 87bc2852b3 fix variable 2013-08-29 18:08:33 +08:00
Matt K. Fu 27b86b078a fix counter for recording request. 2013-08-28 17:56:03 +08:00
Matt K. Fu 8f393e1079 fix template for solar error. gitingore 2013-08-28 10:37:19 +08:00
Matt K. Fu 353039dcd0 fix script 2013-08-27 18:37:09 +08:00
Matt K. Fu d8dd68b4df fixing setting template and site init scripts 2013-08-27 17:28:33 +08:00
Matt K. Fu aa8523c8cf fix counter eval 2013-08-27 16:07:58 +08:00
Matt K. Fu 69ef8fa747 fix dash broad counter 2013-08-27 15:59:17 +08:00
Matt K. Fu 473baa9b95 add backup job 2013-08-27 15:59:17 +08:00
Matt K. Fu 1592aaff89 add option to logrotate for conversional policy. 2013-08-27 15:59:17 +08:00
Matt K. Fu 030d994180 make rake task more easier for service team 2013-08-27 15:59:17 +08:00
Matt K. Fu a88ad35641 add log rotate into site build procedure. 2013-08-27 15:59:17 +08:00
Matthew K. Fu JuYuan a63193dc65 logrotate template 2013-08-27 15:59:16 +08:00
Matt K. Fu 452bddb587 let site builder can enter rescue's worker 2013-08-27 15:59:16 +08:00
Matt K. Fu 371485e420 add handily task for service team 2013-08-27 15:59:16 +08:00
Matt K. Fu 69b3625861 add production pid log folder in case sold error 2013-08-27 15:59:16 +08:00
Matt K. Fu 72d1427854 fix erb for pass argument and paths 2013-08-27 15:59:16 +08:00
Matthew K. Fu JuYuan 079b9145c3 move all *.god to *.erb so the God init won't go wrong 2013-08-27 15:59:16 +08:00
Matt K. Fu 3102a46219 remove useless setting for solar 2013-08-27 15:59:16 +08:00
Matt K. Fu 653a098ab6 fix solr setting 2013-08-27 15:59:16 +08:00
Matt K. Fu 426edea485 add god to watch solr service 2013-08-27 15:59:16 +08:00
Matt K. Fu 2e5b2555c6 from now on the rescue namespace will be decided by site object field: resque_namespace 2013-08-27 15:59:16 +08:00
Matt K. Fu 2593707d8c fix rescue scheduler space error 2013-08-27 15:59:15 +08:00
saurabhbhatia b20955579e Cleaned Up ask module for master 2013-08-27 14:29:59 +08:00
saurabhbhatia 1ebda22f0e Updated with loader
Conflicts:
	vendor/built_in_modules/ask/app/views/panel/ask/back_end/ask_acknowledgements/index.html.erb
	vendor/built_in_modules/ask/app/views/panel/ask/front_end/ask_questions/index.html.erb
2013-08-27 14:29:53 +08:00
saurabhbhatia c511aeb8de Removed logging statements 2013-08-27 14:29:47 +08:00
saurabhbhatia 26d3a89d30 Updated ask module with custom acknowledgement working 2013-08-27 14:29:39 +08:00
saurabhbhatia 91f80a0952 Deleted ask 2013-08-27 14:29:28 +08:00
saurabhbhatia f333fe9e21 Added custom acknowledgement to ask 2013-08-27 14:29:22 +08:00
saurabhbhatia 33f256bd16 Fix mailing redirect
Conflicts:
	vendor/built_in_modules/ask/init.rb
	vendor/built_in_modules/ask_new/app/controllers/panel/ask/front_end/ask_questions_controller.rb
	vendor/built_in_modules/ask_new/app/views/panel/ask/front_end/ask_questions/thank_you.html.erb
	vendor/built_in_modules/ask_new/config/routes.rb
2013-08-19 13:03:49 +08:00
saurabhbhatia fde9fd7ffe Deleted Unnecessary Old code in ask module and video 2013-08-15 12:12:38 +08:00
saurabhbhatia d977b83d06 Updated captcha, mailing function working 2013-08-15 11:50:28 +08:00
saurabhbhatia a1eae7543e Updated ask module with a new captcha plugin 2013-08-15 11:50:21 +08:00
saurabhbhatia 8d9bf62909 final mongoid fix 2013-07-31 14:22:40 +08:00
saurabhbhatia 2f480c31bf Fixed mongoid 2013-07-31 13:54:29 +08:00
saurabhbhatia 19d33f78bd Updated Video with frontend widget and backend widget working 2013-07-31 13:52:24 +08:00
saurabhbhatia 37c91664d3 Updated with video widget 2013-07-31 13:52:22 +08:00
saurabhbhatia eb853f773d Updated video cleaned up the ui 2013-07-31 13:52:19 +08:00
saurabhbhatia d701d9d6ad Updated videos module with widget initiation 2013-07-31 13:52:10 +08:00
saurabhbhatia 75eeec737c Video and Channel Fetching now working 2013-07-31 13:52:07 +08:00
saurabhbhatia 36c3635bbb add youtube videos module 2013-07-31 13:52:05 +08:00
chris fa1c731ad3 Remove registerable 2013-07-30 18:24:05 +08:00
harrybomrah 2c24e788b0 fixed frontend 2013-07-23 18:32:24 +08:00
chris 26a8be2f0f Fix bulletins_controller.rb missing 'end' 2013-07-19 19:52:44 +08:00
chris fa51d16879 Remove space causing error in rake 2013-07-19 19:23:25 +08:00
chris ceff21fd1f Fix migrate.rake 2013-07-19 19:15:45 +08:00
harrybomrah 1357124f6f backend theater for ie fixed 2013-07-19 18:40:19 +08:00
harrybomrah 8c3fb43bf5 theater view fixed in IE 2013-07-19 18:40:09 +08:00
chris 71e8b3c042 Change get_item
Add category and tags to default widget link to object
2013-07-19 18:39:13 +08:00
Spen b37643147f mail_cron add send_mail_now and mail cron log fix 2013-07-19 17:18:48 +08:00
Spen ec57cbff1c ntue mail cron & log filter fix 2013-07-19 17:18:34 +08:00
Spen 7d6df11873 email send cron & send logs for any apps 2013-07-19 17:01:54 +08:00
Matt K. Fu 8043573370 fix delay impressionist for tags and pages 2013-07-19 17:00:38 +08:00
chris f025c98ffa Fix sorted_tags_for_cloud: it's now using the cloud_view_count 2013-07-19 01:52:36 +08:00
chris 3a91c92bf7 Fix visitor count. Mapping the session and making sure they were unique using rails was way slower than doing it with a mongoid query 2013-07-19 01:20:51 +08:00
harrybomrah b1d8a87256 frontend gallery fix 2013-07-18 21:22:23 +08:00
chris c7ac4e2485 Set tinymce-rails version to 3.5.8.3 2013-07-18 20:53:05 +08:00
chris 3467868607 Fix missing tagged_ids in some taggable objects and add a rake task for it 2013-07-18 14:05:21 +08:00
Matt K. Fu ceac2b842c fix impression page counter 2013-07-18 12:04:37 +08:00
chris c763817ebf Fix web link front end index and widget index 2013-07-17 17:54:34 +08:00
chris 3c3bba514a Fix get_item and more link in front end 2013-07-17 11:36:20 +08:00
Spen 837dc3ea7b announcement init default_widget add a style & field 2013-07-17 11:31:38 +08:00
Matt K. Fu ea5d89e0e1 make announcement widget amount start from 1 2013-07-16 18:19:20 +08:00
Matt K. Fu aea15fa622 add class to default widget if row data is hot or top 2013-07-16 17:41:22 +08:00
Matthew K. Fu JuYuan c1316f72a0 remove new design button 2013-07-15 17:10:30 +08:00
Matthew K. Fu JuYuan d996b91b54 preview by default widget 2013-07-15 17:09:48 +08:00
295 changed files with 3574 additions and 389 deletions

No files matched your search

+5 -1
View File
@@ -4,6 +4,8 @@
.rvmrc
Gemfile.lock
Procfile
log/*
db/*.sqlite3
log/*.log
@@ -14,7 +16,9 @@ public/uploads/**/*
solr/data
tmp/**/*
uploads/**/*
config/*.god
log/*.gz
tmp/restart.txt
*.swp
*.pid
*.lck
+7 -3
View File
@@ -14,7 +14,11 @@ gem 'execjs'
gem 'jquery-rails', '2.1.4'
gem 'jquery-ui-rails'
gem "select2-rails", '3.3.1'
gem 'kaminari', :git => 'git://github.com/amatsuda/kaminari.git'
gem 'kaminari'
gem "acts_as_unvlogable"
gem 'youtube_it'
gem 'gotcha'
# gem "memcached", "~> 1.4.3"
# gem "memcache-client"
@@ -35,7 +39,7 @@ gem 'resque-scheduler' # job scheduling
gem 'resque-restriction'
#gem 'rb-readline'
# gem 'ruby-debug19'
gem 'rubyzip'
gem 'rubyzip','0.9.9'
gem 'sunspot_mongo'
gem 'sunspot_solr'
@@ -46,7 +50,7 @@ gem 'sinatra'
gem 'sprockets'
gem 'social-share-button'
gem 'tinymce-rails'
gem 'tinymce-rails', '3.5.8.3'
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+1
View File
@@ -5,3 +5,4 @@
*= require_self
*= require social-share-button
*/
@@ -0,0 +1,38 @@
class Admin::MailCronLogsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_cron_logs = MailCronLog.all.desc(:created_at).page(params[:page_main] ).per('20')
@mail_cron_logs = (params[:sort]) ? get_sorted_and_filtered("mail_cron_log") : get_viewable("mail_cron_log")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def destroy
@mail_cron_log = MailCronLog.find(params[:id])
@mail_cron_log.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_cron_logs_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_cron_logs = MailCronLog.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_cron_logs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
end
@@ -0,0 +1,126 @@
class Admin::MailCronsController < OrbitBackendController
layout "new_admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
# @mail_crons = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
@mail_crons = (params[:sort]) ? get_sorted_and_filtered("mail_cron") : get_viewable("mail_cron")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @mail_crons }
format.js
end
end
def show
end
def new
@mail_cron = MailCron.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @mail_cron }
end
end
def create
@mail_cron = MailCron.new(params[:mail_cron])
@mail_cron.create_user_id = current_user.id
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.save
format.html { redirect_to(admin_mail_crons_url) }
format.xml { render :xml => @mail_cron, :status => :created, :location => @mail_cron }
else
format.html { render :action => "new" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def edit
@mail_cron = MailCron.find(params[:id])
end
def update
@datas = MailCron.where(:mail_sentdate.lte => Time.now, :mail_sent => false)
@datas.each do |mail_data|
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
@mail_cron = MailCron.find(params[:id])
@mail_cron.update_user_id = current_user.id
respond_to do |format|
if @mail_cron.update_attributes(params[:mail_cron])
format.html { redirect_to(admin_mail_crons_url) }
format.js { render 'toggle_enable' }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @mail_cron.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@mail_cron = MailCron.find(params[:id])
@mail_cron.destroy
respond_to do |format|
format.html { redirect_to(admin_mail_crons_url) }
# format.xml { head :ok }
format.js
end
end
def delete
if params[:ids]
mail_crons = MailCron.any_in(:_id => params[:ids]).destroy_all
end
redirect_to admin_mail_crons_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
protected
end
+15 -13
View File
@@ -11,23 +11,21 @@ class DefaultWidgetController< OrbitWidgetController
end
def query_for_default_widget
@ori_class_name = @default_widget["query"].split('.')[0]
result = nil
result_objects = nil
@ori_class_name = @default_widget["query"].split('.')[0]
@result = eval(@default_widget["query"])
if !params["tag_id"].blank?
if params["category_id"].blank? #has tag no cate
result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"])
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
else #has tag and cate
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])")
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
end
elsif params["category_id"].blank? #no tag no cate
result = eval(@default_widget["query"])
else #no tag has cate
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])")
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
end
result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate)
eval("@result.#{@default_widget[:sorting_query]}")
end
def search_result
@@ -40,9 +38,13 @@ class DefaultWidgetController< OrbitWidgetController
def default_widget
@search = params["search_query"].blank? ? false : true
if !params[:id].blank?
if !params[:id].blank? and !params["clicked_field_name"].blank?
clicked_field_name = params["clicked_field_name"].to_sym
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
elsif !params[:id].blank? and params["preview"]
clicked_field_name = :title
@preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]}
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})")
else
@tag_class = nil
@default_widget = @page_part.module_app.get_default_widget
@@ -91,9 +93,9 @@ class DefaultWidgetController< OrbitWidgetController
end
def get_category_field_name
@ori_class_name = @ori_class_name.constantize
@ori_class_name = @ori_class_name.constantize unless @ori_class_name.is_a? Class
@ori_class_name.fields.each_key do |key|
return key if key.include?('category_id')
return key.to_s if key.include?('category_id')
end
nil
end
@@ -7,4 +7,10 @@ class OrbitFrontendComponentController< ApplicationController
@app_title = request.fullpath.split('/')[2]
end
def delay_impressionist(item)
user_id = current_user.nil? ? nil : current_user.id
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
end
end
+34 -30
View File
@@ -44,29 +44,13 @@ class PagesController < ApplicationController
# render :file => "#{Rails.root}/public/404.html", :status => :not_found
#end
end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link
url = "/#{@item.path}"
options = ''
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
if params[:category_id].is_a? Array
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id',params[:category_id])}" unless params[:category_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
end
if params[:tag_id].is_a? Array
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id',params[:tag_id])}" unless params[:tag_id].blank?
elsif params[:category_id].is_a? String
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
end
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options)
@@ -78,8 +62,8 @@ class PagesController < ApplicationController
url = "/#{@item.path}"
options = ''
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank?
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].blank?
options << "#{options.blank? ? '?' : '&'}controller_action=#{params[:controller_action]}" unless params[:controller_action].blank?
options << "#{options.blank? ? '?' : '&'}clicked_field_name=#{params[:clicked_field_name]}" unless params[:clicked_field_name].blank?
@@ -98,23 +82,43 @@ class PagesController < ApplicationController
elsif params[:same_page_id]
@item = Item.find(params[:same_page_id])
else
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]]
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]]
category_ids = Array(params[:category_id]) unless params[:category_id].nil?
tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
module_app = ModuleApp.first(:conditions => {:key => params[:app_name]})
default_query = { is_published: true, module_app_id: module_app.id, :app_frontend_url.in => [params[:app_action], 'default_widget'] }
specific_categories = { :category => category_ids }
in_categories = { :category.in => category_ids }
nil_categories = { :category.in => [nil, []] }
specific_tags = { :tag => tag_ids }
in_tags = { :tag.in => tag_ids }
nil_tags = { :tag.in => [nil, []] }
if !category_ids.blank? && !tag_ids.blank?
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => tag_ids})
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => [nil, []]}) unless @item
@item = Item.where(default_query.merge(specific_categories).merge(specific_tags)).first
@item = Item.where(default_query.merge(specific_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(in_categories)).first unless @item
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(in_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
elsif !category_ids.blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :category.in => category_ids).any_in(tag: [nil, []]).first
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first
@item = Item.where(default_query.merge(specific_categories)).first unless @item
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query.merge(in_categories)).first unless @item
elsif !tag_ids.blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :tag.in => tag_ids).any_in(category: [nil, []]).first
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first
@item = Item.where(default_query.merge(specific_tags)).first unless @item
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
@item = Item.where(default_query.merge(in_tags)).first unless @item
end
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank?
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).all_of("tag" => {"$in" => [nil, []]},"category" => { "$in" => [nil, []]}).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
@item = Item.where(default_query.merge(nil_categories).merge(nil_tags)).first unless @item
@item = Item.where(default_query).first unless @item
end
raise PageError,'Missing Frontend Page' if @item.nil?
raise PageError, 'Missing Frontend Page' if @item.nil?
end
def save_from_no_lang_for_page
+25 -18
View File
@@ -1,5 +1,5 @@
module ApplicationHelper
include OrbitApp::Module::VisitorCounter
FLASH_NOTICE_KEYS = [:error, :notice, :warning]
@@ -7,8 +7,9 @@ module ApplicationHelper
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
end
def delayed_impressionist(object)
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object)
def delayed_impressionist(item)
user_id = current_user.nil? ? nil : current_user.id
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
end
def check_user_role_enable(attribute_fields)
@@ -242,25 +243,27 @@ module ApplicationHelper
"#{t(:view_count)}: #{object.view_count}"
end
def display_visitors(options={})
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
end
# def display_visitors(options={})
# # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
# impressions = Impression.where(options).and(:referrer.ne => nil)
# impressions.map{|i| i[:session_hash]}.uniq.count
# end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
# def display_visitors_today
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
# end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
# def display_visitors_this_week
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
# end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
# def display_visitors_this_month
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
# end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end
# def display_visitors_this_year
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
# end
def display_date_time(object)
object.strftime("%Y-%m-%d %H:%M")
@@ -311,4 +314,8 @@ module ApplicationHelper
link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
end
def convert_array_param(key, array)
Array(array).collect{|t| "#{key}[]=#{t}"}.join("&")
end
end
+16
View File
@@ -3,6 +3,13 @@ module DefaultWidgetHelper
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
end
def get_top_hot_class(row_data)
class_attr = []
class_attr << 'data_is_hot' if( row_data.is_hot? rescue false )
class_attr << 'data_is_top' if( row_data.is_top? rescue false)
return class_attr.join(" ")
end
def link_to_field(row_data,field, switch, options=nil)
method_ary = @page_part.module_app.widget_fields_link_method
field = field.to_sym
@@ -77,4 +84,13 @@ module DefaultWidgetHelper
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
end
end
def get_row_category(row_data)
row_data.send("#{row_data.class.to_s.underscore}_category_id") rescue nil
end
def get_row_tags(row_data)
row_data.tagged_ids rescue nil
end
end
+12 -4
View File
@@ -2,16 +2,24 @@ class BackupServer
@queue = :high
def self.perform()
#CronMail.time_check("Going to backup Orbit").deliver
dbhost = Mongoid.config.database.connection.primary.join ':'
dbname = Mongoid.config.database.name
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
%x[rm #{archive_db_list_path}]
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}]
Dir.foreach('tmp') do |item|
date_str = item.to_s.gsub("#{dbname}-",'')
next if not date_str.match(/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}/)
if Date.parse(date_str).to_time < Site.first.backup_keep_for_days.days.ago
OrbitLogger.info "Deleting #{date_str}"
%x[rm -rf tmp/#{item}]
end
end
%x[rm -f #{archive_db_list_path}]
%x[cd tmp ; ls -l |grep #{dbname} | awk '{print $8}'|xargs du -h --block-size=1M --max-depth=0 |sort -h >> #{archive_db_list_path}]
OrbitLogger.info "DB backup done Path:#{dbdirectory}"
end
end
+10 -25
View File
@@ -1,36 +1,21 @@
class DashboardCounter < Resque::Plugins::RestrictionJob
extend OrbitApp::Module::VisitorCounterEval
@queue = :high
def self.perform(*args)
site = Site.first
obj = new(*args)
site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
site.visitor_counters[:total] = display_visitors
site.visitor_counters[:today] = display_visitors_today
site.visitor_counters[:this_week] = display_visitors_this_week
site.visitor_counters[:this_month] = display_visitors_this_month
site.visitor_counters[:this_year] = display_visitors_this_year
site.save
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
end
OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
def display_visitors(options={})
impressions = Impression.where(options).and(:referrer.ne => nil)
impressions.map{|i| i[:session_hash]}.uniq.count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
#and the site model will need a field call dashboard_counter to complete this job.
end
end
+50 -6
View File
@@ -1,7 +1,51 @@
class DelayedImpressionist
@queue = :low
def self.perform(object)
impressionist(object)
true
end
class DelayedImpressionist
def self.before_filter(*args)
return
end
include ImpressionistController::InstanceMethods
@queue = :low
def initialize(request,controller_name,action_name,user,obj)
@controller_name = controller_name
@action_name = action_name
@user = User.find user unless user.nil?
@request = request
end
def self.perform(*args)
arg = args[0]
@request= DelayImpressionistRequest.new
@request.restore(arg["request"])
obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'")
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
@try = 1
loop do
result = new_impression.save rescue false
break if (result || @try >= 10)
@try = @try + 1
puts "trying:#{@try}"
end
new_impression.save
obj.update_attribute(:view_count,obj.impression_count)
end
private
def user
@user
end
def action_name
@action_name
end
def controller_name
@controller_name
end
def request
@request
end
end
+42
View File
@@ -0,0 +1,42 @@
class EmailCron
@queue = :mail
def self.perform
@datas = MailCron.where(:mail_sentdate.lte => Time.now)
@datas.each do |mail_data|
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
end
end
+7
View File
@@ -0,0 +1,7 @@
class GetAnnouncementFromRss
@queue = :high
def self.perform()
%x(ruby "#{Rails.root}/lib/rss_ntu_job.rb")
end
end
+1 -1
View File
@@ -3,7 +3,7 @@ class UpdateTagCloud
def self.perform()
Tag.all.each do |tag|
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now))
tag.update_attribute(:cloud_view_count, tag.get_impressionist)
end
OrbitLogger.info "UpdateTagCloud Done"
end
+81
View File
@@ -0,0 +1,81 @@
class MailCronMailer < ActionMailer::Base
default :from => "orbit_test@rulingcom.com"
def get_settings
@site = Site.first
@smtp_settings = {
:address => @site['site_settings']['address'],
:port => @site['site_settings']['port'],
:domain => @site['site_settings']['domain'],
:authentication => @site['site_settings']['authentication'],
# :user_name => @site['site_settings']['user_name'],
# :password => @site['site_settings']['password'],
:tls => (@site['site_settings']['tls'] == '0' ? false : true ) ,
:enable_starttls_auto => (@site['site_settings']['enable_starttls_auto'] == '0' ? false : true )
}
if !@site['site_settings']['user_name'].blank?
@smtp_settings[:user_name] = @site['site_settings']['user_name']
end
if !@site['site_settings']['password'].blank?
@smtp_settings[:password] = @site['site_settings']['password']
end
ActionMailer::Base.smtp_settings = @smtp_settings
end
def cron_mail( data_id, group_mail )
get_settings
@data = MailCron.find(data_id)
if @data
@user = User.find(@data.create_user_id)
if !@data.mail_cron_files.blank?
@data.mail_cron_files.each_with_index do |mail_cron_file, i|
file_type = File.extname(mail_cron_file.file.to_s)
file_content = Mongo::GridFileSystem.new(Mongoid.database).open(mail_cron_file.file.url.gsub("/gridfs/", "").force_encoding("UTF-8"), 'r')
attachments["#{mail_cron_file.title}#{file_type}"] = file_content.read
end
end
if !@data.mail_content["text"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :text => @data.mail_content["text"] }
end
elsif !@data.mail_content["template"].blank?
mail( :from => @data.mail_from, :reply_to => @data.mail_reply_to, :bcc => group_mail, :subject => @data.mail_subject ) do |format|
format.html { render :template => @data.mail_content["template"], :collection => @data.mail_content }
end
end
@mail_cron_log = {
:mail_subject => @data.mail_subject,
:mail_to => group_mail,
:mail_user => @user.name,
:mailer_count => group_mail.split(",").size,
:mail_from_app => @data.mail_from_app
}
@mail_cron_log = MailCronLog.new(@mail_cron_log)
@mail_cron_log.save
@data.destroy
end
end
end
+70
View File
@@ -0,0 +1,70 @@
class MailCron
include Mongoid::Document
include Mongoid::Timestamps
field :mail_from_app
field :mail_from
field :mail_to
field :mail_reply_to
field :mail_subject
field :mail_content, :type => Hash
field :mail_sentdate , :type => DateTime
field :create_user_id
field :update_user_id
has_many :mail_cron_files, :autosave => true, :dependent => :destroy
accepts_nested_attributes_for :mail_cron_files, :allow_destroy => true
after_save :save_mail_cron_files
def save_mail_cron_files
self.mail_cron_files.each do |t|
if t.should_destroy
t.destroy
end
end
end
def self.send_mail_now(mail_cron_id)
mail_data = MailCron.find(mail_cron_id)
if !mail_data.blank?
@mail_j = 0
@read_mails = Array.new
@mails = mail_data.mail_to.split(",")
@mails.each do |send_mail|
@read_mails << send_mail
@mail_j += 1
if 0 == @mail_j % 30
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
if !@read_mails.join(',').blank?
MailCronMailer.cron_mail( mail_data.id, @read_mails.join(',') ).deliver
@read_mails = Array.new
sleep 10
end
end
end
end
+13
View File
@@ -0,0 +1,13 @@
class MailCronFile
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, AssetUploader
field :should_destroy, :type => Boolean
field :title
belongs_to :mail_cron
end
+14
View File
@@ -0,0 +1,14 @@
class MailCronLog
include Mongoid::Document
include Mongoid::Timestamps
field :mail_subject
field :mail_to
field :mail_user
field :mailer_count
field :mail_from_app
end
+1 -1
View File
@@ -140,7 +140,7 @@ class ModuleApp
def sorted_tags_for_cloud
temp_tags = {}
self.tags.each{ |tag|
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
temp_tags.merge!({tag => tag.cloud_view_count})
}
if !temp_tags.blank?
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse
+1 -1
View File
@@ -3,7 +3,7 @@ class Page < Item
include Impressionist::Impressionable
include ParserFrontEnd
is_impressionable :counter_cache => { :column_name => :view_count }
is_impressionable #:counter_cache => { :column_name => :view_count }
field :content, localize: true
field :app_frontend_url
+3 -1
View File
@@ -18,6 +18,7 @@ class Site
field :title_always_on, :type => Boolean, :default => false
field :dashbroad_allow_visitor, :type => Boolean, :default => false
field :mail_settings, :type => Hash
field :visitor_counters,:type=> Hash,:default=>{:total=>0,:today=>0,:this_week=>0,:this_month=>0,:this_year=>0}
field :disk_space, :type => String
field :system_package_info, :type => Hash,:default=>{}
@@ -28,10 +29,11 @@ class Site
mount_uploader :default_image, ImageUploader
field :search,:type => Hash
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
field :title, localize: true
field :footer, localize: true
field :sub_menu, localize: true
field :backup_keep_for_days,:type=>Integer,:default=> APP_CONFIG['backup_keep_for_days']
field :mobile_on, :type => Boolean, :default => false
+1 -25
View File
@@ -8,7 +8,7 @@ class Tag
include Mongoid::Timestamps
include Impressionist::Impressionable
is_impressionable :counter_cache => { :column_name => :view_count }
is_impressionable #:counter_cache => { :column_name => :view_count }
field :name, localize: true
field :view_count, :type => Integer, :default => 0
@@ -17,30 +17,6 @@ class Tag
belongs_to :module_tag, polymorphic: true
has_many :taggings, dependent: :destroy
#field :cloud_amper,:type: Integer,:default=> 0
# def self.sorted_for_cloud
# tags = {}
# self.all.each{ |tag|
# tags.merge!({tag => self.get_impressionist(tag)})
# }
# if !tags.blank?
# sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse
# sorted_tags[0][1] = :hot1
# offset = (sorted_tags.size - 1) / 3
# i = 1
# class_i = 2
# sorted_tags[1..-1].collect!{ |x|
# x[1] = "hot#{class_i}"
# i == offset ? i = 1 : i += 1 if class_i < 4
# class_i += 1 if i == offset && class_i < 4
# }
# sorted_tags
# else
# []
# end
# end
protected
def self.get_impressionist(item_tag = self)
+5 -10
View File
@@ -3,7 +3,7 @@ class User
include Mongoid::Document
include Mongoid::Timestamps
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable #, :timeoutable
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :timeoutable
mount_uploader :avatar, AvatarUploader
@@ -42,7 +42,6 @@ class User
before_create :initialize_desktop
before_save :rebuild_status_record
before_save :save_roles
scope :remote_account, where(:nccu_id.ne => nil)
scope :not_guest_user, all_of(:name.ne => "guest")
@@ -89,9 +88,9 @@ class User
var[:id].each do |id,val|
# binding.pry if id == '5052c5b22b5c49ab02000004'
if (val=="true")
self.roles = self.roles.reject{|t| t.id.to_s==id}
self.role_ids.reject!{|t| t.to_s == id}
elsif(val=="false")
self.roles << Role.find(id)
self.role_ids += Array(id)
end
end
end
@@ -106,9 +105,9 @@ class User
# binding.pry if id == '5052c5b22b5c49ab02000004'
if ( self.roles.include?(@roid) == false or val=="true")
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id}
self.sub_role_ids.reject!{|t| t.to_s == id}
elsif(val=="false")
self.sub_roles << SubRole.find(id)
self.sub_role_ids += Array(id)
end
end
@@ -273,10 +272,6 @@ class User
end
protected
def save_roles
# self.roles = self.sub_roles.collect{|t| t.role}.uniq
self.roles = self.roles.uniq
end
def rebuild_status_record
self.status_record = {}
-1
View File
@@ -8,6 +8,5 @@
</table>
<div class="form-actions form-fixed pagination-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_design_path, :class => 'btn btn-primary pull-right' %>
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
</div>
@@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>
@@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>
@@ -0,0 +1,29 @@
<tr id="<%= dom_id mail_cron_log %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron_log.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron_log.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_log_path(mail_cron_log), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron_log.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron_log.mail_user %>
</td>
<td class="span2">
<%= mail_cron_log.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron_log.created_at) %>
</td>
</tr>
@@ -0,0 +1,6 @@
<%= render_sort_bar(true, delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_user', 'mail_user','span2', :mail_user] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'created_at','span2', :sentdate] ).html_safe %>
@@ -0,0 +1 @@
$("#<%= dom_id @mail_cron_log %>").remove();
@@ -0,0 +1,28 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_cron_logs" class="sort-holder">
<%= render :partial => "mail_cron_log",:collection=> @mail_cron_logs%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>
@@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
$("#sort_headers").html("<%= j render 'sort_headers' %>");
$("#tbody_mail_cron_logs").html("<%= j render :partial => 'mail_cron_log', :collection => @mail_cron_logs %>");
$("#mail_cron_log_pagination").html("<%= j paginate @mail_cron_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
@@ -0,0 +1,3 @@
<div class="filter-clear">
<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), admin_mail_crons_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %>
</div>
@@ -0,0 +1,11 @@
<div id="filter" class="subnav">
<div class="filters">
<div id="sort_headers" class="table-label">
<%= render 'sort_headers' %>
</div>
</div>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "sort_header" %>
<% end %>
+122
View File
@@ -0,0 +1,122 @@
<div id= "poststuff">
<% # encoding: utf-8 %>
<%= f.error_messages %>
<!--Widget start-->
<div id="sub-wiget">
<div id="widget-date" class="widget-box widget-size-300">
<h3 class="widget-title"><i class="icons-calendar"></i><%= t(:date_) %></h3>
<div class="widget-content clear">
<div class="control-group">
<%= f.datetime_picker :mail_sentdate, :picker_type => 'separated', :label => t(:start) %>
</div>
</div>
</div>
</div>
<!--Wiget End-->
<!--Post Start-->
<div id="post-body">
<div id="post-body-content" class="clear">
<%= f.label :mail_subject ,t(:mail_subject)%>
<%= f.text_field :mail_subject %>
<%= f.label :mail_from ,t(:mail_from)%>
<%= f.text_field :mail_from %>
<%= f.label :mail_reply_to ,t(:mail_reply_to)%>
<%= f.text_field :mail_reply_to %>
<%= f.label :mail_to ,t(:mail_to)%>
<%= f.text_field :mail_to %>
<%= f.label :mail_content ,t(:mail_content)%>
<%= f.text_area :mail_content, :class=>"span12", :cols=>"25", :rows=>"10" %>
</div>
<div>
<div id='plugin_files' class="plugin_files_block">
<table class="table table-condensed">
<thead>
<tr>
<th>File</th>
<th>File Name</th>
<th class="span1"></th>
</tr>
</thead>
<tfoot>
<tr>
<td style="text-align:center" colspan="3">
<div id='add_plugin_file' class="info_input plugin_files_block">
<%= hidden_field_tag 'plugin_file_field_count', @mail_cron.mail_cron_files.count %>
<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i> ADD/新增</span></a>
</div>
</td>
</tr>
</tfoot>
<tbody>
<% @mail_cron.mail_cron_files.each_with_index do |mail_cron_file, i| %>
<%= f.fields_for :mail_cron_files, mail_cron_file do |f| %>
<%= render :partial => 'form_file', :object => mail_cron_file, :locals => {:f => f, :i => i} %>
<% end %>
<% end %>
</tbody>
</table>
</div>
</div>
<!--Post End-->
</div>
<div class="form-actions">
<%= f.submit t('submit'), :class=>'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "archive_plugin_form" %>
<script>
$('#add_plugin_file a.add').live('click', function(){
var new_id = $(this).prev().attr('value');
var old_id = new RegExp("new_add_plugin_files", "g");
$(this).prev().attr('value', parseInt(new_id) + 1);
$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_file', f, :mail_cron_files) %>").replace(old_id, new_id));
});
$('.add_plugin_files_block a.delete').live('click', function(){
$(this).parents('.list_item').remove();
});
$('.action a.remove_existing_record').live('click', function(){
$(this).next('.should_destroy').attr('value', 1);
$("tr#add_plugin_file_" + $(this).prev().attr('value')).hide();
});
</script>
<% end %>
</div>
@@ -0,0 +1,35 @@
<% # encoding: utf-8 %>
<tr id="<%= "plugin_file_#{form_file.id}" if !form_file.new_record? %>" class='list_item'>
<td>
<div class="control-group">
<div class="controls">
<%= f.file_field :file %>
<%= form_file.file.file ? ( link_to t(:view), form_file.file.url, {:class => 'btn', :target => '_blank', :title => t(:view)} ) : '' %>
</div>
</div>
</td>
<td>
<div class="tab-content">
<%= f.text_field :title %>
</div>
</td>
<td>
<span class="action">
<% if form_file.new_record? %>
<a class="delete"><i class="icon-remove"></i></a>
<% else %>
<%= f.hidden_field :id %>
<a class="remove_existing_record"><i class="icon-remove"></i></a>
<%= f.hidden_field :should_destroy, :value => nil, :class => 'should_destroy' %>
<% end %>
</span>
</td>
</tr>
@@ -0,0 +1,26 @@
<tr id="<%= dom_id mail_cron %>" class="with_action">
<td class="span1">
<% if is_manager? %>
<%= check_box_tag 'to_delete[]', mail_cron.id, false, :class => "checkbox_in_list" %>
<% end -%>
</td>
<td class="span1-2">
<%= mail_cron.mail_subject %>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<%if at_least_module_manager %>
<li><%= link_to t(:delete_), admin_mail_cron_path(mail_cron), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
</ul>
</div>
</td>
<td class="span2">
<%= mail_cron.mail_to.gsub(/,/, "<br />").html_safe %>
</td>
<td class="span2">
<%= mail_cron.mail_from_app %>
</td>
<td class="span2">
<%= display_date_time(mail_cron.mail_sentdate) %>
</td>
</tr>
@@ -0,0 +1,5 @@
<%= render_sort_bar(true, delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
['subject', 'mail_subject','span2', :mail_subject] ,
['mail_to', 'mail_to','span2', :mail_to] ,
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
['sentdate', 'mail_sentdate','span2', :mail_sentdate] ).html_safe %>
@@ -0,0 +1 @@
$("#<%= dom_id @mail_cron %>").remove();
+9
View File
@@ -0,0 +1,9 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<h1><%= t('mail_cron.editing_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_cron_path(@mail_cron), :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
+27
View File
@@ -0,0 +1,27 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<%= render 'filter' %>
<table class="table main-list">
<thead>
<tr>
<th class="span1"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_mail_crons" class="sort-holder">
<%= render :partial => "mail_cron",:collection=> @mail_crons%>
</tbody>
</table>
<div class="form-actions form-fixed pagination-right">
<div id="web_link_pagination" class="paginationFixed">
<%= paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
</div>
</div>
+4
View File
@@ -0,0 +1,4 @@
$("#delete_all").attr("action", "<%= delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>");
$("#sort_headers").html("<%= j render 'sort_headers' %>");
$("#tbody_mail_crons").html("<%= j render :partial => 'mail_cron', :collection => @mail_crons %>");
$("#mail_cron_pagination").html("<%= j paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>");
+12
View File
@@ -0,0 +1,12 @@
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t('site.settings'), :link_url => admin_site_site_info_path(@site), :icon => 'icons-cog', :side_bar_content => 'admin/sites/side_bar'} %>
<% end %>
<div id="poststuff">
<h1><%= t('mail_cron.new_mail_cron') %></h1>
<%= form_for @mail_cron, :url => admin_mail_crons_path, :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
</div>
@@ -17,4 +17,4 @@
<%= render :partial=> "widget_ext_options" %>
</div>
</div>
<% end %>
<% end %>
+2
View File
@@ -9,6 +9,8 @@
<%#= content_tag :li, link_to(t(:theme), admin_site_ui_theme_path(@site)), :class => active_for_action('sites', 'ui_theme') %>
<%= content_tag :li, link_to(t('sitemap'), admin_site_sitemap_path(@site)), :class => active_for_action('sites', 'sitemap') %>
<%= content_tag :li, link_to(t('user_actions'), admin_user_actions_path), :class => active_for_action('user_actions', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron'), admin_mail_crons_path), :class => active_for_action('mail_cron', 'index') %>
<%= content_tag :li, link_to(t('mail.mail_cron_log'), admin_mail_cron_logs_path), :class => active_for_action('mail_cron_log', 'index') %>
<% end -%>
<% end -%>
+16 -13
View File
@@ -1,19 +1,22 @@
<%= content_tag :div,:class=>@tag_class do%>
<%= content_tag :div, class: @tag_class do %>
<div class="default_widget_type_A">
<table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" >
<thead>
<tr>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:th,content_tag(:span,get_field_header(field),:class=>@frontend_classes[index]))unless field.blank?%>
<% end %>
</tr>
</thead>
<% @data.each do |row_data| %>
<thead>
<tr>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:td,content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]))unless field.blank?%>
<% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:th, content_tag(:span, get_field_header(field), class: @frontend_classes[index])) unless field.blank? %>
<% end %>
</tr>
<% end %>
</thead>
<tbody>
<% @data.each do |row_data| %>
<tr class="<%= get_top_hot_class(row_data) %>">
<% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:td, content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index])) unless field.blank? %>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<% end %>
</div>
<% end %>
+5 -5
View File
@@ -1,13 +1,13 @@
<%= content_tag :div,:class=>@tag_class do%>
<%= content_tag :div, class: @tag_class do %>
<ul class="default_widget_list">
<% @data.each do |row_data| %>
<%= content_tag(:li) do %>
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<div class="img app-pic">
<%= image_tag row_data.send(@widget_image_field)%>
<%= image_tag row_data.send(@widget_image_field) %>
</div>
<div class="wrap">
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
<% @frontend_field_names.each_with_index do |field, index| %>
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<% end %>
</div>
<% end %>
+5 -5
View File
@@ -1,12 +1,12 @@
<%= content_tag :div,:class=>@tag_class do%>
<%= content_tag :div, class: @tag_class do %>
<div class="img app-pic">
<%= image_tag @data.first.send(@widget_image_field)%>
<%= image_tag @data.first.send(@widget_image_field) %>
</div>
<ul class="default_widget_list">
<% @data.each do |row_data| %>
<%= content_tag(:li) do %>
<% @frontend_field_names.each_with_index do |field,index|%>
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<% @frontend_field_names.each_with_index do |field, index|%>
<%= content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
<% end %>
<% end %>
<% end %>
+11
View File
@@ -1,6 +1,17 @@
<!DOCTYPE HTML>
<html class="<%= I18n.locale.to_s %>">
<head>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-39393439-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<meta charset="utf-8">
<%= page_title(@item).html_safe %>
<link rel="shortcut icon" href="<%= asset_path "ncculogo.ico" %>">
+2 -5
View File
@@ -3,9 +3,6 @@
<% end %>
<ul>
<li>總機電話:<a href="tel:+886229393091">02-29393091</a></li>
<li>傳真:02-29379611</li>
<li>緊急重大事件通聯窗口:校內分機 66119、66110</li>
<li>總值日室:<a href="tel:+88229387132">02-29387132</a></li>
<li>駐警衛室:<a href="tel:+88229387129">02-29387129</a></li>
<li>學務處電話:<a href="tel:+886-2-3366-2995~2997">+886-2-3366-2995~2997</a></li>
<li>學務處傳真:+886-2-2391-9095</li>
</ul>
+1 -1
View File
@@ -5,6 +5,6 @@
<div id='map_canvas'></div>
<script type='text/javascript'>
var $map_center = "24.987449, 121.576117"
var $map_center = "25.015205, 121.535491"
var $map_zoom = 17
</script>
+1
View File
@@ -3,6 +3,7 @@ defaults: &defaults
store_ip: 'redmine.rulingcom.com:3001'
orbit: 'Orbit'
ruling_digital: 'RulingDigital'
backup_keep_for_days: 30
development:
<<: *defaults
+1 -1
View File
@@ -3,7 +3,7 @@ require 'resque_scheduler/server'
# require 'yaml'
Resque.redis = 'localhost:6379'
Resque.redis.namespace = "resque"
Resque.redis.namespace = Site.first.resque_namespace rescue APP_CONFIG['orbit']
# If you want to be able to dynamically change the schedule,
# uncomment this line. A dynamic schedule can be updated via the
+2
View File
@@ -272,6 +272,8 @@ en:
setting: Mail settings
tls: TLS
user_name: User Name
mail_cron: Scheduled Email
mail_cron_log: Email Log
manager: Manager
markup: Markup
markup_options: Markup options
+2 -2
View File
@@ -4,10 +4,10 @@ en:
bulletin: Bulletin
contact: Contact
copyright: Copyright
copyright_text: Thisi University © All RIGHTS RESERVED.
copyright_text: Copyright© 2008 National Taiwan University ALL RIGHTS RESERVED
copyright_orbit: Powered by RulingDigital
home: Home
language: Language
location: Location
location_description: '<h3>This University</h3>No.101,Sec. 2, Jiafeng S Road, Zhubei City, Hsinchu County 302, Taiwan'
location_description: '<h3>National Taiwan University</h3>No. 1, Sec. 4, Roosevelt Road, Taipei, 10617 Taiwan (R.O.C)'
page: Page
+2 -2
View File
@@ -4,10 +4,10 @@ zh_tw:
bulletin: 公告
contact: 聯絡資訊
copyright: 著作權宣告
copyright_text: 本網站著作權屬於本大學。
copyright_text: 本網站著作權屬於國立臺灣大學 學生事務處
copyright_orbit: 銳綸數位建置
home: 首頁
language: 語言
location: 地理位置
location_description: '<h3>本大學</h3>302新竹縣竹北市嘉豐南路二段101號'
location_description: '<h3>臺灣大學總務處 版權所有</h3>10617 臺北市大安區羅斯福路四段一號'
page: 頁面
+4
View File
@@ -0,0 +1,4 @@
en:
ntu:
rss_origin: Back to NTU Announcements
+4
View File
@@ -0,0 +1,4 @@
zh_tw:
ntu:
rss_origin: 回臺大校園公佈欄
+2
View File
@@ -272,6 +272,8 @@ zh_tw:
setting: 電子郵件設定
tls: 電子郵件TLS
user_name: 電子郵件帳號
mail_cron: 待寄Email
mail_cron_log: Email發送記錄
manager: 管理者
markup: 輸入模式
markup_options: 標註選項
+2 -2
View File
@@ -8,7 +8,7 @@ defaults: &defaults
development:
<<: *defaults
database: demo_site_development
database: test_site
test:
<<: *defaults
database: test_site
@@ -21,4 +21,4 @@ production:
# password: <%= ENV['MONGOID_PASSWORD'] %>
# database: <%= ENV['MONGOID_DATABASE'] %>
<<: *defaults
database: demo_site_production
database: test_site
+26 -2
View File
@@ -1,5 +1,17 @@
dashboard_counter_cache:
cron: 0 * * * * *
class: DashboardCounter
args:
description: DashboardCounterCache
backup_server:
cron: 0 0 2 * * *
class: BackupServer
args:
description: BackupServer and remove old backups
update_tag_cloud:
cron: 0 0 [0,12] * * *
cron: 0 30 2 * * *
class: UpdateTagCloud
args:
description: UpdateTagCloud
@@ -8,4 +20,16 @@ generate_system_summary:
cron: 0 0 12 * * *
class: GenerateSystemSummary
args:
description: Generate the system status such as disk free space,package version list for showing at site tab
description: Generate the system status such as disk free space,package version list for showing at site tab
email_cron:
cron: 0 0 [10,16,22] * * *
class: EmailCron
args:
description: EmailCron
get_announcement_from_rss:
cron: 0 0 [2,12] * * *
class: GetAnnouncementFromRss
args:
description: Loop through the announcement RSS until 24h ago
+13
View File
@@ -29,6 +29,19 @@ Orbit::Application.routes.draw do
get 'delete'
end
end
resources :mail_crons do
collection do
get 'delete'
end
end
resources :mail_cron_logs do
collection do
get 'delete'
end
end
resources :asset_categories
resources :asset_tags
resources :app_auths
+18
View File
@@ -0,0 +1,18 @@
class DelayImpressionistRequest
attr_accessor :session_options,:remote_ip,:referer,:user_agent
def initialize(request=nil)
if request
self.session_options=request.session_options
self.remote_ip=request.remote_ip
self.referer=request.referer
self.user_agent=request.user_agent
end
end
def restore(args)
args.each do |key,value|
self.send("#{key}=", value)
end
end
end
@@ -6,15 +6,14 @@ module DefaultWidgetTagHelper
@request = req
params.delete :inner
@params = params
params_str ="?"
params_str = "?"
params.each do |index,param|
if param.is_a?(Array) and !param.blank?
params_str << "&" unless params_str.eql?("?")
params_str << param.collect{|t| "#{index}[]=#{t}"}.join("&")
params.delete index
end
end
end
params_str = params_str + (params_str.eql?("?") ? params.to_param : "&#{params.to_param}" )
content_tag :div,:class=> 'more' do
link_to I18n.t(@more_link[:label_i18n]),[eval("#{@more_link[:path_method]}"),params_str].join()
+28
View File
@@ -0,0 +1,28 @@
module OrbitApp
module Module
module VisitorCounter
Version = "0.1"
def display_visitors(options={})
Site.first.visitor_counters["total"]
end
def display_visitors_today
Site.first.visitor_counters["today"]
end
def display_visitors_this_week
Site.first.visitor_counters["this_week"]
end
def display_visitors_this_month
Site.first.visitor_counters["this_month"]
end
def display_visitors_this_year
Site.first.visitor_counters["this_year"]
end
end # of VisitorCounter
end # of Module
end # of OrbitApp
@@ -0,0 +1,36 @@
module OrbitApp
module Module
module VisitorCounterEval
Version = "0.1"
def display_visitors(options={})
map = "function(){ emit( this.referrer,{session_hash: this.session_hash,created_at: this.created_at}); };"
reduce = "function(key, values){ var sum = 0; values.forEach(function(doc){sum += doc.amount; }); return {amount: sum};};"
if options.blank?
impressions = Impression.collection.map_reduce(map, reduce,read: :primary, out: "vr")
else
query = Impression.where(options).selector
impressions = Impression.where(options).collection.map_reduce(map, reduce,read: :primary, out: "vr",:query=>query)
end
impressions.count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day , '$lte' => DateTime.now})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 7.days, '$lte' => DateTime.now})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 1.month, '$lte' => DateTime.now})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 1.year, '$lte' =>DateTime.now})
end
end # end of VisitorCounterEval
end # of Module
end # of OrbitApp
+6 -1
View File
@@ -102,12 +102,17 @@ module OrbitApp
def initialize(&block)
@query = nil
@image = nil
@sorting_query = 'desc(:created_at)'
@more_link = {}
@fields = []
@enabled_styles = STYLE
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
end
def sorting(query)
@sorting_query = query
end
def enable(args)
@enabled_styles = args
end
@@ -122,7 +127,7 @@ module OrbitApp
end
def to_module_app_format
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles} rescue nil
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles,:sorting_query=>@sorting_query} rescue nil
end
def link_field(field_name,setting)
+1 -3
View File
@@ -43,6 +43,7 @@ module OrbitTag
def tags=(tag_ids)
ids = [tag_ids].flatten
tag_ids.delete('')
self.tagged_ids = tag_ids
ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
tag_ids.each do |tag_id|
unless ids.include? tag_id
@@ -58,9 +59,6 @@ module OrbitTag
def tag_ids=(ids)
self.tags = ids
ids = [ids].flatten
ids.delete('')
self.tagged_ids = ids
end
private
+99
View File
@@ -0,0 +1,99 @@
# encoding: utf-8
# encoding: utf-8
require 'rss'
require 'mongo'
AUTHORS = %w[ 學生事務處-學生住宿服務組
學生事務處-學生職業生涯發展中心
學生事務處-衛生保健及醫療中心
學生事務處-課外活動指導組
學生事務處-學生活動中心管理組
學生事務處-僑生及陸生輔導組
學生事務處-生活輔導組
學生事務處-軍訓組
學生事務處-學生心理輔導中心
學生事務處-學生事務處]
DB_BASE_NAME = "site"
all = []
continue = true
i = 1
yesterday = Time.now - 86400
while continue do
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
feed.items.each do |item|
if item.pubDate > yesterday
if AUTHORS.include?(item.author)
author = item.author.strip
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
all << {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
end
else
continue = false
break
end
end
end
i += 1
end
# Get corresponding category_id or create a new one
def get_category_id(category, categories, coll_cat)
if categories.keys.include? "rss_#{category}"
[categories["rss_#{category}"], categories]
else
cat = {
_type: "BulletinCategory",
key: "rss_#{category}",
disable: false,
title: {:zh_tw => category},
created_at: Time.now,
updated_at: Time.now
}
categories["rss_#{category}"] = result = coll_cat.save(cat)
[result, categories]
end
end
# Get categories and id based on a given site number
def get_mongo_and_categories(site_number="0")
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
coll_bulletin = db["bulletins"]
coll_cat = db["bulletin_categories"]
categories = coll_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
[categories, coll_bulletin, coll_cat]
end
# Get categories
categories, coll_bulletin, coll_cat = get_mongo_and_categories
all.each do |bul| # Loop through all the items
category_id, categories = get_category_id(bul[:category], categories, coll_cat)
unless coll_bulletin.find_one(rss_link: bul[:link])
bulletin = { _type: "Bulletin",
postdate: bul[:date],
created_at: bul[:date],
updated_at: bul[:date],
is_checked: true,
is_pending: false,
is_rejected: false,
bulletin_category_id: category_id,
title: {:zh_tw => bul[:title]},
text: {:zh_tw => bul[:description]},
available_for_zh_tw: true,
rss_link: bul[:link] }
coll_bulletin.save(bulletin)
end
end
+91
View File
@@ -0,0 +1,91 @@
# encoding: utf-8
require 'rss'
require 'mongo'
AUTHORS = %w[ 學生事務處-學生住宿服務組
學生事務處-學生職業生涯發展中心
學生事務處-衛生保健及醫療中心
學生事務處-課外活動指導組
學生事務處-學生活動中心管理組
學生事務處-僑生及陸生輔導組
學生事務處-生活輔導組
學生事務處-軍訓組
學生事務處-學生心理輔導中心
學生事務處-學生事務處]
DB_BASE_NAME = "site"
all = []
continue = true
i = 1
while continue do
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
feed.items.size
feed.items.each do |item|
if AUTHORS.include?(item.author)
author = item.author.strip
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
all << {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
end
end
continue = false if feed.items.size < 100
end
i += 1
end
# Get corresponding category_id or create a new one
def get_category_id(category, categories, coll_cat)
if categories.keys.include? "rss_#{category}"
[categories["rss_#{category}"], categories]
else
cat = {
_type: "BulletinCategory",
key: "rss_#{category}",
disable: false,
title: {:zh_tw => category},
created_at: Time.now,
updated_at: Time.now
}
categories["rss_#{category}"] = result = coll_cat.save(cat)
[result, categories]
end
end
# Get categories and id based on a given site number
def get_mongo_and_categories(site_number="0")
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
coll_bulletin = db["bulletins"]
coll_cat = db["bulletin_categories"]
categories = coll_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
[categories, coll_bulletin, coll_cat]
end
# Get categories
categories, coll_bulletin, coll_cat = get_mongo_and_categories
all.each do |bul| # Loop through all the items
category_id, categories = get_category_id(bul[:category], categories, coll_cat)
unless coll_bulletin.find_one(rss_link: bul[:link])
bulletin = { _type: "Bulletin",
postdate: bul[:date],
created_at: bul[:date],
updated_at: bul[:date],
is_checked: true,
is_pending: false,
is_rejected: false,
bulletin_category_id: category_id,
title: {:zh_tw => bul[:title]},
text: {:zh_tw => bul[:description]},
available_for_zh_tw: true,
rss_link: bul[:link] }
coll_bulletin.save(bulletin)
end
end
+84
View File
@@ -310,4 +310,88 @@ namespace :migrate do
Rake::Task["web_link_url:web_link_url_i18n"].execute
end
task :save_users => :environment do
User.where(:email.not => /guest/).each{|s|s.save}
end
task :fix_bulletin_rss_available_lang => :environment do
Bulletin.all.each do |bull|
if bull.create_user_id.nil?
bull.update_attribute(:available_for_zh_tw, true)
end
end
end
task :fix_imported_rss => :environment do
categories = BulletinCategory.where(key: /rss_/).entries
unless categories.blank?
categories.each do |category|
bulletins = category.bulletins
unless bulletins.blank?
bulletins.each do |bulletin|
bulletin.update_attribute(:is_top, false) unless bulletin.is_top?
bulletin.update_attribute(:is_hot, false) unless bulletin.is_hot?
bulletin.update_attribute(:is_hidden, false) unless bulletin.is_hidden?
end
end
end
end
end
task :fix_tagged_ids => :environment do
Tag.all.each do |tag|
tag.taggings.each do |tagging|
tagged_ids = tagging.taggable.tagged_ids
unless tagged_ids.include?(tag.id.to_s)
tagged_ids << tag.id.to_s
tagging.taggable.update_attribute(:tagged_ids, tagged_ids)
end
end
end
end
task :clear_news_tags => :environment do
`mongo #{Mongoid.config.database.name} --eval "db.tags.remove({_type: {$ne: 'Tag'}})"`
end
task :add_missing_user_link => :environment do
User.all.each do |user|
user.role_ids.uniq!
user.sub_role_ids.uniq!
user.save
user.roles.each do |role|
unless role.user_ids.include?(user.id)
role.user_ids << user.id
role.save
end
end
user.sub_roles.each do |sub_role|
unless sub_role.user_ids.include?(user.id)
sub_role.user_ids << user.id
sub_role.save
end
end
end
Role.all.each do |role|
role.user_ids.uniq!
role.save
role.users.each do |user|
unless user.role_ids.include?(role.id)
user.role_ids << role.id
user.save
end
end
end
SubRole.all.each do |sub_role|
sub_role.user_ids.uniq!
sub_role.save
sub_role.users.each do |user|
unless user.sub_role_ids.include?(sub_role.id)
user.sub_role_ids << sub_role.id
user.save
end
end
end
end
end
+168
View File
@@ -0,0 +1,168 @@
# encoding: utf-8
namespace :mongo_files do
MODELS = { 'ad_image' => 'file',
'archive_file_multiple' => 'file',
'asset' => 'data',
'bulletin' => 'image',
'bulletin_file' => 'file',
'design' => 'zip_file',
'design_file' => 'file',
'gallery_image' => 'file',
'image' => 'file',
'lab_file' => 'file',
'location_info' => 'file',
'preview_file' => 'file',
'project_file' => 'file',
'research_file' => 'file',
'site' => 'default_image',
'stylesheet' => 'file_orig',
'user' => 'avatar',
'writing_book_file' => 'file',
'writing_conference_file' => 'file',
'writing_journal_file' => 'file',
'writing_patent_file' => 'file' }
IMAGE_UPLOADER_MODELS = %w[ad_image bulletin image site]
task :clean => :environment do
@files = Mongoid.database['fs.files']
@chunks = Mongoid.database['fs.chunks']
clean_duplicates
clean_unused
remove_objects
end
# Remove unused files from db
def clean_unused
db_array = @files.find().inject([]) do |db_files, file|
db_files << file['filename']
db_files
end
p "# of files in db: #{db_array.size}"
name_array = MODELS.inject([]) do |model_files, (model, type)|
model.classify.constantize.all.each do |item|
url = item.send(type).url
thumb_url = item.send(type).thumb.url rescue nil
if url && !url.eql?('sign-in-logo.png')
url = url.gsub('/gridfs/', '')
model_files << url
end
if thumb_url && !thumb_url.eql?('sign-in-logo.png')
thumb_url = thumb_url.gsub('/gridfs/', '')
model_files << thumb_url
end
end
model_files
end
p "# of files from uploaders: #{name_array.size}"
useless_files = db_array - name_array
p "# of unmatched files: #{useless_files.size}"
useless_files.each do |file|
id = @files.find_one('filename' => file)['_id']
@files.remove('_id' => id)
@chunks.remove('files_id' => id)
end
# p files.remove('filename' => { "$in" => useless_files})
end
# Remove duplicate files from db
def clean_duplicates
p "# of files in db: #{@files.count}"
file_hash = @files.find().sort({uploadDate: -1}).inject({}) do |db_files, file|
name = file['filename']
if db_files[name]
db_files[name] += [file['_id']]
else
db_files[name] = [file['_id']]
end
db_files
end
file_array = file_hash.inject([]) do |files, (key, value)|
files += value.drop(1) if value.size > 1
files
end
p "# of duplicate ids to delete: #{file_array.size}"
file_array.each do |id|
@files.remove('_id' => id)
@chunks.remove('files_id' => id)
end
end
task :file_size => :environment do
files = Mongoid.database['fs.files']
size_array = files.find().inject([]) do |size, file|
# size << [file['length'], file['filename']]
size << [file['filename'], file['length']]
size
end
size_array.sort.each do |pair|
p "#{pair[0]} - #{pair[1]}"
end
p size_array.size
end
def remove_objects
# Destroy writing_journals and writing_journal_files
Mongoid.database['writing_journals'].remove()
Mongoid.database['writing_journal_files'].remove()
db_array = @files.find().inject([]) do |db_files, file|
db_files << file['filename'] if file['filename'] =~ /writing_journal_file|news_bulletin_file|image\/image/
db_files
end
p db_array.size
db_array.each do |file|
id = @files.find_one('filename' => file)['_id']
@files.remove('_id' => id)
@chunks.remove('files_id' => id)
end
end
def remove_unlinked
# name_array = AdBanner.all.inject([]) do |files, banner|
# banner.ad_images.inject(files) do |image_files, image|
# url = image.file.url
# thumb_url = image.file.thumb.url rescue nil
# if url && !url.eql?('sign-in-logo.png')
# url = url.gsub('/gridfs/', '')
# image_files << url
# end
# if thumb_url && !thumb_url.eql?('sign-in-logo.png')
# thumb_url = thumb_url.gsub('/gridfs/', '')
# image_files << thumb_url
# end
# image_files
# end
# files
# end
name_array = Design.all.inject([]) do |files, design|
files += design.images.inject(files) do |image_files, image|
p image_files += get_url_and_thumb(image.file)
image_files
end
files
end
p name_array.size
end
def get_url_and_thumb(file)
url = file.url
thumb_url = file.thumb.url rescue nil
files = [url, thumb_url].inject([]) do |urls, current|
urls << current.gsub('/gridfs/', '') if current && !current.eql?('sign-in-logo.png')
urls
end
files
end
task :delete_rss_ann => :environment do
Bulletin.where(create_user_id: nil).destroy
end
end
+82 -4
View File
@@ -1,4 +1,5 @@
# encoding: utf-8
require 'erb'
namespace :site do
@@ -9,21 +10,26 @@ namespace :site do
Site.create( :school => 'RulingDigital University', :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ])
User.create!(:email=>'chris@rulingcom.com',:admin=>true,:user_id=>'chris',:password=>'password')
`mongo #{Mongoid.config.database.name} --eval "db.fs.chunks.ensureIndex({files_id: 1, n: 1})"`
puts "Congres you can now login within url"
puts 'Please upload design package (/admin/designs/upload_package ) and run rake site:necessary_data'
I18nVariable.create!( :document_class => 'language', :key => 'en', :en => 'English', :zh_tw => '英文' )
I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :zh_tw => '中文' )
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
end
task :create_logrotate => :environment do #Can remove after all products update
create_rulingcom_logrotate
end
task :necessary_data => :environment do
auto_setting
site = Site.first
site.title = 'RulingOrbit Demo Site'
site.save
site.update_attribute(:title,'RulingOrbit Demo Site')
site.update_attribute(:resque_namespace,@resque_namespace)
# home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁')
design = Design.first
site = Site.first
site.design = design
site.save
theme = design.themes.first
@@ -31,6 +37,78 @@ namespace :site do
home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"}
home.save
puts "Rember to restart server after you setup all sites for starting God"
end
task :start_auto_setting => :environment do
auto_setting
end
def auto_setting
puts "Enter your resque namespace[Orbit]:......"
@resque_namespace = STDIN.gets.gsub("\n",'')
@resque_namespace = APP_CONFIG['orbit'] if @resque_namespace.empty?
puts "Is this the only site [ Entry site? ] on this mechine?[Default No]:......"
site_is_alone = false
site_is_alone = STDIN.gets.gsub("\n",'')
site_is_alone = true if site_is_alone.downcase == 'yes'
puts "Is this a primary site?[Default No]:......"
site_is_primary = false
site_is_primary = STDIN.gets.gsub("\n",'')
site_is_primary = true if site_is_primary.downcase == 'yes'
puts "Traffic heavy?[Default No]:......"
traffic_heavy = false
traffic_heavy = STDIN.gets.gsub("\n",'')
traffic_heavy = true if traffic_heavy.downcase == 'yes'
@traffic_rate = traffic_heavy ? 2 : 1
if site_is_alone
@resque_workers = 5 * @traffic_rate #Entry Site
else
if site_is_primary
@resque_workers = 2 * @traffic_rate #Primary Site
else
@resque_workers = 1 * @traffic_rate #Secondary Site
end
end
resque_setting = ERB.new(File.new("lib/template/setting/resque.god.erb").read)
File.open("config/resque.god", 'w') { |file| file.write(resque_setting.result) }
resque_schedule_setting = ERB.new(File.new("lib/template/setting/resque_schedule.god.erb").read)
File.open("config/resque_schedule.god", 'w') { |file| file.write(resque_schedule_setting.result) }
if site_is_primary
solr_setting = ERB.new(File.new("lib/template/setting/solr.god.erb").read)
File.open("config/solr.god", 'w') { |file| file.write(solr_setting.result) }
create_rulingcom_logrotate
end
end
def create_rulingcom_logrotate
`sudo mkdir -p /var/log/rulingcom` unless File.directory? "/var/log/rulingcom"
@project_folder = ENV["PWD"]
puts "Is your Orbit folder: #{@project_folder} (If YES => Press enter,or enter your path)"
user_enter_project_folder = STDIN.gets.gsub("\n",'')
@project_folder = user_enter_project_folder unless user_enter_project_folder.empty?
@user_home_folder = ENV["HOME"]
puts "Is your Home folder: #{@user_home_folder} (If YES => Press enter,or enter your path)"
user_enter_home_folder = STDIN.gets.gsub("\n",'')
@user_home_folder = user_enter_home_folder unless user_enter_home_folder.empty?
logrotate_setting = ERB.new(File.new("lib/template/setting/rulingcom_log.erb").read)
File.open("#{@project_loc}/tmp/logrotate_setting", 'w') { |file| file.write(logrotate_setting.result) }
`sudo cp #{@project_loc}/tmp/logrotate_setting /etc/logrotate.d/rulingcom`
`logrotate -v -f /etc/logrotate.conf`
end
end
+14
View File
@@ -0,0 +1,14 @@
# encoding: utf-8
namespace :system_check do
task :god_can_start => :environment do
unless File.directory? "/var/log/rulingcom"
puts "Creating Rulingcom log folder"
`sudo mkdir -p /var/log/rulingcom`
end
end
task :set_resque_namespace,[:namespace] => :environment do |t,args|
site = Site.first
site.resque_namespace = args[:namespace]
site.save
end
end
+10 -10
View File
@@ -9,17 +9,17 @@ namespace :web_link_url do
@weblinks.each do |wl|
if wl.url.nil?
if wl.url_translations.is_a?(String)
@wlurl = wl.url_translations
wl.url_translations = {}
wl.url_translations["zh_tw"] = @wlurl
wl.url_translations["en"] = @wlurl
@wlurl = wl.url_translations
wl.url_translations = {}
wl.url_translations["zh_tw"] = @wlurl
wl.url_translations["en"] = @wlurl
wl.save
wl.save
else
puts 'no data'
@@ -4,33 +4,32 @@ user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
development_uid = ''
development_gid = ''
num_workers = rails_env == 'production' ? 5 : 2
num_workers = rails_env == 'production' ? <%= @resque_workers %> : 1
num_workers.times do |num|
God.watch do |w|
w.dir = rails_root
w.name = "worker-#{num}"
w.group = 'resque'
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-worker-#{num}"
w.group = 'rulingcom'
w.interval = 30.seconds
queue = case num
when 0
'critical'
when 1..2
when 0..2
'high,low'
when 3..num_workers
'low'
end
w.env = {"QUEUE"=>queue, "RAILS_ENV"=>rails_env}
w.start = "HOME=#{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:work"
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
w.env = {"RAILS_ENV"=>rails_env,"PIDFILE" => w.pid_file ,"HOME"=>user_home, "QUEUE"=>queue, "RAILS_ENV"=>rails_env }
w.start = "rake -f #{rails_root}/Rakefile resque:work"
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
w.uid = (rails_env == 'production' )? "root" : development_uid
w.gid = (rails_env == 'production' )? "root" : development_gid
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
# restart if memory gets too high
w.transition(:up, :restart) do |on|
@@ -0,0 +1,59 @@
rails_env = ENV['RAILS_ENV'] || "production"
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/..'
user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
development_uid = ''
development_gid = ''
God.watch do |w|
w.dir = rails_root
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-scheduler"
w.group = 'rulingcom'
w.interval = 10.seconds
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
w.env = {"QUEUE"=>"*", "RAILS_ENV"=>rails_env,"HOME"=>user_home, "RAILS_ENV"=>rails_env}
w.start = "rake -f #{rails_root}/Rakefile resque:scheduler"
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
w.uid = (rails_env == 'production' )? "root" : development_uid
w.gid = (rails_env == 'production' )? "root" : development_gid
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
# restart if memory gets too high
w.transition(:up, :restart) do |on|
on.condition(:memory_usage) do |c|
c.above = 350.megabytes
c.times = 2
end
end
# determine the state on startup
w.transition(:init, { true => :up, false => :start }) do |on|
on.condition(:process_running) do |c|
c.running = true
end
end
# determine when process has finished starting
w.transition([:start, :restart], :up) do |on|
on.condition(:process_running) do |c|
c.running = true
c.interval = 5.seconds
end
# failsafe
on.condition(:tries) do |c|
c.times = 5
c.transition = :start
c.interval = 5.seconds
end
end
# start if process is not running
w.transition(:up, :start) do |on|
on.condition(:process_running) do |c|
c.running = false
end
end
end
+33
View File
@@ -0,0 +1,33 @@
/var/log/rulingcom/*.log {
daily
dateext
compress
rotate 30
}
#Resque
<%= "#{@project_folder}/nginx/logs/access.log" %>{
daily
dateext
compress
rotate 30
}
#DB log
/var/log/mongodb{
daily
dateext
compress
rotate 30
}
#Orbit
<%= "#{@project_folder}/log/*production.log" %>{
daily
dateext
compress
rotate 30
}
# end of Orbit,EXTEND IF NEEDED
#Remember to save this file as /etc/logrotate.d/rulingcom
@@ -6,16 +6,19 @@ development_gid = ''
God.watch do |w|
w.dir = rails_root
w.name = "scheduler"
w.group = 'resque'
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>sunspot-solr"
w.group = 'rulingcom'
w.pid_file = "#{rails_root}/solr/pids/production/sunspot-solr-production.pid"
w.interval = 30.seconds
w.env = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env}
w.start = "HOME= #{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:scheduler"
w.env = {"RAILS_ENV"=>rails_env,"HOME"=>user_home ,"RAILS_ENV"=>rails_env}
w.start = "rake -f #{rails_root}/Rakefile sunspot:solr:start"
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
w.keepalive
w.uid = (rails_env == 'production' )? "root" : development_uid
w.gid = (rails_env == 'production' )? "root" : development_gid
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
# restart if memory gets too high
w.transition(:up, :restart) do |on|
@@ -0,0 +1,78 @@
.mega_tab_block {
clear: both;
position: relative;
}
.mega_tab_block h3 {
font: 22px/100% 'arial',sans-serif;
margin: 0 0 10px;
padding: 0;
}
.mega_tab_block .pagination {
float: left;
height: auto;
margin: 10px 0 0;
width: auto;
}
.mega_tab_block .pagination a {
background: none repeat scroll 0 0 #EEEEEE;
display: block;
float: left;
margin: 0 5px 0 0;
padding: 10px;
}
.tag_block {
clear: both;
margin: 0 0 20px;
position: relative;
}
.mega_tab_block .tag_list {
background: none repeat scroll 0 0 #EEEEEE;
margin: 0;
overflow: hidden;
padding: 0 0 0 5px;
}
.mega_tab_block .tag_list li {
float: left;
list-style: none outside none;
}
.mega_tab_block .tag_list li a {
background: none repeat scroll 0 0 #DDDDDD;
float: left;
margin: 0 5px 0 0;
padding: 10px;
}
.news_block {
clear: both;
margin: 0 0 20px;
overflow: hidden;
position: relative;
}
.mega_tab_block .news_list {
margin: 0;
padding: 0;
}
.mega_tab_block .news_list li {
list-style: none outside none;
padding: 5px 0;
}
.links_block {
clear: both;
overflow: hidden;
position: relative;
}
.mega_tab_block .links_list {
margin: 0;
padding: 0;
}
.mega_tab_block .links_list li {
list-style: none outside none;
padding: 5px 0;
}
@@ -26,6 +26,7 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
end
def index
@item = Page.find(params[:page_id]) rescue nil
if @item
if @item.frontend_data_count
@@ -60,7 +61,11 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
else
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc( :is_top, :postdate).page( params[:page_main]).per(@page_num)
end
delayed_impressionist(@tag) if @tag
if params["tag_id"]
params["tag_id"].each do |tag_id|
delayed_impressionist(Tag.find tag_id) rescue nil
end
end
end
end
@@ -66,14 +66,75 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
end
def bulletins_and_web_links
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
@title = @part.title_translations[I18n.locale.to_s]
if !@part.blank? and @part.widget_data_count
@page_num = @part.widget_data_count
else
@page_num = 5
end
date_now = Time.now
if !params[:tag_id].blank?
@tags = Tag.any_in(:_id => params[:tag_id]).asc(:created_at)
elsif params[:tag_id].blank? and !@part.tag.blank?
@tags = Tag.any_in(:_id => @part.tag).asc(:created_at)
else
@ModuleApp_b = ModuleApp.first(:conditions => {:key=>'announcement'})
@tags = Tag.where(:module_tag_id => @ModuleApp_b.id).asc(:created_at)
end
@selected_tag = Tag.find(params[:id]).first rescue @tags[0]
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
if @part.widget_style == 'bulletins_and_web_links'
@ModuleApp_w = ModuleApp.first(:conditions => {:key=>'web_resource'})
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp_w.id})
@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
def reload_bulletins
@selected_tag = Tag.find(params[:tag_id])
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => params[:tag_id]).where(:is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, sort).page(params[:page]).per(5) rescue nil
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
@title = @part.title_translations[I18n.locale.to_s]
if !@part.blank? and @part.widget_data_count
@page_num = @part.widget_data_count
else
@page_num = 5
end
date_now = Time.now
@selected_tag = Tag.find(params[:tag_id]).first
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
end
def reload_web_links
@selected_tag = Tag.find(params[:tag_id])
@web_links = WebLink.where(:name => @selected_tag.name).where(:is_hidden => false).desc(:is_top, sort).available_for_lang(I18n.locale).page(params[:page]).per(5) rescue nil
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
if !@part.blank? and @part.widget_data_count
@page_num = @part.widget_data_count
else
@page_num = 5
end
date_now = Time.now
@selected_tag = Tag.find(params[:tag_id]).first
@ModuleApp = ModuleApp.first(:conditions => {:key=>'web_resource'})
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp.id})
@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
def bulletins_side_bar
@@ -14,7 +14,7 @@ class Bulletin
include OrbitTag::Taggable
taggable
is_impressionable :counter_cache => { :column_name => :view_count }
is_impressionable #:counter_cache => { :column_name => :view_count }
field :title, localize: true
field :subtitle, localize: true
@@ -40,6 +40,7 @@ class Bulletin
field :not_checked_reason
field :public, :type => Boolean, :default => true
field :rss_link
scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false)
scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) }
@@ -36,6 +36,11 @@
</div>
</div>
<% end %>
<% unless @bulletin.rss_link.blank? %>
<div>
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
</div>
<% end %>
</div>
<%= share_links(@bulletin, 'announcement') %>
@@ -1,10 +1,10 @@
<% @bulletins.each do |bulletin| %>
<li>
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :tag_id => @selected_tag.id ) %>
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :part_id => params[:part_id], :tag_id => [@selected_tag.id] ) %>
</li>
<% end %>
<div class='pagination'>
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'previous' %>
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'next' %>
</div>
@@ -1,3 +1,3 @@
<li>
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:id => tag.id), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:inner=>true, :id => [tag.id], :part_id=>params[:part_id]), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
</li>
@@ -5,6 +5,6 @@
<% end %>
<div class='pagination'>
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
</div>
@@ -0,0 +1,36 @@
<div class="mega_tab_block">
<div class="tag_block">
<ul id='bulletins_web_links_tags' class="tag_list">
<%= render :partial => 'tag', :collection => @tags %>
</ul>
</div>
<div class="news_block">
<h3 class="news_title2">
<%#= link_to t("announcement.bulletins"), panel_announcement_front_end_bulletins_path, :class => 'more' %>
<%= link_to @title, panel_announcement_front_end_bulletins_path, :class => 'more' %>
</h3>
<ul id='bulletins_web_links_bulletins' class="news_list">
<%= render 'bulletins' if @bulletins %>
</ul>
</div>
<% if @part.widget_style == 'bulletins_and_web_links' %>
<div class="links_block">
<h3 class="links_title"><%= t(:related_links) %></h3>
<ul id='bulletins_web_links_web_links' class="links_list">
<%= render 'web_links' if @web_links %>
</ul>
</div>
<% end %>
</div>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "news_link" %>
<% end %>
<%= stylesheet_link_tag "announcement/bulletins_and_web_links" %>
@@ -0,0 +1,3 @@
$('#bulletins_web_links_tags').html("<%= j render :partial => 'tag', :collection => @tags %>")
$('#bulletins_web_links_bulletins').html("<%= j render 'bulletins' if @bulletins %>")
$('#bulletins_web_links_web_links').html("<%= j render 'web_links' if @web_links %>")
+2 -1
View File
@@ -16,6 +16,7 @@ en:
bulletin_category_with_title: Bulletin Category with Title
postdate: Post Date
title: Title
subtitle: SubTitle
editing_announcement: Edit Announcement
editing_announcement_category: Edit Category
error:
@@ -34,6 +35,6 @@ en:
update_bulletin_category_success: Update Category Successfully
url: URL
widget:
bulletins_and_web_links: Bulletins and Web Resources
bulletins_and_web_links: Differential Nav.
index: Index
search: Search
@@ -16,6 +16,7 @@ zh_tw:
bulletin_category_with_title: 公告類別及標題
postdate: 張貼日期
title: 標題
subtitle: 副標題
editing_announcement: 編輯類別
editing_announcement_category: 編輯類別
error:
@@ -34,6 +35,6 @@ zh_tw:
update_bulletin_category_success: 更新類別成功
url: 連結位置
widget:
bulletins_and_web_links: 索引
bulletins_and_web_links: 分眾頁籤
index: 索引
search: 搜尋
+11 -4
View File
@@ -23,18 +23,20 @@ module Announcement
end
category ["BulletinCategory"]
data_count 3..10
data_count 1..10
taggable
widgets do
default_widget do
query 'Bulletin.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
enable ["typeA","typeC"]
sorting 'desc(:postdate)'
query 'Bulletin.available_for_lang(I18n.locale).any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
enable ["typeA","typeB_style3","typeC"]
image :image
field :postdate
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self}
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self,:preview=>true}
link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:bulletin_category,:id]}}
field :subtitle
link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
end
@@ -50,6 +52,11 @@ module Announcement
widget_i18n "announcement.widget.search"
end
customize_widget "bulletins_and_web_links" do
widget_i18n "announcement.widget.bulletins_and_web_links"
style ["bulletins_and_links","bulletins_only"]
end
# item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"]
# item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
end
@@ -1,28 +0,0 @@
class Panel::Ask::FrontEnd::AskQuestionsController < OrbitWidgetController
layout false
def initialize
super
@app_title = 'ask'
end
def index
@ask_question = AskQuestion.new
end
def create
@ask_question = AskQuestion.new(params[:ask_question])
if verify_recaptcha model: @ask_question, private_key: '6Lfl7OESAAAAAD4rl5S16-zjt5yiKNYJ6jsqdwmL'
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowlegement.new
@ask_question.save
AskAdmin.all.each do |ask_admin|
Resque.enqueue(SendAskNoticeMail, ask_admin.id, @ask_question.id)
end
end
respond_to do |format|
format.js
end
end
end
@@ -1,11 +0,0 @@
<% if @ask_question.errors.empty? %>
$('html,body').scrollTop(0);
$('#acknowledgement')
.html('<%= j simple_format(@ask_acknowledgement.content) %>')
.fadeIn(600)
.delay(3000)
.fadeOut(600);
<% else %>
alert('<%= @ask_question.errors.full_messages.join('\n') %>');
Recaptcha.reload()
<% end %>
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 295 files, more files were not shown because too many files have changed in this diff. Show more