Compare commits

...
Author SHA1 Message Date
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
292 changed files with 3387 additions and 387 deletions

No files matched your search

+5 -1
View File
@@ -4,6 +4,8 @@
.rvmrc .rvmrc
Gemfile.lock Gemfile.lock
Procfile
log/*
db/*.sqlite3 db/*.sqlite3
log/*.log log/*.log
@@ -14,7 +16,9 @@ public/uploads/**/*
solr/data solr/data
tmp/**/* tmp/**/*
uploads/**/* uploads/**/*
config/*.god
log/*.gz
tmp/restart.txt
*.swp *.swp
*.pid *.pid
*.lck *.lck
+7 -3
View File
@@ -14,7 +14,11 @@ gem 'execjs'
gem 'jquery-rails', '2.1.4' gem 'jquery-rails', '2.1.4'
gem 'jquery-ui-rails' gem 'jquery-ui-rails'
gem "select2-rails", '3.3.1' 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 "memcached", "~> 1.4.3"
# gem "memcache-client" # gem "memcache-client"
@@ -35,7 +39,7 @@ gem 'resque-scheduler' # job scheduling
gem 'resque-restriction' gem 'resque-restriction'
#gem 'rb-readline' #gem 'rb-readline'
# gem 'ruby-debug19' # gem 'ruby-debug19'
gem 'rubyzip' gem 'rubyzip','0.9.9'
gem 'sunspot_mongo' gem 'sunspot_mongo'
gem 'sunspot_solr' gem 'sunspot_solr'
@@ -46,7 +50,7 @@ gem 'sinatra'
gem 'sprockets' gem 'sprockets'
gem 'social-share-button' gem 'social-share-button'
gem 'tinymce-rails' gem 'tinymce-rails', '3.5.8.3'
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux") gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux") gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
gem 'mongoid-encryptor', :require => 'mongoid/encryptor' 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_self
*= require social-share-button *= 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 end
def query_for_default_widget def query_for_default_widget
@ori_class_name = @default_widget["query"].split('.')[0]
@ori_class_name = @default_widget["query"].split('.')[0] @result = eval(@default_widget["query"])
result = nil
result_objects = nil
if !params["tag_id"].blank? if !params["tag_id"].blank?
if params["category_id"].blank? #has tag no cate 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 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 end
elsif params["category_id"].blank? #no tag no cate elsif params["category_id"].blank? #no tag no cate
result = eval(@default_widget["query"])
else #no tag has cate 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 end
result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate) eval("@result.#{@default_widget[:sorting_query]}")
end end
def search_result def search_result
@@ -40,9 +38,13 @@ class DefaultWidgetController< OrbitWidgetController
def default_widget def default_widget
@search = params["search_query"].blank? ? false : true @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 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}})") 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 else
@tag_class = nil @tag_class = nil
@default_widget = @page_part.module_app.get_default_widget @default_widget = @page_part.module_app.get_default_widget
@@ -91,9 +93,9 @@ class DefaultWidgetController< OrbitWidgetController
end end
def get_category_field_name 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| @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 end
nil nil
end end
@@ -7,4 +7,10 @@ class OrbitFrontendComponentController< ApplicationController
@app_title = request.fullpath.split('/')[2] @app_title = request.fullpath.split('/')[2]
end 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 end
+34 -30
View File
@@ -44,29 +44,13 @@ class PagesController < ApplicationController
# render :file => "#{Rails.root}/public/404.html", :status => :not_found # render :file => "#{Rails.root}/public/404.html", :status => :not_found
#end #end
end end
def convert_array_param(key,array)
array.collect{|t| "#{key}[]=#{t}"}.join("&")
end
def index_from_link def index_from_link
url = "/#{@item.path}" url = "/#{@item.path}"
options = '' options = ''
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank? options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
if params[:category_id].is_a? Array options << "#{options.blank? ? '?' : '&'}#{convert_array_param('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?
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? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank? options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank? options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
uri = URI::escape(url + options) uri = URI::escape(url + options)
@@ -78,8 +62,8 @@ class PagesController < ApplicationController
url = "/#{@item.path}" url = "/#{@item.path}"
options = '' options = ''
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank? 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? ? '?' : '&'}#{convert_array_param('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('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].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? ? '?' : '&'}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? 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] elsif params[:same_page_id]
@item = Item.find(params[:same_page_id]) @item = Item.find(params[:same_page_id])
else else
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]] category_ids = Array(params[:category_id]) unless params[:category_id].nil?
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]] tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
module_app = ModuleApp.first(:conditions => {:key => params[:app_name]}) 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? 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.where(default_query.merge(specific_categories).merge(specific_tags)).first
@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(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? 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? 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 end
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank? @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(default_query.merge(nil_categories).merge(nil_tags)).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item @item = Item.where(default_query).first unless @item
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
end end
raise PageError,'Missing Frontend Page' if @item.nil? raise PageError, 'Missing Frontend Page' if @item.nil?
end end
def save_from_no_lang_for_page def save_from_no_lang_for_page
+25 -18
View File
@@ -1,5 +1,5 @@
module ApplicationHelper module ApplicationHelper
include OrbitApp::Module::VisitorCounter
FLASH_NOTICE_KEYS = [:error, :notice, :warning] 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('?') request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
end end
def delayed_impressionist(object) def delayed_impressionist(item)
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object) 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
def check_user_role_enable(attribute_fields) def check_user_role_enable(attribute_fields)
@@ -242,25 +243,27 @@ module ApplicationHelper
"#{t(:view_count)}: #{object.view_count}" "#{t(:view_count)}: #{object.view_count}"
end end
def display_visitors(options={}) # def display_visitors(options={})
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count # # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
end # impressions = Impression.where(options).and(:referrer.ne => nil)
# impressions.map{|i| i[:session_hash]}.uniq.count
# end
def display_visitors_today # def display_visitors_today
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
end # end
def display_visitors_this_week # def display_visitors_this_week
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
end # end
def display_visitors_this_month # def display_visitors_this_month
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
end # end
def display_visitors_this_year # def display_visitors_this_year
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year}) # display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
end # end
def display_date_time(object) def display_date_time(object)
object.strftime("%Y-%m-%d %H:%M") 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]} link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
end end
def convert_array_param(key, array)
Array(array).collect{|t| "#{key}[]=#{t}"}.join("&")
end
end end
+16
View File
@@ -3,6 +3,13 @@ module DefaultWidgetHelper
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}") I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
end 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) def link_to_field(row_data,field, switch, options=nil)
method_ary = @page_part.module_app.widget_fields_link_method method_ary = @page_part.module_app.widget_fields_link_method
field = field.to_sym field = field.to_sym
@@ -77,4 +84,13 @@ module DefaultWidgetHelper
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class]) content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
end end
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 end
+12 -4
View File
@@ -2,16 +2,24 @@ class BackupServer
@queue = :high @queue = :high
def self.perform() def self.perform()
#CronMail.time_check("Going to backup Orbit").deliver
dbhost = Mongoid.config.database.connection.primary.join ':' dbhost = Mongoid.config.database.connection.primary.join ':'
dbname = Mongoid.config.database.name dbname = Mongoid.config.database.name
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M") dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ] %x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
%x[rm #{archive_db_list_path}] Dir.foreach('tmp') do |item|
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}] 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}" OrbitLogger.info "DB backup done Path:#{dbdirectory}"
end end
end end
+10 -25
View File
@@ -1,36 +1,21 @@
class DashboardCounter < Resque::Plugins::RestrictionJob class DashboardCounter < Resque::Plugins::RestrictionJob
extend OrbitApp::Module::VisitorCounterEval
@queue = :high @queue = :high
def self.perform(*args) def self.perform(*args)
site = Site.first site = Site.first
obj = new(*args) obj = new(*args)
site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week site.visitor_counters[:total] = display_visitors
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month site.visitor_counters[:today] = display_visitors_today
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year 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 site.save
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}" OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
end
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
def display_visitors(options={}) #and the site model will need a field call dashboard_counter to complete this job.
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})
end end
end end
+50 -6
View File
@@ -1,7 +1,51 @@
class DelayedImpressionist class DelayedImpressionist
@queue = :low def self.before_filter(*args)
def self.perform(object) return
impressionist(object) end
true
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 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() def self.perform()
Tag.all.each do |tag| 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 end
OrbitLogger.info "UpdateTagCloud Done" OrbitLogger.info "UpdateTagCloud Done"
end 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 def sorted_tags_for_cloud
temp_tags = {} temp_tags = {}
self.tags.each{ |tag| self.tags.each{ |tag|
temp_tags.merge!({tag => Tag.get_impressionist(tag)}) temp_tags.merge!({tag => tag.cloud_view_count})
} }
if !temp_tags.blank? if !temp_tags.blank?
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse 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 Impressionist::Impressionable
include ParserFrontEnd include ParserFrontEnd
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable #:counter_cache => { :column_name => :view_count }
field :content, localize: true field :content, localize: true
field :app_frontend_url field :app_frontend_url
+3 -1
View File
@@ -18,6 +18,7 @@ class Site
field :title_always_on, :type => Boolean, :default => false field :title_always_on, :type => Boolean, :default => false
field :dashbroad_allow_visitor, :type => Boolean, :default => false field :dashbroad_allow_visitor, :type => Boolean, :default => false
field :mail_settings, :type => Hash 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 :disk_space, :type => String
field :system_package_info, :type => Hash,:default=>{} field :system_package_info, :type => Hash,:default=>{}
@@ -28,10 +29,11 @@ class Site
mount_uploader :default_image, ImageUploader mount_uploader :default_image, ImageUploader
field :search,:type => Hash field :search,:type => Hash
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
field :title, localize: true field :title, localize: true
field :footer, localize: true field :footer, localize: true
field :sub_menu, 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 field :mobile_on, :type => Boolean, :default => false
+1 -25
View File
@@ -8,7 +8,7 @@ class Tag
include Mongoid::Timestamps include Mongoid::Timestamps
include Impressionist::Impressionable include Impressionist::Impressionable
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable #:counter_cache => { :column_name => :view_count }
field :name, localize: true field :name, localize: true
field :view_count, :type => Integer, :default => 0 field :view_count, :type => Integer, :default => 0
@@ -17,30 +17,6 @@ class Tag
belongs_to :module_tag, polymorphic: true belongs_to :module_tag, polymorphic: true
has_many :taggings, dependent: :destroy 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 protected
def self.get_impressionist(item_tag = self) def self.get_impressionist(item_tag = self)
+5 -10
View File
@@ -3,7 +3,7 @@ class User
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable #, :timeoutable devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :timeoutable
mount_uploader :avatar, AvatarUploader mount_uploader :avatar, AvatarUploader
@@ -42,7 +42,6 @@ class User
before_create :initialize_desktop before_create :initialize_desktop
before_save :rebuild_status_record before_save :rebuild_status_record
before_save :save_roles
scope :remote_account, where(:nccu_id.ne => nil) scope :remote_account, where(:nccu_id.ne => nil)
scope :not_guest_user, all_of(:name.ne => "guest") scope :not_guest_user, all_of(:name.ne => "guest")
@@ -89,9 +88,9 @@ class User
var[:id].each do |id,val| var[:id].each do |id,val|
# binding.pry if id == '5052c5b22b5c49ab02000004' # binding.pry if id == '5052c5b22b5c49ab02000004'
if (val=="true") 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") elsif(val=="false")
self.roles << Role.find(id) self.role_ids += Array(id)
end end
end end
end end
@@ -106,9 +105,9 @@ class User
# binding.pry if id == '5052c5b22b5c49ab02000004' # binding.pry if id == '5052c5b22b5c49ab02000004'
if ( self.roles.include?(@roid) == false or val=="true") 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") elsif(val=="false")
self.sub_roles << SubRole.find(id) self.sub_role_ids += Array(id)
end end
end end
@@ -273,10 +272,6 @@ class User
end end
protected protected
def save_roles
# self.roles = self.sub_roles.collect{|t| t.role}.uniq
self.roles = self.roles.uniq
end
def rebuild_status_record def rebuild_status_record
self.status_record = {} self.status_record = {}
-1
View File
@@ -8,6 +8,5 @@
</table> </table>
<div class="form-actions form-fixed pagination-right"> <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' %> <%= 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> </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" %> <%= render :partial=> "widget_ext_options" %>
</div> </div>
</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(: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('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('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 -%>
<% 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"> <div class="default_widget_type_A">
<table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" > <table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" >
<thead> <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| %>
<tr> <tr>
<% @frontend_field_names.each_with_index do |field,index|%> <% @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?%> <%= content_tag(:th, content_tag(:span, get_field_header(field), class: @frontend_classes[index])) unless field.blank? %>
<% end %> <% end %>
</tr> </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> </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"> <ul class="default_widget_list">
<% @data.each do |row_data| %> <% @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"> <div class="img app-pic">
<%= image_tag row_data.send(@widget_image_field)%> <%= image_tag row_data.send(@widget_image_field) %>
</div> </div>
<div class="wrap"> <div class="wrap">
<% @frontend_field_names.each_with_index do |field,index|%> <% @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(: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 %>
</div> </div>
<% end %> <% 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"> <div class="img app-pic">
<%= image_tag @data.first.send(@widget_image_field)%> <%= image_tag @data.first.send(@widget_image_field) %>
</div> </div>
<ul class="default_widget_list"> <ul class="default_widget_list">
<% @data.each do |row_data| %> <% @data.each do |row_data| %>
<%= content_tag(:li) do %> <%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
<% @frontend_field_names.each_with_index do |field,index|%> <% @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(: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 %> <% end %>
<% end %> <% end %>
+3 -5
View File
@@ -3,9 +3,7 @@
<% end %> <% end %>
<ul> <ul>
<li>總機電話:<a href="tel:+886229393091">02-29393091</a></li> <li>總務處電話:<a href="tel:+886229393091">02-29393091</a></li>
<li>傳真:02-29379611</li> <li>總務處傳真:02-29379611</li>
<li>緊急重大事件通聯窗口:校內分機 66119、66110</li> <li>總務處單一窗口 李梅森專員:<a href="tel:+886233662233">02-33662233</a></li>
<li>總值日室:<a href="tel:+88229387132">02-29387132</a></li>
<li>駐警衛室:<a href="tel:+88229387129">02-29387129</a></li>
</ul> </ul>
+1 -1
View File
@@ -5,6 +5,6 @@
<div id='map_canvas'></div> <div id='map_canvas'></div>
<script type='text/javascript'> <script type='text/javascript'>
var $map_center = "24.987449, 121.576117" var $map_center = "25.015205, 121.535491"
var $map_zoom = 17 var $map_zoom = 17
</script> </script>
+1
View File
@@ -3,6 +3,7 @@ defaults: &defaults
store_ip: 'redmine.rulingcom.com:3001' store_ip: 'redmine.rulingcom.com:3001'
orbit: 'Orbit' orbit: 'Orbit'
ruling_digital: 'RulingDigital' ruling_digital: 'RulingDigital'
backup_keep_for_days: 30
development: development:
<<: *defaults <<: *defaults
+1 -1
View File
@@ -3,7 +3,7 @@ require 'resque_scheduler/server'
# require 'yaml' # require 'yaml'
Resque.redis = 'localhost:6379' 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, # If you want to be able to dynamically change the schedule,
# uncomment this line. A dynamic schedule can be updated via the # uncomment this line. A dynamic schedule can be updated via the
+2
View File
@@ -272,6 +272,8 @@ en:
setting: Mail settings setting: Mail settings
tls: TLS tls: TLS
user_name: User Name user_name: User Name
mail_cron: Scheduled Email
mail_cron_log: Email Log
manager: Manager manager: Manager
markup: Markup markup: Markup
markup_options: Markup options markup_options: Markup options
+1 -1
View File
@@ -9,5 +9,5 @@ en:
home: Home home: Home
language: Language language: Language
location: Location location: Location
location_description: '<h3>This University</h3>No.101,Sec. 2, Jiafeng S Road, Zhubei City, Hsinchu County 302, Taiwan' location_description: '<h3>OFFICE OF GENERAL AFFAIRS, NTU</h3>No. 1, Sec. 4, Roosevelt Road, Taipei, 10617 Taiwan (R.O.C)'
page: Page page: Page
+1 -1
View File
@@ -9,5 +9,5 @@ zh_tw:
home: 首頁 home: 首頁
language: 語言 language: 語言
location: 地理位置 location: 地理位置
location_description: '<h3>本大學</h3>302新竹縣竹北市嘉豐南路二段101號' location_description: '<h3>臺灣大學總務處 版權所有</h3>10617 臺北市大安區羅斯福路四段一號'
page: 頁面 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: 電子郵件設定 setting: 電子郵件設定
tls: 電子郵件TLS tls: 電子郵件TLS
user_name: 電子郵件帳號 user_name: 電子郵件帳號
mail_cron: 待寄Email
mail_cron_log: Email發送記錄
manager: 管理者 manager: 管理者
markup: 輸入模式 markup: 輸入模式
markup_options: 標註選項 markup_options: 標註選項
+2 -2
View File
@@ -8,7 +8,7 @@ defaults: &defaults
development: development:
<<: *defaults <<: *defaults
database: demo_site_development database: test_site
test: test:
<<: *defaults <<: *defaults
database: test_site database: test_site
@@ -21,4 +21,4 @@ production:
# password: <%= ENV['MONGOID_PASSWORD'] %> # password: <%= ENV['MONGOID_PASSWORD'] %>
# database: <%= ENV['MONGOID_DATABASE'] %> # database: <%= ENV['MONGOID_DATABASE'] %>
<<: *defaults <<: *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: update_tag_cloud:
cron: 0 0 [0,12] * * * cron: 0 30 2 * * *
class: UpdateTagCloud class: UpdateTagCloud
args: args:
description: UpdateTagCloud description: UpdateTagCloud
@@ -8,4 +20,16 @@ generate_system_summary:
cron: 0 0 12 * * * cron: 0 0 12 * * *
class: GenerateSystemSummary class: GenerateSystemSummary
args: 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' get 'delete'
end end
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_categories
resources :asset_tags resources :asset_tags
resources :app_auths 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 @request = req
params.delete :inner params.delete :inner
@params = params @params = params
params_str = "?"
params_str ="?"
params.each do |index,param| params.each do |index,param|
if param.is_a?(Array) and !param.blank? if param.is_a?(Array) and !param.blank?
params_str << "&" unless params_str.eql?("?")
params_str << param.collect{|t| "#{index}[]=#{t}"}.join("&") params_str << param.collect{|t| "#{index}[]=#{t}"}.join("&")
params.delete index params.delete index
end end
end end
params_str = params_str + (params_str.eql?("?") ? params.to_param : "&#{params.to_param}" ) params_str = params_str + (params_str.eql?("?") ? params.to_param : "&#{params.to_param}" )
content_tag :div,:class=> 'more' do content_tag :div,:class=> 'more' do
link_to I18n.t(@more_link[:label_i18n]),[eval("#{@more_link[:path_method]}"),params_str].join() 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) def initialize(&block)
@query = nil @query = nil
@image = nil @image = nil
@sorting_query = 'desc(:created_at)'
@more_link = {} @more_link = {}
@fields = [] @fields = []
@enabled_styles = STYLE @enabled_styles = STYLE
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
end end
def sorting(query)
@sorting_query = query
end
def enable(args) def enable(args)
@enabled_styles = args @enabled_styles = args
end end
@@ -122,7 +127,7 @@ module OrbitApp
end end
def to_module_app_format 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 end
def link_field(field_name,setting) def link_field(field_name,setting)
+1 -3
View File
@@ -43,6 +43,7 @@ module OrbitTag
def tags=(tag_ids) def tags=(tag_ids)
ids = [tag_ids].flatten ids = [tag_ids].flatten
tag_ids.delete('') tag_ids.delete('')
self.tagged_ids = tag_ids
ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id} ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
tag_ids.each do |tag_id| tag_ids.each do |tag_id|
unless ids.include? tag_id unless ids.include? tag_id
@@ -58,9 +59,6 @@ module OrbitTag
def tag_ids=(ids) def tag_ids=(ids)
self.tags = ids self.tags = ids
ids = [ids].flatten
ids.delete('')
self.tagged_ids = ids
end end
private private
+84
View File
@@ -310,4 +310,88 @@ namespace :migrate do
Rake::Task["web_link_url:web_link_url_i18n"].execute Rake::Task["web_link_url:web_link_url_i18n"].execute
end 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 end
+183
View File
@@ -0,0 +1,183 @@
# 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]
# ad_banner
# bulletin
# design
# site
task :clean => :environment do
@files = Mongoid.database['fs.files']
@chunks = Mongoid.database['fs.chunks']
clean_duplicates
clean_unused
remove_objects
# remove_unlinked
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().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()
# Destroy bulletins, bulletin_files and bulletin_links
Bulletin.excludes(create_user_id: nil).destroy
BulletinFile.destroy_all
BulletinLink.destroy_all
# Destroy gallery_albums and gallery_images
Mongoid.database['gallery_albums'].remove()
Mongoid.database['gallery_images'].remove()
db_array = @files.find().inject([]) do |db_files, file|
db_files << file['filename'] if file['filename'] =~ /writing_journal_file|news_bulletin_file|bulletin_file|gallery_image|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 # encoding: utf-8
require 'erb'
namespace :site do 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' ]) 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') 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})"` `mongo #{Mongoid.config.database.name} --eval "db.fs.chunks.ensureIndex({files_id: 1, n: 1})"`
puts "Congres you can now login within url" puts "Congres you can now login within url"
puts 'Please upload design package (/admin/designs/upload_package ) and run rake site:necessary_data' 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 => 'en', :en => 'English', :zh_tw => '英文' )
I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :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 end
task :create_logrotate => :environment do #Can remove after all products update
create_rulingcom_logrotate
end
task :necessary_data => :environment do task :necessary_data => :environment do
auto_setting
site = Site.first site = Site.first
site.title = 'RulingOrbit Demo Site' site.update_attribute(:title,'RulingOrbit Demo Site')
site.save site.update_attribute(:resque_namespace,@resque_namespace)
# home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁') # home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁')
design = Design.first design = Design.first
site = Site.first
site.design = design site.design = design
site.save site.save
theme = design.themes.first theme = design.themes.first
@@ -31,6 +37,78 @@ namespace :site do
home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"} home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"}
home.save home.save
puts "Rember to restart server after you setup all sites for starting God"
end 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 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| @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.save
wl.url_translations = {}
wl.url_translations["zh_tw"] = @wlurl
wl.url_translations["en"] = @wlurl
wl.save
else else
puts 'no data' puts 'no data'
@@ -4,33 +4,32 @@ user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
development_uid = '' development_uid = ''
development_gid = '' development_gid = ''
num_workers = rails_env == 'production' ? 5 : 2 num_workers = rails_env == 'production' ? <%= @resque_workers %> : 1
num_workers.times do |num| num_workers.times do |num|
God.watch do |w| God.watch do |w|
w.dir = rails_root w.dir = rails_root
w.name = "worker-#{num}" w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-worker-#{num}"
w.group = 'resque' w.group = 'rulingcom'
w.interval = 30.seconds w.interval = 30.seconds
queue = case num queue = case num
when 0 when 0..2
'critical'
when 1..2
'high,low' 'high,low'
when 3..num_workers when 3..num_workers
'low' 'low'
end end
w.env = {"QUEUE"=>queue, "RAILS_ENV"=>rails_env} w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
w.start = "HOME=#{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:work" 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.uid = (rails_env == 'production' )? "root" : development_uid
w.gid = (rails_env == 'production' )? "root" : development_gid 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 # restart if memory gets too high
w.transition(:up, :restart) do |on| 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| God.watch do |w|
w.dir = rails_root w.dir = rails_root
w.name = "scheduler" w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>sunspot-solr"
w.group = 'resque' w.group = 'rulingcom'
w.pid_file = "#{rails_root}/solr/pids/production/sunspot-solr-production.pid"
w.interval = 30.seconds w.interval = 30.seconds
w.env = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env} w.env = {"RAILS_ENV"=>rails_env,"HOME"=>user_home ,"RAILS_ENV"=>rails_env}
w.start = "HOME= #{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:scheduler" 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.uid = (rails_env == 'production' )? "root" : development_uid
w.gid = (rails_env == 'production' )? "root" : development_gid 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 # restart if memory gets too high
w.transition(:up, :restart) do |on| 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 end
def index def index
@item = Page.find(params[:page_id]) rescue nil @item = Page.find(params[:page_id]) rescue nil
if @item if @item
if @item.frontend_data_count if @item.frontend_data_count
@@ -60,7 +61,11 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
else 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) @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 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
end end
@@ -66,14 +66,75 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
end 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 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 end
def reload_web_links 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 end
def bulletins_side_bar def bulletins_side_bar
@@ -14,7 +14,7 @@ class Bulletin
include OrbitTag::Taggable include OrbitTag::Taggable
taggable taggable
is_impressionable :counter_cache => { :column_name => :view_count } is_impressionable #:counter_cache => { :column_name => :view_count }
field :title, localize: true field :title, localize: true
field :subtitle, localize: true field :subtitle, localize: true
@@ -40,6 +40,7 @@ class Bulletin
field :not_checked_reason field :not_checked_reason
field :public, :type => Boolean, :default => true field :public, :type => Boolean, :default => true
field :rss_link
scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false) 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) } scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) }
@@ -36,6 +36,11 @@
</div> </div>
</div> </div>
<% end %> <% end %>
<% unless @bulletin.rss_link.blank? %>
<div>
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
</div>
<% end %>
</div> </div>
<%= share_links(@bulletin, 'announcement') %> <%= share_links(@bulletin, 'announcement') %>
@@ -1,10 +1,10 @@
<% @bulletins.each do |bulletin| %> <% @bulletins.each do |bulletin| %>
<li> <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> </li>
<% end %> <% end %>
<div class='pagination'> <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_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', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %> <%= 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> </div>
@@ -1,3 +1,3 @@
<li> <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> </li>
@@ -5,6 +5,6 @@
<% end %> <% end %>
<div class='pagination'> <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_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', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %> <%= 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> </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 bulletin_category_with_title: Bulletin Category with Title
postdate: Post Date postdate: Post Date
title: Title title: Title
subtitle: SubTitle
editing_announcement: Edit Announcement editing_announcement: Edit Announcement
editing_announcement_category: Edit Category editing_announcement_category: Edit Category
error: error:
@@ -34,6 +35,6 @@ en:
update_bulletin_category_success: Update Category Successfully update_bulletin_category_success: Update Category Successfully
url: URL url: URL
widget: widget:
bulletins_and_web_links: Bulletins and Web Resources bulletins_and_web_links: Differential Nav.
index: Index index: Index
search: Search search: Search
@@ -16,6 +16,7 @@ zh_tw:
bulletin_category_with_title: 公告類別及標題 bulletin_category_with_title: 公告類別及標題
postdate: 張貼日期 postdate: 張貼日期
title: 標題 title: 標題
subtitle: 副標題
editing_announcement: 編輯類別 editing_announcement: 編輯類別
editing_announcement_category: 編輯類別 editing_announcement_category: 編輯類別
error: error:
@@ -34,6 +35,6 @@ zh_tw:
update_bulletin_category_success: 更新類別成功 update_bulletin_category_success: 更新類別成功
url: 連結位置 url: 連結位置
widget: widget:
bulletins_and_web_links: 索引 bulletins_and_web_links: 分眾頁籤
index: 索引 index: 索引
search: 搜尋 search: 搜尋
+11 -4
View File
@@ -23,18 +23,20 @@ module Announcement
end end
category ["BulletinCategory"] category ["BulletinCategory"]
data_count 3..10 data_count 1..10
taggable taggable
widgets do widgets do
default_widget do default_widget do
query 'Bulletin.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )' sorting 'desc(:postdate)'
enable ["typeA","typeC"] 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 image :image
field :postdate 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]}} 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' link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
end end
@@ -50,6 +52,11 @@ module Announcement
widget_i18n "announcement.widget.search" widget_i18n "announcement.widget.search"
end 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 "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"]
# item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links" # item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
end 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.
File renamed without changes.
Loaded 100 of 292 files, more files were not shown because too many files have changed in this diff. Show more