Compare commits
93
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b883f050f | ||
|
|
09bb318d6a | ||
|
|
d766eea9f4 | ||
|
|
d5dc3ef793 | ||
|
|
b3366b48a1 | ||
|
|
36e7e3d3e8 | ||
|
|
06c2240d34 | ||
|
|
c4e8ed96a9 | ||
|
|
8ad015af7f | ||
|
|
1857ad428c | ||
|
|
134b639465 | ||
|
|
45136f915d | ||
|
|
2c3924d92c | ||
|
|
41b562d3f7 | ||
|
|
4074ac677d | ||
|
|
e1c57c6843 | ||
|
|
915ea066d6 | ||
|
|
e7aa7ea1fa | ||
|
|
1ccfd6e48c | ||
|
|
23516277f3 | ||
|
|
87bc2852b3 | ||
|
|
27b86b078a | ||
|
|
8f393e1079 | ||
|
|
353039dcd0 | ||
|
|
d8dd68b4df | ||
|
|
aa8523c8cf | ||
|
|
69ef8fa747 | ||
|
|
473baa9b95 | ||
|
|
1592aaff89 | ||
|
|
030d994180 | ||
|
|
a88ad35641 | ||
|
|
a63193dc65 | ||
|
|
452bddb587 | ||
|
|
371485e420 | ||
|
|
69b3625861 | ||
|
|
72d1427854 | ||
|
|
079b9145c3 | ||
|
|
3102a46219 | ||
|
|
653a098ab6 | ||
|
|
426edea485 | ||
|
|
2e5b2555c6 | ||
|
|
2593707d8c | ||
|
|
b20955579e | ||
|
|
1ebda22f0e | ||
|
|
c511aeb8de | ||
|
|
26d3a89d30 | ||
|
|
91f80a0952 | ||
|
|
f333fe9e21 | ||
|
|
33f256bd16 | ||
|
|
fde9fd7ffe | ||
|
|
d977b83d06 | ||
|
|
a1eae7543e | ||
|
|
8d9bf62909 | ||
|
|
2f480c31bf | ||
|
|
19d33f78bd | ||
|
|
37c91664d3 | ||
|
|
eb853f773d | ||
|
|
d701d9d6ad | ||
|
|
75eeec737c | ||
|
|
36c3635bbb | ||
|
|
fa1c731ad3 | ||
|
|
2c24e788b0 | ||
|
|
26a8be2f0f | ||
|
|
fa51d16879 | ||
|
|
ceff21fd1f | ||
|
|
1357124f6f | ||
|
|
8c3fb43bf5 | ||
|
|
71e8b3c042 | ||
|
|
b37643147f | ||
|
|
ec57cbff1c | ||
|
|
7d6df11873 | ||
|
|
8043573370 | ||
|
|
f025c98ffa | ||
|
|
3a91c92bf7 | ||
|
|
b1d8a87256 | ||
|
|
c7ac4e2485 | ||
|
|
3467868607 | ||
|
|
ceac2b842c | ||
|
|
c763817ebf | ||
|
|
3c3bba514a | ||
|
|
837dc3ea7b | ||
|
|
ea5d89e0e1 | ||
|
|
aea15fa622 | ||
|
|
c1316f72a0 | ||
|
|
d996b91b54 | ||
|
|
07b3857465 | ||
|
|
8751b15385 | ||
|
|
6a40a9555a | ||
|
|
869f3b6815 | ||
|
|
465d417c35 | ||
|
|
eaf7577810 | ||
|
|
22358bd862 | ||
|
|
300de76c3a |
No files matched your search
+6
-1
@@ -4,6 +4,8 @@
|
||||
.rvmrc
|
||||
|
||||
Gemfile.lock
|
||||
Procfile
|
||||
log/*
|
||||
|
||||
db/*.sqlite3
|
||||
log/*.log
|
||||
@@ -14,10 +16,13 @@ public/uploads/**/*
|
||||
solr/data
|
||||
tmp/**/*
|
||||
uploads/**/*
|
||||
|
||||
config/*.god
|
||||
log/*.gz
|
||||
tmp/restart.txt
|
||||
*.swp
|
||||
*.pid
|
||||
*.lck
|
||||
|
||||
.sass-cache/*
|
||||
*.supported
|
||||
mongoid.yml
|
||||
@@ -14,7 +14,11 @@ gem 'execjs'
|
||||
gem 'jquery-rails', '2.1.4'
|
||||
gem 'jquery-ui-rails'
|
||||
gem "select2-rails", '3.3.1'
|
||||
gem 'kaminari', :git => 'git://github.com/amatsuda/kaminari.git'
|
||||
gem 'kaminari'
|
||||
gem "acts_as_unvlogable"
|
||||
gem 'youtube_it'
|
||||
gem 'gotcha'
|
||||
|
||||
|
||||
# gem "memcached", "~> 1.4.3"
|
||||
# gem "memcache-client"
|
||||
@@ -35,7 +39,7 @@ gem 'resque-scheduler' # job scheduling
|
||||
gem 'resque-restriction'
|
||||
#gem 'rb-readline'
|
||||
# gem 'ruby-debug19'
|
||||
gem 'rubyzip'
|
||||
gem 'rubyzip','0.9.9'
|
||||
|
||||
gem 'sunspot_mongo'
|
||||
gem 'sunspot_solr'
|
||||
@@ -46,14 +50,14 @@ gem 'sinatra'
|
||||
gem 'sprockets'
|
||||
gem 'social-share-button'
|
||||
|
||||
gem 'tinymce-rails'
|
||||
gem 'tinymce-rails', '3.5.8.3'
|
||||
gem 'therubyracer' if RUBY_PLATFORM.downcase.include?("linux")
|
||||
gem 'libv8', '~> 3.11.8' if RUBY_PLATFORM.downcase.include?("linux")
|
||||
gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
|
||||
gem 'rb-readline','~> 0.4.2' if RUBY_PLATFORM.downcase.include?("linux")
|
||||
|
||||
|
||||
gem "impressionist", :git => 'git://github.com/charlotte-ruby/impressionist.git'
|
||||
gem "impressionist",'1.2.0'
|
||||
#gem 'contacts'
|
||||
#gem 'event-calendar', :require => 'event_calendar'#, :git => 'git://github.com/elevation/event_calendar.git'
|
||||
|
||||
|
||||
-409
@@ -1,409 +0,0 @@
|
||||
GIT
|
||||
remote: git://github.com/amatsuda/kaminari.git
|
||||
revision: 2e09b5374fec33b57c6387ca7bac89ecaa60c9eb
|
||||
specs:
|
||||
kaminari (0.14.1)
|
||||
actionpack (>= 3.0.0)
|
||||
activesupport (>= 3.0.0)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/charlotte-ruby/impressionist.git
|
||||
revision: 0894f6a550a33f83f4937d655e9f0774521781e4
|
||||
specs:
|
||||
impressionist (1.2.0)
|
||||
httpclient (~> 2.2)
|
||||
nokogiri (~> 1.5)
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
actionmailer (3.2.12)
|
||||
actionpack (= 3.2.12)
|
||||
mail (~> 2.4.4)
|
||||
actionpack (3.2.12)
|
||||
activemodel (= 3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
builder (~> 3.0.0)
|
||||
erubis (~> 2.7.0)
|
||||
journey (~> 1.0.4)
|
||||
rack (~> 1.4.5)
|
||||
rack-cache (~> 1.2)
|
||||
rack-test (~> 0.6.1)
|
||||
sprockets (~> 2.2.1)
|
||||
activemodel (3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
builder (~> 3.0.0)
|
||||
activerecord (3.2.12)
|
||||
activemodel (= 3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
arel (~> 3.0.2)
|
||||
tzinfo (~> 0.3.29)
|
||||
activeresource (3.2.12)
|
||||
activemodel (= 3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
activesupport (3.2.12)
|
||||
i18n (~> 0.6)
|
||||
multi_json (~> 1.0)
|
||||
arel (3.0.2)
|
||||
attr_required (0.0.5)
|
||||
bcrypt-ruby (3.0.0)
|
||||
binding_of_caller (0.7.1)
|
||||
debug_inspector (>= 0.0.1)
|
||||
bourne (1.1.2)
|
||||
mocha (= 0.10.5)
|
||||
brakeman (1.9.2)
|
||||
erubis (~> 2.6)
|
||||
fastercsv (~> 1.5)
|
||||
haml (~> 3.0)
|
||||
highline (~> 1.6)
|
||||
multi_json (~> 1.2)
|
||||
ruby2ruby (~> 2.0)
|
||||
ruby_parser (~> 3.1.1)
|
||||
sass (~> 3.0)
|
||||
terminal-table (~> 1.4)
|
||||
bson (1.8.2)
|
||||
bson_ext (1.8.2)
|
||||
bson (~> 1.8.2)
|
||||
builder (3.0.4)
|
||||
capybara (2.0.2)
|
||||
mime-types (>= 1.16)
|
||||
nokogiri (>= 1.3.3)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (>= 0.5.4)
|
||||
selenium-webdriver (~> 2.0)
|
||||
xpath (~> 1.0.0)
|
||||
carrierwave (0.6.2)
|
||||
activemodel (>= 3.2.0)
|
||||
activesupport (>= 3.2.0)
|
||||
carrierwave-mongoid (0.2.2)
|
||||
carrierwave (~> 0.6.1)
|
||||
mongoid (~> 2.1)
|
||||
childprocess (0.3.8)
|
||||
ffi (~> 1.0, >= 1.0.11)
|
||||
chinese_pinyin (0.4.1)
|
||||
chronic (0.9.0)
|
||||
coderay (1.0.9)
|
||||
coffee-rails (3.2.2)
|
||||
coffee-script (>= 2.2.0)
|
||||
railties (~> 3.2.0)
|
||||
coffee-script (2.2.0)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.4.0)
|
||||
columnize (0.3.6)
|
||||
database_cleaner (0.9.1)
|
||||
debug_inspector (0.0.2)
|
||||
debugger (1.2.4)
|
||||
columnize (>= 0.3.1)
|
||||
debugger-linecache (~> 1.1.1)
|
||||
debugger-ruby_core_source (~> 1.1.7)
|
||||
debugger-linecache (1.1.2)
|
||||
debugger-ruby_core_source (>= 1.1.1)
|
||||
debugger-ruby_core_source (1.1.8)
|
||||
delorean (2.1.0)
|
||||
chronic
|
||||
devise (1.5.3)
|
||||
bcrypt-ruby (~> 3.0)
|
||||
orm_adapter (~> 0.0.3)
|
||||
warden (~> 1.1)
|
||||
diff-lcs (1.1.3)
|
||||
encrypted_strings (0.3.3)
|
||||
erubis (2.7.0)
|
||||
exception_notification (3.0.1)
|
||||
actionmailer (>= 3.0.4)
|
||||
execjs (1.4.0)
|
||||
multi_json (~> 1.0)
|
||||
factory_girl (4.2.0)
|
||||
activesupport (>= 3.0.0)
|
||||
factory_girl_rails (4.2.1)
|
||||
factory_girl (~> 4.2.0)
|
||||
railties (>= 3.0.0)
|
||||
faker (1.1.2)
|
||||
i18n (~> 0.5)
|
||||
fastercsv (1.5.5)
|
||||
fattr (2.2.1)
|
||||
fb_graph (2.6.4)
|
||||
httpclient (>= 2.2.0.2)
|
||||
multi_json (>= 1.3)
|
||||
rack-oauth2 (>= 0.14.4)
|
||||
tzinfo
|
||||
ffi (1.4.0)
|
||||
haml (3.1.8)
|
||||
highline (1.6.15)
|
||||
hike (1.2.1)
|
||||
httpclient (2.3.2)
|
||||
i18n (0.6.1)
|
||||
journey (1.0.4)
|
||||
jquery-rails (2.1.4)
|
||||
railties (>= 3.0, < 5.0)
|
||||
thor (>= 0.14, < 2.0)
|
||||
jquery-ui-rails (4.0.1)
|
||||
jquery-rails
|
||||
railties (>= 3.1.0)
|
||||
json (1.7.7)
|
||||
mail (2.4.4)
|
||||
i18n (>= 0.4.0)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
metaclass (0.0.1)
|
||||
method_source (0.8.1)
|
||||
mime-types (1.21)
|
||||
mini_magick (3.5.0)
|
||||
subexec (~> 0.2.1)
|
||||
mocha (0.10.5)
|
||||
metaclass (~> 0.0.1)
|
||||
mongo (1.8.2)
|
||||
bson (~> 1.8.2)
|
||||
mongo_session_store-rails3 (3.0.6)
|
||||
actionpack (>= 3.0)
|
||||
mongo
|
||||
mongoid (2.6.0)
|
||||
activemodel (~> 3.1)
|
||||
mongo (~> 1.7)
|
||||
tzinfo (~> 0.3.22)
|
||||
mongoid-encryptor (0.0.5)
|
||||
activesupport (~> 3.0)
|
||||
encrypted_strings (~> 0.3.3)
|
||||
mongoid (~> 2)
|
||||
mongoid-tree (0.7.0)
|
||||
mongoid (~> 2.0)
|
||||
multi_json (1.6.1)
|
||||
net-ldap (0.3.1)
|
||||
nokogiri (1.5.6)
|
||||
options (2.3.0)
|
||||
fattr
|
||||
orm_adapter (0.0.7)
|
||||
polyglot (0.3.3)
|
||||
pr_geohash (1.0.0)
|
||||
progress_bar (0.4.0)
|
||||
highline (~> 1.6.1)
|
||||
options (~> 2.3.0)
|
||||
pry (0.9.12)
|
||||
coderay (~> 1.0.5)
|
||||
method_source (~> 0.8)
|
||||
slop (~> 3.4)
|
||||
pry-debugger (0.2.1)
|
||||
debugger (~> 1.2.0)
|
||||
pry (~> 0.9.10)
|
||||
pry-remote (0.1.6)
|
||||
pry (~> 0.9)
|
||||
slop (~> 3.0)
|
||||
pry-stack_explorer (0.4.9)
|
||||
binding_of_caller (>= 0.7)
|
||||
pry (~> 0.9.11)
|
||||
rack (1.4.5)
|
||||
rack-cache (1.2)
|
||||
rack (>= 0.4)
|
||||
rack-gridfs (0.4.1)
|
||||
mime-types
|
||||
mongo (~> 1.2)
|
||||
rack
|
||||
rack-oauth2 (1.0.0)
|
||||
activesupport (>= 2.3)
|
||||
attr_required (>= 0.0.5)
|
||||
httpclient (>= 2.2.0.2)
|
||||
i18n
|
||||
multi_json (>= 1.3.6)
|
||||
rack (>= 1.1)
|
||||
rack-protection (1.3.2)
|
||||
rack
|
||||
rack-ssl (1.3.3)
|
||||
rack
|
||||
rack-test (0.6.2)
|
||||
rack (>= 1.0)
|
||||
radius (0.7.3)
|
||||
rails (3.2.12)
|
||||
actionmailer (= 3.2.12)
|
||||
actionpack (= 3.2.12)
|
||||
activerecord (= 3.2.12)
|
||||
activeresource (= 3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.2.12)
|
||||
railties (3.2.12)
|
||||
actionpack (= 3.2.12)
|
||||
activesupport (= 3.2.12)
|
||||
rack-ssl (~> 1.3.2)
|
||||
rake (>= 0.8.7)
|
||||
rdoc (~> 3.4)
|
||||
thor (>= 0.14.6, < 2.0)
|
||||
rake (10.0.3)
|
||||
rdoc (3.12.1)
|
||||
json (~> 1.4)
|
||||
redis (3.0.2)
|
||||
redis-namespace (1.2.1)
|
||||
redis (~> 3.0.0)
|
||||
redis-search (0.9.0)
|
||||
chinese_pinyin (>= 0.3.0)
|
||||
redis (>= 2.1.1)
|
||||
redis-namespace (>= 1.0.2)
|
||||
resque (1.23.0)
|
||||
multi_json (~> 1.0)
|
||||
redis-namespace (~> 1.0)
|
||||
sinatra (>= 0.9.2)
|
||||
vegas (~> 0.1.2)
|
||||
resque-restriction (0.3.0)
|
||||
resque (>= 1.7.0)
|
||||
resque-scheduler (2.0.0)
|
||||
redis (>= 2.0.1)
|
||||
resque (>= 1.20.0)
|
||||
rufus-scheduler
|
||||
rmmseg-cpp-huacnlee (0.2.9)
|
||||
rsolr (1.0.8)
|
||||
builder (>= 2.1.2)
|
||||
rspec (2.12.0)
|
||||
rspec-core (~> 2.12.0)
|
||||
rspec-expectations (~> 2.12.0)
|
||||
rspec-mocks (~> 2.12.0)
|
||||
rspec-core (2.12.2)
|
||||
rspec-expectations (2.12.1)
|
||||
diff-lcs (~> 1.1.3)
|
||||
rspec-mocks (2.12.2)
|
||||
rspec-rails (2.12.2)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
railties (>= 3.0)
|
||||
rspec-core (~> 2.12.0)
|
||||
rspec-expectations (~> 2.12.0)
|
||||
rspec-mocks (~> 2.12.0)
|
||||
ruby2ruby (2.0.3)
|
||||
ruby_parser (~> 3.1)
|
||||
sexp_processor (~> 4.0)
|
||||
ruby_parser (3.1.1)
|
||||
sexp_processor (~> 4.1)
|
||||
rubyzip (0.9.9)
|
||||
rufus-scheduler (2.0.17)
|
||||
tzinfo (>= 0.3.23)
|
||||
sass (3.2.5)
|
||||
sass-rails (3.2.6)
|
||||
railties (~> 3.2.0)
|
||||
sass (>= 3.1.10)
|
||||
tilt (~> 1.3)
|
||||
select2-rails (3.3.1)
|
||||
sass-rails (>= 3.2)
|
||||
thor (~> 0.14)
|
||||
selenium-webdriver (2.30.0)
|
||||
childprocess (>= 0.2.5)
|
||||
multi_json (~> 1.0)
|
||||
rubyzip
|
||||
websocket (~> 1.0.4)
|
||||
sexp_processor (4.1.5)
|
||||
shoulda-matchers (1.4.2)
|
||||
activesupport (>= 3.0.0)
|
||||
bourne (~> 1.1.2)
|
||||
simplecov (0.7.1)
|
||||
multi_json (~> 1.0)
|
||||
simplecov-html (~> 0.7.1)
|
||||
simplecov-html (0.7.1)
|
||||
sinatra (1.3.4)
|
||||
rack (~> 1.4)
|
||||
rack-protection (~> 1.3)
|
||||
tilt (~> 1.3, >= 1.3.3)
|
||||
slop (3.4.3)
|
||||
social-share-button (0.1.1)
|
||||
spork (0.9.2)
|
||||
sprockets (2.2.2)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
subexec (0.2.2)
|
||||
sunspot (1.3.3)
|
||||
pr_geohash (~> 1.0)
|
||||
rsolr (~> 1.0.7)
|
||||
sunspot-rails-tester (0.0.4)
|
||||
sunspot_rails (~> 1.2)
|
||||
sunspot_mongo (1.0.1)
|
||||
sunspot_rails
|
||||
sunspot_rails (1.3.3)
|
||||
nokogiri
|
||||
sunspot (= 1.3.3)
|
||||
sunspot_solr (1.3.3)
|
||||
syslog-logger (1.6.8)
|
||||
terminal-table (1.4.5)
|
||||
thor (0.17.0)
|
||||
tilt (1.3.3)
|
||||
tinymce-rails (3.5.8)
|
||||
railties (>= 3.1.1)
|
||||
treetop (1.4.12)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (0.3.35)
|
||||
uglifier (1.3.0)
|
||||
execjs (>= 0.3.0)
|
||||
multi_json (~> 1.0, >= 1.0.2)
|
||||
vegas (0.1.11)
|
||||
rack (>= 1.0.0)
|
||||
warden (1.2.1)
|
||||
rack (>= 1.0)
|
||||
watchr (0.7)
|
||||
websocket (1.0.7)
|
||||
xpath (1.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
brakeman
|
||||
bson_ext
|
||||
capybara
|
||||
carrierwave
|
||||
carrierwave-mongoid
|
||||
chinese_pinyin (= 0.4.1)
|
||||
coffee-rails
|
||||
database_cleaner
|
||||
debugger
|
||||
delorean
|
||||
devise (= 1.5.3)
|
||||
exception_notification
|
||||
execjs
|
||||
factory_girl_rails
|
||||
faker
|
||||
fb_graph
|
||||
impressionist!
|
||||
jquery-rails (= 2.1.4)
|
||||
jquery-ui-rails
|
||||
kaminari!
|
||||
mime-types
|
||||
mini_magick
|
||||
mongo_session_store-rails3 (= 3.0.6)
|
||||
mongoid (> 2.1, < 3.0.0)
|
||||
mongoid-encryptor
|
||||
mongoid-tree
|
||||
net-ldap (~> 0.3.1)
|
||||
nokogiri
|
||||
progress_bar
|
||||
pry
|
||||
pry-debugger
|
||||
pry-remote
|
||||
pry-stack_explorer
|
||||
rack-gridfs
|
||||
radius
|
||||
rails (~> 3.2.9)
|
||||
rake
|
||||
redis (>= 2.1.1)
|
||||
redis-namespace
|
||||
redis-search
|
||||
resque
|
||||
resque-restriction
|
||||
resque-scheduler
|
||||
rmmseg-cpp-huacnlee (= 0.2.9)
|
||||
rspec (~> 2.0)
|
||||
rspec-rails (~> 2.0)
|
||||
rubyzip
|
||||
sass-rails
|
||||
select2-rails (= 3.3.1)
|
||||
shoulda-matchers
|
||||
simplecov
|
||||
sinatra
|
||||
social-share-button
|
||||
spork
|
||||
sprockets
|
||||
sunspot-rails-tester
|
||||
sunspot_mongo
|
||||
sunspot_solr
|
||||
syslog-logger
|
||||
tinymce-rails
|
||||
uglifier
|
||||
watchr
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
@@ -5,3 +5,4 @@
|
||||
*= require_self
|
||||
*= require social-share-button
|
||||
*/
|
||||
|
||||
@@ -6,7 +6,14 @@ class Admin::MailCronLogsController < OrbitBackendController
|
||||
|
||||
def index
|
||||
|
||||
@mail_cron_logs = MailCronLog.all.desc(:created_at).page(params[:page_main] ).per('20')
|
||||
# @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
|
||||
|
||||
|
||||
@@ -6,7 +6,14 @@ class Admin::MailCronsController < OrbitBackendController
|
||||
|
||||
def index
|
||||
|
||||
@mail_logs = MailCron.all.asc(:mail_sentdate).page(params[:page_main] ).per('20')
|
||||
# @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
|
||||
|
||||
|
||||
@@ -137,19 +137,20 @@ class ApplicationController < ActionController::Base
|
||||
|
||||
# Set I18n.locale
|
||||
def set_locale
|
||||
# update session if passed
|
||||
session[:locale] = params[:locale] if params[:locale]
|
||||
browser_locale = condition = nil
|
||||
# check if locale is valid for non site pages
|
||||
if LIST[:forbidden_item_names].include?(env['PATH_INFO'].split('/')[1].to_s)
|
||||
condition = VALID_LOCALES.include?(session[:locale])
|
||||
elsif session[:locale]
|
||||
condition = @site_in_use_locales.include?(session[:locale])
|
||||
else
|
||||
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first rescue nil
|
||||
condition = @site_in_use_locales.include?(browser_locale)
|
||||
end
|
||||
session[:locale] = condition ? (browser_locale || session[:locale]) : I18n.default_locale.to_s
|
||||
# # update session if passed
|
||||
# session[:locale] = params[:locale] if params[:locale]
|
||||
# browser_locale = condition = nil
|
||||
# # check if locale is valid for non site pages
|
||||
# if LIST[:forbidden_item_names].include?(env['PATH_INFO'].split('/')[1].to_s)
|
||||
# condition = VALID_LOCALES.include?(session[:locale])
|
||||
# elsif session[:locale]
|
||||
# condition = @site_in_use_locales.include?(session[:locale])
|
||||
# else
|
||||
# browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first rescue nil
|
||||
# condition = @site_in_use_locales.include?(browser_locale)
|
||||
# end
|
||||
# session[:locale] = condition ? (browser_locale || session[:locale]) : I18n.default_locale.to_s
|
||||
session[:locale] = 'en'
|
||||
I18n.locale = session[:locale].to_sym
|
||||
end
|
||||
|
||||
|
||||
@@ -11,23 +11,21 @@ class DefaultWidgetController< OrbitWidgetController
|
||||
end
|
||||
|
||||
def query_for_default_widget
|
||||
|
||||
@ori_class_name = @default_widget["query"].split('.')[0]
|
||||
result = nil
|
||||
result_objects = nil
|
||||
|
||||
@ori_class_name = @default_widget["query"].split('.')[0]
|
||||
@result = eval(@default_widget["query"])
|
||||
if !params["tag_id"].blank?
|
||||
if params["category_id"].blank? #has tag no cate
|
||||
result = @ori_class_name.constantize.where(:tagged_ids.in => params["tag_id"])
|
||||
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
|
||||
else #has tag and cate
|
||||
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])")
|
||||
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
|
||||
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
|
||||
end
|
||||
elsif params["category_id"].blank? #no tag no cate
|
||||
result = eval(@default_widget["query"])
|
||||
else #no tag has cate
|
||||
result = eval("#{@ori_class_name}.where(:#{get_category_field_name}.in=>params['category_id'])")
|
||||
|
||||
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
|
||||
end
|
||||
result.available_for_lang(I18n.locale).can_display.desc(:is_top, :postdate)
|
||||
eval("@result.#{@default_widget[:sorting_query]}")
|
||||
end
|
||||
|
||||
def search_result
|
||||
@@ -40,9 +38,13 @@ class DefaultWidgetController< OrbitWidgetController
|
||||
|
||||
def default_widget
|
||||
@search = params["search_query"].blank? ? false : true
|
||||
if !params[:id].blank?
|
||||
if !params[:id].blank? and !params["clicked_field_name"].blank?
|
||||
clicked_field_name = params["clicked_field_name"].to_sym
|
||||
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {inner: #{params[:inner] || true}})")
|
||||
elsif !params[:id].blank? and params["preview"]
|
||||
clicked_field_name = :title
|
||||
@preview_pages = @page_part.module_app.widget_fields_link_method.find_all{|t| t[1].has_key?(:preview)}.collect{|t| t[0]}
|
||||
redirect_to eval("#{@page_part.module_app.widget_fields_link_method[clicked_field_name][:method]}('#{params[:id]}', {preview: true,inner: #{params[:inner] || true},clicked_field_name: '#{@preview_pages.first.to_s}'})")
|
||||
else
|
||||
@tag_class = nil
|
||||
@default_widget = @page_part.module_app.get_default_widget
|
||||
@@ -91,9 +93,9 @@ class DefaultWidgetController< OrbitWidgetController
|
||||
end
|
||||
|
||||
def get_category_field_name
|
||||
@ori_class_name = @ori_class_name.constantize
|
||||
@ori_class_name = @ori_class_name.constantize unless @ori_class_name.is_a? Class
|
||||
@ori_class_name.fields.each_key do |key|
|
||||
return key if key.include?('category_id')
|
||||
return key.to_s if key.include?('category_id')
|
||||
end
|
||||
nil
|
||||
end
|
||||
|
||||
@@ -7,4 +7,10 @@ class OrbitFrontendComponentController< ApplicationController
|
||||
@app_title = request.fullpath.split('/')[2]
|
||||
end
|
||||
|
||||
def delay_impressionist(item)
|
||||
user_id = current_user.nil? ? nil : current_user.id
|
||||
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
@@ -44,29 +44,13 @@ class PagesController < ApplicationController
|
||||
# render :file => "#{Rails.root}/public/404.html", :status => :not_found
|
||||
#end
|
||||
end
|
||||
|
||||
def convert_array_param(key,array)
|
||||
array.collect{|t| "#{key}[]=#{t}"}.join("&")
|
||||
end
|
||||
|
||||
def index_from_link
|
||||
url = "/#{@item.path}"
|
||||
options = ''
|
||||
options << "#{options.blank? ? '?' : '&'}page_main=#{params[:page_main]}" unless params[:page_main].blank?
|
||||
|
||||
if params[:category_id].is_a? Array
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id',params[:category_id])}" unless params[:category_id].blank?
|
||||
elsif params[:category_id].is_a? String
|
||||
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
|
||||
end
|
||||
|
||||
if params[:tag_id].is_a? Array
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id',params[:tag_id])}" unless params[:tag_id].blank?
|
||||
elsif params[:category_id].is_a? String
|
||||
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
|
||||
end
|
||||
|
||||
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}search_query=#{params[:search_query]}" unless params[:search_query].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}name=#{params[:name]}" unless params[:name].blank?
|
||||
uri = URI::escape(url + options)
|
||||
@@ -78,8 +62,8 @@ class PagesController < ApplicationController
|
||||
url = "/#{@item.path}"
|
||||
options = ''
|
||||
options << "#{options.blank? ? '?' : '&'}id=#{params[:id]}" unless params[:id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}category_id=#{params[:category_id]}" unless params[:category_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}tag_id=#{params[:tag_id]}" unless params[:tag_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('category_id', params[:category_id])}" unless params[:category_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}#{convert_array_param('tag_id', params[:tag_id])}" unless params[:tag_id].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}preview=#{params[:preview]}" unless params[:preview].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}controller_action=#{params[:controller_action]}" unless params[:controller_action].blank?
|
||||
options << "#{options.blank? ? '?' : '&'}clicked_field_name=#{params[:clicked_field_name]}" unless params[:clicked_field_name].blank?
|
||||
@@ -98,23 +82,43 @@ class PagesController < ApplicationController
|
||||
elsif params[:same_page_id]
|
||||
@item = Item.find(params[:same_page_id])
|
||||
else
|
||||
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : [params[:category_id]]
|
||||
tag_ids = params[:tag_id].is_a?(Array) ? params[:tag_id] : [params[:tag_id]]
|
||||
category_ids = Array(params[:category_id]) unless params[:category_id].nil?
|
||||
tag_ids = Array(params[:tag_id]) unless params[:tag_id].nil?
|
||||
module_app = ModuleApp.first(:conditions => {:key => params[:app_name]})
|
||||
|
||||
default_query = { is_published: true, module_app_id: module_app.id, :app_frontend_url.in => [params[:app_action], 'default_widget'] }
|
||||
specific_categories = { :category => category_ids }
|
||||
in_categories = { :category.in => category_ids }
|
||||
nil_categories = { :category.in => [nil, []] }
|
||||
specific_tags = { :tag => tag_ids }
|
||||
in_tags = { :tag.in => tag_ids }
|
||||
nil_tags = { :tag.in => [nil, []] }
|
||||
|
||||
if !category_ids.blank? && !tag_ids.blank?
|
||||
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => tag_ids})
|
||||
@item = Item.first(:conditions => {:module_app_id => module_app.id, :app_frontend_url => params[:app_action], :category.in => category_ids, :tag.in => [nil, []]}) unless @item
|
||||
@item = Item.where(default_query.merge(specific_categories).merge(specific_tags)).first
|
||||
@item = Item.where(default_query.merge(specific_categories).merge(in_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(specific_tags).merge(in_categories)).first unless @item
|
||||
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_categories).merge(in_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
|
||||
elsif !category_ids.blank?
|
||||
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :category.in => category_ids).any_in(tag: [nil, []]).first
|
||||
@item = Item.where(default_query.merge(specific_categories).merge(nil_tags)).first
|
||||
@item = Item.where(default_query.merge(specific_categories)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_categories).merge(nil_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_categories)).first unless @item
|
||||
elsif !tag_ids.blank?
|
||||
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action], :tag.in => tag_ids).any_in(category: [nil, []]).first
|
||||
@item = Item.where(default_query.merge(specific_tags).merge(nil_categories)).first
|
||||
@item = Item.where(default_query.merge(specific_tags)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_tags).merge(nil_categories)).first unless @item
|
||||
@item = Item.where(default_query.merge(in_tags)).first unless @item
|
||||
end
|
||||
@item = Item.find(params[:orig_page]) unless @item || params[:orig_page].blank?
|
||||
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).all_of("tag" => {"$in" => [nil, []]},"category" => { "$in" => [nil, []]}).first unless @item
|
||||
@item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first unless @item
|
||||
@item = Item.where(module_app_id: module_app.id, app_frontend_url: params[:app_action]).first unless @item
|
||||
@item = Item.where(default_query.merge(nil_categories).merge(nil_tags)).first unless @item
|
||||
@item = Item.where(default_query).first unless @item
|
||||
end
|
||||
raise PageError,'Missing Frontend Page' if @item.nil?
|
||||
raise PageError, 'Missing Frontend Page' if @item.nil?
|
||||
end
|
||||
|
||||
def save_from_no_lang_for_page
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
module ApplicationHelper
|
||||
|
||||
include OrbitApp::Module::VisitorCounter
|
||||
FLASH_NOTICE_KEYS = [:error, :notice, :warning]
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@ module ApplicationHelper
|
||||
request.referer.include?('?') ? [request.referer,param_hash.to_param].join('&') : [request.referer,param_hash.to_param].join('?')
|
||||
end
|
||||
|
||||
def delayed_impressionist(object)
|
||||
# Resque.enqueue_at(1.minute.from_now,DelayedImpressionist,object)
|
||||
def delayed_impressionist(item)
|
||||
user_id = current_user.nil? ? nil : current_user.id
|
||||
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||
end
|
||||
|
||||
def check_user_role_enable(attribute_fields)
|
||||
@@ -242,25 +243,27 @@ module ApplicationHelper
|
||||
"#{t(:view_count)}: #{object.view_count}"
|
||||
end
|
||||
|
||||
def display_visitors(options={})
|
||||
Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
|
||||
end
|
||||
# def display_visitors(options={})
|
||||
# # Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
|
||||
# impressions = Impression.where(options).and(:referrer.ne => nil)
|
||||
# impressions.map{|i| i[:session_hash]}.uniq.count
|
||||
# end
|
||||
|
||||
def display_visitors_today
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||
end
|
||||
# def display_visitors_today
|
||||
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||
# end
|
||||
|
||||
def display_visitors_this_week
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||
end
|
||||
# def display_visitors_this_week
|
||||
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||
# end
|
||||
|
||||
def display_visitors_this_month
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||
end
|
||||
# def display_visitors_this_month
|
||||
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||
# end
|
||||
|
||||
def display_visitors_this_year
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||
end
|
||||
# def display_visitors_this_year
|
||||
# display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||
# end
|
||||
|
||||
def display_date_time(object)
|
||||
object.strftime("%Y-%m-%d %H:%M")
|
||||
@@ -311,4 +314,8 @@ module ApplicationHelper
|
||||
link_to title, params.merge({direction: direction, sort: column, sort_options: column}), {:class => "#{css_class} sortable", :remote => options[:remote]}
|
||||
end
|
||||
|
||||
def convert_array_param(key, array)
|
||||
Array(array).collect{|t| "#{key}[]=#{t}"}.join("&")
|
||||
end
|
||||
|
||||
end
|
||||
@@ -3,6 +3,13 @@ module DefaultWidgetHelper
|
||||
I18n.t("#{@page_part.module_app.key}.default_widget.#{field}")
|
||||
end
|
||||
|
||||
def get_top_hot_class(row_data)
|
||||
class_attr = []
|
||||
class_attr << 'data_is_hot' if( row_data.is_hot? rescue false )
|
||||
class_attr << 'data_is_top' if( row_data.is_top? rescue false)
|
||||
return class_attr.join(" ")
|
||||
end
|
||||
|
||||
def link_to_field(row_data,field, switch, options=nil)
|
||||
method_ary = @page_part.module_app.widget_fields_link_method
|
||||
field = field.to_sym
|
||||
@@ -77,4 +84,13 @@ module DefaultWidgetHelper
|
||||
content_tag(:span,get_display(row_data,field_setting),:class=>field_setting[:class])
|
||||
end
|
||||
end
|
||||
|
||||
def get_row_category(row_data)
|
||||
row_data.send("#{row_data.class.to_s.underscore}_category_id") rescue nil
|
||||
end
|
||||
|
||||
def get_row_tags(row_data)
|
||||
row_data.tagged_ids rescue nil
|
||||
end
|
||||
|
||||
end
|
||||
@@ -2,16 +2,24 @@ class BackupServer
|
||||
@queue = :high
|
||||
|
||||
def self.perform()
|
||||
#CronMail.time_check("Going to backup Orbit").deliver
|
||||
dbhost = Mongoid.config.database.connection.primary.join ':'
|
||||
dbname = Mongoid.config.database.name
|
||||
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
|
||||
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
|
||||
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
|
||||
|
||||
%x[rm #{archive_db_list_path}]
|
||||
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}]
|
||||
Dir.foreach('tmp') do |item|
|
||||
date_str = item.to_s.gsub("#{dbname}-",'')
|
||||
next if not date_str.match(/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}/)
|
||||
if Date.parse(date_str).to_time < Site.first.backup_keep_for_days.days.ago
|
||||
OrbitLogger.info "Deleting #{date_str}"
|
||||
%x[rm -rf tmp/#{item}]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%x[rm -f #{archive_db_list_path}]
|
||||
%x[cd tmp ; ls -l |grep #{dbname} | awk '{print $8}'|xargs du -h --block-size=1M --max-depth=0 |sort -h >> #{archive_db_list_path}]
|
||||
OrbitLogger.info "DB backup done Path:#{dbdirectory}"
|
||||
|
||||
end
|
||||
end
|
||||
@@ -1,36 +1,21 @@
|
||||
class DashboardCounter < Resque::Plugins::RestrictionJob
|
||||
extend OrbitApp::Module::VisitorCounterEval
|
||||
|
||||
@queue = :high
|
||||
|
||||
def self.perform(*args)
|
||||
site = Site.first
|
||||
obj = new(*args)
|
||||
site.dashboard_counter[:visitors_this_week] = obj.display_visitors_this_week
|
||||
site.dashboard_counter[:visitors_this_month] = obj.display_visitors_this_month
|
||||
site.dashboard_counter[:visitors_this_year] = obj.display_visitors_this_year
|
||||
site.visitor_counters[:total] = display_visitors
|
||||
site.visitor_counters[:today] = display_visitors_today
|
||||
site.visitor_counters[:this_week] = display_visitors_this_week
|
||||
site.visitor_counters[:this_month] = display_visitors_this_month
|
||||
site.visitor_counters[:this_year] = display_visitors_this_year
|
||||
site.save
|
||||
OrbitLogger.info "DashboardCounter done #{site.dashboard_counter.to_s}"
|
||||
end
|
||||
OrbitLogger.info "DashboardCounter done #{site.visitor_counters.to_s}"
|
||||
|
||||
|
||||
def display_visitors(options={})
|
||||
impressions = Impression.where(options).and(:referrer.ne => nil)
|
||||
impressions.map{|i| i[:session_hash]}.uniq.count
|
||||
end
|
||||
|
||||
def display_visitors_today
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||
end
|
||||
|
||||
def display_visitors_this_week
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||
end
|
||||
|
||||
def display_visitors_this_month
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||
end
|
||||
|
||||
def display_visitors_this_year
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||
#Notice this is mainly used at user dashbroad. however the code there is currentlly using realtime evaluation.
|
||||
#and the site model will need a field call dashboard_counter to complete this job.
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,7 +1,51 @@
|
||||
class DelayedImpressionist
|
||||
@queue = :low
|
||||
def self.perform(object)
|
||||
impressionist(object)
|
||||
true
|
||||
end
|
||||
class DelayedImpressionist
|
||||
def self.before_filter(*args)
|
||||
return
|
||||
end
|
||||
|
||||
include ImpressionistController::InstanceMethods
|
||||
@queue = :low
|
||||
|
||||
def initialize(request,controller_name,action_name,user,obj)
|
||||
@controller_name = controller_name
|
||||
@action_name = action_name
|
||||
@user = User.find user unless user.nil?
|
||||
@request = request
|
||||
end
|
||||
|
||||
def self.perform(*args)
|
||||
arg = args[0]
|
||||
@request= DelayImpressionistRequest.new
|
||||
@request.restore(arg["request"])
|
||||
obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'")
|
||||
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
|
||||
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
|
||||
@try = 1
|
||||
loop do
|
||||
result = new_impression.save rescue false
|
||||
break if (result || @try >= 10)
|
||||
@try = @try + 1
|
||||
puts "trying:#{@try}"
|
||||
end
|
||||
new_impression.save
|
||||
obj.update_attribute(:view_count,obj.impression_count)
|
||||
end
|
||||
|
||||
private
|
||||
def user
|
||||
@user
|
||||
end
|
||||
|
||||
def action_name
|
||||
@action_name
|
||||
end
|
||||
|
||||
def controller_name
|
||||
@controller_name
|
||||
end
|
||||
|
||||
def request
|
||||
@request
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
class GetAnnouncementFromRss
|
||||
@queue = :high
|
||||
|
||||
def self.perform()
|
||||
%x(ruby "#{Rails.root}/lib/rss_ntu_job.rb")
|
||||
end
|
||||
end
|
||||
@@ -3,7 +3,7 @@ class UpdateTagCloud
|
||||
|
||||
def self.perform()
|
||||
Tag.all.each do |tag|
|
||||
tag.update_attribute(:cloud_view_count, tag.impressionist_count(:created_at.gte => 14.days.ago, :created_at.lte => Time.now))
|
||||
tag.update_attribute(:cloud_view_count, tag.get_impressionist)
|
||||
end
|
||||
OrbitLogger.info "UpdateTagCloud Done"
|
||||
end
|
||||
|
||||
@@ -62,7 +62,7 @@ class MailCronMailer < ActionMailer::Base
|
||||
@mail_cron_log = {
|
||||
:mail_subject => @data.mail_subject,
|
||||
:mail_to => group_mail,
|
||||
:mail_user => @user.user_id,
|
||||
:mail_user => @user.name,
|
||||
:mailer_count => group_mail.split(",").size,
|
||||
:mail_from_app => @data.mail_from_app
|
||||
}
|
||||
|
||||
@@ -29,4 +29,42 @@ class MailCron
|
||||
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
|
||||
@@ -140,7 +140,7 @@ class ModuleApp
|
||||
def sorted_tags_for_cloud
|
||||
temp_tags = {}
|
||||
self.tags.each{ |tag|
|
||||
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
|
||||
temp_tags.merge!({tag => tag.cloud_view_count})
|
||||
}
|
||||
if !temp_tags.blank?
|
||||
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ class Page < Item
|
||||
include Impressionist::Impressionable
|
||||
include ParserFrontEnd
|
||||
|
||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
||||
is_impressionable #:counter_cache => { :column_name => :view_count }
|
||||
|
||||
field :content, localize: true
|
||||
field :app_frontend_url
|
||||
|
||||
@@ -51,8 +51,9 @@ class PrototypeAuth
|
||||
end
|
||||
|
||||
def remove_operation(item,obj)
|
||||
if (self.send item).include? obj
|
||||
(self.send item).delete obj
|
||||
item = (item.to_s.singularize == item.to_s) ? "#{item.to_s}_id" : "#{item.to_s.singularize}_ids"
|
||||
if (self.send item).include? obj.id
|
||||
(self.send item).delete obj.id
|
||||
self.save!
|
||||
else
|
||||
false #should put error message for user not existed in list
|
||||
|
||||
+3
-1
@@ -18,6 +18,7 @@ class Site
|
||||
field :title_always_on, :type => Boolean, :default => false
|
||||
field :dashbroad_allow_visitor, :type => Boolean, :default => false
|
||||
field :mail_settings, :type => Hash
|
||||
field :visitor_counters,:type=> Hash,:default=>{:total=>0,:today=>0,:this_week=>0,:this_month=>0,:this_year=>0}
|
||||
|
||||
field :disk_space, :type => String
|
||||
field :system_package_info, :type => Hash,:default=>{}
|
||||
@@ -28,10 +29,11 @@ class Site
|
||||
mount_uploader :default_image, ImageUploader
|
||||
|
||||
field :search,:type => Hash
|
||||
|
||||
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
|
||||
field :title, localize: true
|
||||
field :footer, localize: true
|
||||
field :sub_menu, localize: true
|
||||
field :backup_keep_for_days,:type=>Integer,:default=> APP_CONFIG['backup_keep_for_days']
|
||||
|
||||
field :mobile_on, :type => Boolean, :default => false
|
||||
|
||||
|
||||
+1
-25
@@ -8,7 +8,7 @@ class Tag
|
||||
include Mongoid::Timestamps
|
||||
include Impressionist::Impressionable
|
||||
|
||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
||||
is_impressionable #:counter_cache => { :column_name => :view_count }
|
||||
|
||||
field :name, localize: true
|
||||
field :view_count, :type => Integer, :default => 0
|
||||
@@ -17,30 +17,6 @@ class Tag
|
||||
belongs_to :module_tag, polymorphic: true
|
||||
has_many :taggings, dependent: :destroy
|
||||
|
||||
#field :cloud_amper,:type: Integer,:default=> 0
|
||||
|
||||
# def self.sorted_for_cloud
|
||||
# tags = {}
|
||||
# self.all.each{ |tag|
|
||||
# tags.merge!({tag => self.get_impressionist(tag)})
|
||||
# }
|
||||
# if !tags.blank?
|
||||
# sorted_tags = tags.sort{|a,b| a[1]<=>b[1]}.reverse
|
||||
# sorted_tags[0][1] = :hot1
|
||||
# offset = (sorted_tags.size - 1) / 3
|
||||
# i = 1
|
||||
# class_i = 2
|
||||
# sorted_tags[1..-1].collect!{ |x|
|
||||
# x[1] = "hot#{class_i}"
|
||||
# i == offset ? i = 1 : i += 1 if class_i < 4
|
||||
# class_i += 1 if i == offset && class_i < 4
|
||||
# }
|
||||
# sorted_tags
|
||||
# else
|
||||
# []
|
||||
# end
|
||||
# end
|
||||
|
||||
protected
|
||||
|
||||
def self.get_impressionist(item_tag = self)
|
||||
|
||||
+5
-10
@@ -3,7 +3,7 @@ class User
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable #, :timeoutable
|
||||
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :timeoutable
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
|
||||
@@ -42,7 +42,6 @@ class User
|
||||
|
||||
before_create :initialize_desktop
|
||||
before_save :rebuild_status_record
|
||||
before_save :save_roles
|
||||
scope :remote_account, where(:nccu_id.ne => nil)
|
||||
scope :not_guest_user, all_of(:name.ne => "guest")
|
||||
|
||||
@@ -89,9 +88,9 @@ class User
|
||||
var[:id].each do |id,val|
|
||||
# binding.pry if id == '5052c5b22b5c49ab02000004'
|
||||
if (val=="true")
|
||||
self.roles = self.roles.reject{|t| t.id.to_s==id}
|
||||
self.role_ids.reject!{|t| t.to_s == id}
|
||||
elsif(val=="false")
|
||||
self.roles << Role.find(id)
|
||||
self.role_ids += Array(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -106,9 +105,9 @@ class User
|
||||
# binding.pry if id == '5052c5b22b5c49ab02000004'
|
||||
|
||||
if ( self.roles.include?(@roid) == false or val=="true")
|
||||
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id}
|
||||
self.sub_role_ids.reject!{|t| t.to_s == id}
|
||||
elsif(val=="false")
|
||||
self.sub_roles << SubRole.find(id)
|
||||
self.sub_role_ids += Array(id)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -273,10 +272,6 @@ class User
|
||||
end
|
||||
|
||||
protected
|
||||
def save_roles
|
||||
# self.roles = self.sub_roles.collect{|t| t.role}.uniq
|
||||
self.roles = self.roles.uniq
|
||||
end
|
||||
|
||||
def rebuild_status_record
|
||||
self.status_record = {}
|
||||
|
||||
@@ -8,6 +8,5 @@
|
||||
</table>
|
||||
|
||||
<div class="form-actions form-fixed pagination-right">
|
||||
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_design_path, :class => 'btn btn-primary pull-right' %>
|
||||
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
|
||||
</div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<%= render_sort_bar(true, delete_admin_mail_cron_logs_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
|
||||
['subject', 'subject','span2', :subject] ,
|
||||
['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', 'sentdate','span2', :sentdate] ).html_safe %>
|
||||
['sentdate', 'created_at','span2', :sentdate] ).html_safe %>
|
||||
@@ -1,3 +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} %>");
|
||||
@@ -1,5 +1,5 @@
|
||||
<%= render_sort_bar(true, delete_admin_mail_crons_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]),
|
||||
['subject', 'subject','span2', :subject] ,
|
||||
['subject', 'mail_subject','span2', :mail_subject] ,
|
||||
['mail_to', 'mail_to','span2', :mail_to] ,
|
||||
['mail_from_app', 'mail_from_app','span2', :mail_from_app] ,
|
||||
['sentdate', 'sentdate','span2', :sentdate] ).html_safe %>
|
||||
['sentdate', 'mail_sentdate','span2', :mail_sentdate] ).html_safe %>
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
<% 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 %>
|
||||
@@ -15,14 +14,14 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody_mail_crons" class="sort-holder">
|
||||
<%= render :partial => "mail_cron",:collection=> @mail_logs%>
|
||||
<%= 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_logs, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
|
||||
<%= paginate @mail_crons, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,3 +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} %>");
|
||||
@@ -17,4 +17,4 @@
|
||||
<%= render :partial=> "widget_ext_options" %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -1,19 +1,22 @@
|
||||
<%= content_tag :div,:class=>@tag_class do%>
|
||||
<%= content_tag :div, class: @tag_class do %>
|
||||
<div class="default_widget_type_A">
|
||||
<table class="default_widget_tb" border="0" cellpadding="0" cellspacing="0" >
|
||||
<thead>
|
||||
<tr>
|
||||
<% @frontend_field_names.each_with_index do |field,index|%>
|
||||
<%= content_tag(:th,content_tag(:span,get_field_header(field),:class=>@frontend_classes[index]))unless field.blank?%>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<% @data.each do |row_data| %>
|
||||
<thead>
|
||||
<tr>
|
||||
<% @frontend_field_names.each_with_index do |field,index|%>
|
||||
<%= content_tag(:td,content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]))unless field.blank?%>
|
||||
<% @frontend_field_names.each_with_index do |field, index| %>
|
||||
<%= content_tag(:th, content_tag(:span, get_field_header(field), class: @frontend_classes[index])) unless field.blank? %>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @data.each do |row_data| %>
|
||||
<tr class="<%= get_top_hot_class(row_data) %>">
|
||||
<% @frontend_field_names.each_with_index do |field, index|%>
|
||||
<%= content_tag(:td, content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index])) unless field.blank? %>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,13 +1,13 @@
|
||||
<%= content_tag :div,:class=>@tag_class do%>
|
||||
<%= content_tag :div, class: @tag_class do %>
|
||||
<ul class="default_widget_list">
|
||||
<% @data.each do |row_data| %>
|
||||
<%= content_tag(:li) do %>
|
||||
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
|
||||
<div class="img app-pic">
|
||||
<%= image_tag row_data.send(@widget_image_field)%>
|
||||
<%= image_tag row_data.send(@widget_image_field) %>
|
||||
</div>
|
||||
<div class="wrap">
|
||||
<% @frontend_field_names.each_with_index do |field,index|%>
|
||||
<%= content_tag(:span,link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
|
||||
<% @frontend_field_names.each_with_index do |field, index| %>
|
||||
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<%= content_tag :div,:class=>@tag_class do%>
|
||||
<%= content_tag :div, class: @tag_class do %>
|
||||
<div class="img app-pic">
|
||||
<%= image_tag @data.first.send(@widget_image_field)%>
|
||||
<%= image_tag @data.first.send(@widget_image_field) %>
|
||||
</div>
|
||||
<ul class="default_widget_list">
|
||||
<% @data.each do |row_data| %>
|
||||
<%= content_tag(:li) do %>
|
||||
<% @frontend_field_names.each_with_index do |field,index|%>
|
||||
<%= content_tag(:span, link_to_field(row_data,field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s}),:class=>@frontend_classes[index]) unless field.blank?%>
|
||||
<%= content_tag(:li, class: get_top_hot_class(row_data)) do %>
|
||||
<% @frontend_field_names.each_with_index do |field, index|%>
|
||||
<%= content_tag(:span, link_to_field(row_data, field, @frontend_sat_to_links[index], {orig_page: @page_id.to_s, category_id: get_row_category(row_data), tag_id: get_row_tags(row_data)}), class: @frontend_classes[index]) unless field.blank? %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -35,14 +35,6 @@
|
||||
<%= text_field_tag 'q','',{:class => "search-query span3",:placeholder=> t(:search_google) ,:disabled=> ((@site.search["sitesearch"] || @site.search["domains"] ).blank? rescue true)}%>
|
||||
</form>
|
||||
</li>
|
||||
<li class="dropdown language">
|
||||
<a class="dropdown-toggle orbit-bar-language" href="#" data-toggle="dropdown" data-icons=""></a>
|
||||
<ul class="dropdown-menu language-menu">
|
||||
<% @site_in_use_locales.compact.each do |locale| %>
|
||||
<%= content_tag :li, (link_to t(:_locale, :locale => locale), add_locale(remove_locale((referer rescue request.fullpath)), locale)), :class => (I18n.locale.eql?(locale.to_sym) ? 'active' : nil) %>
|
||||
<% end %>
|
||||
</ul>
|
||||
</li>
|
||||
<% if user_signed_in? %>
|
||||
<li class="dropdown active">
|
||||
<a class="orbit-bar-account" href="#" data-toggle="dropdown">
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html class="<%= I18n.locale.to_s %>">
|
||||
<head>
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-39393439-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
<meta charset="utf-8">
|
||||
<%= page_title(@item).html_safe %>
|
||||
<link rel="shortcut icon" href="<%= asset_path "ncculogo.ico" %>">
|
||||
|
||||
@@ -3,9 +3,6 @@
|
||||
<% end %>
|
||||
|
||||
<ul>
|
||||
<li>總機電話:<a href="tel:+886229393091">02-29393091</a></li>
|
||||
<li>傳真:02-29379611</li>
|
||||
<li>緊急重大事件通聯窗口:校內分機 66119、66110</li>
|
||||
<li>總值日室:<a href="tel:+88229387132">02-29387132</a></li>
|
||||
<li>駐警衛室:<a href="tel:+88229387129">02-29387129</a></li>
|
||||
<li>學務處電話:<a href="tel:+886-2-3366-2995~2997">+886-2-3366-2995~2997</a></li>
|
||||
<li>學務處傳真:+886-2-2391-9095</li>
|
||||
</ul>
|
||||
@@ -5,6 +5,6 @@
|
||||
<div id='map_canvas'></div>
|
||||
|
||||
<script type='text/javascript'>
|
||||
var $map_center = "24.987449, 121.576117"
|
||||
var $map_center = "25.015205, 121.535491"
|
||||
var $map_zoom = 17
|
||||
</script>
|
||||
@@ -54,7 +54,7 @@ module Orbit
|
||||
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
||||
# config.i18n.default_locale = :de
|
||||
config.i18n.load_path += Dir[Rails.root.join('vendor', 'built_in_modules', '*', 'config', 'locales', '*.{rb,yml}').to_s]
|
||||
config.i18n.default_locale = :zh_tw
|
||||
config.i18n.default_locale = :en
|
||||
|
||||
# JavaScript files you want as :defaults (application.js is always included).
|
||||
# config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
|
||||
|
||||
@@ -3,6 +3,7 @@ defaults: &defaults
|
||||
store_ip: 'redmine.rulingcom.com:3001'
|
||||
orbit: 'Orbit'
|
||||
ruling_digital: 'RulingDigital'
|
||||
backup_keep_for_days: 30
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
|
||||
@@ -3,7 +3,7 @@ require 'resque_scheduler/server'
|
||||
# require 'yaml'
|
||||
|
||||
Resque.redis = 'localhost:6379'
|
||||
Resque.redis.namespace = "resque"
|
||||
Resque.redis.namespace = Site.first.resque_namespace rescue APP_CONFIG['orbit']
|
||||
|
||||
# If you want to be able to dynamically change the schedule,
|
||||
# uncomment this line. A dynamic schedule can be updated via the
|
||||
|
||||
@@ -4,10 +4,10 @@ en:
|
||||
bulletin: Bulletin
|
||||
contact: Contact
|
||||
copyright: Copyright
|
||||
copyright_text: Thisi University © All RIGHTS RESERVED.
|
||||
copyright_text: Copyright© 2008 National Taiwan University ALL RIGHTS RESERVED
|
||||
copyright_orbit: Powered by RulingDigital
|
||||
home: Home
|
||||
language: Language
|
||||
location: Location
|
||||
location_description: '<h3>This University</h3>No.101,Sec. 2, Jiafeng S Road, Zhubei City, Hsinchu County 302, Taiwan'
|
||||
location_description: '<h3>National Taiwan University</h3>No. 1, Sec. 4, Roosevelt Road, Taipei, 10617 Taiwan (R.O.C)'
|
||||
page: Page
|
||||
@@ -4,10 +4,10 @@ zh_tw:
|
||||
bulletin: 公告
|
||||
contact: 聯絡資訊
|
||||
copyright: 著作權宣告
|
||||
copyright_text: 本網站著作權屬於本大學。
|
||||
copyright_text: 本網站著作權屬於國立臺灣大學 學生事務處
|
||||
copyright_orbit: 銳綸數位建置
|
||||
home: 首頁
|
||||
language: 語言
|
||||
location: 地理位置
|
||||
location_description: '<h3>本大學</h3>302新竹縣竹北市嘉豐南路二段101號'
|
||||
location_description: '<h3>臺灣大學總務處 版權所有</h3>10617 臺北市大安區羅斯福路四段一號'
|
||||
page: 頁面
|
||||
@@ -0,0 +1,4 @@
|
||||
en:
|
||||
|
||||
ntu:
|
||||
rss_origin: Back to NTU Announcements
|
||||
@@ -0,0 +1,4 @@
|
||||
zh_tw:
|
||||
|
||||
ntu:
|
||||
rss_origin: 回臺大校園公佈欄
|
||||
+2
-2
@@ -8,7 +8,7 @@ defaults: &defaults
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
database: production_7
|
||||
database: test_site
|
||||
test:
|
||||
<<: *defaults
|
||||
database: test_site
|
||||
@@ -21,4 +21,4 @@ production:
|
||||
# password: <%= ENV['MONGOID_PASSWORD'] %>
|
||||
# database: <%= ENV['MONGOID_DATABASE'] %>
|
||||
<<: *defaults
|
||||
database: demo_site_production
|
||||
database: test_site
|
||||
@@ -1,5 +1,17 @@
|
||||
dashboard_counter_cache:
|
||||
cron: 0 * * * * *
|
||||
class: DashboardCounter
|
||||
args:
|
||||
description: DashboardCounterCache
|
||||
|
||||
backup_server:
|
||||
cron: 0 0 2 * * *
|
||||
class: BackupServer
|
||||
args:
|
||||
description: BackupServer and remove old backups
|
||||
|
||||
update_tag_cloud:
|
||||
cron: 0 0 [0,12] * * *
|
||||
cron: 0 30 2 * * *
|
||||
class: UpdateTagCloud
|
||||
args:
|
||||
description: UpdateTagCloud
|
||||
@@ -10,8 +22,14 @@ generate_system_summary:
|
||||
args:
|
||||
description: Generate the system status such as disk free space,package version list for showing at site tab
|
||||
|
||||
email_cron:
|
||||
email_cron:
|
||||
cron: 0 0 [10,16,22] * * *
|
||||
class: EmailCron
|
||||
args:
|
||||
description: EmailCron
|
||||
description: EmailCron
|
||||
|
||||
get_announcement_from_rss:
|
||||
cron: 0 0 [2,12] * * *
|
||||
class: GetAnnouncementFromRss
|
||||
args:
|
||||
description: Loop through the announcement RSS until 24h ago
|
||||
@@ -0,0 +1,18 @@
|
||||
class DelayImpressionistRequest
|
||||
attr_accessor :session_options,:remote_ip,:referer,:user_agent
|
||||
def initialize(request=nil)
|
||||
if request
|
||||
self.session_options=request.session_options
|
||||
self.remote_ip=request.remote_ip
|
||||
self.referer=request.referer
|
||||
self.user_agent=request.user_agent
|
||||
end
|
||||
end
|
||||
|
||||
def restore(args)
|
||||
args.each do |key,value|
|
||||
self.send("#{key}=", value)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -6,15 +6,14 @@ module DefaultWidgetTagHelper
|
||||
@request = req
|
||||
params.delete :inner
|
||||
@params = params
|
||||
|
||||
params_str ="?"
|
||||
params_str = "?"
|
||||
params.each do |index,param|
|
||||
if param.is_a?(Array) and !param.blank?
|
||||
params_str << "&" unless params_str.eql?("?")
|
||||
params_str << param.collect{|t| "#{index}[]=#{t}"}.join("&")
|
||||
params.delete index
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
params_str = params_str + (params_str.eql?("?") ? params.to_param : "&#{params.to_param}" )
|
||||
content_tag :div,:class=> 'more' do
|
||||
link_to I18n.t(@more_link[:label_i18n]),[eval("#{@more_link[:path_method]}"),params_str].join()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -102,12 +102,17 @@ module OrbitApp
|
||||
def initialize(&block)
|
||||
@query = nil
|
||||
@image = nil
|
||||
@sorting_query = 'desc(:created_at)'
|
||||
@more_link = {}
|
||||
@fields = []
|
||||
@enabled_styles = STYLE
|
||||
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
|
||||
end
|
||||
|
||||
def sorting(query)
|
||||
@sorting_query = query
|
||||
end
|
||||
|
||||
def enable(args)
|
||||
@enabled_styles = args
|
||||
end
|
||||
@@ -122,7 +127,7 @@ module OrbitApp
|
||||
end
|
||||
|
||||
def to_module_app_format
|
||||
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles} rescue nil
|
||||
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles,:sorting_query=>@sorting_query} rescue nil
|
||||
end
|
||||
|
||||
def link_field(field_name,setting)
|
||||
|
||||
@@ -79,9 +79,10 @@ module OrbitCoreLib
|
||||
else
|
||||
auth_object_space = ObjectAuth.where(obj_authable_type: self.to_s,title: title)
|
||||
end
|
||||
|
||||
query1 = auth_object_space.any_in({sub_role_ids: sub_role_ids_ary}).excludes(blocked_user_ids: user.id)
|
||||
query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id},{role_ids: user.role_ids}).excludes(blocked_user_ids: user.id)
|
||||
query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id}).excludes(blocked_user_ids: user.id)
|
||||
# query2 = auth_object_space.any_of({all: true},{privilege_user_ids: user.id},{role_ids: user.role_ids}).excludes(blocked_user_ids: user.id) #save for backup if something went wrong (0626 Matt)
|
||||
|
||||
result = (query1 + query2).uniq
|
||||
result.collect{|t| t.obj_authable}.delete_if{|val| val==nil}
|
||||
end
|
||||
|
||||
@@ -43,6 +43,7 @@ module OrbitTag
|
||||
def tags=(tag_ids)
|
||||
ids = [tag_ids].flatten
|
||||
tag_ids.delete('')
|
||||
self.tagged_ids = tag_ids
|
||||
ids = self.taggings.blank? ? [] : self.taggings.map{|t| t.tag.id}
|
||||
tag_ids.each do |tag_id|
|
||||
unless ids.include? tag_id
|
||||
@@ -58,9 +59,6 @@ module OrbitTag
|
||||
|
||||
def tag_ids=(ids)
|
||||
self.tags = ids
|
||||
ids = [ids].flatten
|
||||
ids.delete('')
|
||||
self.tagged_ids = ids
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# encoding: utf-8
|
||||
|
||||
require 'rss'
|
||||
require 'mongo'
|
||||
|
||||
AUTHORS = %w[ 學生事務處-學生住宿服務組
|
||||
學生事務處-學生職業生涯發展中心
|
||||
學生事務處-衛生保健及醫療中心
|
||||
學生事務處-課外活動指導組
|
||||
學生事務處-學生活動中心管理組
|
||||
學生事務處-僑生及陸生輔導組
|
||||
學生事務處-生活輔導組
|
||||
學生事務處-軍訓組
|
||||
學生事務處-學生心理輔導中心
|
||||
學生事務處-學生事務處]
|
||||
|
||||
DB_BASE_NAME = "site"
|
||||
|
||||
all = []
|
||||
continue = true
|
||||
i = 1
|
||||
yesterday = Time.now - 86400
|
||||
|
||||
while continue do
|
||||
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
|
||||
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
|
||||
feed.items.each do |item|
|
||||
if item.pubDate > yesterday
|
||||
if AUTHORS.include?(item.author)
|
||||
author = item.author.strip
|
||||
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
|
||||
all << {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
|
||||
end
|
||||
else
|
||||
continue = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
i += 1
|
||||
end
|
||||
|
||||
# Get corresponding category_id or create a new one
|
||||
def get_category_id(category, categories, coll_cat)
|
||||
if categories.keys.include? "rss_#{category}"
|
||||
[categories["rss_#{category}"], categories]
|
||||
else
|
||||
cat = {
|
||||
_type: "BulletinCategory",
|
||||
key: "rss_#{category}",
|
||||
disable: false,
|
||||
title: {:zh_tw => category},
|
||||
created_at: Time.now,
|
||||
updated_at: Time.now
|
||||
}
|
||||
categories["rss_#{category}"] = result = coll_cat.save(cat)
|
||||
[result, categories]
|
||||
end
|
||||
end
|
||||
|
||||
# Get categories and id based on a given site number
|
||||
def get_mongo_and_categories(site_number="0")
|
||||
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
|
||||
coll_bulletin = db["bulletins"]
|
||||
coll_cat = db["bulletin_categories"]
|
||||
|
||||
categories = coll_cat.find().to_a.inject({}) do |categories, category|
|
||||
categories[category['key']] = category['_id']
|
||||
categories
|
||||
end
|
||||
[categories, coll_bulletin, coll_cat]
|
||||
end
|
||||
|
||||
# Get categories
|
||||
categories, coll_bulletin, coll_cat = get_mongo_and_categories
|
||||
|
||||
all.each do |bul| # Loop through all the items
|
||||
category_id, categories = get_category_id(bul[:category], categories, coll_cat)
|
||||
unless coll_bulletin.find_one(rss_link: bul[:link])
|
||||
bulletin = { _type: "Bulletin",
|
||||
postdate: bul[:date],
|
||||
created_at: bul[:date],
|
||||
updated_at: bul[:date],
|
||||
is_checked: true,
|
||||
is_pending: false,
|
||||
is_rejected: false,
|
||||
bulletin_category_id: category_id,
|
||||
title: {:zh_tw => bul[:title]},
|
||||
text: {:zh_tw => bul[:description]},
|
||||
available_for_zh_tw: true,
|
||||
rss_link: bul[:link] }
|
||||
coll_bulletin.save(bulletin)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'rss'
|
||||
require 'mongo'
|
||||
|
||||
AUTHORS = %w[ 學生事務處-學生住宿服務組
|
||||
學生事務處-學生職業生涯發展中心
|
||||
學生事務處-衛生保健及醫療中心
|
||||
學生事務處-課外活動指導組
|
||||
學生事務處-學生活動中心管理組
|
||||
學生事務處-僑生及陸生輔導組
|
||||
學生事務處-生活輔導組
|
||||
學生事務處-軍訓組
|
||||
學生事務處-學生心理輔導中心
|
||||
學生事務處-學生事務處]
|
||||
|
||||
DB_BASE_NAME = "site"
|
||||
|
||||
all = []
|
||||
continue = true
|
||||
i = 1
|
||||
while continue do
|
||||
open("http://ann.cc.ntu.edu.tw/asp/rss.asp?page=#{i}") do |rss|
|
||||
feed = RSS::Parser.parse(rss.read.encode('utf-8', 'big5', invalid: :replace, undef: :replace, replace: '').gsub('<pubDate>Wes,', '<pubDate>Wed,').gsub(/(encoding=\"big5\")/, 'encoding="utf-8"'))
|
||||
feed.items.size
|
||||
feed.items.each do |item|
|
||||
if AUTHORS.include?(item.author)
|
||||
author = item.author.strip
|
||||
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
|
||||
all << {title: item.title.strip, author: author, link: item.link.strip, date: item.pubDate, category: category, description: item.description.gsub("\r\n", '<br/>').strip}
|
||||
end
|
||||
end
|
||||
continue = false if feed.items.size < 100
|
||||
end
|
||||
i += 1
|
||||
end
|
||||
|
||||
# Get corresponding category_id or create a new one
|
||||
def get_category_id(category, categories, coll_cat)
|
||||
if categories.keys.include? "rss_#{category}"
|
||||
[categories["rss_#{category}"], categories]
|
||||
else
|
||||
cat = {
|
||||
_type: "BulletinCategory",
|
||||
key: "rss_#{category}",
|
||||
disable: false,
|
||||
title: {:zh_tw => category},
|
||||
created_at: Time.now,
|
||||
updated_at: Time.now
|
||||
}
|
||||
categories["rss_#{category}"] = result = coll_cat.save(cat)
|
||||
[result, categories]
|
||||
end
|
||||
end
|
||||
|
||||
# Get categories and id based on a given site number
|
||||
def get_mongo_and_categories(site_number="0")
|
||||
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}_#{site_number}")
|
||||
coll_bulletin = db["bulletins"]
|
||||
coll_cat = db["bulletin_categories"]
|
||||
|
||||
categories = coll_cat.find().to_a.inject({}) do |categories, category|
|
||||
categories[category['key']] = category['_id']
|
||||
categories
|
||||
end
|
||||
[categories, coll_bulletin, coll_cat]
|
||||
end
|
||||
|
||||
# Get categories
|
||||
categories, coll_bulletin, coll_cat = get_mongo_and_categories
|
||||
|
||||
all.each do |bul| # Loop through all the items
|
||||
category_id, categories = get_category_id(bul[:category], categories, coll_cat)
|
||||
unless coll_bulletin.find_one(rss_link: bul[:link])
|
||||
bulletin = { _type: "Bulletin",
|
||||
postdate: bul[:date],
|
||||
created_at: bul[:date],
|
||||
updated_at: bul[:date],
|
||||
is_checked: true,
|
||||
is_pending: false,
|
||||
is_rejected: false,
|
||||
bulletin_category_id: category_id,
|
||||
title: {:zh_tw => bul[:title]},
|
||||
text: {:zh_tw => bul[:description]},
|
||||
available_for_zh_tw: true,
|
||||
rss_link: bul[:link] }
|
||||
coll_bulletin.save(bulletin)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -310,4 +310,88 @@ namespace :migrate do
|
||||
Rake::Task["web_link_url:web_link_url_i18n"].execute
|
||||
end
|
||||
|
||||
task :save_users => :environment do
|
||||
User.where(:email.not => /guest/).each{|s|s.save}
|
||||
end
|
||||
|
||||
task :fix_bulletin_rss_available_lang => :environment do
|
||||
Bulletin.all.each do |bull|
|
||||
if bull.create_user_id.nil?
|
||||
bull.update_attribute(:available_for_zh_tw, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task :fix_imported_rss => :environment do
|
||||
categories = BulletinCategory.where(key: /rss_/).entries
|
||||
unless categories.blank?
|
||||
categories.each do |category|
|
||||
bulletins = category.bulletins
|
||||
unless bulletins.blank?
|
||||
bulletins.each do |bulletin|
|
||||
bulletin.update_attribute(:is_top, false) unless bulletin.is_top?
|
||||
bulletin.update_attribute(:is_hot, false) unless bulletin.is_hot?
|
||||
bulletin.update_attribute(:is_hidden, false) unless bulletin.is_hidden?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task :fix_tagged_ids => :environment do
|
||||
Tag.all.each do |tag|
|
||||
tag.taggings.each do |tagging|
|
||||
tagged_ids = tagging.taggable.tagged_ids
|
||||
unless tagged_ids.include?(tag.id.to_s)
|
||||
tagged_ids << tag.id.to_s
|
||||
tagging.taggable.update_attribute(:tagged_ids, tagged_ids)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task :clear_news_tags => :environment do
|
||||
`mongo #{Mongoid.config.database.name} --eval "db.tags.remove({_type: {$ne: 'Tag'}})"`
|
||||
end
|
||||
|
||||
task :add_missing_user_link => :environment do
|
||||
User.all.each do |user|
|
||||
user.role_ids.uniq!
|
||||
user.sub_role_ids.uniq!
|
||||
user.save
|
||||
user.roles.each do |role|
|
||||
unless role.user_ids.include?(user.id)
|
||||
role.user_ids << user.id
|
||||
role.save
|
||||
end
|
||||
end
|
||||
user.sub_roles.each do |sub_role|
|
||||
unless sub_role.user_ids.include?(user.id)
|
||||
sub_role.user_ids << user.id
|
||||
sub_role.save
|
||||
end
|
||||
end
|
||||
end
|
||||
Role.all.each do |role|
|
||||
role.user_ids.uniq!
|
||||
role.save
|
||||
role.users.each do |user|
|
||||
unless user.role_ids.include?(role.id)
|
||||
user.role_ids << role.id
|
||||
user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
SubRole.all.each do |sub_role|
|
||||
sub_role.user_ids.uniq!
|
||||
sub_role.save
|
||||
sub_role.users.each do |user|
|
||||
unless user.sub_role_ids.include?(sub_role.id)
|
||||
user.sub_role_ids << sub_role.id
|
||||
user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,168 @@
|
||||
# encoding: utf-8
|
||||
|
||||
namespace :mongo_files do
|
||||
|
||||
MODELS = { 'ad_image' => 'file',
|
||||
'archive_file_multiple' => 'file',
|
||||
'asset' => 'data',
|
||||
'bulletin' => 'image',
|
||||
'bulletin_file' => 'file',
|
||||
'design' => 'zip_file',
|
||||
'design_file' => 'file',
|
||||
'gallery_image' => 'file',
|
||||
'image' => 'file',
|
||||
'lab_file' => 'file',
|
||||
'location_info' => 'file',
|
||||
'preview_file' => 'file',
|
||||
'project_file' => 'file',
|
||||
'research_file' => 'file',
|
||||
'site' => 'default_image',
|
||||
'stylesheet' => 'file_orig',
|
||||
'user' => 'avatar',
|
||||
'writing_book_file' => 'file',
|
||||
'writing_conference_file' => 'file',
|
||||
'writing_journal_file' => 'file',
|
||||
'writing_patent_file' => 'file' }
|
||||
|
||||
IMAGE_UPLOADER_MODELS = %w[ad_image bulletin image site]
|
||||
|
||||
task :clean => :environment do
|
||||
@files = Mongoid.database['fs.files']
|
||||
@chunks = Mongoid.database['fs.chunks']
|
||||
clean_duplicates
|
||||
clean_unused
|
||||
remove_objects
|
||||
end
|
||||
|
||||
# Remove unused files from db
|
||||
def clean_unused
|
||||
db_array = @files.find().inject([]) do |db_files, file|
|
||||
db_files << file['filename']
|
||||
db_files
|
||||
end
|
||||
|
||||
p "# of files in db: #{db_array.size}"
|
||||
|
||||
name_array = MODELS.inject([]) do |model_files, (model, type)|
|
||||
model.classify.constantize.all.each do |item|
|
||||
url = item.send(type).url
|
||||
thumb_url = item.send(type).thumb.url rescue nil
|
||||
if url && !url.eql?('sign-in-logo.png')
|
||||
url = url.gsub('/gridfs/', '')
|
||||
model_files << url
|
||||
end
|
||||
if thumb_url && !thumb_url.eql?('sign-in-logo.png')
|
||||
thumb_url = thumb_url.gsub('/gridfs/', '')
|
||||
model_files << thumb_url
|
||||
end
|
||||
end
|
||||
model_files
|
||||
end
|
||||
|
||||
p "# of files from uploaders: #{name_array.size}"
|
||||
useless_files = db_array - name_array
|
||||
p "# of unmatched files: #{useless_files.size}"
|
||||
|
||||
useless_files.each do |file|
|
||||
id = @files.find_one('filename' => file)['_id']
|
||||
@files.remove('_id' => id)
|
||||
@chunks.remove('files_id' => id)
|
||||
end
|
||||
# p files.remove('filename' => { "$in" => useless_files})
|
||||
end
|
||||
|
||||
|
||||
# Remove duplicate files from db
|
||||
def clean_duplicates
|
||||
p "# of files in db: #{@files.count}"
|
||||
file_hash = @files.find().sort({uploadDate: -1}).inject({}) do |db_files, file|
|
||||
name = file['filename']
|
||||
if db_files[name]
|
||||
db_files[name] += [file['_id']]
|
||||
else
|
||||
db_files[name] = [file['_id']]
|
||||
end
|
||||
db_files
|
||||
end
|
||||
file_array = file_hash.inject([]) do |files, (key, value)|
|
||||
files += value.drop(1) if value.size > 1
|
||||
files
|
||||
end
|
||||
p "# of duplicate ids to delete: #{file_array.size}"
|
||||
file_array.each do |id|
|
||||
@files.remove('_id' => id)
|
||||
@chunks.remove('files_id' => id)
|
||||
end
|
||||
end
|
||||
|
||||
task :file_size => :environment do
|
||||
files = Mongoid.database['fs.files']
|
||||
size_array = files.find().inject([]) do |size, file|
|
||||
# size << [file['length'], file['filename']]
|
||||
size << [file['filename'], file['length']]
|
||||
size
|
||||
end
|
||||
size_array.sort.each do |pair|
|
||||
p "#{pair[0]} - #{pair[1]}"
|
||||
end
|
||||
p size_array.size
|
||||
end
|
||||
|
||||
def remove_objects
|
||||
# Destroy writing_journals and writing_journal_files
|
||||
Mongoid.database['writing_journals'].remove()
|
||||
Mongoid.database['writing_journal_files'].remove()
|
||||
|
||||
db_array = @files.find().inject([]) do |db_files, file|
|
||||
db_files << file['filename'] if file['filename'] =~ /writing_journal_file|news_bulletin_file|image\/image/
|
||||
db_files
|
||||
end
|
||||
p db_array.size
|
||||
db_array.each do |file|
|
||||
id = @files.find_one('filename' => file)['_id']
|
||||
@files.remove('_id' => id)
|
||||
@chunks.remove('files_id' => id)
|
||||
end
|
||||
end
|
||||
|
||||
def remove_unlinked
|
||||
# name_array = AdBanner.all.inject([]) do |files, banner|
|
||||
# banner.ad_images.inject(files) do |image_files, image|
|
||||
# url = image.file.url
|
||||
# thumb_url = image.file.thumb.url rescue nil
|
||||
# if url && !url.eql?('sign-in-logo.png')
|
||||
# url = url.gsub('/gridfs/', '')
|
||||
# image_files << url
|
||||
# end
|
||||
# if thumb_url && !thumb_url.eql?('sign-in-logo.png')
|
||||
# thumb_url = thumb_url.gsub('/gridfs/', '')
|
||||
# image_files << thumb_url
|
||||
# end
|
||||
# image_files
|
||||
# end
|
||||
# files
|
||||
# end
|
||||
name_array = Design.all.inject([]) do |files, design|
|
||||
files += design.images.inject(files) do |image_files, image|
|
||||
p image_files += get_url_and_thumb(image.file)
|
||||
image_files
|
||||
end
|
||||
files
|
||||
end
|
||||
p name_array.size
|
||||
end
|
||||
|
||||
def get_url_and_thumb(file)
|
||||
url = file.url
|
||||
thumb_url = file.thumb.url rescue nil
|
||||
files = [url, thumb_url].inject([]) do |urls, current|
|
||||
urls << current.gsub('/gridfs/', '') if current && !current.eql?('sign-in-logo.png')
|
||||
urls
|
||||
end
|
||||
files
|
||||
end
|
||||
|
||||
task :delete_rss_ann => :environment do
|
||||
Bulletin.where(create_user_id: nil).destroy
|
||||
end
|
||||
end
|
||||
+82
-4
@@ -1,4 +1,5 @@
|
||||
# encoding: utf-8
|
||||
require 'erb'
|
||||
|
||||
namespace :site do
|
||||
|
||||
@@ -9,21 +10,26 @@ namespace :site do
|
||||
Site.create( :school => 'RulingDigital University', :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ])
|
||||
User.create!(:email=>'chris@rulingcom.com',:admin=>true,:user_id=>'chris',:password=>'password')
|
||||
`mongo #{Mongoid.config.database.name} --eval "db.fs.chunks.ensureIndex({files_id: 1, n: 1})"`
|
||||
|
||||
puts "Congres you can now login within url"
|
||||
puts 'Please upload design package (/admin/designs/upload_package ) and run rake site:necessary_data'
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'en', :en => 'English', :zh_tw => '英文' )
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :zh_tw => '中文' )
|
||||
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
|
||||
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
|
||||
end
|
||||
|
||||
task :create_logrotate => :environment do #Can remove after all products update
|
||||
create_rulingcom_logrotate
|
||||
end
|
||||
|
||||
task :necessary_data => :environment do
|
||||
auto_setting
|
||||
site = Site.first
|
||||
site.title = 'RulingOrbit Demo Site'
|
||||
site.save
|
||||
site.update_attribute(:title,'RulingOrbit Demo Site')
|
||||
site.update_attribute(:resque_namespace,@resque_namespace)
|
||||
|
||||
# home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁')
|
||||
design = Design.first
|
||||
site = Site.first
|
||||
site.design = design
|
||||
site.save
|
||||
theme = design.themes.first
|
||||
@@ -31,6 +37,78 @@ namespace :site do
|
||||
|
||||
home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"}
|
||||
home.save
|
||||
|
||||
puts "Rember to restart server after you setup all sites for starting God"
|
||||
end
|
||||
|
||||
task :start_auto_setting => :environment do
|
||||
auto_setting
|
||||
end
|
||||
|
||||
def auto_setting
|
||||
puts "Enter your resque namespace[Orbit]:......"
|
||||
@resque_namespace = STDIN.gets.gsub("\n",'')
|
||||
@resque_namespace = APP_CONFIG['orbit'] if @resque_namespace.empty?
|
||||
|
||||
|
||||
puts "Is this the only site [ Entry site? ] on this mechine?[Default No]:......"
|
||||
site_is_alone = false
|
||||
site_is_alone = STDIN.gets.gsub("\n",'')
|
||||
site_is_alone = true if site_is_alone.downcase == 'yes'
|
||||
|
||||
puts "Is this a primary site?[Default No]:......"
|
||||
site_is_primary = false
|
||||
site_is_primary = STDIN.gets.gsub("\n",'')
|
||||
site_is_primary = true if site_is_primary.downcase == 'yes'
|
||||
|
||||
puts "Traffic heavy?[Default No]:......"
|
||||
traffic_heavy = false
|
||||
traffic_heavy = STDIN.gets.gsub("\n",'')
|
||||
traffic_heavy = true if traffic_heavy.downcase == 'yes'
|
||||
|
||||
@traffic_rate = traffic_heavy ? 2 : 1
|
||||
|
||||
if site_is_alone
|
||||
@resque_workers = 5 * @traffic_rate #Entry Site
|
||||
else
|
||||
if site_is_primary
|
||||
@resque_workers = 2 * @traffic_rate #Primary Site
|
||||
else
|
||||
@resque_workers = 1 * @traffic_rate #Secondary Site
|
||||
end
|
||||
end
|
||||
|
||||
resque_setting = ERB.new(File.new("lib/template/setting/resque.god.erb").read)
|
||||
File.open("config/resque.god", 'w') { |file| file.write(resque_setting.result) }
|
||||
|
||||
resque_schedule_setting = ERB.new(File.new("lib/template/setting/resque_schedule.god.erb").read)
|
||||
File.open("config/resque_schedule.god", 'w') { |file| file.write(resque_schedule_setting.result) }
|
||||
|
||||
if site_is_primary
|
||||
solr_setting = ERB.new(File.new("lib/template/setting/solr.god.erb").read)
|
||||
File.open("config/solr.god", 'w') { |file| file.write(solr_setting.result) }
|
||||
create_rulingcom_logrotate
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def create_rulingcom_logrotate
|
||||
`sudo mkdir -p /var/log/rulingcom` unless File.directory? "/var/log/rulingcom"
|
||||
@project_folder = ENV["PWD"]
|
||||
puts "Is your Orbit folder: #{@project_folder} (If YES => Press enter,or enter your path)"
|
||||
user_enter_project_folder = STDIN.gets.gsub("\n",'')
|
||||
@project_folder = user_enter_project_folder unless user_enter_project_folder.empty?
|
||||
|
||||
@user_home_folder = ENV["HOME"]
|
||||
puts "Is your Home folder: #{@user_home_folder} (If YES => Press enter,or enter your path)"
|
||||
user_enter_home_folder = STDIN.gets.gsub("\n",'')
|
||||
@user_home_folder = user_enter_home_folder unless user_enter_home_folder.empty?
|
||||
|
||||
logrotate_setting = ERB.new(File.new("lib/template/setting/rulingcom_log.erb").read)
|
||||
File.open("#{@project_loc}/tmp/logrotate_setting", 'w') { |file| file.write(logrotate_setting.result) }
|
||||
|
||||
`sudo cp #{@project_loc}/tmp/logrotate_setting /etc/logrotate.d/rulingcom`
|
||||
`logrotate -v -f /etc/logrotate.conf`
|
||||
end
|
||||
|
||||
end
|
||||
@@ -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
@@ -9,17 +9,17 @@ namespace :web_link_url do
|
||||
|
||||
@weblinks.each do |wl|
|
||||
|
||||
if wl.url.nil?
|
||||
if wl.url_translations.is_a?(String)
|
||||
|
||||
@wlurl = wl.url_translations
|
||||
|
||||
wl.url_translations = {}
|
||||
|
||||
wl.url_translations["zh_tw"] = @wlurl
|
||||
|
||||
wl.url_translations["en"] = @wlurl
|
||||
|
||||
@wlurl = wl.url_translations
|
||||
|
||||
wl.url_translations = {}
|
||||
|
||||
wl.url_translations["zh_tw"] = @wlurl
|
||||
|
||||
wl.url_translations["en"] = @wlurl
|
||||
|
||||
wl.save
|
||||
wl.save
|
||||
|
||||
else
|
||||
puts 'no data'
|
||||
|
||||
@@ -4,33 +4,32 @@ user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
|
||||
development_uid = ''
|
||||
development_gid = ''
|
||||
|
||||
num_workers = rails_env == 'production' ? 5 : 2
|
||||
num_workers = rails_env == 'production' ? <%= @resque_workers %> : 1
|
||||
|
||||
num_workers.times do |num|
|
||||
God.watch do |w|
|
||||
|
||||
w.dir = rails_root
|
||||
w.name = "worker-#{num}"
|
||||
w.group = 'resque'
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-worker-#{num}"
|
||||
w.group = 'rulingcom'
|
||||
|
||||
w.interval = 30.seconds
|
||||
|
||||
queue = case num
|
||||
when 0
|
||||
'critical'
|
||||
when 1..2
|
||||
when 0..2
|
||||
'high,low'
|
||||
when 3..num_workers
|
||||
'low'
|
||||
end
|
||||
|
||||
w.env = {"QUEUE"=>queue, "RAILS_ENV"=>rails_env}
|
||||
w.start = "HOME=#{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:work"
|
||||
|
||||
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
|
||||
w.env = {"RAILS_ENV"=>rails_env,"PIDFILE" => w.pid_file ,"HOME"=>user_home, "QUEUE"=>queue, "RAILS_ENV"=>rails_env }
|
||||
w.start = "rake -f #{rails_root}/Rakefile resque:work"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
@@ -0,0 +1,59 @@
|
||||
rails_env = ENV['RAILS_ENV'] || "production"
|
||||
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/..'
|
||||
user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
|
||||
development_uid = ''
|
||||
development_gid = ''
|
||||
|
||||
God.watch do |w|
|
||||
w.dir = rails_root
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-scheduler"
|
||||
w.group = 'rulingcom'
|
||||
w.interval = 10.seconds
|
||||
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
|
||||
|
||||
w.env = {"QUEUE"=>"*", "RAILS_ENV"=>rails_env,"HOME"=>user_home, "RAILS_ENV"=>rails_env}
|
||||
w.start = "rake -f #{rails_root}/Rakefile resque:scheduler"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
on.condition(:memory_usage) do |c|
|
||||
c.above = 350.megabytes
|
||||
c.times = 2
|
||||
end
|
||||
end
|
||||
|
||||
# determine the state on startup
|
||||
w.transition(:init, { true => :up, false => :start }) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = true
|
||||
end
|
||||
end
|
||||
|
||||
# determine when process has finished starting
|
||||
w.transition([:start, :restart], :up) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = true
|
||||
c.interval = 5.seconds
|
||||
end
|
||||
|
||||
# failsafe
|
||||
on.condition(:tries) do |c|
|
||||
c.times = 5
|
||||
c.transition = :start
|
||||
c.interval = 5.seconds
|
||||
end
|
||||
end
|
||||
|
||||
# start if process is not running
|
||||
w.transition(:up, :start) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/var/log/rulingcom/*.log {
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#Resque
|
||||
<%= "#{@project_folder}/nginx/logs/access.log" %>{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#DB log
|
||||
/var/log/mongodb{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#Orbit
|
||||
<%= "#{@project_folder}/log/*production.log" %>{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
# end of Orbit,EXTEND IF NEEDED
|
||||
|
||||
#Remember to save this file as /etc/logrotate.d/rulingcom
|
||||
@@ -6,16 +6,19 @@ development_gid = ''
|
||||
|
||||
God.watch do |w|
|
||||
w.dir = rails_root
|
||||
w.name = "scheduler"
|
||||
w.group = 'resque'
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>sunspot-solr"
|
||||
w.group = 'rulingcom'
|
||||
w.pid_file = "#{rails_root}/solr/pids/production/sunspot-solr-production.pid"
|
||||
w.interval = 30.seconds
|
||||
w.env = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env}
|
||||
w.start = "HOME= #{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:scheduler"
|
||||
w.env = {"RAILS_ENV"=>rails_env,"HOME"=>user_home ,"RAILS_ENV"=>rails_env}
|
||||
w.start = "rake -f #{rails_root}/Rakefile sunspot:solr:start"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.keepalive
|
||||
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
File renamed without changes.
vendor/built_in_modules/announcement/app/assets/stylesheets/announcement/bulletins_and_web_links.css
Vendored
+78
@@ -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;
|
||||
}
|
||||
+6
-1
@@ -26,6 +26,7 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
|
||||
end
|
||||
|
||||
def index
|
||||
|
||||
@item = Page.find(params[:page_id]) rescue nil
|
||||
if @item
|
||||
if @item.frontend_data_count
|
||||
@@ -60,7 +61,11 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
|
||||
else
|
||||
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc( :is_top, :postdate).page( params[:page_main]).per(@page_num)
|
||||
end
|
||||
delayed_impressionist(@tag) if @tag
|
||||
if params["tag_id"]
|
||||
params["tag_id"].each do |tag_id|
|
||||
delayed_impressionist(Tag.find tag_id) rescue nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
+65
-4
@@ -66,14 +66,75 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
|
||||
|
||||
end
|
||||
|
||||
def bulletins_and_web_links
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
@title = @part.title_translations[I18n.locale.to_s]
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
if !params[:tag_id].blank?
|
||||
@tags = Tag.any_in(:_id => params[:tag_id]).asc(:created_at)
|
||||
elsif params[:tag_id].blank? and !@part.tag.blank?
|
||||
@tags = Tag.any_in(:_id => @part.tag).asc(:created_at)
|
||||
else
|
||||
@ModuleApp_b = ModuleApp.first(:conditions => {:key=>'announcement'})
|
||||
@tags = Tag.where(:module_tag_id => @ModuleApp_b.id).asc(:created_at)
|
||||
end
|
||||
|
||||
@selected_tag = Tag.find(params[:id]).first rescue @tags[0]
|
||||
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
|
||||
|
||||
if @part.widget_style == 'bulletins_and_web_links'
|
||||
@ModuleApp_w = ModuleApp.first(:conditions => {:key=>'web_resource'})
|
||||
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp_w.id})
|
||||
@web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def reload_bulletins
|
||||
@selected_tag = Tag.find(params[:tag_id])
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => params[:tag_id]).where(:is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, sort).page(params[:page]).per(5) rescue nil
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
@title = @part.title_translations[I18n.locale.to_s]
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
@selected_tag = Tag.find(params[:tag_id]).first
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
def reload_web_links
|
||||
@selected_tag = Tag.find(params[:tag_id])
|
||||
@web_links = WebLink.where(:name => @selected_tag.name).where(:is_hidden => false).desc(:is_top, sort).available_for_lang(I18n.locale).page(params[:page]).per(5) rescue nil
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
@selected_tag = Tag.find(params[:tag_id]).first
|
||||
@ModuleApp = ModuleApp.first(:conditions => {:key=>'web_resource'})
|
||||
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp.id})
|
||||
@web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
def bulletins_side_bar
|
||||
|
||||
@@ -14,7 +14,7 @@ class Bulletin
|
||||
include OrbitTag::Taggable
|
||||
taggable
|
||||
|
||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
||||
is_impressionable #:counter_cache => { :column_name => :view_count }
|
||||
|
||||
field :title, localize: true
|
||||
field :subtitle, localize: true
|
||||
@@ -40,6 +40,7 @@ class Bulletin
|
||||
field :not_checked_reason
|
||||
|
||||
field :public, :type => Boolean, :default => true
|
||||
field :rss_link
|
||||
|
||||
scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false)
|
||||
scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) }
|
||||
|
||||
Vendored
+5
@@ -36,6 +36,11 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% unless @bulletin.rss_link.blank? %>
|
||||
<div>
|
||||
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= share_links(@bulletin, 'announcement') %>
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
<% @bulletins.each do |bulletin| %>
|
||||
<li>
|
||||
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :tag_id => @selected_tag.id ) %>
|
||||
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :part_id => params[:part_id], :tag_id => [@selected_tag.id] ) %>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<div class='pagination'>
|
||||
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'next' %>
|
||||
</div>
|
||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
||||
<li>
|
||||
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:id => tag.id), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
|
||||
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:inner=>true, :id => [tag.id], :part_id=>params[:part_id]), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
|
||||
</li>
|
||||
+2
-2
@@ -5,6 +5,6 @@
|
||||
<% end %>
|
||||
|
||||
<div class='pagination'>
|
||||
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
</div>
|
||||
+36
@@ -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" %>
|
||||
+3
@@ -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 %>")
|
||||
@@ -16,6 +16,7 @@ en:
|
||||
bulletin_category_with_title: Bulletin Category with Title
|
||||
postdate: Post Date
|
||||
title: Title
|
||||
subtitle: SubTitle
|
||||
editing_announcement: Edit Announcement
|
||||
editing_announcement_category: Edit Category
|
||||
error:
|
||||
@@ -34,6 +35,6 @@ en:
|
||||
update_bulletin_category_success: Update Category Successfully
|
||||
url: URL
|
||||
widget:
|
||||
bulletins_and_web_links: Bulletins and Web Resources
|
||||
bulletins_and_web_links: Differential Nav.
|
||||
index: Index
|
||||
search: Search
|
||||
@@ -16,6 +16,7 @@ zh_tw:
|
||||
bulletin_category_with_title: 公告類別及標題
|
||||
postdate: 張貼日期
|
||||
title: 標題
|
||||
subtitle: 副標題
|
||||
editing_announcement: 編輯類別
|
||||
editing_announcement_category: 編輯類別
|
||||
error:
|
||||
@@ -34,6 +35,6 @@ zh_tw:
|
||||
update_bulletin_category_success: 更新類別成功
|
||||
url: 連結位置
|
||||
widget:
|
||||
bulletins_and_web_links: 索引
|
||||
bulletins_and_web_links: 分眾頁籤
|
||||
index: 索引
|
||||
search: 搜尋
|
||||
+11
-4
@@ -23,18 +23,20 @@ module Announcement
|
||||
end
|
||||
|
||||
category ["BulletinCategory"]
|
||||
data_count 3..10
|
||||
data_count 1..10
|
||||
|
||||
taggable
|
||||
|
||||
widgets do
|
||||
default_widget do
|
||||
query 'Bulletin.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
|
||||
enable ["typeA","typeC"]
|
||||
sorting 'desc(:postdate)'
|
||||
query 'Bulletin.available_for_lang(I18n.locale).any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
|
||||
enable ["typeA","typeB_style3","typeC"]
|
||||
image :image
|
||||
field :postdate
|
||||
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self}
|
||||
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self,:preview=>true}
|
||||
link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:bulletin_category,:id]}}
|
||||
field :subtitle
|
||||
link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
|
||||
end
|
||||
|
||||
@@ -50,6 +52,11 @@ module Announcement
|
||||
widget_i18n "announcement.widget.search"
|
||||
end
|
||||
|
||||
customize_widget "bulletins_and_web_links" do
|
||||
widget_i18n "announcement.widget.bulletins_and_web_links"
|
||||
style ["bulletins_and_links","bulletins_only"]
|
||||
end
|
||||
|
||||
# item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"]
|
||||
# item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
|
||||
end
|
||||
|
||||
+44
-4
@@ -1,14 +1,18 @@
|
||||
class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendController
|
||||
before_filter :for_app_manager,:except => [:index]
|
||||
include OrbitControllerLib::DivisionForDisable
|
||||
class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendController
|
||||
include OrbitControllerLib::DivisionForDisable
|
||||
|
||||
before_filter :for_app_manager,:except => [:index,:get_categorys_json,:get_archive_files_json]
|
||||
|
||||
before_filter :force_order_for_visitor,:only=>[:index,:get_categorys_json,:get_archive_files_json]
|
||||
before_filter :force_order_for_user,:except => [:index,:get_categorys_json,:get_archive_files_json]
|
||||
before_filter :for_app_sub_manager,:except => [:index,:get_categorys_json,:get_archive_files_json]
|
||||
|
||||
def index
|
||||
@archive_file_categorys = get_categories_for_index("ArchiveFileCategory")
|
||||
# @archive_file_categorys = ArchiveFileCategory.all
|
||||
@archive_file_category = ArchiveFileCategory.new(:display => 'List')
|
||||
|
||||
@url = panel_archive_back_end_archive_file_categorys_path
|
||||
@url = panel_archive_back_end_archive_file_categorys_path
|
||||
|
||||
respond_to do |format|
|
||||
format.html # index.html.erb
|
||||
@@ -16,6 +20,42 @@ class Panel::Archive::BackEnd::ArchiveFileCategorysController < OrbitBackendCont
|
||||
end
|
||||
end
|
||||
|
||||
def get_categorys_json
|
||||
categorys = ArchiveFileCategory.all
|
||||
data = Array.new
|
||||
|
||||
categorys.each do |c|
|
||||
data << {
|
||||
category: c.title,
|
||||
link: "#{url_for( :action => "index",
|
||||
:controller => "panel/archive/front_end/archive_files",
|
||||
:format => :rss,
|
||||
:only_path => false,
|
||||
:inner=>true,
|
||||
:category_id => c )}"
|
||||
}
|
||||
end
|
||||
|
||||
render :json => JSON.pretty_generate(data)
|
||||
end
|
||||
|
||||
def get_archive_files_json
|
||||
archive_file = ArchiveFileCategory.find(params[:archive_file_category_id]).archive_files
|
||||
p archive_file
|
||||
data = Array.new
|
||||
|
||||
archive_file.each do |b|
|
||||
|
||||
data << {
|
||||
title: b.title,
|
||||
link: "http://#{request.host_with_port}#{panel_archive_front_end_archive_file_path(b, :category_id => b.archive_file_category.id)}",
|
||||
tag: b.sorted_tags.to_a,
|
||||
}
|
||||
end
|
||||
|
||||
render :json => JSON.pretty_generate(data)
|
||||
end
|
||||
|
||||
# GET /archive_files/1
|
||||
# GET /archive_files/1.xml
|
||||
def show
|
||||
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
module Panel::Archive::BackEnd::ArchiveFileCategorysHelper
|
||||
include ActionView::Helpers::UrlHelper
|
||||
|
||||
|
||||
def show_anc_cate_permission_link(archive_file_category)
|
||||
type = 'submit'
|
||||
oa = archive_file_category.get_object_auth_by_title(type)
|
||||
if oa.nil?
|
||||
archive_file_category.object_auths.new(title: type ).save
|
||||
oa = archive_file_category.get_object_auth_by_title(type)
|
||||
end
|
||||
link_to t(:category_auth),admin_object_auth_ob_auth_path(oa)
|
||||
end
|
||||
|
||||
end
|
||||
+6
-3
@@ -1,13 +1,16 @@
|
||||
|
||||
|
||||
<tr id="<%= dom_id archive_file_category %>" class="with_action">
|
||||
<td>
|
||||
<%= archive_file_category.key %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills hide">
|
||||
<li><%= link_to t('archive_file_category.edit'), edit_panel_archive_back_end_archive_file_category_path(archive_file_category), :remote => true %></li>
|
||||
<% if is_admin?%>
|
||||
<li><%= link_to t(:edit), edit_panel_archive_back_end_archive_file_category_path(archive_file_category), :remote => true %></li>
|
||||
<li><%= link_to show_toggle_archive_btn(archive_file_category) , panel_archive_back_end_archive_file_category_path(archive_file_category), :confirm => t(:sure?), :method => :delete, :remote => true,:class=> "archive_toggle" %></li>
|
||||
<!-- <li><%#= link_to t('archive_file_category.delete'), panel_archive_back_end_archive_file_category_path(archive_file_category), :confirm => t('sure?'), :method => :delete, :remote => true %></li> -->
|
||||
<% end %>
|
||||
<%if is_manager? || is_admin? %>
|
||||
<li><%= show_anc_cate_permission_link(archive_file_category) %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
+10
-9
@@ -24,16 +24,17 @@
|
||||
</td>
|
||||
<td><%= archive_file.archive_file_category.title %></td>
|
||||
<td>
|
||||
<%= link_to archive_file.title, panel_archive_front_end_archive_file_path(archive_file) %>
|
||||
<%= link_to archive_file.title, panel_archive_front_end_archive_file_path(archive_file) %>
|
||||
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills hide">
|
||||
<% if (archive_file.create_user_id == current_or_guest_user.id) || is_manager? %>
|
||||
<li><%= link_to t(:edit), edit_panel_archive_back_end_archive_file_path(archive_file) %></li>
|
||||
<li class="dropdown"><%= link_to t(:delete_), panel_archive_back_end_archive_file_path(archive_file), :confirm => t(:sure?), :method => :delete, :remote => true %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills hide">
|
||||
<%if at_least_module_manager || archive_file.archive_file_category.cur_user_is_sub_manager_of(:edit)%>
|
||||
<li><%= link_to t('edit'), edit_panel_archive_back_end_archive_file_path(archive_file, :page => params[:page], :filter => @filter) %></li>
|
||||
<li><%= link_to t(:delete_), panel_archive_back_end_archive_file_path(archive_file), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="label-group">
|
||||
|
||||
+8
-3
@@ -50,7 +50,7 @@ module Archive
|
||||
head_label_i18n 'archive.archive',:icon_class=>"icons-archive"
|
||||
available_for [:admin,:guest,:manager,:sub_manager]
|
||||
active_for_controllers ({:private=>['archive_file_categorys','archive_files'],:public=>['panel/archive/back_end/tags']})
|
||||
# active_for_object_auth ['BulletinCategory']
|
||||
active_for_object_auth ['ArchiveFileCategory']
|
||||
|
||||
head_link_path "panel_archive_back_end_archive_files_path"
|
||||
|
||||
@@ -64,7 +64,7 @@ module Archive
|
||||
:link_path=>"new_panel_archive_back_end_archive_file_path" ,
|
||||
:priority=>2,
|
||||
:active_for_action=>{:archive_files=>:new},
|
||||
:available_for => [:admin]
|
||||
:available_for => [:sub_manager]
|
||||
|
||||
context_link 'categories',
|
||||
:link_path=>"panel_archive_back_end_archive_file_categorys_path" ,
|
||||
@@ -76,7 +76,12 @@ module Archive
|
||||
:link_path=>"admin_tags_path(:module_app_id => ModuleApp.first(conditions: {title: 'Archive'}))" ,
|
||||
:priority=>4,
|
||||
# :active_for_action=>{:bulletin_categorys=>:index},
|
||||
:available_for => [:admin]
|
||||
:available_for => [:manager]
|
||||
|
||||
context_link 'module_authorization',
|
||||
:link_path=>"admin_module_app_manager_auth_proc_path(ModuleApp.first(conditions: {title: 'Archive'}))",
|
||||
:priority=>6,
|
||||
:active_for_app_auth => 'Archive'
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Vendored
-28
@@ -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
|
||||
-11
@@ -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.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
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 gotcha_valid? && @ask_question.save
|
||||
@acknowledgement = AskAcknowledgement.last
|
||||
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowlegement.new
|
||||
#@ask_question.save
|
||||
redirect_to root_path
|
||||
AskAdmin.all.each do |ask_admin|
|
||||
AskMailer.notice(ask_admin, @ask_question).deliver
|
||||
Resque.enqueue(SendAskNoticeMail, ask_admin.id, @ask_question.id)
|
||||
end
|
||||
# redirect_to panel_ask_front_end_thank_you_path
|
||||
respond_to do |format|
|
||||
format.js
|
||||
# format.js { render :thank_you, notice: 'Your question has been successfully sent.' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def thank_you
|
||||
@acknowledgement = AskAcknowledgement.last
|
||||
@item = Page.find(params[:page_id]) rescue nil
|
||||
if @item
|
||||
if @item.frontend_data_count
|
||||
@page_num = @item.frontend_data_count
|
||||
else
|
||||
@page_num = 15
|
||||
end
|
||||
@frontend_style = @item.frontend_style
|
||||
end
|
||||
@item = Page.find(params[:page_id]) rescue nil
|
||||
end
|
||||
end
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
class AskMailer < ActionMailer::Base
|
||||
default from: 'orbit_test@rulingcom.com'
|
||||
|
||||
|
||||
def reply(ask_question)
|
||||
@ask_question = ask_question
|
||||
mail(:to => @ask_question.email, :subject => "#{t('ask.reply')}:#{@ask_question.title}")
|
||||
Loaded 100 of 289 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user