fix some error
This commit is contained in:
parent
96665aeb93
commit
716a1ca64a
|
@ -1,8 +1,8 @@
|
|||
.bundle/
|
||||
log/*.log
|
||||
pkg/
|
||||
test/dummy/db/*.sqlite3
|
||||
test/dummy/db/*.sqlite3-journal
|
||||
test/dummy/log/*.log
|
||||
test/dummy/tmp/
|
||||
test/dummy/.sass-cache
|
||||
.bundle/
|
||||
log/*.log
|
||||
pkg/
|
||||
test/dummy/db/*.sqlite3
|
||||
test/dummy/db/*.sqlite3-journal
|
||||
test/dummy/log/*.log
|
||||
test/dummy/tmp/
|
||||
test/dummy/.sass-cache
|
||||
|
|
28
Gemfile
28
Gemfile
|
@ -1,14 +1,14 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
# Declare your gem's dependencies in bulletin.gemspec.
|
||||
# Bundler will treat runtime dependencies like base dependencies, and
|
||||
# development dependencies will be added by default to the :development group.
|
||||
gemspec
|
||||
|
||||
# Declare any dependencies that are still in development here instead of in
|
||||
# your gemspec. These might include edge Rails or gems from your path or
|
||||
# Git. Remember to move these dependencies to your gemspec before releasing
|
||||
# your gem to rubygems.org.
|
||||
|
||||
# To use debugger
|
||||
# gem 'debugger'
|
||||
source "https://rubygems.org"
|
||||
|
||||
# Declare your gem's dependencies in bulletin.gemspec.
|
||||
# Bundler will treat runtime dependencies like base dependencies, and
|
||||
# development dependencies will be added by default to the :development group.
|
||||
gemspec
|
||||
|
||||
# Declare any dependencies that are still in development here instead of in
|
||||
# your gemspec. These might include edge Rails or gems from your path or
|
||||
# Git. Remember to move these dependencies to your gemspec before releasing
|
||||
# your gem to rubygems.org.
|
||||
|
||||
# To use debugger
|
||||
# gem 'debugger'
|
||||
|
|
212
Gemfile.lock
212
Gemfile.lock
|
@ -1,106 +1,106 @@
|
|||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
announcement (0.0.1)
|
||||
mongoid (= 4.0.0.beta1)
|
||||
rails (~> 4.1.0.rc2)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actionmailer (4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
mail (~> 2.5.4)
|
||||
actionpack (4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
rack (~> 1.5.2)
|
||||
rack-test (~> 0.6.2)
|
||||
actionview (4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
activemodel (4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.1.0.rc2)
|
||||
activemodel (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
arel (~> 5.0.0)
|
||||
activesupport (4.1.0.rc2)
|
||||
i18n (~> 0.6, >= 0.6.9)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo (~> 1.1)
|
||||
arel (5.0.0)
|
||||
atomic (1.1.16)
|
||||
bson (2.2.1)
|
||||
builder (3.2.2)
|
||||
connection_pool (2.0.0)
|
||||
erubis (2.7.0)
|
||||
hike (1.2.3)
|
||||
i18n (0.6.9)
|
||||
json (1.8.1)
|
||||
mail (2.5.4)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
mime-types (1.25.1)
|
||||
minitest (5.3.1)
|
||||
mongoid (4.0.0.beta1)
|
||||
activemodel (>= 4.0.0)
|
||||
moped (~> 2.0.beta6)
|
||||
origin (~> 2.1)
|
||||
tzinfo (>= 0.3.37)
|
||||
moped (2.0.0.rc1)
|
||||
bson (~> 2.2)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.9.2)
|
||||
optionable (0.2.0)
|
||||
origin (2.1.1)
|
||||
polyglot (0.3.4)
|
||||
rack (1.5.2)
|
||||
rack-test (0.6.2)
|
||||
rack (>= 1.0)
|
||||
rails (4.1.0.rc2)
|
||||
actionmailer (= 4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
activemodel (= 4.1.0.rc2)
|
||||
activerecord (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.1.0.rc2)
|
||||
sprockets-rails (~> 2.0.0)
|
||||
railties (4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (10.2.2)
|
||||
sprockets (2.12.0)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sprockets-rails (2.0.1)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
sprockets (~> 2.8)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.1)
|
||||
atomic (>= 1.1.7, < 2)
|
||||
tilt (1.4.1)
|
||||
treetop (1.4.15)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (1.1.0)
|
||||
thread_safe (~> 0.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
announcement!
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
announcement (0.0.1)
|
||||
mongoid (= 4.0.0.beta1)
|
||||
rails (~> 4.1.0.rc2)
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actionmailer (4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
mail (~> 2.5.4)
|
||||
actionpack (4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
rack (~> 1.5.2)
|
||||
rack-test (~> 0.6.2)
|
||||
actionview (4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
activemodel (4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.1.0.rc2)
|
||||
activemodel (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
arel (~> 5.0.0)
|
||||
activesupport (4.1.0.rc2)
|
||||
i18n (~> 0.6, >= 0.6.9)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo (~> 1.1)
|
||||
arel (5.0.0)
|
||||
atomic (1.1.16)
|
||||
bson (2.2.1)
|
||||
builder (3.2.2)
|
||||
connection_pool (2.0.0)
|
||||
erubis (2.7.0)
|
||||
hike (1.2.3)
|
||||
i18n (0.6.9)
|
||||
json (1.8.1)
|
||||
mail (2.5.4)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
mime-types (1.25.1)
|
||||
minitest (5.3.1)
|
||||
mongoid (4.0.0.beta1)
|
||||
activemodel (>= 4.0.0)
|
||||
moped (~> 2.0.beta6)
|
||||
origin (~> 2.1)
|
||||
tzinfo (>= 0.3.37)
|
||||
moped (2.0.0.rc1)
|
||||
bson (~> 2.2)
|
||||
connection_pool (~> 2.0)
|
||||
optionable (~> 0.2.0)
|
||||
multi_json (1.9.2)
|
||||
optionable (0.2.0)
|
||||
origin (2.1.1)
|
||||
polyglot (0.3.4)
|
||||
rack (1.5.2)
|
||||
rack-test (0.6.2)
|
||||
rack (>= 1.0)
|
||||
rails (4.1.0.rc2)
|
||||
actionmailer (= 4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
actionview (= 4.1.0.rc2)
|
||||
activemodel (= 4.1.0.rc2)
|
||||
activerecord (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.1.0.rc2)
|
||||
sprockets-rails (~> 2.0.0)
|
||||
railties (4.1.0.rc2)
|
||||
actionpack (= 4.1.0.rc2)
|
||||
activesupport (= 4.1.0.rc2)
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (10.2.2)
|
||||
sprockets (2.12.0)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sprockets-rails (2.0.1)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
sprockets (~> 2.8)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.1)
|
||||
atomic (>= 1.1.7, < 2)
|
||||
tilt (1.4.1)
|
||||
treetop (1.4.15)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (1.1.0)
|
||||
thread_safe (~> 0.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
announcement!
|
||||
|
|
40
MIT-LICENSE
40
MIT-LICENSE
|
@ -1,20 +1,20 @@
|
|||
Copyright 2014 YOURNAME
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
Copyright 2014 YOURNAME
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
= Event News
|
||||
|
||||
= Event News
|
||||
|
||||
This project rocks and uses MIT-LICENSE.
|
64
Rakefile
64
Rakefile
|
@ -1,32 +1,32 @@
|
|||
begin
|
||||
require 'bundler/setup'
|
||||
rescue LoadError
|
||||
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
||||
end
|
||||
|
||||
require 'rdoc/task'
|
||||
|
||||
RDoc::Task.new(:rdoc) do |rdoc|
|
||||
rdoc.rdoc_dir = 'rdoc'
|
||||
rdoc.title = 'Announcement'
|
||||
rdoc.options << '--line-numbers'
|
||||
rdoc.rdoc_files.include('README.rdoc')
|
||||
rdoc.rdoc_files.include('lib/**/*.rb')
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
Bundler::GemHelper.install_tasks
|
||||
|
||||
require 'rake/testtask'
|
||||
|
||||
Rake::TestTask.new(:test) do |t|
|
||||
t.libs << 'lib'
|
||||
t.libs << 'test'
|
||||
t.pattern = 'test/**/*_test.rb'
|
||||
t.verbose = false
|
||||
end
|
||||
|
||||
|
||||
task default: :test
|
||||
begin
|
||||
require 'bundler/setup'
|
||||
rescue LoadError
|
||||
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
||||
end
|
||||
|
||||
require 'rdoc/task'
|
||||
|
||||
RDoc::Task.new(:rdoc) do |rdoc|
|
||||
rdoc.rdoc_dir = 'rdoc'
|
||||
rdoc.title = 'Announcement'
|
||||
rdoc.options << '--line-numbers'
|
||||
rdoc.rdoc_files.include('README.rdoc')
|
||||
rdoc.rdoc_files.include('lib/**/*.rb')
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
Bundler::GemHelper.install_tasks
|
||||
|
||||
require 'rake/testtask'
|
||||
|
||||
Rake::TestTask.new(:test) do |t|
|
||||
t.libs << 'lib'
|
||||
t.libs << 'test'
|
||||
t.pattern = 'test/**/*_test.rb'
|
||||
t.verbose = false
|
||||
end
|
||||
|
||||
|
||||
task default: :test
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
// Place all the behaviors and hooks related to the matching controller here.
|
||||
// All this logic will automatically be available in application.js.
|
||||
// Place all the behaviors and hooks related to the matching controller here.
|
||||
// All this logic will automatically be available in application.js.
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -1,21 +1,21 @@
|
|||
$(document).ready(function() {
|
||||
var config = {}
|
||||
config.autoGrow_minHeight = 50;
|
||||
config.allowedContent = false;
|
||||
config.disallowedContent = 'img';
|
||||
config.toolbar = [
|
||||
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
|
||||
{ name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
|
||||
|
||||
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat' ] },
|
||||
'/',
|
||||
{ name: 'insert', items: [ 'SpecialChar'] },
|
||||
{ name: 'styles', items: [ 'Font' ] },
|
||||
{ name: 'colors', items: [ 'TextColor', 'BGColor' ] }
|
||||
];
|
||||
|
||||
var ckeditor_reduce = $('.ckeditor_reduce')
|
||||
ckeditor_reduce.each(function(i,v){
|
||||
CKEDITOR.replace(v,config);
|
||||
})
|
||||
$(document).ready(function() {
|
||||
var config = {}
|
||||
config.autoGrow_minHeight = 50;
|
||||
config.allowedContent = false;
|
||||
config.disallowedContent = 'img';
|
||||
config.toolbar = [
|
||||
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
|
||||
{ name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
|
||||
|
||||
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat' ] },
|
||||
'/',
|
||||
{ name: 'insert', items: [ 'SpecialChar'] },
|
||||
{ name: 'styles', items: [ 'Font' ] },
|
||||
{ name: 'colors', items: [ 'TextColor', 'BGColor' ] }
|
||||
];
|
||||
|
||||
var ckeditor_reduce = $('.ckeditor_reduce')
|
||||
ckeditor_reduce.each(function(i,v){
|
||||
CKEDITOR.replace(v,config);
|
||||
})
|
||||
});
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Place all the styles related to the matching controller here.
|
||||
They will automatically be included in application.css.
|
||||
*/
|
||||
.table .expired{
|
||||
color: #BE2E2E;
|
||||
/*
|
||||
Place all the styles related to the matching controller here.
|
||||
They will automatically be included in application.css.
|
||||
*/
|
||||
.table .expired{
|
||||
color: #BE2E2E;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -1,259 +1,259 @@
|
|||
.widget-event-news-calendar-2.w-calendar{
|
||||
.w-calendar-table {
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
.height100 {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
a.event-container-one{
|
||||
color: inherit;
|
||||
}
|
||||
.close_box{
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
float: right;
|
||||
padding: 0.5em;
|
||||
cursor: pointer;
|
||||
}
|
||||
.close_box:hover{
|
||||
color: red;
|
||||
}
|
||||
.event-bullet-event {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.event-bullet-event {
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
.event-header{
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 1.7em;
|
||||
font-weight: bold;
|
||||
padding: 0.35em 0;
|
||||
}
|
||||
.event-info{
|
||||
padding-left: 15%;
|
||||
}
|
||||
.calendar-events{
|
||||
position: relative;
|
||||
background: #fbfbfb;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.month_template{
|
||||
position: relative;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
flex-wrap: wrap;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 1em;
|
||||
.w-calendar-table td:hover {
|
||||
background-color: #eaeaea;
|
||||
color: #333;
|
||||
}
|
||||
.w-calendar-table td {
|
||||
background: inherit;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.w-calendar-table td div{
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: auto;
|
||||
padding: 10%;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.w-calendar-table th {
|
||||
background: unset;
|
||||
color: unset;
|
||||
border: 0;
|
||||
padding: 1.5% 0.5%;
|
||||
}
|
||||
.widget-title {
|
||||
padding: 0.2em;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
table.w-calendar-table td.w-calendar-toggle div, table.w-calendar-table td.w-calendar-toggle div{
|
||||
background: #6f0007;
|
||||
border-radius: 50%;
|
||||
color: white;
|
||||
}
|
||||
.w-calendar-table td.w-calendar-event div{
|
||||
border: 1px #6f0007 solid;
|
||||
border-radius: 50%;
|
||||
background: #eee;
|
||||
}
|
||||
.w-calendar-title{
|
||||
background: rgb(146, 8, 17);
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 0px 10%;
|
||||
display: flex;
|
||||
line-height: 2em;
|
||||
justify-content: space-between;
|
||||
font-size: 1.85em;
|
||||
width: 100%;
|
||||
.w-calendar-title span:last-child{
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
.w-calendar-title.center{
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.calendar-dialog div.ui-dialog-content {
|
||||
max-height: 20em !important;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
table td.w-calendar-other-month {
|
||||
color: #999797;
|
||||
}
|
||||
.event-header{
|
||||
display: flex;
|
||||
background: #dadada;
|
||||
cursor: default;
|
||||
}
|
||||
.event-header .date{
|
||||
width: 30%;
|
||||
}
|
||||
.event.active .event-header .day{
|
||||
color: #bf1f1f;
|
||||
}
|
||||
.event.active .event-header .date{
|
||||
color: #202427;
|
||||
}
|
||||
.event .event-header .day{
|
||||
font-size: 1.4em;
|
||||
}
|
||||
.event .event-header .month{
|
||||
font-size: 0.7em;
|
||||
}
|
||||
.event .event-header .date{
|
||||
color: #a08a70;
|
||||
}
|
||||
.event-title{
|
||||
width: 70%;
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.event-title .duration{
|
||||
font-size: 0.7em;
|
||||
text-align: left;
|
||||
color: #a0a1a1;
|
||||
}
|
||||
.duration_temp,.title_temp{
|
||||
display: none;
|
||||
}
|
||||
.event-inner-title{
|
||||
line-height: 2em;
|
||||
text-align: left;
|
||||
}
|
||||
.event-containers{
|
||||
height: 0;
|
||||
min-height: unset;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
margin: 0 10%;
|
||||
}
|
||||
.event-container-one {
|
||||
position: absolute;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
width: calc(100% - 0.7em);;
|
||||
height: calc(100% - 0.7em);
|
||||
flex-wrap: wrap;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 1em;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
color: rgba(50, 50, 50, 0.45);
|
||||
}
|
||||
.event-container-one:hover {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.1em 0.7em 0em;
|
||||
}
|
||||
.event-container-one .event-content{
|
||||
color: #000000;
|
||||
}
|
||||
button.switch_button {
|
||||
margin: 10%;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
border-radius: 1.25em;
|
||||
border: 0;
|
||||
background: #96231a;
|
||||
color: white;
|
||||
outline: 0;
|
||||
}
|
||||
.switch_button:hover {
|
||||
background: #c07b76;
|
||||
}
|
||||
.switch_button_wraper{
|
||||
position: absolute;
|
||||
right: 0%;
|
||||
margin-right: 2%;
|
||||
width: 3em;
|
||||
margin-bottom: 2%;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.event-wraper{
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
}
|
||||
.event-container-one:not(.active) {
|
||||
right: -100%;
|
||||
}
|
||||
.event.active .event-containers{
|
||||
min-height: 13em;
|
||||
height: 100%;
|
||||
}
|
||||
.calendar-events.width-100 .switch_button_wraper{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.calendar-events.width-100 .switch_button{
|
||||
margin: 2%;
|
||||
}
|
||||
.calendar-events.width-100 .event-containers{
|
||||
z-index: 3;
|
||||
}
|
||||
.month_template .widget-title {
|
||||
border: 0;
|
||||
border-bottom: 0.0625em solid #ddd;
|
||||
}
|
||||
&>div:first-child {
|
||||
box-shadow: 0em 0.1em 0.3em 0em;
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
.event{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.widget-event-news-calendar-2.w-calendar{
|
||||
.w-calendar-table {
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
.height100 {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
a.event-container-one{
|
||||
color: inherit;
|
||||
}
|
||||
.close_box{
|
||||
font-weight: bold;
|
||||
position: relative;
|
||||
float: right;
|
||||
padding: 0.5em;
|
||||
cursor: pointer;
|
||||
}
|
||||
.close_box:hover{
|
||||
color: red;
|
||||
}
|
||||
.event-bullet-event {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.event-bullet-event {
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
.event-header{
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 1.7em;
|
||||
font-weight: bold;
|
||||
padding: 0.35em 0;
|
||||
}
|
||||
.event-info{
|
||||
padding-left: 15%;
|
||||
}
|
||||
.calendar-events{
|
||||
position: relative;
|
||||
background: #fbfbfb;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.month_template{
|
||||
position: relative;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
flex-wrap: wrap;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 1em;
|
||||
.w-calendar-table td:hover {
|
||||
background-color: #eaeaea;
|
||||
color: #333;
|
||||
}
|
||||
.w-calendar-table td {
|
||||
background: inherit;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.w-calendar-table td div{
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: auto;
|
||||
padding: 10%;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.w-calendar-table th {
|
||||
background: unset;
|
||||
color: unset;
|
||||
border: 0;
|
||||
padding: 1.5% 0.5%;
|
||||
}
|
||||
.widget-title {
|
||||
padding: 0.2em;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
table.w-calendar-table td.w-calendar-toggle div, table.w-calendar-table td.w-calendar-toggle div{
|
||||
background: #6f0007;
|
||||
border-radius: 50%;
|
||||
color: white;
|
||||
}
|
||||
.w-calendar-table td.w-calendar-event div{
|
||||
border: 1px #6f0007 solid;
|
||||
border-radius: 50%;
|
||||
background: #eee;
|
||||
}
|
||||
.w-calendar-title{
|
||||
background: rgb(146, 8, 17);
|
||||
color: rgb(255, 255, 255);
|
||||
padding: 0px 10%;
|
||||
display: flex;
|
||||
line-height: 2em;
|
||||
justify-content: space-between;
|
||||
font-size: 1.85em;
|
||||
width: 100%;
|
||||
.w-calendar-title span:last-child{
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
.w-calendar-title.center{
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.calendar-dialog div.ui-dialog-content {
|
||||
max-height: 20em !important;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
table td.w-calendar-other-month {
|
||||
color: #999797;
|
||||
}
|
||||
.event-header{
|
||||
display: flex;
|
||||
background: #dadada;
|
||||
cursor: default;
|
||||
}
|
||||
.event-header .date{
|
||||
width: 30%;
|
||||
}
|
||||
.event.active .event-header .day{
|
||||
color: #bf1f1f;
|
||||
}
|
||||
.event.active .event-header .date{
|
||||
color: #202427;
|
||||
}
|
||||
.event .event-header .day{
|
||||
font-size: 1.4em;
|
||||
}
|
||||
.event .event-header .month{
|
||||
font-size: 0.7em;
|
||||
}
|
||||
.event .event-header .date{
|
||||
color: #a08a70;
|
||||
}
|
||||
.event-title{
|
||||
width: 70%;
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.event-title .duration{
|
||||
font-size: 0.7em;
|
||||
text-align: left;
|
||||
color: #a0a1a1;
|
||||
}
|
||||
.duration_temp,.title_temp{
|
||||
display: none;
|
||||
}
|
||||
.event-inner-title{
|
||||
line-height: 2em;
|
||||
text-align: left;
|
||||
}
|
||||
.event-containers{
|
||||
height: 0;
|
||||
min-height: unset;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
margin: 0 10%;
|
||||
}
|
||||
.event-container-one {
|
||||
position: absolute;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
width: calc(100% - 0.7em);;
|
||||
height: calc(100% - 0.7em);
|
||||
flex-wrap: wrap;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 1em;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
color: rgba(50, 50, 50, 0.45);
|
||||
}
|
||||
.event-container-one:hover {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.1em 0.7em 0em;
|
||||
}
|
||||
.event-container-one .event-content{
|
||||
color: #000000;
|
||||
}
|
||||
button.switch_button {
|
||||
margin: 10%;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
border-radius: 1.25em;
|
||||
border: 0;
|
||||
background: #96231a;
|
||||
color: white;
|
||||
outline: 0;
|
||||
}
|
||||
.switch_button:hover {
|
||||
background: #c07b76;
|
||||
}
|
||||
.switch_button_wraper{
|
||||
position: absolute;
|
||||
right: 0%;
|
||||
margin-right: 2%;
|
||||
width: 3em;
|
||||
margin-bottom: 2%;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.event-wraper{
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
}
|
||||
.event-container-one:not(.active) {
|
||||
right: -100%;
|
||||
}
|
||||
.event.active .event-containers{
|
||||
min-height: 13em;
|
||||
height: 100%;
|
||||
}
|
||||
.calendar-events.width-100 .switch_button_wraper{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.calendar-events.width-100 .switch_button{
|
||||
margin: 2%;
|
||||
}
|
||||
.calendar-events.width-100 .event-containers{
|
||||
z-index: 3;
|
||||
}
|
||||
.month_template .widget-title {
|
||||
border: 0;
|
||||
border-bottom: 0.0625em solid #ddd;
|
||||
}
|
||||
&>div:first-child {
|
||||
box-shadow: 0em 0.1em 0.3em 0em;
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
.event{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
|
@ -1,152 +1,152 @@
|
|||
.full-size-img img {
|
||||
width: 100%;
|
||||
}
|
||||
.full-size-img {
|
||||
width: 100%;
|
||||
}
|
||||
.s-annc__sub-img.pull-right {
|
||||
margin-left: 2em;
|
||||
}
|
||||
.s-annc__sub-img.pull-left {
|
||||
margin-right: 2em;
|
||||
}
|
||||
strong.carousel__description {
|
||||
color: white;
|
||||
}
|
||||
@media (max-width: 767px){
|
||||
.carousel_images{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.carousel_img_item{
|
||||
display: none;
|
||||
float: left;
|
||||
}
|
||||
.controlplay {
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
top: 3%;
|
||||
z-index: 200;
|
||||
}
|
||||
.controlplay a {
|
||||
display: inline-block;
|
||||
margin-right: 0.25em;
|
||||
cursor: pointer;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid rgba(255,255,255,0.5);
|
||||
background: rgba(0,0,0,0.2);
|
||||
}
|
||||
.controlplay a i {
|
||||
font-family: FontAwesome;
|
||||
position: relative;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
color: #FFF;
|
||||
vertical-align: middle;
|
||||
font-style: unset;
|
||||
}
|
||||
.controlplay .resume-slide i::before {
|
||||
content: "\f04b";
|
||||
}
|
||||
.controlplay .pause-slide i::before {
|
||||
content: "\f04c";
|
||||
}
|
||||
ul.button-mid .prev-button {
|
||||
transition: 0.4s;
|
||||
position: relative;
|
||||
float: left;
|
||||
left: 0.5rem;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
font-size: 2.2rem;
|
||||
color: #ffffff;
|
||||
background: rgba(0,0,0,0.2);
|
||||
text-align: center;
|
||||
line-height: 2.5rem;
|
||||
top: 50%;
|
||||
position: absolute;
|
||||
transform: translateY(-50%);
|
||||
z-index: 999;
|
||||
}
|
||||
ul.button-mid .next-button {
|
||||
float: right;
|
||||
transition: 0.4s;
|
||||
position: relative;
|
||||
right: 0.5rem;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
font-size: 2.2rem;
|
||||
color: #fff;
|
||||
background: rgba(0,0,0,0.2);
|
||||
text-align: center;
|
||||
line-height: 2.5rem;
|
||||
top: 50%;
|
||||
position: absolute;
|
||||
transform: translateY(-50%);
|
||||
z-index: 999;
|
||||
}
|
||||
.carousel_images_slide{
|
||||
padding: 3em;
|
||||
}
|
||||
.carousel_img_item img{
|
||||
cursor: pointer;
|
||||
}
|
||||
@media (max-width: 479px){
|
||||
.carousel_img_item:nth-child(-n+1){
|
||||
display: block;
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 480px){
|
||||
.carousel_img_item:nth-child(-n+2){
|
||||
display: block;
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px){
|
||||
.carousel_img_item:nth-child(-n+3){
|
||||
display: block;
|
||||
width: 33%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 33%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1280px){
|
||||
.carousel_img_item:nth-child(-n+4){
|
||||
display: block;
|
||||
width: 25%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
.w-ba-banner .controlplay .resume-slide.active i{
|
||||
color: #32D9C3;
|
||||
}
|
||||
.w-ba-banner .controlplay .pause-slide.active i{
|
||||
color: #ff4500;
|
||||
}
|
||||
.w-ba-banner .controlplay{
|
||||
width: auto;
|
||||
}
|
||||
.w-ba-banner .button-mid{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.next-button,.prev-button{
|
||||
cursor: pointer;
|
||||
}
|
||||
.full-size-img img {
|
||||
width: 100%;
|
||||
}
|
||||
.full-size-img {
|
||||
width: 100%;
|
||||
}
|
||||
.s-annc__sub-img.pull-right {
|
||||
margin-left: 2em;
|
||||
}
|
||||
.s-annc__sub-img.pull-left {
|
||||
margin-right: 2em;
|
||||
}
|
||||
strong.carousel__description {
|
||||
color: white;
|
||||
}
|
||||
@media (max-width: 767px){
|
||||
.carousel_images{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.carousel_img_item{
|
||||
display: none;
|
||||
float: left;
|
||||
}
|
||||
.controlplay {
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
top: 3%;
|
||||
z-index: 200;
|
||||
}
|
||||
.controlplay a {
|
||||
display: inline-block;
|
||||
margin-right: 0.25em;
|
||||
cursor: pointer;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid rgba(255,255,255,0.5);
|
||||
background: rgba(0,0,0,0.2);
|
||||
}
|
||||
.controlplay a i {
|
||||
font-family: FontAwesome;
|
||||
position: relative;
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
color: #FFF;
|
||||
vertical-align: middle;
|
||||
font-style: unset;
|
||||
}
|
||||
.controlplay .resume-slide i::before {
|
||||
content: "\f04b";
|
||||
}
|
||||
.controlplay .pause-slide i::before {
|
||||
content: "\f04c";
|
||||
}
|
||||
ul.button-mid .prev-button {
|
||||
transition: 0.4s;
|
||||
position: relative;
|
||||
float: left;
|
||||
left: 0.5rem;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
font-size: 2.2rem;
|
||||
color: #ffffff;
|
||||
background: rgba(0,0,0,0.2);
|
||||
text-align: center;
|
||||
line-height: 2.5rem;
|
||||
top: 50%;
|
||||
position: absolute;
|
||||
transform: translateY(-50%);
|
||||
z-index: 999;
|
||||
}
|
||||
ul.button-mid .next-button {
|
||||
float: right;
|
||||
transition: 0.4s;
|
||||
position: relative;
|
||||
right: 0.5rem;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
font-size: 2.2rem;
|
||||
color: #fff;
|
||||
background: rgba(0,0,0,0.2);
|
||||
text-align: center;
|
||||
line-height: 2.5rem;
|
||||
top: 50%;
|
||||
position: absolute;
|
||||
transform: translateY(-50%);
|
||||
z-index: 999;
|
||||
}
|
||||
.carousel_images_slide{
|
||||
padding: 3em;
|
||||
}
|
||||
.carousel_img_item img{
|
||||
cursor: pointer;
|
||||
}
|
||||
@media (max-width: 479px){
|
||||
.carousel_img_item:nth-child(-n+1){
|
||||
display: block;
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 480px){
|
||||
.carousel_img_item:nth-child(-n+2){
|
||||
display: block;
|
||||
width: 50%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px){
|
||||
.carousel_img_item:nth-child(-n+3){
|
||||
display: block;
|
||||
width: 33%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 33%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1280px){
|
||||
.carousel_img_item:nth-child(-n+4){
|
||||
display: block;
|
||||
width: 25%;
|
||||
float: left;
|
||||
}
|
||||
.carousel_img_item{
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
.w-ba-banner .controlplay .resume-slide.active i{
|
||||
color: #32D9C3;
|
||||
}
|
||||
.w-ba-banner .controlplay .pause-slide.active i{
|
||||
color: #ff4500;
|
||||
}
|
||||
.w-ba-banner .controlplay{
|
||||
width: auto;
|
||||
}
|
||||
.w-ba-banner .button-mid{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.next-button,.prev-button{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
module ActionDispatch
|
||||
class Request
|
||||
def original_url
|
||||
original_fullpath
|
||||
end
|
||||
end
|
||||
module ActionDispatch
|
||||
class Request
|
||||
def original_url
|
||||
original_fullpath
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,499 +1,499 @@
|
|||
# encoding: utf-8
|
||||
require 'rubyXL'
|
||||
class Admin::EventNewsController < OrbitAdminController
|
||||
include Admin::EventNewsHelper
|
||||
before_action ->(module_app = @app_title) { set_variables module_app }
|
||||
before_action :set_event_news, only: [:edit, :destroy]
|
||||
before_action :load_access_level, :load_settings
|
||||
|
||||
def initialize
|
||||
super
|
||||
@app_title = "event_news"
|
||||
end
|
||||
|
||||
def index
|
||||
EventNews.remove_expired_status
|
||||
@tags = @module_app.tags
|
||||
@table_fields = [:status, :category, :title, "event_news.event_date", "event_news.start_date", "event_news.end_date", :last_modified]
|
||||
@current_user = current_user
|
||||
if params[:sort].blank?
|
||||
params[:sort] = 'event_date'
|
||||
params[:order] = 'desc'
|
||||
end
|
||||
if EventNewsSetting.first.is_display_edit_only && !current_user.is_admin? && !current_user.is_manager?(@module_app)
|
||||
current_user_is_sub_manager = !current_user.is_manager?(@module_app) && (current_user.is_sub_manager?(@module_app) || current_user.is_sub_manager_with_role?(@module_app)) rescue false
|
||||
if current_user_is_sub_manager
|
||||
@categories = current_user.approved_categories.select{|c| c.module_app_id == @module_app.id} rescue []
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :create_user_id=>current_user.id,:is_preview.in=>[false,nil])
|
||||
.order_by(sort)
|
||||
.with_categories(filters("category"))
|
||||
.with_tags(filters("tag"))
|
||||
.with_status(filters("status"))
|
||||
else
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :uid=>nil).order_by(sort)
|
||||
@categories = @module_app.categories.enabled
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
end
|
||||
else
|
||||
@categories = @module_app.categories.enabled
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :is_preview.in=>[false,nil])
|
||||
.order_by(sort)
|
||||
.with_categories(filters("category"))
|
||||
.with_tags(filters("tag"))
|
||||
.with_status(filters("status"))
|
||||
end
|
||||
@event_news = search_data(@event_news,[:title]).page(params[:page]).per(10)
|
||||
|
||||
if request.xhr?
|
||||
render :partial => "index"
|
||||
end
|
||||
end
|
||||
|
||||
def feed
|
||||
@table_feed_fields = ["event_news.feed_name", :tags, :categories, "event_news.rssfeed", "event_news.jsonfeed"]
|
||||
@feeds = EventNewsFeed.all.asc(:created_at)
|
||||
|
||||
end
|
||||
def generate_iframe_url
|
||||
iframe_params = params.require(:iframe).permit!
|
||||
uids = iframe_params['member_ids'].to_a.map{|m_id| MemberProfile.find(m_id).uid rescue nil}.select{|uid| !uid.nil?}
|
||||
url_params = iframe_params.except(:member_ids)
|
||||
url_params['uids'] = uids if uids != []
|
||||
render :text => '/xhr/panel/event_news/widget/sync_data?'+url_params.to_param
|
||||
end
|
||||
def settings
|
||||
@setting = @event_news_setting
|
||||
roles = Role.all
|
||||
@sorted_members = roles.inject({}) do |members,role|
|
||||
members_for_role = role.member_profiles.select{|m| (m.user.nil? ? false : m.user.approved)}
|
||||
members[role] = members_for_role
|
||||
members
|
||||
end
|
||||
@sorted_members['no_role'] = MemberProfile.any_in(:role_ids=>[nil,[]]).select{|m| (m.user.nil? ? false : m.user.approved)}
|
||||
@unapproved_members = User.where(:approved => false).map{|u| u.member_profile}
|
||||
end
|
||||
|
||||
def import
|
||||
end
|
||||
|
||||
def excel_format
|
||||
respond_to do |format|
|
||||
format.xlsx {
|
||||
response.headers['Content-Disposition'] = 'attachment; filename="event_news_import_format.xlsx"'
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def export_excel
|
||||
@event_news = EventNews.where(:category_id.ne=>nil).desc(:created_at)
|
||||
respond_to do |format|
|
||||
format.xlsx {
|
||||
response.headers['Content-Disposition'] = 'attachment; filename="event_news_export.xlsx"'
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def import_from_xml
|
||||
download_tmp_xml params["import_xml"]
|
||||
import_from_tmp_xml File.read(File.join(Rails.root, "tmp", "ann_cc_ntu.xml"))
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def import
|
||||
end
|
||||
|
||||
|
||||
def import_from_wp
|
||||
import_from_wordpress params["import_xml"].tempfile
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def importanns
|
||||
workbook = RubyXL::Parser.parse(params["import_file"].tempfile)
|
||||
categories = @module_app.categories.asc(:created_at).to_a
|
||||
tags = @module_app.tags.asc(:created_at).to_a
|
||||
sheet = workbook[0]
|
||||
if sheet.count <= 503
|
||||
sheet.each_with_index do |row, i|
|
||||
next if i < 3
|
||||
v = row.cells.first.value rescue nil
|
||||
next if v == "" || v.nil?
|
||||
import_this_event_news(row, categories, tags)
|
||||
end
|
||||
redirect_to admin_event_news_index_path
|
||||
else
|
||||
redirect_to admin_event_news_index_path(:error => "1")
|
||||
end
|
||||
end
|
||||
|
||||
def createsettings
|
||||
setting = EventNewsSetting.new(settings_params)
|
||||
setting.save
|
||||
redirect_to admin_event_news_settings_path
|
||||
end
|
||||
|
||||
def updatesettings
|
||||
setting = @event_news_setting
|
||||
ids = params['event_news_setting']['anns_status_settings'].to_a.collect do |i,v|
|
||||
v['_id']
|
||||
end.compact
|
||||
AnnsStatusSetting.where(:id.nin=>ids).destroy
|
||||
setting.update_attributes(settings_params)
|
||||
setting.save
|
||||
redirect_to admin_event_news_settings_path
|
||||
end
|
||||
|
||||
def feedform
|
||||
if params[:type] == "new"
|
||||
@event_news_feed = EventNewsFeed.new
|
||||
render :partial => "feed_form"
|
||||
else params[:type] == "edit"
|
||||
@event_news_feed = EventNewsFeed.find(params[:id])
|
||||
render :partial => "edit_feed_form"
|
||||
end
|
||||
end
|
||||
|
||||
def createfeed
|
||||
event_news_feed = EventNewsFeed.new(feed_params)
|
||||
event_news_feed.save
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def updatefeed
|
||||
ann_feed = EventNewsFeed.find(params[:id])
|
||||
ann_feed.update_attributes(feed_params)
|
||||
ann_feed.save
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def deletefeed
|
||||
ann_feed = EventNewsFeed.find(params[:id])
|
||||
ann_feed.destroy
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def new
|
||||
@tags = @module_app.tags
|
||||
@statuses = []
|
||||
@event_news = EventNews.new
|
||||
@event_news.email_sentdate = Time.now
|
||||
@reach_limit = @event_news.check_status_limit(current_user,true)
|
||||
if defined? Calendar
|
||||
categories = user_authenticated_categories rescue ['all']
|
||||
if categories.first == "all"
|
||||
@calendar_categories = CalendarType.all
|
||||
else
|
||||
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
bps = event_news_params
|
||||
event_news = EventNews.new(bps)
|
||||
if !bps['event_news_links_attributes'].nil?
|
||||
bps['event_news_links_attributes'].each do |idx,link|
|
||||
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
|
||||
end
|
||||
end
|
||||
if((!EventNewsSetting.first.only_manager_can_edit_status) || (EventNewsSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) )
|
||||
if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
|
||||
bps[:is_top] = "0"
|
||||
bps[:top_end_date] = nil
|
||||
end
|
||||
else
|
||||
bps[:is_top] = false
|
||||
bps[:is_hot] = false
|
||||
bps[:is_hidden] = false
|
||||
end
|
||||
|
||||
# if !defined?(Calendar).nil?
|
||||
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
|
||||
# Event.find(bps[:event_id]).destroy rescue nil
|
||||
# bps[:event_id] = nil
|
||||
# elsif bps[:add_to_calendar] == '1'
|
||||
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id)
|
||||
# e_start = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
|
||||
# e_start = Time.now.to_datetime if e_start.blank?
|
||||
# e_end = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
|
||||
# e_end = Time.now.to_datetime + 1.year if e_end.blank?
|
||||
# event.update_attributes(event_news_id: event_news.id,start: e_start,end: e_end,update_user_id: current_user.id,all_day: bps[:calendar_all_day],calendar_type_id: bps[:calendar_type_id],title: bps[:title_translations][I18n.locale],note: bps[:subtitle_translations][I18n.locale])
|
||||
# bps[:event_id] = event.id
|
||||
# end
|
||||
# end
|
||||
event_news.create_user_id = current_user.id
|
||||
event_news.update_user_id = current_user.id
|
||||
if EventNewsSetting.is_pro?
|
||||
if user_can_approve?
|
||||
event_news.approved = true
|
||||
else
|
||||
send_notification_mail_to_managers(event_news,"approval",I18n.locale)
|
||||
end
|
||||
else
|
||||
event_news.approved = true
|
||||
end
|
||||
|
||||
event_news.save
|
||||
build_email(event_news,I18n.locale)
|
||||
redirect_to params['referer_url']
|
||||
end
|
||||
|
||||
def approve_event_news
|
||||
id = params[:id]
|
||||
event_news = EventNews.find(id)
|
||||
if params["approved"] == "true"
|
||||
event_news.approved = true
|
||||
event_news.rejected = false
|
||||
event_news.reapproval = false
|
||||
else
|
||||
event_news.rejected = true
|
||||
event_news.reapproval = false
|
||||
event_news.rejection_reason = params["reason"]
|
||||
send_rejection_email(event_news,I18n.locale)
|
||||
end
|
||||
event_news.save
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def edit
|
||||
if can_edit_or_delete?(@event_news)
|
||||
@reach_limit = @event_news.check_status_limit(current_user,true)
|
||||
@tags = @module_app.tags
|
||||
@categories = @module_app.categories.enabled
|
||||
if defined? Calendar
|
||||
categories = user_authenticated_categories rescue ['all']
|
||||
if categories.first == "all"
|
||||
@calendar_categories = CalendarType.all
|
||||
else
|
||||
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
|
||||
end
|
||||
end
|
||||
@statuses = []
|
||||
@event_news.email_sentdate = Time.now if @event_news.email_sent == false
|
||||
else
|
||||
render_401
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
uid = params[:id].split('-').last
|
||||
event_news = EventNews.find_by(:uid=>uid)
|
||||
bps = event_news_params
|
||||
bps[:tags] = bps[:tags].blank? ? [] : bps[:tags]
|
||||
bps[:email_member_ids] = bps[:email_member_ids].blank? ? [] : bps[:email_member_ids]
|
||||
|
||||
if !bps['event_news_links_attributes'].nil?
|
||||
bps['event_news_links_attributes'].each do |idx,link|
|
||||
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
|
||||
end
|
||||
end
|
||||
if((!EventNewsSetting.first.only_manager_can_edit_status) || (EventNewsSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) )
|
||||
if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
|
||||
bps[:is_top] = "0"
|
||||
bps[:top_end_date] = nil
|
||||
end
|
||||
else
|
||||
bps[:is_top] = event_news.is_top
|
||||
bps[:is_hot] = event_news.is_hot
|
||||
bps[:is_hidden] = event_news.is_hidden
|
||||
end
|
||||
# if !defined?(Calendar).nil?
|
||||
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
|
||||
# Event.find(bps[:event_id]).destroy rescue nil
|
||||
# bps[:event_id] = nil
|
||||
# elsif bps[:add_to_calendar] == '1'
|
||||
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id)
|
||||
# e_start = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
|
||||
# e_start = Time.now.to_datetime if e_start.blank?
|
||||
# e_end = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
|
||||
# e_end = Time.now.to_datetime + 1.year if e_end.blank?
|
||||
# event.update_attributes(event_news_id: event_news.id,start: e_start,end: e_end,update_user_id: current_user.id,all_day: bps[:calendar_all_day],calendar_type_id: bps[:calendar_type_id],title: bps[:title_translations][I18n.locale],note: bps[:subtitle_translations][I18n.locale])
|
||||
# bps[:event_id] = event.id
|
||||
# end
|
||||
# end
|
||||
event_news.update_attributes(bps)
|
||||
event_news.update_user_id = current_user.id
|
||||
if event_news.rejected
|
||||
event_news.reapproval = true
|
||||
event_news.save
|
||||
send_notification_mail_to_managers(event_news,"reapproval",I18n.locale)
|
||||
else
|
||||
event_news.save
|
||||
end
|
||||
build_email(event_news,I18n.locale)
|
||||
now_event_news_page = EventNews.where(:title.ne => "",:is_preview.in=>[false,nil])
|
||||
.order_by(sort).map(&:id).map.with_index.select{|v,i| v==event_news.id}[0][1] rescue nil
|
||||
now_event_news_page = now_event_news_page.nil? ? 0 : ((now_event_news_page+1).to_f/10).ceil
|
||||
redirect_to admin_event_news_index_path(:page=>now_event_news_page)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@event_news.destroy
|
||||
redirect_to "/admin/event_news"
|
||||
end
|
||||
|
||||
def delete
|
||||
if params[:ids]
|
||||
EventNews.any_in(:uid => params[:ids]).destroy_all
|
||||
end
|
||||
redirect_to "/admin/event_news"
|
||||
end
|
||||
|
||||
def preview
|
||||
if params['preview_type'].eql?('edit')
|
||||
event_news_data = event_news_params
|
||||
org_event_news = EventNews.find(params['event_news_id'])
|
||||
event_news = org_event_news.clone
|
||||
event_news.generate_uid
|
||||
event_news.event_news_files = []
|
||||
event_news.event_news_links = []
|
||||
if event_news_data['image'].blank?
|
||||
event_news.image = org_event_news.image
|
||||
end
|
||||
|
||||
if !event_news_data['event_news_files_attributes'].blank?
|
||||
event_news_data['event_news_files_attributes'].each do |key, event_news_file|
|
||||
next if !event_news_file['_destroy'].blank?
|
||||
file = nil
|
||||
if event_news_file['id'].blank?
|
||||
file = EventNewsFile.new(event_news_file)
|
||||
file.event_news_id = event_news.id
|
||||
file.save
|
||||
else
|
||||
org_file = EventNewsFile.find(event_news_file['id'])
|
||||
file = org_file.clone
|
||||
file.event_news_id = event_news.id
|
||||
file.file = org_file.file
|
||||
event_news_file.delete('id')
|
||||
event_news_file.delete('_destroy')
|
||||
file.update_attributes(event_news_file)
|
||||
end
|
||||
|
||||
file.save
|
||||
event_news.event_news_files << file
|
||||
end
|
||||
end
|
||||
|
||||
if !event_news_data['event_news_links_attributes'].blank?
|
||||
event_news_data['event_news_links_attributes'].each do |key, event_news_link|
|
||||
next if !event_news_link['_destroy'].blank?
|
||||
|
||||
if event_news_link['id'].blank?
|
||||
link = EventNewsLink.new(event_news_link)
|
||||
link.event_news_id = event_news.id
|
||||
else
|
||||
link = EventNewsLink.find(event_news_link['id']).clone
|
||||
link.event_news_id = event_news.id
|
||||
event_news_link.delete('id')
|
||||
event_news_link.delete('_destroy')
|
||||
link.update_attributes(event_news_link)
|
||||
end
|
||||
|
||||
link.save
|
||||
event_news.event_news_links << link
|
||||
end
|
||||
end
|
||||
|
||||
event_news_data.delete('event_news_files_attributes')
|
||||
event_news_data.delete('event_news_links_attributes')
|
||||
event_news.update_attributes(event_news_data)
|
||||
else
|
||||
event_news = EventNews.new(event_news_params)
|
||||
end
|
||||
|
||||
event_news.is_preview = true
|
||||
event_news.save
|
||||
render :text=>page_for_event_news(event_news) + "?preview=true"
|
||||
end
|
||||
|
||||
def destroy_preview
|
||||
event_news = EventNews.find_by(:uid=>params['uid'])
|
||||
if event_news.is_preview
|
||||
event_news.destroy
|
||||
end
|
||||
render :json=>{'destroy'=>event_news.id.to_s}
|
||||
end
|
||||
|
||||
def build_email(event_news,locale)
|
||||
if event_news.email_sent and !event_news.email_addresses.blank?
|
||||
if event_news.email.nil?
|
||||
email = Email.new
|
||||
email.save
|
||||
email.deliver rescue nil
|
||||
event_news.email_id = email.id
|
||||
event_news.save
|
||||
end
|
||||
|
||||
is_sent = event_news.email.is_sent
|
||||
is_sent = !params[:resend_mail].eql?("true") if !params[:resend_mail].blank?
|
||||
doc = Nokogiri::HTML(event_news.title_translations[locale])
|
||||
title = doc.text.empty? ? 'no content' : doc.text
|
||||
|
||||
event_news.email.update_attributes(
|
||||
:create_user=>current_user,
|
||||
:mail_sentdate=>event_news.email_sentdate,
|
||||
:module_app=>@module_app,
|
||||
:mail_lang => locale,
|
||||
:mail_to=>event_news.email_addresses,
|
||||
:mail_subject=>title,
|
||||
:template=>'event_news/email',
|
||||
:template_data=>{
|
||||
"host" => request.host_with_port,
|
||||
"title" => title,
|
||||
"url" => page_for_event_news(event_news)
|
||||
},
|
||||
:is_sent=>is_sent
|
||||
)
|
||||
event_news.email.deliver
|
||||
else
|
||||
event_news.email.destroy if !event_news.email.nil?
|
||||
end
|
||||
end
|
||||
|
||||
def custom_fields_title
|
||||
@event_news_custom_titles = EventNewsCustomTitle.get_map
|
||||
end
|
||||
|
||||
def update_custom_title
|
||||
event_news_custom_title_params = params.require(:event_news_custom_title).permit!
|
||||
event_news_custom_title_params.each do |k,event_news_custom_title_param|
|
||||
EventNewsCustomTitle.find(event_news_custom_title_param['id']).update_attributes(event_news_custom_title_param)
|
||||
end
|
||||
Thread.new do
|
||||
content = "UNICORN_PID=\"`fuser tmp/pids/unicorn.sock tmp/sockets/unicorn.sock tmp/unicorn.sock` `cat tmp/pids/unicorn.pid `\" && kill -s USR2 $UNICORN_PID ; n=20; while (kill -0 $UNICORN_PID > /dev/null 2>&1) && test $n -ge 0; do printf '.' && sleep 1 && n=$(( $n - 1 )); done ; if test $n -lt 0; then kill -s TERM $UNICORN_PID; sleep 3; bundle exec unicorn_rails -c config/unicorn.rb -D -E #{Rails.env}; else kill -s QUIT $UNICORN_PID; fi"
|
||||
system(content)
|
||||
end
|
||||
redirect_to action: :index
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_settings
|
||||
@event_news_setting = EventNewsSetting.first rescue nil
|
||||
if @event_news_setting.nil?
|
||||
@event_news_setting = EventNewsSetting.create
|
||||
end
|
||||
end
|
||||
|
||||
def set_event_news
|
||||
@event_news = EventNews.find(params[:id])
|
||||
end
|
||||
|
||||
def event_news_params
|
||||
params[:event_news][:email_sent] = params[:event_news][:email_sent].nil? ? 0 : params[:event_news][:email_sent]
|
||||
params.require(:event_news).permit!
|
||||
end
|
||||
|
||||
def feed_params
|
||||
params.require(:event_news_feed).permit!
|
||||
end
|
||||
|
||||
def settings_params
|
||||
params.require(:event_news_setting).permit!
|
||||
end
|
||||
end
|
||||
# encoding: utf-8
|
||||
require 'rubyXL'
|
||||
class Admin::EventNewsController < OrbitAdminController
|
||||
include Admin::EventNewsHelper
|
||||
before_action ->(module_app = @app_title) { set_variables module_app }
|
||||
before_action :set_event_news, only: [:edit, :destroy]
|
||||
before_action :load_access_level, :load_settings
|
||||
|
||||
def initialize
|
||||
super
|
||||
@app_title = "event_news"
|
||||
end
|
||||
|
||||
def index
|
||||
EventNews.remove_expired_status
|
||||
@tags = @module_app.tags
|
||||
@table_fields = [:status, :category, :title, "event_news.event_date", "event_news.start_date", "event_news.end_date", :last_modified]
|
||||
@current_user = current_user
|
||||
if params[:sort].blank?
|
||||
params[:sort] = 'event_date'
|
||||
params[:order] = 'desc'
|
||||
end
|
||||
if EventNewsSetting.first.is_display_edit_only && !current_user.is_admin? && !current_user.is_manager?(@module_app)
|
||||
current_user_is_sub_manager = !current_user.is_manager?(@module_app) && (current_user.is_sub_manager?(@module_app) || current_user.is_sub_manager_with_role?(@module_app)) rescue false
|
||||
if current_user_is_sub_manager
|
||||
@categories = current_user.approved_categories.select{|c| c.module_app_id == @module_app.id} rescue []
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :create_user_id=>current_user.id,:is_preview.in=>[false,nil])
|
||||
.order_by(sort)
|
||||
.with_categories(filters("category"))
|
||||
.with_tags(filters("tag"))
|
||||
.with_status(filters("status"))
|
||||
else
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :uid=>nil).order_by(sort)
|
||||
@categories = @module_app.categories.enabled
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
end
|
||||
else
|
||||
@categories = @module_app.categories.enabled
|
||||
@filter_fields = filter_fields(@categories, @tags)
|
||||
@event_news = EventNews.where(:category_id.ne=>nil, :is_preview.in=>[false,nil])
|
||||
.order_by(sort)
|
||||
.with_categories(filters("category"))
|
||||
.with_tags(filters("tag"))
|
||||
.with_status(filters("status"))
|
||||
end
|
||||
@event_news = search_data(@event_news,[:title]).page(params[:page]).per(10)
|
||||
|
||||
if request.xhr?
|
||||
render :partial => "index"
|
||||
end
|
||||
end
|
||||
|
||||
def feed
|
||||
@table_feed_fields = ["event_news.feed_name", :tags, :categories, "event_news.rssfeed", "event_news.jsonfeed"]
|
||||
@feeds = EventNewsFeed.all.asc(:created_at)
|
||||
|
||||
end
|
||||
def generate_iframe_url
|
||||
iframe_params = params.require(:iframe).permit!
|
||||
uids = iframe_params['member_ids'].to_a.map{|m_id| MemberProfile.find(m_id).uid rescue nil}.select{|uid| !uid.nil?}
|
||||
url_params = iframe_params.except(:member_ids)
|
||||
url_params['uids'] = uids if uids != []
|
||||
render :text => '/xhr/panel/event_news/widget/sync_data?'+url_params.to_param
|
||||
end
|
||||
def settings
|
||||
@setting = @event_news_setting
|
||||
roles = Role.all
|
||||
@sorted_members = roles.inject({}) do |members,role|
|
||||
members_for_role = role.member_profiles.select{|m| (m.user.nil? ? false : m.user.approved)}
|
||||
members[role] = members_for_role
|
||||
members
|
||||
end
|
||||
@sorted_members['no_role'] = MemberProfile.any_in(:role_ids=>[nil,[]]).select{|m| (m.user.nil? ? false : m.user.approved)}
|
||||
@unapproved_members = User.where(:approved => false).map{|u| u.member_profile}
|
||||
end
|
||||
|
||||
def import
|
||||
end
|
||||
|
||||
def excel_format
|
||||
respond_to do |format|
|
||||
format.xlsx {
|
||||
response.headers['Content-Disposition'] = 'attachment; filename="event_news_import_format.xlsx"'
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def export_excel
|
||||
@event_news = EventNews.where(:category_id.ne=>nil).desc(:created_at)
|
||||
respond_to do |format|
|
||||
format.xlsx {
|
||||
response.headers['Content-Disposition'] = 'attachment; filename="event_news_export.xlsx"'
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def import_from_xml
|
||||
download_tmp_xml params["import_xml"]
|
||||
import_from_tmp_xml File.read(File.join(Rails.root, "tmp", "ann_cc_ntu.xml"))
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def import
|
||||
end
|
||||
|
||||
|
||||
def import_from_wp
|
||||
import_from_wordpress params["import_xml"].tempfile
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def importanns
|
||||
workbook = RubyXL::Parser.parse(params["import_file"].tempfile)
|
||||
categories = @module_app.categories.asc(:created_at).to_a
|
||||
tags = @module_app.tags.asc(:created_at).to_a
|
||||
sheet = workbook[0]
|
||||
if sheet.count <= 503
|
||||
sheet.each_with_index do |row, i|
|
||||
next if i < 3
|
||||
v = row.cells.first.value rescue nil
|
||||
next if v == "" || v.nil?
|
||||
import_this_event_news(row, categories, tags)
|
||||
end
|
||||
redirect_to admin_event_news_index_path
|
||||
else
|
||||
redirect_to admin_event_news_index_path(:error => "1")
|
||||
end
|
||||
end
|
||||
|
||||
def createsettings
|
||||
setting = EventNewsSetting.new(settings_params)
|
||||
setting.save
|
||||
redirect_to admin_event_news_settings_path
|
||||
end
|
||||
|
||||
def updatesettings
|
||||
setting = @event_news_setting
|
||||
ids = params['event_news_setting']['anns_status_settings'].to_a.collect do |i,v|
|
||||
v['_id']
|
||||
end.compact
|
||||
AnnsStatusSetting.where(:id.nin=>ids).destroy
|
||||
setting.update_attributes(settings_params)
|
||||
setting.save
|
||||
redirect_to admin_event_news_settings_path
|
||||
end
|
||||
|
||||
def feedform
|
||||
if params[:type] == "new"
|
||||
@event_news_feed = EventNewsFeed.new
|
||||
render :partial => "feed_form"
|
||||
else params[:type] == "edit"
|
||||
@event_news_feed = EventNewsFeed.find(params[:id])
|
||||
render :partial => "edit_feed_form"
|
||||
end
|
||||
end
|
||||
|
||||
def createfeed
|
||||
event_news_feed = EventNewsFeed.new(feed_params)
|
||||
event_news_feed.save
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def updatefeed
|
||||
ann_feed = EventNewsFeed.find(params[:id])
|
||||
ann_feed.update_attributes(feed_params)
|
||||
ann_feed.save
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def deletefeed
|
||||
ann_feed = EventNewsFeed.find(params[:id])
|
||||
ann_feed.destroy
|
||||
feeds = EventNewsFeed.all.asc(:created_at)
|
||||
render :partial => "feed", :collection => feeds
|
||||
end
|
||||
|
||||
def new
|
||||
@tags = @module_app.tags
|
||||
@statuses = []
|
||||
@event_news = EventNews.new
|
||||
@event_news.email_sentdate = Time.now
|
||||
@reach_limit = @event_news.check_status_limit(current_user,true)
|
||||
if defined? Calendar
|
||||
categories = user_authenticated_categories rescue ['all']
|
||||
if categories.first == "all"
|
||||
@calendar_categories = CalendarType.all
|
||||
else
|
||||
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
bps = event_news_params
|
||||
event_news = EventNews.new(bps)
|
||||
if !bps['event_news_links_attributes'].nil?
|
||||
bps['event_news_links_attributes'].each do |idx,link|
|
||||
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
|
||||
end
|
||||
end
|
||||
if((!EventNewsSetting.first.only_manager_can_edit_status) || (EventNewsSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) )
|
||||
if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
|
||||
bps[:is_top] = "0"
|
||||
bps[:top_end_date] = nil
|
||||
end
|
||||
else
|
||||
bps[:is_top] = false
|
||||
bps[:is_hot] = false
|
||||
bps[:is_hidden] = false
|
||||
end
|
||||
|
||||
# if !defined?(Calendar).nil?
|
||||
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
|
||||
# Event.find(bps[:event_id]).destroy rescue nil
|
||||
# bps[:event_id] = nil
|
||||
# elsif bps[:add_to_calendar] == '1'
|
||||
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id)
|
||||
# e_start = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
|
||||
# e_start = Time.now.to_datetime if e_start.blank?
|
||||
# e_end = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
|
||||
# e_end = Time.now.to_datetime + 1.year if e_end.blank?
|
||||
# event.update_attributes(event_news_id: event_news.id,start: e_start,end: e_end,update_user_id: current_user.id,all_day: bps[:calendar_all_day],calendar_type_id: bps[:calendar_type_id],title: bps[:title_translations][I18n.locale],note: bps[:subtitle_translations][I18n.locale])
|
||||
# bps[:event_id] = event.id
|
||||
# end
|
||||
# end
|
||||
event_news.create_user_id = current_user.id
|
||||
event_news.update_user_id = current_user.id
|
||||
if EventNewsSetting.is_pro?
|
||||
if user_can_approve?
|
||||
event_news.approved = true
|
||||
else
|
||||
send_notification_mail_to_managers(event_news,"approval",I18n.locale)
|
||||
end
|
||||
else
|
||||
event_news.approved = true
|
||||
end
|
||||
|
||||
event_news.save
|
||||
build_email(event_news,I18n.locale)
|
||||
redirect_to params['referer_url']
|
||||
end
|
||||
|
||||
def approve_event_news
|
||||
id = params[:id]
|
||||
event_news = EventNews.find(id)
|
||||
if params["approved"] == "true"
|
||||
event_news.approved = true
|
||||
event_news.rejected = false
|
||||
event_news.reapproval = false
|
||||
else
|
||||
event_news.rejected = true
|
||||
event_news.reapproval = false
|
||||
event_news.rejection_reason = params["reason"]
|
||||
send_rejection_email(event_news,I18n.locale)
|
||||
end
|
||||
event_news.save
|
||||
redirect_to admin_event_news_index_path
|
||||
end
|
||||
|
||||
def edit
|
||||
if can_edit_or_delete?(@event_news)
|
||||
@reach_limit = @event_news.check_status_limit(current_user,true)
|
||||
@tags = @module_app.tags
|
||||
@categories = @module_app.categories.enabled
|
||||
if defined? Calendar
|
||||
categories = user_authenticated_categories rescue ['all']
|
||||
if categories.first == "all"
|
||||
@calendar_categories = CalendarType.all
|
||||
else
|
||||
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
|
||||
end
|
||||
end
|
||||
@statuses = []
|
||||
@event_news.email_sentdate = Time.now if @event_news.email_sent == false
|
||||
else
|
||||
render_401
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
uid = params[:id].split('-').last
|
||||
event_news = EventNews.find_by(:uid=>uid)
|
||||
bps = event_news_params
|
||||
bps[:tags] = bps[:tags].blank? ? [] : bps[:tags]
|
||||
bps[:email_member_ids] = bps[:email_member_ids].blank? ? [] : bps[:email_member_ids]
|
||||
|
||||
if !bps['event_news_links_attributes'].nil?
|
||||
bps['event_news_links_attributes'].each do |idx,link|
|
||||
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
|
||||
end
|
||||
end
|
||||
if((!EventNewsSetting.first.only_manager_can_edit_status) || (EventNewsSetting.first.only_manager_can_edit_status && (@current_user.is_admin? || @current_user.is_manager?(@module_app))) )
|
||||
if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
|
||||
bps[:is_top] = "0"
|
||||
bps[:top_end_date] = nil
|
||||
end
|
||||
else
|
||||
bps[:is_top] = event_news.is_top
|
||||
bps[:is_hot] = event_news.is_hot
|
||||
bps[:is_hidden] = event_news.is_hidden
|
||||
end
|
||||
# if !defined?(Calendar).nil?
|
||||
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
|
||||
# Event.find(bps[:event_id]).destroy rescue nil
|
||||
# bps[:event_id] = nil
|
||||
# elsif bps[:add_to_calendar] == '1'
|
||||
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id)
|
||||
# e_start = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
|
||||
# e_start = Time.now.to_datetime if e_start.blank?
|
||||
# e_end = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
|
||||
# e_end = Time.now.to_datetime + 1.year if e_end.blank?
|
||||
# event.update_attributes(event_news_id: event_news.id,start: e_start,end: e_end,update_user_id: current_user.id,all_day: bps[:calendar_all_day],calendar_type_id: bps[:calendar_type_id],title: bps[:title_translations][I18n.locale],note: bps[:subtitle_translations][I18n.locale])
|
||||
# bps[:event_id] = event.id
|
||||
# end
|
||||
# end
|
||||
event_news.update_attributes(bps)
|
||||
event_news.update_user_id = current_user.id
|
||||
if event_news.rejected
|
||||
event_news.reapproval = true
|
||||
event_news.save
|
||||
send_notification_mail_to_managers(event_news,"reapproval",I18n.locale)
|
||||
else
|
||||
event_news.save
|
||||
end
|
||||
build_email(event_news,I18n.locale)
|
||||
now_event_news_page = EventNews.where(:title.ne => "",:is_preview.in=>[false,nil])
|
||||
.order_by(sort).map(&:id).map.with_index.select{|v,i| v==event_news.id}[0][1] rescue nil
|
||||
now_event_news_page = now_event_news_page.nil? ? 0 : ((now_event_news_page+1).to_f/10).ceil
|
||||
redirect_to admin_event_news_index_path(:page=>now_event_news_page)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@event_news.destroy
|
||||
redirect_to "/admin/event_news"
|
||||
end
|
||||
|
||||
def delete
|
||||
if params[:ids]
|
||||
EventNews.any_in(:uid => params[:ids]).destroy_all
|
||||
end
|
||||
redirect_to "/admin/event_news"
|
||||
end
|
||||
|
||||
def preview
|
||||
if params['preview_type'].eql?('edit')
|
||||
event_news_data = event_news_params
|
||||
org_event_news = EventNews.find(params['event_news_id'])
|
||||
event_news = org_event_news.clone
|
||||
event_news.generate_uid
|
||||
event_news.event_news_files = []
|
||||
event_news.event_news_links = []
|
||||
if event_news_data['image'].blank?
|
||||
event_news.image = org_event_news.image
|
||||
end
|
||||
|
||||
if !event_news_data['event_news_files_attributes'].blank?
|
||||
event_news_data['event_news_files_attributes'].each do |key, event_news_file|
|
||||
next if !event_news_file['_destroy'].blank?
|
||||
file = nil
|
||||
if event_news_file['id'].blank?
|
||||
file = EventNewsFile.new(event_news_file)
|
||||
file.event_news_id = event_news.id
|
||||
file.save
|
||||
else
|
||||
org_file = EventNewsFile.find(event_news_file['id'])
|
||||
file = org_file.clone
|
||||
file.event_news_id = event_news.id
|
||||
file.file = org_file.file
|
||||
event_news_file.delete('id')
|
||||
event_news_file.delete('_destroy')
|
||||
file.update_attributes(event_news_file)
|
||||
end
|
||||
|
||||
file.save
|
||||
event_news.event_news_files << file
|
||||
end
|
||||
end
|
||||
|
||||
if !event_news_data['event_news_links_attributes'].blank?
|
||||
event_news_data['event_news_links_attributes'].each do |key, event_news_link|
|
||||
next if !event_news_link['_destroy'].blank?
|
||||
|
||||
if event_news_link['id'].blank?
|
||||
link = EventNewsLink.new(event_news_link)
|
||||
link.event_news_id = event_news.id
|
||||
else
|
||||
link = EventNewsLink.find(event_news_link['id']).clone
|
||||
link.event_news_id = event_news.id
|
||||
event_news_link.delete('id')
|
||||
event_news_link.delete('_destroy')
|
||||
link.update_attributes(event_news_link)
|
||||
end
|
||||
|
||||
link.save
|
||||
event_news.event_news_links << link
|
||||
end
|
||||
end
|
||||
|
||||
event_news_data.delete('event_news_files_attributes')
|
||||
event_news_data.delete('event_news_links_attributes')
|
||||
event_news.update_attributes(event_news_data)
|
||||
else
|
||||
event_news = EventNews.new(event_news_params)
|
||||
end
|
||||
|
||||
event_news.is_preview = true
|
||||
event_news.save
|
||||
render :text=>page_for_event_news(event_news) + "?preview=true"
|
||||
end
|
||||
|
||||
def destroy_preview
|
||||
event_news = EventNews.find_by(:uid=>params['uid'])
|
||||
if event_news.is_preview
|
||||
event_news.destroy
|
||||
end
|
||||
render :json=>{'destroy'=>event_news.id.to_s}
|
||||
end
|
||||
|
||||
def build_email(event_news,locale)
|
||||
if event_news.email_sent and !event_news.email_addresses.blank?
|
||||
if event_news.email.nil?
|
||||
email = Email.new
|
||||
email.save
|
||||
email.deliver rescue nil
|
||||
event_news.email_id = email.id
|
||||
event_news.save
|
||||
end
|
||||
|
||||
is_sent = event_news.email.is_sent
|
||||
is_sent = !params[:resend_mail].eql?("true") if !params[:resend_mail].blank?
|
||||
doc = Nokogiri::HTML(event_news.title_translations[locale])
|
||||
title = doc.text.empty? ? 'no content' : doc.text
|
||||
|
||||
event_news.email.update_attributes(
|
||||
:create_user=>current_user,
|
||||
:mail_sentdate=>event_news.email_sentdate,
|
||||
:module_app=>@module_app,
|
||||
:mail_lang => locale,
|
||||
:mail_to=>event_news.email_addresses,
|
||||
:mail_subject=>title,
|
||||
:template=>'event_news/email',
|
||||
:template_data=>{
|
||||
"host" => request.host_with_port,
|
||||
"title" => title,
|
||||
"url" => page_for_event_news(event_news)
|
||||
},
|
||||
:is_sent=>is_sent
|
||||
)
|
||||
event_news.email.deliver
|
||||
else
|
||||
event_news.email.destroy if !event_news.email.nil?
|
||||
end
|
||||
end
|
||||
|
||||
def custom_fields_title
|
||||
@event_news_custom_titles = EventNewsCustomTitle.get_map
|
||||
end
|
||||
|
||||
def update_custom_title
|
||||
event_news_custom_title_params = params.require(:event_news_custom_title).permit!
|
||||
event_news_custom_title_params.each do |k,event_news_custom_title_param|
|
||||
EventNewsCustomTitle.find(event_news_custom_title_param['id']).update_attributes(event_news_custom_title_param)
|
||||
end
|
||||
Thread.new do
|
||||
content = "UNICORN_PID=\"`fuser tmp/pids/unicorn.sock tmp/sockets/unicorn.sock tmp/unicorn.sock` `cat tmp/pids/unicorn.pid `\" && kill -s USR2 $UNICORN_PID ; n=20; while (kill -0 $UNICORN_PID > /dev/null 2>&1) && test $n -ge 0; do printf '.' && sleep 1 && n=$(( $n - 1 )); done ; if test $n -lt 0; then kill -s TERM $UNICORN_PID; sleep 3; bundle exec unicorn_rails -c config/unicorn.rb -D -E #{Rails.env}; else kill -s QUIT $UNICORN_PID; fi"
|
||||
system(content)
|
||||
end
|
||||
redirect_to action: :index
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_settings
|
||||
@event_news_setting = EventNewsSetting.first rescue nil
|
||||
if @event_news_setting.nil?
|
||||
@event_news_setting = EventNewsSetting.create
|
||||
end
|
||||
end
|
||||
|
||||
def set_event_news
|
||||
@event_news = EventNews.find(params[:id])
|
||||
end
|
||||
|
||||
def event_news_params
|
||||
params[:event_news][:email_sent] = params[:event_news][:email_sent].nil? ? 0 : params[:event_news][:email_sent]
|
||||
params.require(:event_news).permit!
|
||||
end
|
||||
|
||||
def feed_params
|
||||
params.require(:event_news_feed).permit!
|
||||
end
|
||||
|
||||
def settings_params
|
||||
params.require(:event_news_setting).permit!
|
||||
end
|
||||
end
|
||||
|
|
|
@ -21,10 +21,7 @@ class EventNewsController < ApplicationController
|
|||
target = a.is_external_link ? "_blank" : "_self"
|
||||
doc = Nokogiri::HTML(a.title)
|
||||
title = doc.text.empty? ? 'no content' : doc.text
|
||||
event_time = (a.event_date.strftime(a.date_parse_format) rescue "")
|
||||
if a.event_end_date
|
||||
event_time = "<span class=\"start_date\">#{event_time.split(" ")[0]}</span> ~ <span class=\"end_date\">#{a.event_end_date.strftime('%Y-%m-%d')}</span>"
|
||||
end
|
||||
event_time = a.event_time_formated_for_frontend
|
||||
event_time_formated = a.event_time_formated
|
||||
{
|
||||
"department" => author,
|
||||
|
@ -53,7 +50,7 @@ class EventNewsController < ApplicationController
|
|||
"target" => target,
|
||||
"img_src" => a.image.thumb.url || "/assets/event_news-default.jpg",
|
||||
"img_description" => desc,
|
||||
"more" => t(:more_plus),
|
||||
"more" => t("event_news.more"),
|
||||
"view_count" => a.view_count
|
||||
}
|
||||
else
|
||||
|
@ -72,11 +69,11 @@ class EventNewsController < ApplicationController
|
|||
"event_news" => event_news,
|
||||
"extras" => {
|
||||
"widget-title" =>t('event_news.event_news'),
|
||||
"title-head" => t('event_news.title'),
|
||||
"title-head" => EventNewsCustomTitle.get_trans('title'),
|
||||
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
|
||||
"place-head" => EventNewsCustomTitle.get_trans('place'),
|
||||
"host-head" => EventNewsCustomTitle.get_trans('host'),
|
||||
"notes-head" => t('event_news.notes'),
|
||||
"notes-head" => EventNewsCustomTitle.get_trans('notes'),
|
||||
"event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"status-head" => t('event_news.table.status'),
|
||||
|
@ -379,12 +376,13 @@ class EventNewsController < ApplicationController
|
|||
"more_url"=>OrbitHelper.widget_more_url,
|
||||
"main_picture" => mp,
|
||||
"main_picture_description" => mpd,
|
||||
"title-head" => t('event_news.title'),
|
||||
"title-head" => EventNewsCustomTitle.get_trans('title'),
|
||||
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
|
||||
"place-head" => EventNewsCustomTitle.get_trans('place'),
|
||||
"host-head" => EventNewsCustomTitle.get_trans('host'),
|
||||
"notes-head" => t('event_news.notes'),
|
||||
"notes-head" => EventNewsCustomTitle.get_trans('notes'),
|
||||
"event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => t('event_news.table.date'),
|
||||
"author-head" => t('event_news.table.author'),
|
||||
"status-head" => t('event_news.table.status'),
|
||||
|
@ -532,7 +530,6 @@ class EventNewsController < ApplicationController
|
|||
event_news = top_event_news + rest_event_news
|
||||
end
|
||||
end
|
||||
event_news.each{|a| a["postdate"] = a["postdate"].in_time_zone(Time.zone.utc_offset / 3600).strftime((a['all_day'] ? '%Y-%m-%d' : '%Y-%m-%d %H:%M')) rescue nil }
|
||||
event_news
|
||||
end
|
||||
|
||||
|
@ -623,20 +620,26 @@ class EventNewsController < ApplicationController
|
|||
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
|
||||
prev_btn_title = (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev"
|
||||
next_btn_title = (I18n.locale.to_s =="zh_tw") ? "下一張" : "next"
|
||||
event_time = (event_news.event_date.strftime(event_news.date_parse_format) rescue "")
|
||||
if event_news.event_end_date
|
||||
event_time = "<span class=\"start_date\">#{event_time.split(" ")[0]}</span> ~ <span class=\"end_date\">#{event_news.event_end_date.strftime('%Y-%m-%d')}</span>"
|
||||
begin
|
||||
event_time = event_news.event_time_formated_for_frontend
|
||||
rescue => e
|
||||
puts e.to_s
|
||||
event_time = ""
|
||||
end
|
||||
|
||||
{
|
||||
"tags" => tags,
|
||||
"event_news_files" => files,
|
||||
"event_news_links" => links,
|
||||
"event_carousel_images" => event_carousel_images,
|
||||
"data" => {
|
||||
"title-head" => EventNewsCustomTitle.get_trans('title'),
|
||||
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
|
||||
"place-head" => EventNewsCustomTitle.get_trans('place'),
|
||||
"host-head" => EventNewsCustomTitle.get_trans('host'),
|
||||
"notes-head" => t('event_news.notes'),
|
||||
"notes-head" => EventNewsCustomTitle.get_trans('notes'),
|
||||
"event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"event-time-css" => (event_time.blank? ? "display: none;" : ""),
|
||||
"speaker-css" => (event_news.speaker.blank? ? "display: none;" : ""),
|
||||
"host-css" => (event_news.host.blank? ? "display: none;" : ""),
|
||||
"speaker" => event_news.speaker,
|
||||
|
@ -713,10 +716,7 @@ class EventNewsController < ApplicationController
|
|||
|
||||
event_date = DateTime.parse(event_news["event_date"].to_s) rescue nil
|
||||
event_end_date = DateTime.parse(event_news["event_end_date"].to_s) rescue nil
|
||||
event_time = (event_date.strftime(event_news.date_parse_format) rescue "")
|
||||
if event_end_date
|
||||
event_time = "<span class=\"start_date\">#{event_time.split(" ")[0]}</span> ~ <span class=\"end_date\">#{event_end_date.strftime('%Y-%m-%d')}</span>"
|
||||
end
|
||||
event_time = EventNewsSetting.event_time_formated_for_frontend(event_news["event_date"],event_news["event_end_date"])
|
||||
event_carousel_images = Array(event_news["event_carousel_images"])
|
||||
resume_btn_title = (I18n.locale.to_s =="zh_tw") ? "繼續播放" : "resume"
|
||||
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
|
||||
|
@ -735,10 +735,14 @@ class EventNewsController < ApplicationController
|
|||
"update_user" => update_user,
|
||||
"updated_at" => event_time,
|
||||
"body" => event_news["text_translations"][locale],
|
||||
"title-head" => EventNewsCustomTitle.get_trans('title'),
|
||||
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
|
||||
"place-head" => EventNewsCustomTitle.get_trans('place'),
|
||||
"host-head" => EventNewsCustomTitle.get_trans('host'),
|
||||
"notes-head" => t('event_news.notes'),
|
||||
"notes-head" => EventNewsCustomTitle.get_trans('notes'),
|
||||
"event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"event-time-css" => (event_time.blank? ? "display: none;" : ""),
|
||||
"speaker-css" => (speaker.blank? ? "display: none;" : ""),
|
||||
"host-css" => (host.blank? ? "display: none;" : ""),
|
||||
"speaker" => speaker,
|
||||
|
@ -809,10 +813,7 @@ class EventNewsController < ApplicationController
|
|||
target = a.is_external_link ? "_blank" : "_self"
|
||||
doc = Nokogiri::HTML(a.title)
|
||||
title = doc.text.empty? ? 'no content' : doc.text
|
||||
event_time = (a.event_date.strftime(a.date_parse_format) rescue "")
|
||||
if a.event_end_date
|
||||
event_time = "<span class=\"start_date\">#{event_time.split(" ")[0]}</span> ~ <span class=\"end_date\">#{a.event_end_date.strftime('%Y-%m-%d')}</span>"
|
||||
end
|
||||
event_time = a.event_time_formated_for_frontend
|
||||
event_time_formated = a.event_time_formated
|
||||
{
|
||||
"department" => author,
|
||||
|
@ -824,6 +825,8 @@ class EventNewsController < ApplicationController
|
|||
"place-css" => (a.place.blank? ? "display: none;" : ""),
|
||||
"event-time-formated" => event_time_formated,
|
||||
"event-time-css" => (event_time_formated.blank? ? "display: none;" : ""),
|
||||
"speaker-css" => (a.speaker.blank? ? "display: none;" : ""),
|
||||
"host-css" => (a.host.blank? ? "display: none;" : ""),
|
||||
"speaker" => a.speaker,
|
||||
"place" => a.place,
|
||||
"host" => a.host,
|
||||
|
@ -841,7 +844,7 @@ class EventNewsController < ApplicationController
|
|||
"target" => target,
|
||||
"img_src" => a.image.thumb.url || "/assets/event_news-default.jpg",
|
||||
"img_description" => desc,
|
||||
"more" => t(:more_plus),
|
||||
"more" => t("event_news.more"),
|
||||
"view_count" => a.view_count
|
||||
}
|
||||
else
|
||||
|
@ -860,11 +863,13 @@ class EventNewsController < ApplicationController
|
|||
"event_news" => event_news,
|
||||
"extras" => {
|
||||
"widget-title" =>t('event_news.event_news'),
|
||||
"title-head" => t('event_news.title'),
|
||||
"title-head" => EventNewsCustomTitle.get_trans('title'),
|
||||
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
|
||||
"place-head" => EventNewsCustomTitle.get_trans('place'),
|
||||
"host-head" => EventNewsCustomTitle.get_trans('host'),
|
||||
"notes-head" => t('event_news.notes'),
|
||||
"notes-head" => EventNewsCustomTitle.get_trans('notes'),
|
||||
"event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
|
||||
"date-head" => t('event_news.table.date'),
|
||||
"status-head" => t('event_news.table.status'),
|
||||
"author-head" => t('event_news.table.author'),
|
||||
|
|
|
@ -1,187 +1,187 @@
|
|||
require "rss"
|
||||
class EventNewsFeedsController < ApplicationController
|
||||
include Admin::EventNewsHelper
|
||||
def feed
|
||||
uid = params[:uid]
|
||||
anns = get_event_news(uid)
|
||||
render :json => anns.to_json
|
||||
end
|
||||
|
||||
def rssfeed
|
||||
uid = params[:uid]
|
||||
@bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
||||
if !@bf.nil?
|
||||
tags = @bf.tag_ids
|
||||
if !tags.empty?
|
||||
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
|
||||
end
|
||||
categories = @bf.category_ids
|
||||
if !categories.empty?
|
||||
@event_news = @event_news.filter_by_categories(categories)
|
||||
end
|
||||
else
|
||||
@event_news = []
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html {redirect_to "/xhr/event_news/rssfeed/#{@bf.uid}.rss"}
|
||||
format.rss
|
||||
end
|
||||
end
|
||||
|
||||
def feeds
|
||||
feeds = []
|
||||
EventNewsFeed.all.each do |bf|
|
||||
feed = {}
|
||||
feed["title_translations"] = bf.title_translations
|
||||
feed["uid"] = bf.uid
|
||||
feed["url"] = "#{request.base_url}/xhr/event_news/feed/#{bf.uid}"
|
||||
feed["xml_url"] = "#{request.base_url}/xhr/event_news/rssfeed/#{bf.uid}.rss"
|
||||
feed["tags"] = []
|
||||
bf.tag_ids.each do |t|
|
||||
tag = Tag.find(t)
|
||||
d = {}
|
||||
d["name_translations"] = tag.name_translations
|
||||
feed["tags"] << d
|
||||
end
|
||||
feeds << feed
|
||||
end
|
||||
render :json => {"feeds" => feeds}.to_json
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def smart_convertor(text)
|
||||
html_string = text
|
||||
links = html_string.scan(/img.*?src="(.*?)"/i)
|
||||
links = links + html_string.scan(/a.*?href="(.*?)"/i)
|
||||
links.uniq!
|
||||
links.each do |link|
|
||||
l = link.first
|
||||
new_link = nil
|
||||
if l.starts_with?("/")
|
||||
new_link = request.protocol + request.host_with_port + l
|
||||
elsif l.starts_with?("..")
|
||||
l1 = l.gsub("../","")
|
||||
new_link = request.protocol + request.host_with_port + "/" + l1
|
||||
end
|
||||
html_string = html_string.gsub(l,new_link) if !new_link.nil?
|
||||
end
|
||||
return html_string
|
||||
end
|
||||
|
||||
def get_event_news(uid)
|
||||
bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
||||
startdt = params[:start]
|
||||
enddt = params[:end]
|
||||
dt = params[:date]
|
||||
if !bf.nil?
|
||||
tags = bf.tag_ids
|
||||
categories = bf.category_ids
|
||||
if !(categories.empty? && tags.empty?)
|
||||
if !dt.nil?
|
||||
dt = DateTime.parse(dt)
|
||||
dtt = dt + 1.day
|
||||
event_news = EventNews.where(:postdate.gt => dt, :postdate.lt => dtt).can_display_and_sorted.is_approved
|
||||
elsif !startdt.nil? && enddt.nil?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.now
|
||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
||||
elsif !startdt.nil? && !enddt.nil?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.parse(enddt) + 1.day
|
||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
||||
else
|
||||
event_news = EventNews.all.can_display_and_sorted.is_approved
|
||||
end
|
||||
if !tags.empty?
|
||||
event_news = event_news.filter_by_tags(tags)
|
||||
end
|
||||
if !categories.empty?
|
||||
event_news = event_news.filter_by_categories(categories)
|
||||
end
|
||||
else
|
||||
event_news = []
|
||||
end
|
||||
end
|
||||
all_anns = []
|
||||
tag_names = []
|
||||
category_titles = []
|
||||
tag_ids = []
|
||||
category_ids = []
|
||||
event_news.each do |anns|
|
||||
user = User.find(anns.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
||||
else
|
||||
author = ""
|
||||
end
|
||||
a = {}
|
||||
a["id"] = anns.uid
|
||||
translations_fields = ["title","subtitle","speaker","place","host","notes"]
|
||||
translations_fields.each do |translations_field|
|
||||
a[translations_field+"_translations"] = anns.send(translations_field+"_translations") rescue {}
|
||||
end
|
||||
a["text_translations"] = {}
|
||||
a["text_translations"]["en"] = smart_convertor(anns.text_translations["en"]) if !anns.text_translations["en"].blank?
|
||||
a["text_translations"]["zh_tw"] = smart_convertor(anns.text_translations["zh_tw"]) if !anns.text_translations["zh_tw"].blank?
|
||||
a["event_date"] = anns.event_date
|
||||
a["event_end_date"] = anns.event_end_date
|
||||
a["postdate"] = anns.event_date#anns.postdate
|
||||
a["image_description_translations"] = anns.image_description_translations
|
||||
a["image"] = {}
|
||||
a["image"]["original"] = ("#{request.base_url}" + anns.image.url rescue "")
|
||||
a["image"]["thumb"] = ("#{request.base_url}" + anns.image.thumb.url rescue "")
|
||||
a["image"]["mobile"] = ("#{request.base_url}" + anns.image.mobile.url rescue "")
|
||||
a["img_src"] = a["image"]["thumb"] || "/assets/announcement-default.jpg"
|
||||
a["tags"] = []
|
||||
a["category"] = {}
|
||||
a["author"] = author
|
||||
a["params"] = anns.to_param
|
||||
a["event_news_links"] = []
|
||||
a["event_news_files"] = []
|
||||
a["event_carousel_images"] = anns.event_carousel_images.map{|image| {"src"=>"#{request.base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
||||
anns.tags.each do |tag|
|
||||
if !tag_ids.include?(tag.id.to_s)
|
||||
tag_ids << tag.id.to_s
|
||||
tag_names << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
a["tags"] << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
cat = anns.category
|
||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
||||
category_ids << cat.id.to_s
|
||||
category_titles << {"title_translations" => cat.title_translations}
|
||||
end
|
||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
||||
anns.event_news_links.each do |bl|
|
||||
b = {}
|
||||
b["url"] = bl.url
|
||||
b["title_translations"] = bl.title_translations
|
||||
b["link_url"] = b["url"]
|
||||
b["link_title_translations"] = bl.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
||||
a["event_news_links"] << b
|
||||
end
|
||||
anns.event_news_files.each do |bf|
|
||||
b = {}
|
||||
b["description_translations"] = bf.description_translations
|
||||
b["title_translations"] = bf.title_translations
|
||||
b["url"] = ("#{request.base_url}" + bf.file.url rescue "")
|
||||
b["file_url"] = b["url"]
|
||||
b["file_title_translations"] = bf.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
||||
a["event_news_files"] << b
|
||||
end
|
||||
all_anns << a
|
||||
end
|
||||
{
|
||||
"event_news" => all_anns,
|
||||
"tags" => tag_names,
|
||||
"categories" => category_titles
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
require "rss"
|
||||
class EventNewsFeedsController < ApplicationController
|
||||
include Admin::EventNewsHelper
|
||||
def feed
|
||||
uid = params[:uid]
|
||||
anns = get_event_news(uid)
|
||||
render :json => anns.to_json
|
||||
end
|
||||
|
||||
def rssfeed
|
||||
uid = params[:uid]
|
||||
@bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
||||
if !@bf.nil?
|
||||
tags = @bf.tag_ids
|
||||
if !tags.empty?
|
||||
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
|
||||
end
|
||||
categories = @bf.category_ids
|
||||
if !categories.empty?
|
||||
@event_news = @event_news.filter_by_categories(categories)
|
||||
end
|
||||
else
|
||||
@event_news = []
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html {redirect_to "/xhr/event_news/rssfeed/#{@bf.uid}.rss"}
|
||||
format.rss
|
||||
end
|
||||
end
|
||||
|
||||
def feeds
|
||||
feeds = []
|
||||
EventNewsFeed.all.each do |bf|
|
||||
feed = {}
|
||||
feed["title_translations"] = bf.title_translations
|
||||
feed["uid"] = bf.uid
|
||||
feed["url"] = "#{request.base_url}/xhr/event_news/feed/#{bf.uid}"
|
||||
feed["xml_url"] = "#{request.base_url}/xhr/event_news/rssfeed/#{bf.uid}.rss"
|
||||
feed["tags"] = []
|
||||
bf.tag_ids.each do |t|
|
||||
tag = Tag.find(t)
|
||||
d = {}
|
||||
d["name_translations"] = tag.name_translations
|
||||
feed["tags"] << d
|
||||
end
|
||||
feeds << feed
|
||||
end
|
||||
render :json => {"feeds" => feeds}.to_json
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def smart_convertor(text)
|
||||
html_string = text
|
||||
links = html_string.scan(/img.*?src="(.*?)"/i)
|
||||
links = links + html_string.scan(/a.*?href="(.*?)"/i)
|
||||
links.uniq!
|
||||
links.each do |link|
|
||||
l = link.first
|
||||
new_link = nil
|
||||
if l.starts_with?("/")
|
||||
new_link = request.protocol + request.host_with_port + l
|
||||
elsif l.starts_with?("..")
|
||||
l1 = l.gsub("../","")
|
||||
new_link = request.protocol + request.host_with_port + "/" + l1
|
||||
end
|
||||
html_string = html_string.gsub(l,new_link) if !new_link.nil?
|
||||
end
|
||||
return html_string
|
||||
end
|
||||
|
||||
def get_event_news(uid)
|
||||
bf = EventNewsFeed.find_by(:uid => uid) rescue nil
|
||||
startdt = params[:start]
|
||||
enddt = params[:end]
|
||||
dt = params[:date]
|
||||
if !bf.nil?
|
||||
tags = bf.tag_ids
|
||||
categories = bf.category_ids
|
||||
if !(categories.empty? && tags.empty?)
|
||||
if !dt.nil?
|
||||
dt = DateTime.parse(dt)
|
||||
dtt = dt + 1.day
|
||||
event_news = EventNews.where(:postdate.gt => dt, :postdate.lt => dtt).can_display_and_sorted.is_approved
|
||||
elsif !startdt.nil? && enddt.nil?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.now
|
||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
||||
elsif !startdt.nil? && !enddt.nil?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.parse(enddt) + 1.day
|
||||
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
|
||||
else
|
||||
event_news = EventNews.all.can_display_and_sorted.is_approved
|
||||
end
|
||||
if !tags.empty?
|
||||
event_news = event_news.filter_by_tags(tags)
|
||||
end
|
||||
if !categories.empty?
|
||||
event_news = event_news.filter_by_categories(categories)
|
||||
end
|
||||
else
|
||||
event_news = []
|
||||
end
|
||||
end
|
||||
all_anns = []
|
||||
tag_names = []
|
||||
category_titles = []
|
||||
tag_ids = []
|
||||
category_ids = []
|
||||
event_news.each do |anns|
|
||||
user = User.find(anns.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
||||
else
|
||||
author = ""
|
||||
end
|
||||
a = {}
|
||||
a["id"] = anns.uid
|
||||
translations_fields = ["title","subtitle","speaker","place","host","notes"]
|
||||
translations_fields.each do |translations_field|
|
||||
a[translations_field+"_translations"] = anns.send(translations_field+"_translations") rescue {}
|
||||
end
|
||||
a["text_translations"] = {}
|
||||
a["text_translations"]["en"] = smart_convertor(anns.text_translations["en"]) if !anns.text_translations["en"].blank?
|
||||
a["text_translations"]["zh_tw"] = smart_convertor(anns.text_translations["zh_tw"]) if !anns.text_translations["zh_tw"].blank?
|
||||
a["event_date"] = anns.event_date
|
||||
a["event_end_date"] = anns.event_end_date
|
||||
a["postdate"] = anns.event_date#anns.postdate
|
||||
a["image_description_translations"] = anns.image_description_translations
|
||||
a["image"] = {}
|
||||
a["image"]["original"] = ("#{request.base_url}" + anns.image.url rescue "")
|
||||
a["image"]["thumb"] = ("#{request.base_url}" + anns.image.thumb.url rescue "")
|
||||
a["image"]["mobile"] = ("#{request.base_url}" + anns.image.mobile.url rescue "")
|
||||
a["img_src"] = a["image"]["thumb"] || "/assets/announcement-default.jpg"
|
||||
a["tags"] = []
|
||||
a["category"] = {}
|
||||
a["author"] = author
|
||||
a["params"] = anns.to_param
|
||||
a["event_news_links"] = []
|
||||
a["event_news_files"] = []
|
||||
a["event_carousel_images"] = anns.event_carousel_images.map{|image| {"src"=>"#{request.base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
||||
anns.tags.each do |tag|
|
||||
if !tag_ids.include?(tag.id.to_s)
|
||||
tag_ids << tag.id.to_s
|
||||
tag_names << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
a["tags"] << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
cat = anns.category
|
||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
||||
category_ids << cat.id.to_s
|
||||
category_titles << {"title_translations" => cat.title_translations}
|
||||
end
|
||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
||||
anns.event_news_links.each do |bl|
|
||||
b = {}
|
||||
b["url"] = bl.url
|
||||
b["title_translations"] = bl.title_translations
|
||||
b["link_url"] = b["url"]
|
||||
b["link_title_translations"] = bl.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
||||
a["event_news_links"] << b
|
||||
end
|
||||
anns.event_news_files.each do |bf|
|
||||
b = {}
|
||||
b["description_translations"] = bf.description_translations
|
||||
b["title_translations"] = bf.title_translations
|
||||
b["url"] = ("#{request.base_url}" + bf.file.url rescue "")
|
||||
b["file_url"] = b["url"]
|
||||
b["file_title_translations"] = bf.title_translations.map{|k,v| [k,(v.blank? ? File.basename(b["url"]) : v rescue '')]}.to_h
|
||||
a["event_news_files"] << b
|
||||
end
|
||||
all_anns << a
|
||||
end
|
||||
{
|
||||
"event_news" => all_anns,
|
||||
"tags" => tag_names,
|
||||
"categories" => category_titles
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,129 +1,129 @@
|
|||
# encoding: utf-8
|
||||
class EventNewsModuleController < ApplicationController
|
||||
before_filter :set_I18n
|
||||
|
||||
def get_event_news
|
||||
page = Page.where(:module => "event_news").first rescue nil
|
||||
|
||||
# 頁次
|
||||
page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i
|
||||
# 每頁顯示的則數
|
||||
per_page = params[:per_page].blank? ? 10 : params[:per_page].to_i
|
||||
per_page = per_page > 0 ? per_page : 10
|
||||
|
||||
I18n.locale = :zh_tw
|
||||
if !params[:keyword].blank?
|
||||
keyword = Regexp.new(".*"+params[:keyword]+".*")
|
||||
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
|
||||
else
|
||||
event_news = EventNews.all
|
||||
end
|
||||
|
||||
if !params[:category].blank?
|
||||
module_id = ModuleApp.where(:key=>"event_news").first.id
|
||||
category = Regexp.new(".*"+params[:category]+".*")
|
||||
category_id = Category.where(:title => category, :module_app_id => module_id).first.id
|
||||
event_news = event_news.where(:category_id => category_id)
|
||||
else
|
||||
event_news = event_news
|
||||
end
|
||||
|
||||
event_news = event_news.where(:is_preview.in=>[false,nil])
|
||||
event_news = event_news.where(:approved.ne => false , :rejected.ne => true)
|
||||
event_news = event_news.where(:postdate.lt=>Time.now)
|
||||
event_news = event_news.desc( :is_top, :postdate).page(page_num).per(per_page)
|
||||
|
||||
event_news = event_news.collect do |b|
|
||||
image = request.protocol + request.host_with_port + b.image.url rescue nil
|
||||
|
||||
links = b.event_news_links.collect do |bl|
|
||||
{
|
||||
"title" => bl.title_translations,
|
||||
"url" => bl.url
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
files = b.event_news_files.collect do |bf|
|
||||
file = request.protocol + request.host_with_port + bf.file.url rescue nil
|
||||
{
|
||||
"title" => bf.title_translations,
|
||||
"description" => bf.description_translations,
|
||||
"file" => file
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
ts = b.tags.collect do |t|
|
||||
{
|
||||
"name" => t.name_translations
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
text = {"en" => "", "zh_tw" => ""}
|
||||
text["en"] = (b.text_translations["en"].nil? ? "" :smart_convertor(b.text_translations["en"]))
|
||||
text["zh_tw"] = (b.text_translations["zh_tw"].nil? ? "" : smart_convertor(b.text_translations["zh_tw"]))
|
||||
|
||||
author = User.find(b.create_user_id).member_profile.name rescue ""
|
||||
|
||||
{
|
||||
"id" => b.id.to_s,
|
||||
"title" => b.title_translations,
|
||||
"subtitle" => b.subtitle_translations,
|
||||
"text" => text,
|
||||
"postdate" => b.postdate,
|
||||
"deadline" => b.deadline,
|
||||
"category" => b.category.title_translations,
|
||||
"tags" => ts,
|
||||
"image" => image,
|
||||
"links" => links,
|
||||
"files" => files,
|
||||
"author" => author,
|
||||
"url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}"
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
# 計算總筆數 Start
|
||||
if !params[:keyword].blank?
|
||||
keyword = Regexp.new(".*"+params[:keyword]+".*")
|
||||
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
|
||||
else
|
||||
event_news = EventNews.all
|
||||
end
|
||||
event_news = event_news.where(:is_preview.in=>[false,nil])
|
||||
event_news = event_news.where(:approved.ne => false , :rejected.ne => true)
|
||||
event_news = event_news.where(:postdate.lt=>Time.now)
|
||||
total_pages = event_news.count
|
||||
# End
|
||||
|
||||
render :json => {
|
||||
"event_news" => event_news,
|
||||
"event_news_count" => event_news.count,
|
||||
"page_num" => page_num,
|
||||
"total_pages" => total_pages,
|
||||
}.to_json
|
||||
end
|
||||
|
||||
def smart_convertor(text)
|
||||
html_string = text
|
||||
links = html_string.scan(/img.*?src="(.*?)"/i)
|
||||
links.each do |link|
|
||||
l = link.first
|
||||
new_link = nil
|
||||
if l.starts_with?("/")
|
||||
new_link = request.protocol + request.host_with_port + l
|
||||
elsif l.starts_with?("..")
|
||||
l1 = l.gsub("../","")
|
||||
new_link = request.protocol + request.host_with_port + "/" + l1
|
||||
end
|
||||
html_string = html_string.sub(l,new_link) if !new_link.nil?
|
||||
end
|
||||
return html_string
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def set_I18n
|
||||
I18n.locale = params[:lang] if params[:lang].present?
|
||||
end
|
||||
|
||||
end
|
||||
# encoding: utf-8
|
||||
class EventNewsModuleController < ApplicationController
|
||||
before_filter :set_I18n
|
||||
|
||||
def get_event_news
|
||||
page = Page.where(:module => "event_news").first rescue nil
|
||||
|
||||
# 頁次
|
||||
page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i
|
||||
# 每頁顯示的則數
|
||||
per_page = params[:per_page].blank? ? 10 : params[:per_page].to_i
|
||||
per_page = per_page > 0 ? per_page : 10
|
||||
|
||||
I18n.locale = :zh_tw
|
||||
if !params[:keyword].blank?
|
||||
keyword = Regexp.new(".*"+params[:keyword]+".*")
|
||||
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
|
||||
else
|
||||
event_news = EventNews.all
|
||||
end
|
||||
|
||||
if !params[:category].blank?
|
||||
module_id = ModuleApp.where(:key=>"event_news").first.id
|
||||
category = Regexp.new(".*"+params[:category]+".*")
|
||||
category_id = Category.where(:title => category, :module_app_id => module_id).first.id
|
||||
event_news = event_news.where(:category_id => category_id)
|
||||
else
|
||||
event_news = event_news
|
||||
end
|
||||
|
||||
event_news = event_news.where(:is_preview.in=>[false,nil])
|
||||
event_news = event_news.where(:approved.ne => false , :rejected.ne => true)
|
||||
event_news = event_news.where(:postdate.lt=>Time.now)
|
||||
event_news = event_news.desc( :is_top, :postdate).page(page_num).per(per_page)
|
||||
|
||||
event_news = event_news.collect do |b|
|
||||
image = request.protocol + request.host_with_port + b.image.url rescue nil
|
||||
|
||||
links = b.event_news_links.collect do |bl|
|
||||
{
|
||||
"title" => bl.title_translations,
|
||||
"url" => bl.url
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
files = b.event_news_files.collect do |bf|
|
||||
file = request.protocol + request.host_with_port + bf.file.url rescue nil
|
||||
{
|
||||
"title" => bf.title_translations,
|
||||
"description" => bf.description_translations,
|
||||
"file" => file
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
ts = b.tags.collect do |t|
|
||||
{
|
||||
"name" => t.name_translations
|
||||
}
|
||||
end rescue nil
|
||||
|
||||
text = {"en" => "", "zh_tw" => ""}
|
||||
text["en"] = (b.text_translations["en"].nil? ? "" :smart_convertor(b.text_translations["en"]))
|
||||
text["zh_tw"] = (b.text_translations["zh_tw"].nil? ? "" : smart_convertor(b.text_translations["zh_tw"]))
|
||||
|
||||
author = User.find(b.create_user_id).member_profile.name rescue ""
|
||||
|
||||
{
|
||||
"id" => b.id.to_s,
|
||||
"title" => b.title_translations,
|
||||
"subtitle" => b.subtitle_translations,
|
||||
"text" => text,
|
||||
"postdate" => b.postdate,
|
||||
"deadline" => b.deadline,
|
||||
"category" => b.category.title_translations,
|
||||
"tags" => ts,
|
||||
"image" => image,
|
||||
"links" => links,
|
||||
"files" => files,
|
||||
"author" => author,
|
||||
"url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}"
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
# 計算總筆數 Start
|
||||
if !params[:keyword].blank?
|
||||
keyword = Regexp.new(".*"+params[:keyword]+".*")
|
||||
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
|
||||
else
|
||||
event_news = EventNews.all
|
||||
end
|
||||
event_news = event_news.where(:is_preview.in=>[false,nil])
|
||||
event_news = event_news.where(:approved.ne => false , :rejected.ne => true)
|
||||
event_news = event_news.where(:postdate.lt=>Time.now)
|
||||
total_pages = event_news.count
|
||||
# End
|
||||
|
||||
render :json => {
|
||||
"event_news" => event_news,
|
||||
"event_news_count" => event_news.count,
|
||||
"page_num" => page_num,
|
||||
"total_pages" => total_pages,
|
||||
}.to_json
|
||||
end
|
||||
|
||||
def smart_convertor(text)
|
||||
html_string = text
|
||||
links = html_string.scan(/img.*?src="(.*?)"/i)
|
||||
links.each do |link|
|
||||
l = link.first
|
||||
new_link = nil
|
||||
if l.starts_with?("/")
|
||||
new_link = request.protocol + request.host_with_port + l
|
||||
elsif l.starts_with?("..")
|
||||
l1 = l.gsub("../","")
|
||||
new_link = request.protocol + request.host_with_port + "/" + l1
|
||||
end
|
||||
html_string = html_string.sub(l,new_link) if !new_link.nil?
|
||||
end
|
||||
return html_string
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def set_I18n
|
||||
I18n.locale = params[:lang] if params[:lang].present?
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1,424 +1,424 @@
|
|||
require "net/http"
|
||||
require "uri"
|
||||
require 'json'
|
||||
|
||||
module Admin::EventNewsHelper
|
||||
module FormHelper
|
||||
extend self
|
||||
extend ActionView::Helpers::FormTagHelper
|
||||
extend ActionView::Helpers::FormOptionsHelper
|
||||
extend ActionView::Helpers::DateHelper
|
||||
extend ActionView::Helpers::TagHelper
|
||||
extend ActionView::Helpers::RenderingHelper
|
||||
extend ActionView::Context
|
||||
extend OrbitBasis::RenderAnywhere
|
||||
extend ActionView::Helpers::UrlHelper
|
||||
extend OrbitFormHelper
|
||||
extend Ckeditor::Helpers::FormHelper
|
||||
def available_locales
|
||||
@available_locales = @available_locales || Site.first.in_use_locales || I18n.available_locales
|
||||
end
|
||||
def set_input_name(input_name)
|
||||
@input_name = input_name
|
||||
end
|
||||
|
||||
def get_input_name
|
||||
@input_name.to_s
|
||||
end
|
||||
def create_lang_panel(field)
|
||||
tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do
|
||||
available_locales.collect do |key|
|
||||
link_entry_ary = ["##{field}","_#{key}"]
|
||||
link_entry = link_entry_ary.join
|
||||
link_to(I18n.t(key),link_entry,:data=>{:toggle=>"tab"},:class=>"btn #{(key == I18n.locale ? "active" : nil)}",:for=>key)
|
||||
end.join.html_safe
|
||||
end
|
||||
end
|
||||
def multiple_lang_tag(index1,type_of_tag,field,value=nil,custom_options={},combine_element='',exteral_options={},sortable=false)
|
||||
if !index1.nil?
|
||||
all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
|
||||
else
|
||||
all_field = (get_input_name + "[#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
|
||||
end
|
||||
tmp = (available_locales.collect do |locale|
|
||||
active_flag = ((locale == I18n.locale) ? ' in active' : '')
|
||||
content_tag(:div,:class => "tab-content fade#{active_flag}",:id=>"#{all_field}_#{locale}") do
|
||||
value_locale = value[locale.to_s] rescue nil
|
||||
if !index1.nil?
|
||||
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{index1}][#{field}][#{locale}]",value_locale,custom_options)
|
||||
else
|
||||
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{field}][#{locale}]",value_locale,custom_options)
|
||||
end
|
||||
end
|
||||
end.join + create_lang_panel(all_field)).html_safe + combine_element
|
||||
|
||||
if sortable
|
||||
if exteral_options['style'].nil?
|
||||
exteral_options['style'] = 'display: flex;align-items: center;flex-wrap: nowrap;'
|
||||
else
|
||||
exteral_options['style'] = exteral_options['style'] + 'display: flex;align-items: center;flex-wrap: nowrap;'
|
||||
end
|
||||
content_tag(:div,{:class => "tab-panel border"}.merge(exteral_options)) do
|
||||
("<i class=\"icons-list-2\" style=\"cursor: grab;font-size: x-large;\"></i>" +content_tag(:div) do
|
||||
tmp
|
||||
end).html_safe
|
||||
end
|
||||
else
|
||||
content_tag(:div,{:class => "tab-panel"}.merge(exteral_options)) do
|
||||
tmp
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.thead(field,center=false,enable_sort=true)
|
||||
sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s
|
||||
active = OrbitHelper.params[:sort].eql? sort
|
||||
order = active ? (["asc", "desc"]-[OrbitHelper.params[:order]]).first : "asc"
|
||||
arrow = (order.eql? "desc") ? "<b class='icons-arrow-up-3'></b>" : "<b class='icons-arrow-down-4'></b>"
|
||||
klass = field.eql?(:title) ? "span5" : "span2"
|
||||
th_data = (sort=="preview" || !enable_sort) ? EventNewsCustomTitle.get_trans(field) : "<a href='?sort=#{sort}&order=#{order}'>#{EventNewsCustomTitle.get_trans(field)} #{active ? arrow : ""}</a>"
|
||||
"<th class='#{klass} #{active ? "active" : ""}' style='#{center ? "text-align:center" : ""}'>#{th_data}</th>".html_safe
|
||||
end
|
||||
|
||||
def page_for_event_news(event_news)
|
||||
ann_page = nil
|
||||
pages = Page.where(:module=>'event_news')
|
||||
|
||||
pages.each do |page|
|
||||
if page.categories.count ==1
|
||||
if page.categories.include?(event_news.category.id.to_s)
|
||||
ann_page = page
|
||||
end
|
||||
end
|
||||
break if !ann_page.nil?
|
||||
end
|
||||
|
||||
if ann_page.nil?
|
||||
pages.each do |page|
|
||||
if page.categories.include?(event_news.category.id.to_s)
|
||||
ann_page = page
|
||||
end
|
||||
break if !ann_page.nil?
|
||||
end
|
||||
end
|
||||
|
||||
ann_page = pages.first if ann_page.nil?
|
||||
request.protocol+(request.host_with_port+ann_page.url+'/'+event_news.to_param).gsub('//','/') rescue "/"
|
||||
end
|
||||
|
||||
def import_this_event_news(row,categories,tags)
|
||||
value = {}
|
||||
anns = EventNews.new
|
||||
row.cells.each_with_index do |cell,index|
|
||||
val = cell.nil? ? nil : cell.value
|
||||
next if val.nil? || val == ""
|
||||
case index
|
||||
when 0
|
||||
anns.category = categories[val.to_i]
|
||||
when 1
|
||||
new_tags = []
|
||||
if (val.include?(",") rescue false)
|
||||
ts = val.split(",")
|
||||
ts.each do |t|
|
||||
new_tags << tags[t.to_i]
|
||||
end
|
||||
else
|
||||
new_tags << tags[val.to_i]
|
||||
end
|
||||
anns.tags=new_tags
|
||||
when 2
|
||||
anns.event_date = val
|
||||
when 3
|
||||
anns.postdate = val
|
||||
when 4
|
||||
anns.deadline = val
|
||||
when 5
|
||||
anns.is_top = (val.to_i == 1 ? true : false)
|
||||
when 6
|
||||
anns.is_hot = (val.to_i == 1 ? true : false)
|
||||
when 7
|
||||
anns.is_hidden = (val.to_i == 1 ? true : false)
|
||||
when 8
|
||||
anns.remote_image_url = val
|
||||
when 9
|
||||
value["en"] = val
|
||||
anns.image_description_translations = value.clone
|
||||
when 10
|
||||
value["zh_tw"] = val
|
||||
anns.image_description_translations = value.clone
|
||||
value = {}
|
||||
when 11
|
||||
value["en"] = val
|
||||
anns.title_translations = value.clone
|
||||
when 12
|
||||
value["zh_tw"] = val
|
||||
anns.title_translations = value.clone
|
||||
value = {}
|
||||
when 13
|
||||
value["en"] = val
|
||||
anns.speaker_translations = value.clone
|
||||
when 14
|
||||
value["zh_tw"] = val
|
||||
anns.speaker_translations = value.clone
|
||||
value = {}
|
||||
when 15
|
||||
value["en"] = val
|
||||
anns.host_translations = value.clone
|
||||
when 16
|
||||
value["zh_tw"] = val
|
||||
anns.host_translations = value.clone
|
||||
value = {}
|
||||
when 17
|
||||
value["en"] = val
|
||||
anns.subtitle_translations = value.clone
|
||||
when 18
|
||||
value["zh_tw"] = val
|
||||
anns.subtitle_translations = value.clone
|
||||
value = {}
|
||||
when 19
|
||||
value["en"] = val
|
||||
anns.text_translations = value.clone
|
||||
when 20
|
||||
value["zh_tw"] = val
|
||||
anns.text_translations = value.clone
|
||||
value = {}
|
||||
when 21
|
||||
value["en"] = val
|
||||
anns.notes_translations = value.clone
|
||||
when 22
|
||||
value["zh_tw"] = val
|
||||
anns.notes_translations = value.clone
|
||||
value = {}
|
||||
when 23
|
||||
links = val.split(";") rescue []
|
||||
desc_en = row.cells[24].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[25].value.split(";") rescue []
|
||||
links.each_with_index do |link,i|
|
||||
bl = EventNewsLink.new
|
||||
bl.url = link.strip
|
||||
bl.title_translations = {"en" => desc_en[i], "zh_tw" => desc_zh_tw[i]}
|
||||
bl.event_news_id = anns.id
|
||||
bl.save
|
||||
end
|
||||
when 26
|
||||
files = val.split(";") rescue []
|
||||
desc_en = row.cells[27].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[28].value.split(";") rescue []
|
||||
alt_en = row.cells[29].value.split(";") rescue []
|
||||
alt_zh_tw = row.cells[30].value.split(";") rescue []
|
||||
files.each_with_index do |file, i|
|
||||
bf = EventNewsFile.new
|
||||
bf.remote_file_url = file.strip rescue nil
|
||||
bf.title_translations = {"en" => (alt_en[i] rescue ""), "zh_tw" => (alt_zh_tw[i] rescue "")}
|
||||
bf.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
|
||||
bf.event_news_id = anns.id
|
||||
bf.save
|
||||
end
|
||||
when 31
|
||||
value["en"] = val
|
||||
anns.place_translations = value.clone
|
||||
when 32
|
||||
value["zh_tw"] = val
|
||||
anns.place_translations = value.clone
|
||||
value = {}
|
||||
when 33
|
||||
anns.event_end_date = val
|
||||
when 34
|
||||
carousel_images = val.split(";") rescue []
|
||||
desc_en = row.cells[35].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[36].value.split(";") rescue []
|
||||
carousel_images.each_with_index do |image, i|
|
||||
bc = EventCarouselImage.new
|
||||
bc.remote_file_url = image.strip rescue nil
|
||||
bc.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
|
||||
bc.event_news_id = anns.id
|
||||
bc.save
|
||||
end
|
||||
end
|
||||
end
|
||||
anns.create_user_id = current_user.id.to_s
|
||||
anns.update_user_id = current_user.id.to_s
|
||||
anns.approved = true
|
||||
anns.save
|
||||
end
|
||||
|
||||
def send_rejection_email(event_news,locale)
|
||||
user = User.find(event_news.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
email = user.member_profile.email
|
||||
if !email.nil? && email != ""
|
||||
url = "http://#{request.host_with_port}/admin/event_news/#{event_news.id}/edit"
|
||||
datatosend = "<h3>Hello #{user.name},</h3><p>#{current_user.name} #{t("event_news.rejected_event_news")} : #{event_news.rejection_reason} <a href='#{url}'> #{t("event_news.click_here_to_see")}</a></p>"
|
||||
mail = Email.new(:mail_to => email, :mail_subject => "EventNews rejected公告未通過 : #{event_news.title_translations[locale]}.", :template => "email/event_news_email.html.erb", :template_data => {"html" => datatosend})
|
||||
mail.save
|
||||
mail.deliver rescue nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_notification_mail_to_managers(event_news, type, locale)
|
||||
users = []
|
||||
if @event_news_setting.email_to.include?("managers")
|
||||
authorizations = Authorization.where(:module_app_id => @module_app.id)
|
||||
users = authorizations.collect do |auth|
|
||||
auth.user
|
||||
end
|
||||
end
|
||||
if @event_news_setting.email_to.include?("admins")
|
||||
wg = Workgroup.where(:key => "admin").first
|
||||
admins = User.where(:workgroup_id => wg.id)
|
||||
users.delete(nil)
|
||||
users = users.concat(admins.to_a)
|
||||
end
|
||||
if @event_news_setting.email_to.include?("approvers")
|
||||
approvers = User.find(@event_news_setting.approvers).to_a rescue []
|
||||
auths = Authorization.where(:category_id => event_news.category_id).collect{|a| a.user}
|
||||
users = users.concat(approvers & auths)
|
||||
end
|
||||
users.each do |user|
|
||||
email = user.member_profile.email
|
||||
if !email.nil? && email != ""
|
||||
send_email(user.name, email, event_news, type, locale)
|
||||
# sleep(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_email(name, useremail, event_news, type, locale)
|
||||
url = "http://#{request.host_with_port}/admin/event_news?url=#{page_for_event_news(event_news).sub("http://" + request.host_with_port, "")}&id=#{event_news.id}"
|
||||
|
||||
case type
|
||||
when "approval"
|
||||
datatosend = "<h3>#{t("event_news.approval_mail_hi", :name => name)},</h3><p>#{t("event_news.submitted_new_event_news", :poster => current_user.name)}<br /><br />#{t("event_news.approval_event_news_title")} : #{event_news.title_translations[locale]} <br /> #{t("event_news.click_here_to_see")} : <a href='#{url}'> #{url} </a></p>"
|
||||
when "reapproval"
|
||||
datatosend = "<h3>#{t("event_news.approval_mail_hi", :name => name)},</h3><p>#{t("event_news.updated_event_news", :poster => current_user.name)}<br /><br />#{t("event_news.approval_event_news_title")} : #{event_news.title_translations[locale]} <br /> #{t("event_news.click_here_to_see")} : <a href='#{url}'> #{url} </a></p>"
|
||||
end
|
||||
email = Email.new(:mail_to => useremail, :mail_subject => " #{t("event_news.event_news_subject")} : #{event_news.title_translations[locale]}.", :template => "email/event_news_email.html.erb", :template_data => {"html" => datatosend})
|
||||
email.save
|
||||
email.deliver rescue nil
|
||||
end
|
||||
|
||||
def download_tmp_xml(url)
|
||||
xml = File.join(Rails.root, "tmp", "ann_cc_ntu.xml")
|
||||
open(xml, 'wb') do |fo|
|
||||
fo.print open(url).read
|
||||
end
|
||||
end
|
||||
|
||||
def import_from_tmp_xml(file)
|
||||
xml = Nokogiri::XML(file)
|
||||
return if xml.nil?
|
||||
event_news = []
|
||||
xml.xpath("//channel").xpath("//item").each do |anns|
|
||||
event_news << {
|
||||
:title => (anns>"title").text,
|
||||
:category => (anns>"category").text,
|
||||
:postdate => (anns>"pubDate").text,
|
||||
:text => (anns>"description").text,
|
||||
:rss2_sn => (anns>"link").text.split("=").last
|
||||
}
|
||||
end
|
||||
event_news.each do |anns|
|
||||
ma = ModuleApp.where(:key => "event_news").first
|
||||
cat = Category.where(:title => anns[:category]).first rescue nil
|
||||
if cat.nil?
|
||||
cat = Category.create(:title_translations => {"en" => anns[:category], "zh_tw" => anns[:category]}, :module_app_id => ma.id)
|
||||
end
|
||||
ann = EventNews.where(:rss2_sn => anns[:rss2_sn]).first rescue nil
|
||||
if ann.nil?
|
||||
ann = EventNews.new(:title_translations => {"en" => "", "zh_tw" => anns[:title]}, :postdate => anns[:postdate], :subtitle_translations => {"en" => "", "zh_tw" => anns[:title]}, :text_translations => {"en" => "", "zh_tw" => anns[:text]}, :rss2_sn => anns[:rss2_sn], :category_id => cat.id, :approved => true, :create_user_id => current_user.id)
|
||||
else
|
||||
ann.update_attributes(:title_translations => {"en" => "", "zh_tw" => anns[:title]}, :postdate => anns[:postdate], :subtitle_translations => {"en" => "", "zh_tw" => anns[:title]}, :text_translations => {"en" => "", "zh_tw" => anns[:text]})
|
||||
end
|
||||
ann.save
|
||||
end
|
||||
File.delete(file)
|
||||
end
|
||||
|
||||
def import_from_wordpress(xmlfile)
|
||||
xml_file = File.read(xmlfile)
|
||||
doc = Nokogiri::XML.parse(xml_file)
|
||||
|
||||
doc.xpath("//channel").each do|channel_data|
|
||||
channel_data.xpath('//item').each do|itme|
|
||||
|
||||
bu = EventNews.where(:rss2_sn => itme.xpath('wp:post_id').text ).first rescue nil
|
||||
if bu.nil?
|
||||
bu = EventNews.new
|
||||
bu.approved = true
|
||||
bu.rss2_sn = itme.xpath('wp:post_id').text
|
||||
bu.title_translations = {"en" => itme.xpath('title').text, "zh_tw" => itme.xpath('title').text}
|
||||
bu.text_translations = {"en" => itme.xpath('content:encoded').text, "zh_tw" => itme.xpath('content:encoded').text}
|
||||
bu.postdate = itme.xpath('wp:post_date').text
|
||||
|
||||
itme.xpath('category').each do |i_cate|
|
||||
if i_cate["domain"].to_s == "category"
|
||||
|
||||
cat = @module_app.categories.where(:title => i_cate.text.to_s).first rescue nil
|
||||
if cat.nil?
|
||||
cat = Category.new
|
||||
cat.module_app = @module_app
|
||||
cat.title_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
|
||||
cat.save
|
||||
end
|
||||
bu.category = cat
|
||||
|
||||
elsif i_cate["domain"].to_s == "post_tag"
|
||||
|
||||
tag = Tag.where(:name => i_cate.text.to_s ).first rescue nil
|
||||
if tag.nil?
|
||||
tag = Tag.new
|
||||
tag.name_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
|
||||
tag.module_app_ids << @module_app.id
|
||||
tag.save
|
||||
end
|
||||
|
||||
bu.tags = tag
|
||||
end
|
||||
end
|
||||
|
||||
bu.save
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
File.delete(xmlfile)
|
||||
end
|
||||
|
||||
def load_access_level
|
||||
if (current_user.is_admin? rescue false)
|
||||
@access_level = "admin"
|
||||
elsif (current_user.is_manager?(@module_app) rescue false)
|
||||
@access_level = "manager"
|
||||
else
|
||||
@access_level = "users"
|
||||
end
|
||||
end
|
||||
|
||||
def user_can_approve?(anns=nil)
|
||||
can_approve = false
|
||||
setting = EventNewsSetting.first
|
||||
case @access_level
|
||||
when "admin"
|
||||
can_approve = true
|
||||
when "manager"
|
||||
can_approve = true
|
||||
else
|
||||
can_approve = false
|
||||
end
|
||||
if !can_approve
|
||||
if !anns.nil?
|
||||
if setting.approvers.include?(current_user.id.to_s)
|
||||
if (current_user.approved_categories_for_module(@module_app).include?(anns.category) rescue false)
|
||||
can_approve = true
|
||||
end
|
||||
end
|
||||
else
|
||||
can_approve = setting.approvers.include?(current_user.id.to_s)
|
||||
end
|
||||
end
|
||||
can_approve
|
||||
end
|
||||
|
||||
end
|
||||
require "net/http"
|
||||
require "uri"
|
||||
require 'json'
|
||||
|
||||
module Admin::EventNewsHelper
|
||||
module FormHelper
|
||||
extend self
|
||||
extend ActionView::Helpers::FormTagHelper
|
||||
extend ActionView::Helpers::FormOptionsHelper
|
||||
extend ActionView::Helpers::DateHelper
|
||||
extend ActionView::Helpers::TagHelper
|
||||
extend ActionView::Helpers::RenderingHelper
|
||||
extend ActionView::Context
|
||||
extend OrbitBasis::RenderAnywhere
|
||||
extend ActionView::Helpers::UrlHelper
|
||||
extend OrbitFormHelper
|
||||
extend Ckeditor::Helpers::FormHelper
|
||||
def available_locales
|
||||
@available_locales = @available_locales || Site.first.in_use_locales || I18n.available_locales
|
||||
end
|
||||
def set_input_name(input_name)
|
||||
@input_name = input_name
|
||||
end
|
||||
|
||||
def get_input_name
|
||||
@input_name.to_s
|
||||
end
|
||||
def create_lang_panel(field)
|
||||
tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do
|
||||
available_locales.collect do |key|
|
||||
link_entry_ary = ["##{field}","_#{key}"]
|
||||
link_entry = link_entry_ary.join
|
||||
link_to(I18n.t(key),link_entry,:data=>{:toggle=>"tab"},:class=>"btn #{(key == I18n.locale ? "active" : nil)}",:for=>key)
|
||||
end.join.html_safe
|
||||
end
|
||||
end
|
||||
def multiple_lang_tag(index1,type_of_tag,field,value=nil,custom_options={},combine_element='',exteral_options={},sortable=false)
|
||||
if !index1.nil?
|
||||
all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
|
||||
else
|
||||
all_field = (get_input_name + "[#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
|
||||
end
|
||||
tmp = (available_locales.collect do |locale|
|
||||
active_flag = ((locale == I18n.locale) ? ' in active' : '')
|
||||
content_tag(:div,:class => "tab-content fade#{active_flag}",:id=>"#{all_field}_#{locale}") do
|
||||
value_locale = value[locale.to_s] rescue nil
|
||||
if !index1.nil?
|
||||
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{index1}][#{field}][#{locale}]",value_locale,custom_options)
|
||||
else
|
||||
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{field}][#{locale}]",value_locale,custom_options)
|
||||
end
|
||||
end
|
||||
end.join + create_lang_panel(all_field)).html_safe + combine_element
|
||||
|
||||
if sortable
|
||||
if exteral_options['style'].nil?
|
||||
exteral_options['style'] = 'display: flex;align-items: center;flex-wrap: nowrap;'
|
||||
else
|
||||
exteral_options['style'] = exteral_options['style'] + 'display: flex;align-items: center;flex-wrap: nowrap;'
|
||||
end
|
||||
content_tag(:div,{:class => "tab-panel border"}.merge(exteral_options)) do
|
||||
("<i class=\"icons-list-2\" style=\"cursor: grab;font-size: x-large;\"></i>" +content_tag(:div) do
|
||||
tmp
|
||||
end).html_safe
|
||||
end
|
||||
else
|
||||
content_tag(:div,{:class => "tab-panel"}.merge(exteral_options)) do
|
||||
tmp
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.thead(field,center=false,enable_sort=true)
|
||||
sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s
|
||||
active = OrbitHelper.params[:sort].eql? sort
|
||||
order = active ? (["asc", "desc"]-[OrbitHelper.params[:order]]).first : "asc"
|
||||
arrow = (order.eql? "desc") ? "<b class='icons-arrow-up-3'></b>" : "<b class='icons-arrow-down-4'></b>"
|
||||
klass = field.eql?(:title) ? "span5" : "span2"
|
||||
th_data = (sort=="preview" || !enable_sort) ? EventNewsCustomTitle.get_trans(field) : "<a href='?sort=#{sort}&order=#{order}'>#{EventNewsCustomTitle.get_trans(field)} #{active ? arrow : ""}</a>"
|
||||
"<th class='#{klass} #{active ? "active" : ""}' style='#{center ? "text-align:center" : ""}'>#{th_data}</th>".html_safe
|
||||
end
|
||||
|
||||
def page_for_event_news(event_news)
|
||||
ann_page = nil
|
||||
pages = Page.where(:module=>'event_news')
|
||||
|
||||
pages.each do |page|
|
||||
if page.categories.count ==1
|
||||
if page.categories.include?(event_news.category.id.to_s)
|
||||
ann_page = page
|
||||
end
|
||||
end
|
||||
break if !ann_page.nil?
|
||||
end
|
||||
|
||||
if ann_page.nil?
|
||||
pages.each do |page|
|
||||
if page.categories.include?(event_news.category.id.to_s)
|
||||
ann_page = page
|
||||
end
|
||||
break if !ann_page.nil?
|
||||
end
|
||||
end
|
||||
|
||||
ann_page = pages.first if ann_page.nil?
|
||||
request.protocol+(request.host_with_port+ann_page.url+'/'+event_news.to_param).gsub('//','/') rescue "/"
|
||||
end
|
||||
|
||||
def import_this_event_news(row,categories,tags)
|
||||
value = {}
|
||||
anns = EventNews.new
|
||||
row.cells.each_with_index do |cell,index|
|
||||
val = cell.nil? ? nil : cell.value
|
||||
next if val.nil? || val == ""
|
||||
case index
|
||||
when 0
|
||||
anns.category = categories[val.to_i]
|
||||
when 1
|
||||
new_tags = []
|
||||
if (val.include?(",") rescue false)
|
||||
ts = val.split(",")
|
||||
ts.each do |t|
|
||||
new_tags << tags[t.to_i]
|
||||
end
|
||||
else
|
||||
new_tags << tags[val.to_i]
|
||||
end
|
||||
anns.tags=new_tags
|
||||
when 2
|
||||
anns.event_date = val
|
||||
when 3
|
||||
anns.postdate = val
|
||||
when 4
|
||||
anns.deadline = val
|
||||
when 5
|
||||
anns.is_top = (val.to_i == 1 ? true : false)
|
||||
when 6
|
||||
anns.is_hot = (val.to_i == 1 ? true : false)
|
||||
when 7
|
||||
anns.is_hidden = (val.to_i == 1 ? true : false)
|
||||
when 8
|
||||
anns.remote_image_url = val
|
||||
when 9
|
||||
value["en"] = val
|
||||
anns.image_description_translations = value.clone
|
||||
when 10
|
||||
value["zh_tw"] = val
|
||||
anns.image_description_translations = value.clone
|
||||
value = {}
|
||||
when 11
|
||||
value["en"] = val
|
||||
anns.title_translations = value.clone
|
||||
when 12
|
||||
value["zh_tw"] = val
|
||||
anns.title_translations = value.clone
|
||||
value = {}
|
||||
when 13
|
||||
value["en"] = val
|
||||
anns.speaker_translations = value.clone
|
||||
when 14
|
||||
value["zh_tw"] = val
|
||||
anns.speaker_translations = value.clone
|
||||
value = {}
|
||||
when 15
|
||||
value["en"] = val
|
||||
anns.host_translations = value.clone
|
||||
when 16
|
||||
value["zh_tw"] = val
|
||||
anns.host_translations = value.clone
|
||||
value = {}
|
||||
when 17
|
||||
value["en"] = val
|
||||
anns.subtitle_translations = value.clone
|
||||
when 18
|
||||
value["zh_tw"] = val
|
||||
anns.subtitle_translations = value.clone
|
||||
value = {}
|
||||
when 19
|
||||
value["en"] = val
|
||||
anns.text_translations = value.clone
|
||||
when 20
|
||||
value["zh_tw"] = val
|
||||
anns.text_translations = value.clone
|
||||
value = {}
|
||||
when 21
|
||||
value["en"] = val
|
||||
anns.notes_translations = value.clone
|
||||
when 22
|
||||
value["zh_tw"] = val
|
||||
anns.notes_translations = value.clone
|
||||
value = {}
|
||||
when 23
|
||||
links = val.split(";") rescue []
|
||||
desc_en = row.cells[24].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[25].value.split(";") rescue []
|
||||
links.each_with_index do |link,i|
|
||||
bl = EventNewsLink.new
|
||||
bl.url = link.strip
|
||||
bl.title_translations = {"en" => desc_en[i], "zh_tw" => desc_zh_tw[i]}
|
||||
bl.event_news_id = anns.id
|
||||
bl.save
|
||||
end
|
||||
when 26
|
||||
files = val.split(";") rescue []
|
||||
desc_en = row.cells[27].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[28].value.split(";") rescue []
|
||||
alt_en = row.cells[29].value.split(";") rescue []
|
||||
alt_zh_tw = row.cells[30].value.split(";") rescue []
|
||||
files.each_with_index do |file, i|
|
||||
bf = EventNewsFile.new
|
||||
bf.remote_file_url = file.strip rescue nil
|
||||
bf.title_translations = {"en" => (alt_en[i] rescue ""), "zh_tw" => (alt_zh_tw[i] rescue "")}
|
||||
bf.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
|
||||
bf.event_news_id = anns.id
|
||||
bf.save
|
||||
end
|
||||
when 31
|
||||
value["en"] = val
|
||||
anns.place_translations = value.clone
|
||||
when 32
|
||||
value["zh_tw"] = val
|
||||
anns.place_translations = value.clone
|
||||
value = {}
|
||||
when 33
|
||||
anns.event_end_date = val
|
||||
when 34
|
||||
carousel_images = val.split(";") rescue []
|
||||
desc_en = row.cells[35].value.split(";") rescue []
|
||||
desc_zh_tw = row.cells[36].value.split(";") rescue []
|
||||
carousel_images.each_with_index do |image, i|
|
||||
bc = EventCarouselImage.new
|
||||
bc.remote_file_url = image.strip rescue nil
|
||||
bc.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
|
||||
bc.event_news_id = anns.id
|
||||
bc.save
|
||||
end
|
||||
end
|
||||
end
|
||||
anns.create_user_id = current_user.id.to_s
|
||||
anns.update_user_id = current_user.id.to_s
|
||||
anns.approved = true
|
||||
anns.save
|
||||
end
|
||||
|
||||
def send_rejection_email(event_news,locale)
|
||||
user = User.find(event_news.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
email = user.member_profile.email
|
||||
if !email.nil? && email != ""
|
||||
url = "http://#{request.host_with_port}/admin/event_news/#{event_news.id}/edit"
|
||||
datatosend = "<h3>Hello #{user.name},</h3><p>#{current_user.name} #{t("event_news.rejected_event_news")} : #{event_news.rejection_reason} <a href='#{url}'> #{t("event_news.click_here_to_see")}</a></p>"
|
||||
mail = Email.new(:mail_to => email, :mail_subject => "EventNews rejected公告未通過 : #{event_news.title_translations[locale]}.", :template => "email/event_news_email.html.erb", :template_data => {"html" => datatosend})
|
||||
mail.save
|
||||
mail.deliver rescue nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_notification_mail_to_managers(event_news, type, locale)
|
||||
users = []
|
||||
if @event_news_setting.email_to.include?("managers")
|
||||
authorizations = Authorization.where(:module_app_id => @module_app.id)
|
||||
users = authorizations.collect do |auth|
|
||||
auth.user
|
||||
end
|
||||
end
|
||||
if @event_news_setting.email_to.include?("admins")
|
||||
wg = Workgroup.where(:key => "admin").first
|
||||
admins = User.where(:workgroup_id => wg.id)
|
||||
users.delete(nil)
|
||||
users = users.concat(admins.to_a)
|
||||
end
|
||||
if @event_news_setting.email_to.include?("approvers")
|
||||
approvers = User.find(@event_news_setting.approvers).to_a rescue []
|
||||
auths = Authorization.where(:category_id => event_news.category_id).collect{|a| a.user}
|
||||
users = users.concat(approvers & auths)
|
||||
end
|
||||
users.each do |user|
|
||||
email = user.member_profile.email
|
||||
if !email.nil? && email != ""
|
||||
send_email(user.name, email, event_news, type, locale)
|
||||
# sleep(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def send_email(name, useremail, event_news, type, locale)
|
||||
url = "http://#{request.host_with_port}/admin/event_news?url=#{page_for_event_news(event_news).sub("http://" + request.host_with_port, "")}&id=#{event_news.id}"
|
||||
|
||||
case type
|
||||
when "approval"
|
||||
datatosend = "<h3>#{t("event_news.approval_mail_hi", :name => name)},</h3><p>#{t("event_news.submitted_new_event_news", :poster => current_user.name)}<br /><br />#{t("event_news.approval_event_news_title")} : #{event_news.title_translations[locale]} <br /> #{t("event_news.click_here_to_see")} : <a href='#{url}'> #{url} </a></p>"
|
||||
when "reapproval"
|
||||
datatosend = "<h3>#{t("event_news.approval_mail_hi", :name => name)},</h3><p>#{t("event_news.updated_event_news", :poster => current_user.name)}<br /><br />#{t("event_news.approval_event_news_title")} : #{event_news.title_translations[locale]} <br /> #{t("event_news.click_here_to_see")} : <a href='#{url}'> #{url} </a></p>"
|
||||
end
|
||||
email = Email.new(:mail_to => useremail, :mail_subject => " #{t("event_news.event_news_subject")} : #{event_news.title_translations[locale]}.", :template => "email/event_news_email.html.erb", :template_data => {"html" => datatosend})
|
||||
email.save
|
||||
email.deliver rescue nil
|
||||
end
|
||||
|
||||
def download_tmp_xml(url)
|
||||
xml = File.join(Rails.root, "tmp", "ann_cc_ntu.xml")
|
||||
open(xml, 'wb') do |fo|
|
||||
fo.print open(url).read
|
||||
end
|
||||
end
|
||||
|
||||
def import_from_tmp_xml(file)
|
||||
xml = Nokogiri::XML(file)
|
||||
return if xml.nil?
|
||||
event_news = []
|
||||
xml.xpath("//channel").xpath("//item").each do |anns|
|
||||
event_news << {
|
||||
:title => (anns>"title").text,
|
||||
:category => (anns>"category").text,
|
||||
:postdate => (anns>"pubDate").text,
|
||||
:text => (anns>"description").text,
|
||||
:rss2_sn => (anns>"link").text.split("=").last
|
||||
}
|
||||
end
|
||||
event_news.each do |anns|
|
||||
ma = ModuleApp.where(:key => "event_news").first
|
||||
cat = Category.where(:title => anns[:category]).first rescue nil
|
||||
if cat.nil?
|
||||
cat = Category.create(:title_translations => {"en" => anns[:category], "zh_tw" => anns[:category]}, :module_app_id => ma.id)
|
||||
end
|
||||
ann = EventNews.where(:rss2_sn => anns[:rss2_sn]).first rescue nil
|
||||
if ann.nil?
|
||||
ann = EventNews.new(:title_translations => {"en" => "", "zh_tw" => anns[:title]}, :postdate => anns[:postdate], :subtitle_translations => {"en" => "", "zh_tw" => anns[:title]}, :text_translations => {"en" => "", "zh_tw" => anns[:text]}, :rss2_sn => anns[:rss2_sn], :category_id => cat.id, :approved => true, :create_user_id => current_user.id)
|
||||
else
|
||||
ann.update_attributes(:title_translations => {"en" => "", "zh_tw" => anns[:title]}, :postdate => anns[:postdate], :subtitle_translations => {"en" => "", "zh_tw" => anns[:title]}, :text_translations => {"en" => "", "zh_tw" => anns[:text]})
|
||||
end
|
||||
ann.save
|
||||
end
|
||||
File.delete(file)
|
||||
end
|
||||
|
||||
def import_from_wordpress(xmlfile)
|
||||
xml_file = File.read(xmlfile)
|
||||
doc = Nokogiri::XML.parse(xml_file)
|
||||
|
||||
doc.xpath("//channel").each do|channel_data|
|
||||
channel_data.xpath('//item').each do|itme|
|
||||
|
||||
bu = EventNews.where(:rss2_sn => itme.xpath('wp:post_id').text ).first rescue nil
|
||||
if bu.nil?
|
||||
bu = EventNews.new
|
||||
bu.approved = true
|
||||
bu.rss2_sn = itme.xpath('wp:post_id').text
|
||||
bu.title_translations = {"en" => itme.xpath('title').text, "zh_tw" => itme.xpath('title').text}
|
||||
bu.text_translations = {"en" => itme.xpath('content:encoded').text, "zh_tw" => itme.xpath('content:encoded').text}
|
||||
bu.postdate = itme.xpath('wp:post_date').text
|
||||
|
||||
itme.xpath('category').each do |i_cate|
|
||||
if i_cate["domain"].to_s == "category"
|
||||
|
||||
cat = @module_app.categories.where(:title => i_cate.text.to_s).first rescue nil
|
||||
if cat.nil?
|
||||
cat = Category.new
|
||||
cat.module_app = @module_app
|
||||
cat.title_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
|
||||
cat.save
|
||||
end
|
||||
bu.category = cat
|
||||
|
||||
elsif i_cate["domain"].to_s == "post_tag"
|
||||
|
||||
tag = Tag.where(:name => i_cate.text.to_s ).first rescue nil
|
||||
if tag.nil?
|
||||
tag = Tag.new
|
||||
tag.name_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
|
||||
tag.module_app_ids << @module_app.id
|
||||
tag.save
|
||||
end
|
||||
|
||||
bu.tags = tag
|
||||
end
|
||||
end
|
||||
|
||||
bu.save
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
File.delete(xmlfile)
|
||||
end
|
||||
|
||||
def load_access_level
|
||||
if (current_user.is_admin? rescue false)
|
||||
@access_level = "admin"
|
||||
elsif (current_user.is_manager?(@module_app) rescue false)
|
||||
@access_level = "manager"
|
||||
else
|
||||
@access_level = "users"
|
||||
end
|
||||
end
|
||||
|
||||
def user_can_approve?(anns=nil)
|
||||
can_approve = false
|
||||
setting = EventNewsSetting.first
|
||||
case @access_level
|
||||
when "admin"
|
||||
can_approve = true
|
||||
when "manager"
|
||||
can_approve = true
|
||||
else
|
||||
can_approve = false
|
||||
end
|
||||
if !can_approve
|
||||
if !anns.nil?
|
||||
if setting.approvers.include?(current_user.id.to_s)
|
||||
if (current_user.approved_categories_for_module(@module_app).include?(anns.category) rescue false)
|
||||
can_approve = true
|
||||
end
|
||||
end
|
||||
else
|
||||
can_approve = setting.approvers.include?(current_user.id.to_s)
|
||||
end
|
||||
end
|
||||
can_approve
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -50,8 +50,9 @@ module EventNewsHelper
|
|||
"speaker-css" => (a.speaker.blank? ? "display: none;" : ""),
|
||||
"host-css" => (a.host.blank? ? "display: none;" : ""),
|
||||
"place-css" => (a.place.blank? ? "display: none;" : ""),
|
||||
"event-time-formated" => event_time_formated,
|
||||
"event-time-css" => (event_time_formated.blank? ? "display: none;" : ""),
|
||||
"notes-css" => (a.notes.blank? ? "display: none;" : ""),
|
||||
"event-time-formated" => event_time_formated,
|
||||
"speaker" => a.speaker,
|
||||
"place" => a.place,
|
||||
"host" => a.host,
|
||||
|
@ -63,8 +64,8 @@ module EventNewsHelper
|
|||
"statuses" => statuses,
|
||||
"category" => (a.category.title rescue ""),
|
||||
"tag_ids" => (set_tag_ids.nil? ? (a.tag_ids.map{|id| id.to_s}.to_s.gsub('"',"'") rescue '[]') : set_tag_ids),
|
||||
"postdate" => a.event_date,
|
||||
"event_date" => a.event_date,
|
||||
"postdate" => event_time_formated,
|
||||
"event_date" => event_time_formated,
|
||||
"author" => author,
|
||||
"link_to_show" => link_to_show,
|
||||
"target" => target,
|
||||
|
@ -143,8 +144,9 @@ module EventNewsHelper
|
|||
"speaker-css" => (fa["speaker_translations"][locale].blank? ? "display: none;" : ""),
|
||||
"host-css" => (fa["host_translations"][locale].blank? ? "display: none;" : ""),
|
||||
"place-css" => (fa["place_translations"][locale].blank? ? "display: none;" : ""),
|
||||
"event-time-formated" => event_time_formated,
|
||||
"event-time-css" => (event_time_formated.blank? ? "display: none;" : ""),
|
||||
"notes-css" => (fa["notes_translations"][locale].blank? ? "display: none;" : ""),
|
||||
"event-time-formated" => event_time_formated,
|
||||
"speaker" => (fa["speaker_translations"][locale].to_s rescue ""),
|
||||
"place" => (fa["place_translations"][locale].to_s rescue ""),
|
||||
"host" => (fa["host_translations"][locale].to_s rescue ""),
|
||||
|
@ -162,7 +164,7 @@ module EventNewsHelper
|
|||
"target" => "_self",
|
||||
"img_src" => fa["image"]["thumb"] || "/assets/event_news-default.jpg",
|
||||
"img_description" => fa["image_description_translations"][locale],
|
||||
"more" => t(:more_plus),
|
||||
"more" => t("event_news.more"),
|
||||
"view_count" => ""
|
||||
}
|
||||
if (!x["title"].empty? rescue false)
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# encoding: utf-8
|
||||
class EventCarouselImage
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description, localize: true
|
||||
|
||||
belongs_to :event_news
|
||||
def description_text
|
||||
Nokogiri::HTML(self.description.to_s).css("body").text() rescue ""
|
||||
end
|
||||
end
|
||||
# encoding: utf-8
|
||||
class EventCarouselImage
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description, localize: true
|
||||
|
||||
belongs_to :event_news
|
||||
def description_text
|
||||
Nokogiri::HTML(self.description.to_s).css("body").text() rescue ""
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,283 +1,338 @@
|
|||
class EventNews
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
include OrbitModel::Status
|
||||
include OrbitModel::Impression
|
||||
# encoding: utf-8
|
||||
include OrbitTag::Taggable
|
||||
include OrbitCategory::Categorizable
|
||||
include Slug
|
||||
require 'event_news_model/cache'
|
||||
include EventNewsModel::Cache
|
||||
attr_accessor :org_tag_ids
|
||||
def tags=(ids)
|
||||
self.org_tag_ids = self.tag_ids
|
||||
super(ids)
|
||||
end
|
||||
def []=(index,value)
|
||||
if index.to_s=='tags'
|
||||
self.org_tag_ids = self.tag_ids
|
||||
end
|
||||
super(index,value)
|
||||
end
|
||||
SubPart.class_eval { include EventNewsModel::Cache }
|
||||
Page.class_eval { include EventNewsModel::Cache }
|
||||
before_destroy do
|
||||
EventNewsCache.all.destroy
|
||||
end
|
||||
field :is_edit, type: Boolean, default: false #use to check whether the preview record changed
|
||||
field :copy_id
|
||||
field :custom_carousel_image_width, type: String, default: ""
|
||||
field :image_display_class, type: String, default: "full-size-img" #3 choices: full-size-img , pull-left , pull-right
|
||||
field :add_to_calendar,type: Boolean,default: false
|
||||
field :calendar_start_date, :type => DateTime
|
||||
field :calendar_end_date, :type => DateTime
|
||||
field :calendar_all_day,type: Boolean,default: false
|
||||
field :all_day,type: Boolean,default: false
|
||||
field :calendar_type_id
|
||||
field :event_id
|
||||
field :place, type: String, localize: true
|
||||
field :title, as: :slug_title, type: String, localize: true
|
||||
field :speaker, type: String, localize: true
|
||||
field :host, type: String, localize: true
|
||||
field :subtitle, localize: true
|
||||
field :text, localize: true, default: ''
|
||||
field :notes, localize: true
|
||||
field :create_user_id
|
||||
field :update_user_id
|
||||
field :public, :type => Boolean, :default => true
|
||||
field :event_date , :type => DateTime, :default => Time.now
|
||||
field :event_end_date , :type => DateTime
|
||||
field :postdate , :type => DateTime, :default => Time.now
|
||||
field :deadline , :type => DateTime
|
||||
field :rss2_sn
|
||||
field :approved, :type => Boolean, :default => false
|
||||
field :is_preview, :type => Boolean, :default => false
|
||||
field :expirable_created_at, type: DateTime
|
||||
field :rejected, :type => Boolean, :default => false
|
||||
field :reapproval, :type => Boolean, :default => false
|
||||
field :rejection_reason
|
||||
field :is_external_link, :type => Boolean, :default => false
|
||||
field :external_link
|
||||
field :display_subtitle, :type => Boolean, :default => false
|
||||
field :display_img, :type => Boolean, :default => false
|
||||
|
||||
field :email_id
|
||||
field :email_sent, :type => Boolean, :default => false
|
||||
field :email_sentdate , :type => DateTime
|
||||
field :email_member_ids
|
||||
field :other_mailaddress
|
||||
field :image_description, localize: true
|
||||
field :top_end_date, :type => DateTime
|
||||
|
||||
mount_uploader :image, ImageUploader
|
||||
|
||||
has_many :event_news_links, :autosave => true, :dependent => :destroy
|
||||
has_many :event_news_files, :autosave => true, :dependent => :destroy
|
||||
has_many :event_carousel_images, :autosave => true, :dependent => :destroy
|
||||
accepts_nested_attributes_for :event_news_files, :allow_destroy => true
|
||||
accepts_nested_attributes_for :event_news_links, :allow_destroy => true
|
||||
accepts_nested_attributes_for :event_carousel_images, :allow_destroy => true
|
||||
before_destroy :destroy_email
|
||||
|
||||
scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)}
|
||||
scope :can_display_and_sorted, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil}).order(is_top: :desc, event_date: :desc,postdate: :desc,id: :desc)}
|
||||
scope :can_display_and_sorted_according_today, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil}).order(is_top: :desc, event_date: :asc,postdate: :desc,id: :desc).where(:event_date.gte => Date.today.to_time)}
|
||||
scope :is_approved, ->{where(:approved => true)}
|
||||
scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)}
|
||||
scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)}
|
||||
before_create :set_expire
|
||||
before_save :check_limit
|
||||
index({postdate: 1}, { unique: false, background: true })
|
||||
index({is_top: -1, postdate: -1, event_date: -1, _id: -1}, { unique: false, background: true })
|
||||
index({is_top: -1, event_date: 1, postdate: -1, _id: -1}, { unique: false, background: true })
|
||||
def get_org_model
|
||||
if self.is_preview
|
||||
org_model = nil
|
||||
if self.copy_id
|
||||
org_model = self.class.find(self.copy_id) rescue nil
|
||||
else
|
||||
org_model = self.class.where(:title=>self.title,:is_preview.ne=>true).desc(:updated_at).first
|
||||
end
|
||||
org_model.nil? ? self : org_model
|
||||
else
|
||||
self
|
||||
end
|
||||
end
|
||||
def date_parse_format
|
||||
all_day ? '%Y-%m-%d' : '%Y-%m-%d %H:%M'
|
||||
end
|
||||
|
||||
def event_time_formated
|
||||
s = self.event_date
|
||||
e = self.event_end_date
|
||||
if s.blank? && e.blank?
|
||||
""
|
||||
elsif e.blank?
|
||||
s.strftime(self.date_parse_format)
|
||||
elsif s.blank?
|
||||
"~ " + e.strftime(self.date_parse_format)
|
||||
else
|
||||
if s.to_date == e.to_date
|
||||
date_str = s.strftime('%Y-%m-%d')
|
||||
s_time = s.strftime('%H:%M')
|
||||
e_time = e.strftime('%H:%M')
|
||||
"#{date_str} #{s_time} ~ #{e_time}"
|
||||
else
|
||||
s.strftime(self.date_parse_format) + " ~ " + e.strftime(self.date_parse_format)
|
||||
end
|
||||
end
|
||||
end
|
||||
def to_calendar_param
|
||||
self.to_param
|
||||
end
|
||||
def calendar_type
|
||||
CalendarType.where(:category_id.in => self.calendar_type_id)
|
||||
end
|
||||
def event
|
||||
if !self.event_id.nil?
|
||||
Event.where(:id => self.event_id).first
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
def check_limit
|
||||
check_status_limit(update_user)
|
||||
end
|
||||
def check_status_limit(user,check_only=false)
|
||||
role_ids = user.member_profile.roles.map(&:id) rescue []
|
||||
status_settings = (role_ids.collect do |role_id|
|
||||
EventNewsSetting.first.event_news_status_settings.select{|v| v.role_id.to_s == role_id.to_s}
|
||||
end.flatten rescue [])
|
||||
reach_limit = []
|
||||
if status_settings.count != 0
|
||||
reach_limit = status_settings.collect do |status_setting|
|
||||
status = status_setting.status
|
||||
if status_setting.top_limit.to_i <= self.class.where(:is_preview.ne=>true,:update_user_id.in => Role.find(status_setting.role_id).member_profiles.collect(&:user).flatten.uniq.map{|v| v.id},status => true).count
|
||||
if !check_only
|
||||
if self[status] && !self.class.where(id:self.id).first[status]
|
||||
self[status] = false
|
||||
nil
|
||||
end
|
||||
else
|
||||
status
|
||||
end
|
||||
else
|
||||
nil
|
||||
end
|
||||
end.compact
|
||||
reach_limit = reach_limit.group_by{|v| v}.collect do |k,v|
|
||||
if v.count >= user.member_profile.roles.count
|
||||
k
|
||||
else
|
||||
nil
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
reach_limit
|
||||
end
|
||||
def set_expire
|
||||
self.expirable_created_at = Time.now if self.is_preview
|
||||
return true
|
||||
end
|
||||
|
||||
def update_user
|
||||
User.find(update_user_id) rescue nil
|
||||
end
|
||||
|
||||
def update_user=(user)
|
||||
self.update_user_id = user.id
|
||||
end
|
||||
|
||||
def email_members
|
||||
MemberProfile.find(self.email_member_ids) rescue []
|
||||
end
|
||||
|
||||
def email_addresses
|
||||
addresses = self.email_members.collect{|member| member.email} rescue []
|
||||
addresses = addresses +[self.other_mailaddress] if !self.other_mailaddress.blank?
|
||||
addresses.flatten
|
||||
end
|
||||
|
||||
def email
|
||||
mail = Email.find(self.email_id) rescue nil
|
||||
end
|
||||
|
||||
def expired?
|
||||
(self.deadline < Time.now) rescue false
|
||||
end
|
||||
|
||||
def destroy_email
|
||||
mail = Email.find(self.email_id) rescue nil
|
||||
mail.destroy if !mail.nil?
|
||||
end
|
||||
|
||||
def self.remove_expired_status
|
||||
self.where(:is_top => true, :top_end_date.ne => nil, :top_end_date.lt => Time.now).each do |b|
|
||||
b.is_top = false
|
||||
b.top_end_date = nil
|
||||
b.save
|
||||
end
|
||||
end
|
||||
|
||||
def display_subtitle?
|
||||
self.display_subtitle rescue false
|
||||
end
|
||||
|
||||
def display_img?
|
||||
self.display_img rescue false
|
||||
end
|
||||
def statuses
|
||||
statuses = []
|
||||
statuses << top_text if is_top?
|
||||
statuses << hot_text if is_hot?
|
||||
statuses << hidden_text if is_hidden?
|
||||
statuses
|
||||
end
|
||||
def statuses_with_classname
|
||||
statuses = []
|
||||
statuses << {"name" => top_text, "classname" => "top"} if is_top?
|
||||
statuses << {"name" => hot_text, "classname" => "hot"} if is_hot?
|
||||
statuses << {"name" => hidden_text, "classname" => "hidden"} if is_hidden?
|
||||
statuses
|
||||
end
|
||||
def status_for_table
|
||||
status = ""
|
||||
status << "<span class='label label-success'>#{top_text}</span> " if self.is_top
|
||||
status << "<span class='label label-important'>#{hot_text}</span> " if self.is_hot
|
||||
status << "<span class='label'>#{hidden_text}</span>"if self.is_hidden
|
||||
status.html_safe
|
||||
end
|
||||
def top_text
|
||||
I18n.t("announcement.status.top")
|
||||
end
|
||||
def hot_text
|
||||
I18n.t("announcement.status.hot")
|
||||
end
|
||||
def hidden_text
|
||||
I18n.t("announcement.status.hidden")
|
||||
end
|
||||
def carousel_image_width
|
||||
(self.custom_carousel_image_width.blank? ? AnnouncementSetting.last.carousel_image_width : self.custom_carousel_image_width)
|
||||
end
|
||||
|
||||
def self.agenda_events(agenda_start, agenda_end,read_more_url)
|
||||
events = self.monthly_event(agenda_start, agenda_end).convert_front(read_more_url)
|
||||
end
|
||||
def self.monthly_event(start_date,end_date)
|
||||
self.any_of({:event_date.lte => start_date,:event_end_date.gte => start_date},{:event_date.gte => start_date,:event_end_date.lte => end_date},{:event_date.lte => end_date,:event_end_date.gte => end_date}).asc(:event_date)
|
||||
end
|
||||
def self.convert_front(read_more_url)
|
||||
self.all.collect do |re|
|
||||
{:id => re.id.to_s,
|
||||
:title=>re.title,
|
||||
:note=>re.subtitle || "",
|
||||
:allDay => false,
|
||||
:color => nil,
|
||||
:url_linked => (re.is_external_link ? re.external_link : "#{read_more_url}/#{re.to_param}" rescue ""),
|
||||
:start => re.event_date,
|
||||
:end => re.event_end_date}
|
||||
end
|
||||
end
|
||||
end
|
||||
class EventNews
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
include OrbitModel::Status
|
||||
include OrbitModel::Impression
|
||||
# encoding: utf-8
|
||||
include OrbitTag::Taggable
|
||||
include OrbitCategory::Categorizable
|
||||
include Slug
|
||||
require 'event_news_model/cache'
|
||||
include EventNewsModel::Cache
|
||||
attr_accessor :org_tag_ids
|
||||
def tags=(ids)
|
||||
self.org_tag_ids = self.tag_ids
|
||||
super(ids)
|
||||
end
|
||||
def []=(index,value)
|
||||
if index.to_s=='tags'
|
||||
self.org_tag_ids = self.tag_ids
|
||||
end
|
||||
super(index,value)
|
||||
end
|
||||
SubPart.class_eval { include EventNewsModel::Cache }
|
||||
Page.class_eval { include EventNewsModel::Cache }
|
||||
before_destroy do
|
||||
EventNewsCache.all.destroy
|
||||
end
|
||||
Week_day_trans = {:en=>["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
|
||||
:zh_tw=>["(日)","(一)","(二)","(三)","(四)","(五)","(六)"]}
|
||||
field :event_date_use_default_setting, type: Boolean, default: true
|
||||
field :including_day_of_the_week, type: Boolean, default: true
|
||||
field :including_time, type: Boolean, default: true
|
||||
field :hour_clock_24, type: Boolean, default: true
|
||||
field :is_edit, type: Boolean, default: false #use to check whether the preview record changed
|
||||
field :copy_id
|
||||
field :custom_carousel_image_width, type: String, default: ""
|
||||
field :image_display_class, type: String, default: "full-size-img" #3 choices: full-size-img , pull-left , pull-right
|
||||
field :add_to_calendar,type: Boolean,default: false
|
||||
field :calendar_start_date, :type => DateTime
|
||||
field :calendar_end_date, :type => DateTime
|
||||
field :calendar_all_day,type: Boolean,default: false
|
||||
field :all_day,type: Boolean,default: false #old field
|
||||
field :calendar_type_id
|
||||
field :event_id
|
||||
field :place, type: String, localize: true
|
||||
field :title, as: :slug_title, type: String, localize: true
|
||||
field :speaker, type: String, localize: true
|
||||
field :host, type: String, localize: true
|
||||
field :subtitle, localize: true
|
||||
field :text, localize: true, default: ''
|
||||
field :notes, localize: true
|
||||
field :create_user_id
|
||||
field :update_user_id
|
||||
field :public, :type => Boolean, :default => true
|
||||
field :event_date , :type => DateTime, :default => Time.now
|
||||
field :event_end_date , :type => DateTime
|
||||
field :postdate , :type => DateTime, :default => Time.now
|
||||
field :deadline , :type => DateTime
|
||||
field :rss2_sn
|
||||
field :approved, :type => Boolean, :default => false
|
||||
field :is_preview, :type => Boolean, :default => false
|
||||
field :expirable_created_at, type: DateTime
|
||||
field :rejected, :type => Boolean, :default => false
|
||||
field :reapproval, :type => Boolean, :default => false
|
||||
field :rejection_reason
|
||||
field :is_external_link, :type => Boolean, :default => false
|
||||
field :external_link
|
||||
field :display_subtitle, :type => Boolean, :default => false
|
||||
field :display_img, :type => Boolean, :default => false
|
||||
|
||||
field :email_id
|
||||
field :email_sent, :type => Boolean, :default => false
|
||||
field :email_sentdate , :type => DateTime
|
||||
field :email_member_ids
|
||||
field :other_mailaddress
|
||||
field :image_description, localize: true
|
||||
field :top_end_date, :type => DateTime
|
||||
|
||||
mount_uploader :image, ImageUploader
|
||||
|
||||
has_many :event_news_links, :autosave => true, :dependent => :destroy
|
||||
has_many :event_news_files, :autosave => true, :dependent => :destroy
|
||||
has_many :event_carousel_images, :autosave => true, :dependent => :destroy
|
||||
accepts_nested_attributes_for :event_news_files, :allow_destroy => true
|
||||
accepts_nested_attributes_for :event_news_links, :allow_destroy => true
|
||||
accepts_nested_attributes_for :event_carousel_images, :allow_destroy => true
|
||||
before_destroy :destroy_email
|
||||
|
||||
scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)}
|
||||
scope :can_display_and_sorted, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil}).order(is_top: :desc, event_date: :desc,postdate: :desc,id: :desc)}
|
||||
scope :can_display_and_sorted_according_today, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil}).order(is_top: :desc, event_date: :asc,postdate: :desc,id: :desc).where(:event_date.gte => Date.today.to_time)}
|
||||
scope :is_approved, ->{where(:approved => true)}
|
||||
scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)}
|
||||
scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)}
|
||||
before_create :set_expire
|
||||
before_save :check_limit
|
||||
index({postdate: 1}, { unique: false, background: true })
|
||||
index({is_top: -1, postdate: -1, event_date: -1, _id: -1}, { unique: false, background: true })
|
||||
index({is_top: -1, event_date: 1, postdate: -1, _id: -1}, { unique: false, background: true })
|
||||
def get_org_model
|
||||
if self.is_preview
|
||||
org_model = nil
|
||||
if self.copy_id
|
||||
org_model = self.class.find(self.copy_id) rescue nil
|
||||
else
|
||||
org_model = self.class.where(:title=>self.title,:is_preview.ne=>true).desc(:updated_at).first
|
||||
end
|
||||
org_model.nil? ? self : org_model
|
||||
else
|
||||
self
|
||||
end
|
||||
end
|
||||
def date_parse_format
|
||||
#all_day ? '%Y-%m-%d' : '%Y-%m-%d %H:%M'
|
||||
event_date_format
|
||||
end
|
||||
def get_weekday(w)
|
||||
trans = self.class::Week_day_trans
|
||||
if trans.keys.include?(I18n.locale)
|
||||
trans[I18n.locale][w]
|
||||
else
|
||||
trans[:en][w]
|
||||
end
|
||||
end
|
||||
def event_date_format
|
||||
@event_date_format ||= (self.event_date_use_default_setting ? EventNewsSetting.event_date_default_format : self.event_date_custom_format)
|
||||
end
|
||||
def event_date_custom_format
|
||||
datetime_format = "%Y-%m-%d"
|
||||
if self.including_day_of_the_week
|
||||
datetime_format += " %a"
|
||||
end
|
||||
if self.including_time
|
||||
if self.hour_clock_24
|
||||
datetime_format += " %H:%M"
|
||||
else
|
||||
datetime_format += " %I:%M %P"
|
||||
end
|
||||
end
|
||||
datetime_format
|
||||
end
|
||||
def custom_strftime(dt, datetime_format)
|
||||
if dt
|
||||
dt.strftime(datetime_format.sub("%a","%%a")).sub("%a",get_weekday(dt.wday))
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
def event_time_formated_for_frontend
|
||||
st,ed = self.event_time_formated.split("~")
|
||||
if st.nil?
|
||||
st = ""
|
||||
else
|
||||
st = "<span class=\"start_date\">#{st}</span>"
|
||||
end
|
||||
if ed.nil?
|
||||
st
|
||||
else
|
||||
ed = "<span class=\"start_date\">#{ed}</span>"
|
||||
"#{st} ~ #{ed}"
|
||||
end
|
||||
end
|
||||
def event_time_formated
|
||||
s = self.event_date.in_time_zone(Time.zone.utc_offset / 3600) rescue nil
|
||||
e = self.event_end_date.in_time_zone(Time.zone.utc_offset / 3600) rescue nil
|
||||
if s.blank? && e.blank?
|
||||
""
|
||||
elsif e.blank?
|
||||
custom_strftime(s, self.date_parse_format)
|
||||
elsif s.blank?
|
||||
"~ " + custom_strftime(e, self.date_parse_format)
|
||||
else
|
||||
parse_format = self.date_parse_format
|
||||
if s.to_date == e.to_date
|
||||
parse_format_arr = parse_format.split(/(%d %a|%d) /)
|
||||
parse_format_arr = parse_format_arr[0..-2].join(""), parse_format_arr[-1]
|
||||
date_str = custom_strftime(s, parse_format_arr[0])
|
||||
s_time = s.strftime(parse_format_arr[1])
|
||||
e_time = e.strftime(parse_format_arr[1])
|
||||
"#{date_str} #{s_time} ~ #{e_time}"
|
||||
else
|
||||
custom_strftime(s, self.date_parse_format) + " ~ " + custom_strftime(e, self.date_parse_format)
|
||||
end
|
||||
end
|
||||
end
|
||||
def to_calendar_param
|
||||
self.to_param
|
||||
end
|
||||
def calendar_type
|
||||
CalendarType.where(:category_id.in => self.calendar_type_id)
|
||||
end
|
||||
def event
|
||||
if !self.event_id.nil?
|
||||
Event.where(:id => self.event_id).first
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
def check_limit
|
||||
check_status_limit(update_user)
|
||||
end
|
||||
def check_status_limit(user,check_only=false)
|
||||
role_ids = user.member_profile.roles.map(&:id) rescue []
|
||||
status_settings = (role_ids.collect do |role_id|
|
||||
EventNewsSetting.first.event_news_status_settings.select{|v| v.role_id.to_s == role_id.to_s}
|
||||
end.flatten rescue [])
|
||||
reach_limit = []
|
||||
if status_settings.count != 0
|
||||
reach_limit = status_settings.collect do |status_setting|
|
||||
status = status_setting.status
|
||||
if status_setting.top_limit.to_i <= self.class.where(:is_preview.ne=>true,:update_user_id.in => Role.find(status_setting.role_id).member_profiles.collect(&:user).flatten.uniq.map{|v| v.id},status => true).count
|
||||
if !check_only
|
||||
if self[status] && !self.class.where(id:self.id).first[status]
|
||||
self[status] = false
|
||||
nil
|
||||
end
|
||||
else
|
||||
status
|
||||
end
|
||||
else
|
||||
nil
|
||||
end
|
||||
end.compact
|
||||
reach_limit = reach_limit.group_by{|v| v}.collect do |k,v|
|
||||
if v.count >= user.member_profile.roles.count
|
||||
k
|
||||
else
|
||||
nil
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
reach_limit
|
||||
end
|
||||
def set_expire
|
||||
self.expirable_created_at = Time.now if self.is_preview
|
||||
return true
|
||||
end
|
||||
|
||||
def update_user
|
||||
User.find(update_user_id) rescue nil
|
||||
end
|
||||
|
||||
def update_user=(user)
|
||||
self.update_user_id = user.id
|
||||
end
|
||||
|
||||
def email_members
|
||||
MemberProfile.find(self.email_member_ids) rescue []
|
||||
end
|
||||
|
||||
def email_addresses
|
||||
addresses = self.email_members.collect{|member| member.email} rescue []
|
||||
addresses = addresses +[self.other_mailaddress] if !self.other_mailaddress.blank?
|
||||
addresses.flatten
|
||||
end
|
||||
|
||||
def email
|
||||
mail = Email.find(self.email_id) rescue nil
|
||||
end
|
||||
|
||||
def expired?
|
||||
(self.deadline < Time.now) rescue false
|
||||
end
|
||||
|
||||
def destroy_email
|
||||
mail = Email.find(self.email_id) rescue nil
|
||||
mail.destroy if !mail.nil?
|
||||
end
|
||||
|
||||
def self.remove_expired_status
|
||||
self.where(:is_top => true, :top_end_date.ne => nil, :top_end_date.lt => Time.now).each do |b|
|
||||
b.is_top = false
|
||||
b.top_end_date = nil
|
||||
b.save
|
||||
end
|
||||
end
|
||||
|
||||
def display_subtitle?
|
||||
self.display_subtitle rescue false
|
||||
end
|
||||
|
||||
def display_img?
|
||||
self.display_img rescue false
|
||||
end
|
||||
def statuses
|
||||
statuses = []
|
||||
statuses << top_text if is_top?
|
||||
statuses << hot_text if is_hot?
|
||||
statuses << hidden_text if is_hidden?
|
||||
statuses
|
||||
end
|
||||
def statuses_with_classname
|
||||
statuses = []
|
||||
statuses << {"name" => top_text, "classname" => "top"} if is_top?
|
||||
statuses << {"name" => hot_text, "classname" => "hot"} if is_hot?
|
||||
statuses << {"name" => hidden_text, "classname" => "hidden"} if is_hidden?
|
||||
statuses
|
||||
end
|
||||
def status_for_table
|
||||
status = ""
|
||||
status << "<span class='label label-success'>#{top_text}</span> " if self.is_top
|
||||
status << "<span class='label label-important'>#{hot_text}</span> " if self.is_hot
|
||||
status << "<span class='label'>#{hidden_text}</span>"if self.is_hidden
|
||||
status.html_safe
|
||||
end
|
||||
def top_text
|
||||
I18n.t("announcement.status.top")
|
||||
end
|
||||
def hot_text
|
||||
I18n.t("announcement.status.hot")
|
||||
end
|
||||
def hidden_text
|
||||
I18n.t("announcement.status.hidden")
|
||||
end
|
||||
def carousel_image_width
|
||||
(self.custom_carousel_image_width.blank? ? AnnouncementSetting.last.carousel_image_width : self.custom_carousel_image_width)
|
||||
end
|
||||
|
||||
def self.agenda_events(agenda_start, agenda_end,read_more_url)
|
||||
events = self.monthly_event(agenda_start, agenda_end).convert_front(read_more_url)
|
||||
end
|
||||
def self.monthly_event(start_date,end_date)
|
||||
self.any_of({:event_date.lte => start_date,:event_end_date.gte => start_date},{:event_date.gte => start_date,:event_end_date.lte => end_date},{:event_date.lte => end_date,:event_end_date.gte => end_date}).asc(:event_date)
|
||||
end
|
||||
def self.convert_front(read_more_url)
|
||||
self.all.collect do |re|
|
||||
{:id => re.id.to_s,
|
||||
:title=>re.title,
|
||||
:note=>re.subtitle || "",
|
||||
:allDay => false,
|
||||
:color => nil,
|
||||
:url_linked => (re.is_external_link ? re.external_link : "#{read_more_url}/#{re.to_param}" rescue ""),
|
||||
:start => re.event_date,
|
||||
:end => re.event_end_date}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
class EventNewsCache
|
||||
include Mongoid::Document
|
||||
field :parent_id
|
||||
field :filter_result
|
||||
field :locale,type: String,default: 'zh_tw'
|
||||
field :invalid_date, type: DateTime
|
||||
class EventNewsCache
|
||||
include Mongoid::Document
|
||||
field :parent_id
|
||||
field :filter_result
|
||||
field :locale,type: String,default: 'zh_tw'
|
||||
field :invalid_date, type: DateTime
|
||||
end
|
|
@ -1,24 +1,24 @@
|
|||
class EventNewsCustomTitle
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
field :key
|
||||
field :title, type: String, localize: true
|
||||
KEYS = ['title','event_date','speaker','place','host']
|
||||
def self.get_map
|
||||
KEYS.map do |k|
|
||||
s = self.where(key: k).first || self.create(key: k,title_translations: I18n.available_locales.map{|l| [l,I18n.with_locale(l){I18n.t("event_news.#{k}")}]}.to_h)
|
||||
if s.title_translations.select{|k,v| v.include?("translation missing")}.length>0
|
||||
s.update_attributes(title_translations: I18n.available_locales.map{|l| [l,I18n.with_locale(l){I18n.t("event_news.#{k}")}]}.to_h)
|
||||
end
|
||||
s
|
||||
end
|
||||
end
|
||||
def default_title
|
||||
I18n.t("event_news.#{self.key}")
|
||||
end
|
||||
def self.get_trans(key)
|
||||
tmp = TitleMap[key][I18n.locale] rescue I18n.t("event_news.#{key}")
|
||||
tmp.blank? ? I18n.t("event_news.#{key}") : tmp
|
||||
end
|
||||
TitleMap = self.get_map.map{|v| [v.key,v.title_translations]}.to_h
|
||||
end
|
||||
class EventNewsCustomTitle
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
field :key
|
||||
field :title, type: String, localize: true
|
||||
KEYS = ['title','speaker','host','event_date','place','notes']
|
||||
def self.get_map
|
||||
KEYS.map do |k|
|
||||
s = self.where(key: k).first || self.create(key: k,title_translations: I18n.available_locales.map{|l| [l,I18n.with_locale(l){I18n.t("event_news.#{k}")}]}.to_h)
|
||||
if s.title_translations.select{|k,v| v.include?("translation missing")}.length>0
|
||||
s.update_attributes(title_translations: I18n.available_locales.map{|l| [l,I18n.with_locale(l){I18n.t("event_news.#{k}")}]}.to_h)
|
||||
end
|
||||
s
|
||||
end
|
||||
end
|
||||
def default_title
|
||||
I18n.t("event_news.#{self.key}")
|
||||
end
|
||||
def self.get_trans(key)
|
||||
tmp = TitleMap[key][I18n.locale] rescue I18n.t("event_news.#{key}")
|
||||
tmp.blank? ? I18n.t("event_news.#{key}") : tmp
|
||||
end
|
||||
TitleMap = self.get_map.map{|v| [v.key,v.title_translations]}.to_h
|
||||
end
|
||||
|
|
|
@ -1,171 +1,171 @@
|
|||
class EventNewsFeed
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Slug
|
||||
|
||||
field :title, as: :slug_title, type: String, localize: true
|
||||
field :tag_ids, type: Array, default: []
|
||||
field :category_ids, type: Array, default: []
|
||||
before_save do
|
||||
EventNewsCache.where(uid: self.uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
def self.create_feed_cache(bulletin=nil,bulletin_feed=nil)
|
||||
Thread.new do
|
||||
if !bulletin.nil?
|
||||
self.where(:tag_ids.in => Array(bulletin.tag_ids).collect{|v| v.to_s}).each do |bulletin_feed|
|
||||
uid = bulletin_feed.uid
|
||||
EventNewsCache.where(:uid => uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
elsif !bulletin_feed.nil?
|
||||
uid = bulletin_feed.uid
|
||||
EventNewsCache.where(:uid => uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
def generate_one_cache_timeout(startdt: nil,enddt: nil,dt: nil, base_url: nil, timeout: nil)
|
||||
timeout = 100000 if timeout.nil?
|
||||
begin
|
||||
Timeout::timeout(timeout) {
|
||||
feed_cache = nil
|
||||
Thread.new do
|
||||
feed_cache = self.generate_one_cache(startdt: startdt,enddt: enddt,dt: dt,base_url: base_url)
|
||||
end
|
||||
(1..(timeout.to_i+1)).each do
|
||||
sleep(1)
|
||||
break if !feed_cache.nil?
|
||||
end
|
||||
feed_cache.content
|
||||
}
|
||||
rescue=> e
|
||||
puts [e,e.backtrace]
|
||||
""
|
||||
end
|
||||
end
|
||||
def generate_one_cache(startdt: nil,enddt: nil,dt: nil, base_url: nil)
|
||||
base_url = Site.first.root_url if base_url.nil?
|
||||
uid = self.uid
|
||||
bf = self
|
||||
if !bf.nil?
|
||||
tags = bf.tag_ids
|
||||
categories = bf.category_ids
|
||||
if !(categories.empty? && tags.empty?)
|
||||
anns_before_filter = EventNews.any_of(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}}).is_approved_and_show
|
||||
if !dt.nil?
|
||||
dt = DateTime.parse(dt)
|
||||
dtt = dt + 1.day
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => dt, :postdate.lt => dtt)
|
||||
elsif !startdt.blank? && enddt.blank?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.now
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
|
||||
elsif !startdt.blank? && !enddt.blank?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.parse(enddt) + 1.day
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
|
||||
end
|
||||
anns_before_filter = anns_before_filter.can_display_and_sorted
|
||||
if !tags.empty?
|
||||
anns_before_filter = anns_before_filter.filter_by_tags(tags)
|
||||
end
|
||||
if !categories.empty?
|
||||
anns_before_filter = anns_before_filter.filter_by_categories(categories)
|
||||
end
|
||||
announcements = anns_before_filter.can_display_and_sorted
|
||||
else
|
||||
announcements = []
|
||||
end
|
||||
end
|
||||
all_anns = []
|
||||
tag_names = []
|
||||
category_titles = []
|
||||
tag_ids = []
|
||||
category_ids = []
|
||||
|
||||
first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0]
|
||||
first_deadline = nil
|
||||
|
||||
announcements.each do |anns|
|
||||
deadline = anns.deadline
|
||||
if !deadline.blank?
|
||||
if first_deadline.nil? || first_deadline>deadline
|
||||
first_deadline = deadline
|
||||
end
|
||||
end
|
||||
user = User.find(anns.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
||||
else
|
||||
author = ""
|
||||
end
|
||||
a = {}
|
||||
a["id"] = anns.uid
|
||||
a["title_translations"] = anns.title_translations
|
||||
a["subtitle_translations"] = anns.subtitle_translations
|
||||
a["text_translations"] = {}
|
||||
a["text_translations"]["en"] = self.class.smart_convertor(anns.text_translations["en"],base_url) if !anns.text_translations["en"].blank?
|
||||
a["text_translations"]["zh_tw"] = self.class.smart_convertor(anns.text_translations["zh_tw"],base_url) if !anns.text_translations["zh_tw"].blank?
|
||||
a["postdate"] = anns.postdate
|
||||
a["image_description_translations"] = anns.image_description_translations
|
||||
a["image"] = {}
|
||||
a["display_img"] = anns.display_img
|
||||
a["image"]["original"] = ("#{base_url}" + anns.image.url rescue "")
|
||||
a["image"]["thumb"] = ("#{base_url}" + anns.image.thumb.url rescue "")
|
||||
a["image"]["mobile"] = ("#{base_url}" + anns.image.mobile.url rescue "")
|
||||
a["tags"] = []
|
||||
a["category"] = {}
|
||||
a["author"] = author
|
||||
a["params"] = anns.to_param
|
||||
a["subtitle_ann"] = anns.subtitle if anns.display_subtitle?
|
||||
a["bulletin_links"] = []
|
||||
a["bulletin_files"] = []
|
||||
a["bulletin_carousel_images"] = anns.bulletin_carousel_images.map{|image| {"src"=>"#{base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
||||
a["external_link"] = anns["is_external_link"] ? anns.external_link : nil
|
||||
anns.tags.each do |tag|
|
||||
if !tag_ids.include?(tag.id.to_s)
|
||||
tag_ids << tag.id.to_s
|
||||
tag_names << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
a["tags"] << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
cat = anns.category
|
||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
||||
category_ids << cat.id.to_s
|
||||
category_titles << {"title_translations" => cat.title_translations}
|
||||
end
|
||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
||||
anns.bulletin_links.each do |bl|
|
||||
b = {}
|
||||
b["url"] = bl.url
|
||||
b["title_translations"] = bl.title_translations
|
||||
a["bulletin_links"] << b
|
||||
end
|
||||
anns.bulletin_files.each do |bf|
|
||||
b = {}
|
||||
b["description_translations"] = bf.description_translations
|
||||
b["title_translations"] = bf.title_translations
|
||||
b["url"] = ("#{base_url}" + bf.file.url rescue "")
|
||||
a["bulletin_files"] << b
|
||||
end
|
||||
all_anns << a
|
||||
end
|
||||
invalid_date = [first_postdate,first_deadline].compact.sort[0]
|
||||
anns = {
|
||||
"announcements" => all_anns,
|
||||
"tags" => tag_names,
|
||||
"categories" => category_titles
|
||||
}.to_json
|
||||
feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date)
|
||||
end
|
||||
def self.smart_convertor(text,url)
|
||||
html_string = text
|
||||
html_string = html_string.gsub(/img.*?src="(?=\/)(.*?)|a.*?href="(?=\/)(.*?)/i){|w| w+url}
|
||||
html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url}
|
||||
return html_string
|
||||
end
|
||||
class EventNewsFeed
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Slug
|
||||
|
||||
field :title, as: :slug_title, type: String, localize: true
|
||||
field :tag_ids, type: Array, default: []
|
||||
field :category_ids, type: Array, default: []
|
||||
before_save do
|
||||
EventNewsCache.where(uid: self.uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
def self.create_feed_cache(bulletin=nil,bulletin_feed=nil)
|
||||
Thread.new do
|
||||
if !bulletin.nil?
|
||||
self.where(:tag_ids.in => Array(bulletin.tag_ids).collect{|v| v.to_s}).each do |bulletin_feed|
|
||||
uid = bulletin_feed.uid
|
||||
EventNewsCache.where(:uid => uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
elsif !bulletin_feed.nil?
|
||||
uid = bulletin_feed.uid
|
||||
EventNewsCache.where(:uid => uid).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
def generate_one_cache_timeout(startdt: nil,enddt: nil,dt: nil, base_url: nil, timeout: nil)
|
||||
timeout = 100000 if timeout.nil?
|
||||
begin
|
||||
Timeout::timeout(timeout) {
|
||||
feed_cache = nil
|
||||
Thread.new do
|
||||
feed_cache = self.generate_one_cache(startdt: startdt,enddt: enddt,dt: dt,base_url: base_url)
|
||||
end
|
||||
(1..(timeout.to_i+1)).each do
|
||||
sleep(1)
|
||||
break if !feed_cache.nil?
|
||||
end
|
||||
feed_cache.content
|
||||
}
|
||||
rescue=> e
|
||||
puts [e,e.backtrace]
|
||||
""
|
||||
end
|
||||
end
|
||||
def generate_one_cache(startdt: nil,enddt: nil,dt: nil, base_url: nil)
|
||||
base_url = Site.first.root_url if base_url.nil?
|
||||
uid = self.uid
|
||||
bf = self
|
||||
if !bf.nil?
|
||||
tags = bf.tag_ids
|
||||
categories = bf.category_ids
|
||||
if !(categories.empty? && tags.empty?)
|
||||
anns_before_filter = EventNews.any_of(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}}).is_approved_and_show
|
||||
if !dt.nil?
|
||||
dt = DateTime.parse(dt)
|
||||
dtt = dt + 1.day
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => dt, :postdate.lt => dtt)
|
||||
elsif !startdt.blank? && enddt.blank?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.now
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
|
||||
elsif !startdt.blank? && !enddt.blank?
|
||||
startdt = DateTime.parse(startdt)
|
||||
enddt = DateTime.parse(enddt) + 1.day
|
||||
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
|
||||
end
|
||||
anns_before_filter = anns_before_filter.can_display_and_sorted
|
||||
if !tags.empty?
|
||||
anns_before_filter = anns_before_filter.filter_by_tags(tags)
|
||||
end
|
||||
if !categories.empty?
|
||||
anns_before_filter = anns_before_filter.filter_by_categories(categories)
|
||||
end
|
||||
announcements = anns_before_filter.can_display_and_sorted
|
||||
else
|
||||
announcements = []
|
||||
end
|
||||
end
|
||||
all_anns = []
|
||||
tag_names = []
|
||||
category_titles = []
|
||||
tag_ids = []
|
||||
category_ids = []
|
||||
|
||||
first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0]
|
||||
first_deadline = nil
|
||||
|
||||
announcements.each do |anns|
|
||||
deadline = anns.deadline
|
||||
if !deadline.blank?
|
||||
if first_deadline.nil? || first_deadline>deadline
|
||||
first_deadline = deadline
|
||||
end
|
||||
end
|
||||
user = User.find(anns.create_user_id) rescue nil
|
||||
if !user.nil?
|
||||
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
|
||||
else
|
||||
author = ""
|
||||
end
|
||||
a = {}
|
||||
a["id"] = anns.uid
|
||||
a["title_translations"] = anns.title_translations
|
||||
a["subtitle_translations"] = anns.subtitle_translations
|
||||
a["text_translations"] = {}
|
||||
a["text_translations"]["en"] = self.class.smart_convertor(anns.text_translations["en"],base_url) if !anns.text_translations["en"].blank?
|
||||
a["text_translations"]["zh_tw"] = self.class.smart_convertor(anns.text_translations["zh_tw"],base_url) if !anns.text_translations["zh_tw"].blank?
|
||||
a["postdate"] = anns.postdate
|
||||
a["image_description_translations"] = anns.image_description_translations
|
||||
a["image"] = {}
|
||||
a["display_img"] = anns.display_img
|
||||
a["image"]["original"] = ("#{base_url}" + anns.image.url rescue "")
|
||||
a["image"]["thumb"] = ("#{base_url}" + anns.image.thumb.url rescue "")
|
||||
a["image"]["mobile"] = ("#{base_url}" + anns.image.mobile.url rescue "")
|
||||
a["tags"] = []
|
||||
a["category"] = {}
|
||||
a["author"] = author
|
||||
a["params"] = anns.to_param
|
||||
a["subtitle_ann"] = anns.subtitle if anns.display_subtitle?
|
||||
a["bulletin_links"] = []
|
||||
a["bulletin_files"] = []
|
||||
a["bulletin_carousel_images"] = anns.bulletin_carousel_images.map{|image| {"src"=>"#{base_url}" + image.file.url,"description"=>image.description.to_s,"description_text"=>image.description_text }}
|
||||
a["external_link"] = anns["is_external_link"] ? anns.external_link : nil
|
||||
anns.tags.each do |tag|
|
||||
if !tag_ids.include?(tag.id.to_s)
|
||||
tag_ids << tag.id.to_s
|
||||
tag_names << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
a["tags"] << {"name_translations" => tag.name_translations}
|
||||
end
|
||||
cat = anns.category
|
||||
if (!category_ids.include?(cat.id.to_s) rescue false)
|
||||
category_ids << cat.id.to_s
|
||||
category_titles << {"title_translations" => cat.title_translations}
|
||||
end
|
||||
a["category"] = {"title_translations" => (cat.title_translations rescue {})}
|
||||
anns.bulletin_links.each do |bl|
|
||||
b = {}
|
||||
b["url"] = bl.url
|
||||
b["title_translations"] = bl.title_translations
|
||||
a["bulletin_links"] << b
|
||||
end
|
||||
anns.bulletin_files.each do |bf|
|
||||
b = {}
|
||||
b["description_translations"] = bf.description_translations
|
||||
b["title_translations"] = bf.title_translations
|
||||
b["url"] = ("#{base_url}" + bf.file.url rescue "")
|
||||
a["bulletin_files"] << b
|
||||
end
|
||||
all_anns << a
|
||||
end
|
||||
invalid_date = [first_postdate,first_deadline].compact.sort[0]
|
||||
anns = {
|
||||
"announcements" => all_anns,
|
||||
"tags" => tag_names,
|
||||
"categories" => category_titles
|
||||
}.to_json
|
||||
feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date)
|
||||
end
|
||||
def self.smart_convertor(text,url)
|
||||
html_string = text
|
||||
html_string = html_string.gsub(/img.*?src="(?=\/)(.*?)|a.*?href="(?=\/)(.*?)/i){|w| w+url}
|
||||
html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url}
|
||||
return html_string
|
||||
end
|
||||
end
|
|
@ -1,29 +1,29 @@
|
|||
class EventNewsFeedCache
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :content, type: String, default: ''
|
||||
field :uid
|
||||
field :start
|
||||
field :end
|
||||
field :date
|
||||
field :invalid_date, type: DateTime
|
||||
def self.regenerate_all
|
||||
caches = self.all.to_a
|
||||
caches.each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid)
|
||||
EventNewsFeed.where(:uid.in=> uids).each do |feed|
|
||||
feed.generate_one_cache()
|
||||
end
|
||||
end
|
||||
def regenerate
|
||||
st = self.start
|
||||
et = self.end
|
||||
dt = self.date
|
||||
uid = self.uid
|
||||
EventNewsFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil
|
||||
self.destroy
|
||||
end
|
||||
class EventNewsFeedCache
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :content, type: String, default: ''
|
||||
field :uid
|
||||
field :start
|
||||
field :end
|
||||
field :date
|
||||
field :invalid_date, type: DateTime
|
||||
def self.regenerate_all
|
||||
caches = self.all.to_a
|
||||
caches.each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid)
|
||||
EventNewsFeed.where(:uid.in=> uids).each do |feed|
|
||||
feed.generate_one_cache()
|
||||
end
|
||||
end
|
||||
def regenerate
|
||||
st = self.start
|
||||
et = self.end
|
||||
dt = self.date
|
||||
uid = self.uid
|
||||
EventNewsFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil
|
||||
self.destroy
|
||||
end
|
||||
end
|
|
@ -1,47 +1,47 @@
|
|||
# encoding: utf-8
|
||||
class EventNewsFile
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description, localize: true
|
||||
field :title, localize: true
|
||||
field :choose_lang, :type => Array, :default => ["en","zh_tw"]
|
||||
field :privacy_type, type: String, default: 'public'
|
||||
belongs_to :event_news
|
||||
def self.to_fronted(locale=I18n.locale)
|
||||
self.all.map{|file| file.to_fronted(locale)}.compact rescue []
|
||||
end
|
||||
def to_fronted(locale=I18n.locale)
|
||||
file = self
|
||||
(file.enabled_for?(locale) && !file[:file].blank?) ? { "file_url" => "/xhr/event_news/file/#{file.id}/#{file['file']}" + "\" title=\"#{file.file_title}",
|
||||
"file_title" => (file.title.blank? ? URI.unescape(File.basename(file.file.path)) : file.title rescue '')
|
||||
} : nil rescue nil
|
||||
end
|
||||
|
||||
def file_title
|
||||
if self.description.present?
|
||||
return self.description
|
||||
elsif self.title.present?
|
||||
return self.title
|
||||
else
|
||||
return File.basename(self.file.path)
|
||||
end
|
||||
end
|
||||
def enabled_for?(lang)
|
||||
if lang.nil?
|
||||
return true
|
||||
else
|
||||
return self.choose_lang.include?(lang)
|
||||
end
|
||||
end
|
||||
def can_access?(user)
|
||||
if user.nil? && self.privacy_type == 'logged_in'
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
# encoding: utf-8
|
||||
class EventNewsFile
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
mount_uploader :file, AssetUploader
|
||||
|
||||
field :description, localize: true
|
||||
field :title, localize: true
|
||||
field :choose_lang, :type => Array, :default => ["en","zh_tw"]
|
||||
field :privacy_type, type: String, default: 'public'
|
||||
belongs_to :event_news
|
||||
def self.to_fronted(locale=I18n.locale)
|
||||
self.all.map{|file| file.to_fronted(locale)}.compact rescue []
|
||||
end
|
||||
def to_fronted(locale=I18n.locale)
|
||||
file = self
|
||||
(file.enabled_for?(locale) && !file[:file].blank?) ? { "file_url" => "/xhr/event_news/file/#{file.id}/#{file['file']}" + "\" title=\"#{file.file_title}",
|
||||
"file_title" => (file.title.blank? ? URI.unescape(File.basename(file.file.path)) : file.title rescue '')
|
||||
} : nil rescue nil
|
||||
end
|
||||
|
||||
def file_title
|
||||
if self.description.present?
|
||||
return self.description
|
||||
elsif self.title.present?
|
||||
return self.title
|
||||
else
|
||||
return File.basename(self.file.path)
|
||||
end
|
||||
end
|
||||
def enabled_for?(lang)
|
||||
if lang.nil?
|
||||
return true
|
||||
else
|
||||
return self.choose_lang.include?(lang)
|
||||
end
|
||||
end
|
||||
def can_access?(user)
|
||||
if user.nil? && self.privacy_type == 'logged_in'
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
# encoding: utf-8
|
||||
require 'uri'
|
||||
|
||||
class EventNewsLink
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :url
|
||||
field :title, localize: true
|
||||
|
||||
belongs_to :event_news
|
||||
|
||||
before_validation :add_http
|
||||
|
||||
validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i
|
||||
|
||||
protected
|
||||
|
||||
def add_http
|
||||
unless self.url[/^http:\/\//] || self.url[/^https:\/\//]
|
||||
self.url = 'http://' + self.url
|
||||
end
|
||||
end
|
||||
|
||||
# encoding: utf-8
|
||||
require 'uri'
|
||||
|
||||
class EventNewsLink
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
|
||||
field :url
|
||||
field :title, localize: true
|
||||
|
||||
belongs_to :event_news
|
||||
|
||||
before_validation :add_http
|
||||
|
||||
validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i
|
||||
|
||||
protected
|
||||
|
||||
def add_http
|
||||
unless self.url[/^http:\/\//] || self.url[/^https:\/\//]
|
||||
self.url = 'http://' + self.url
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -1,23 +1,90 @@
|
|||
class EventNewsSetting
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
field :carousel_image_width, type: String, :default => "75%"
|
||||
field :top_limit, type: Integer, :default => 0
|
||||
field :pro_enabled, type: Boolean, :default => false
|
||||
field :approvers, type: Array, :default => []
|
||||
field :email_to, type: Array, :default => ["admins","managers","approvers"]
|
||||
field :is_display_edit_only, type: Boolean, :default => false
|
||||
field :only_manager_can_edit_status, type: Boolean, :default => false
|
||||
has_many :event_news_status_settings, :autosave => true, :dependent => :destroy
|
||||
accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true
|
||||
def self.check_limit_for_user(user_id, b_id = nil)
|
||||
limit = self.first.top_limit rescue 0
|
||||
return true if limit == 0
|
||||
count = Bulletin.where(:is_top => true, :create_user_id => user_id, :id.ne => b_id).count
|
||||
return count < limit
|
||||
end
|
||||
|
||||
def self.is_pro?
|
||||
self.first.pro_enabled rescue false
|
||||
end
|
||||
class EventNewsSetting
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
field :carousel_image_width, type: String, :default => "75%"
|
||||
field :top_limit, type: Integer, :default => 0
|
||||
field :pro_enabled, type: Boolean, :default => false
|
||||
field :approvers, type: Array, :default => []
|
||||
field :email_to, type: Array, :default => ["admins","managers","approvers"]
|
||||
field :is_display_edit_only, type: Boolean, :default => false
|
||||
field :only_manager_can_edit_status, type: Boolean, :default => false
|
||||
field :including_day_of_the_week, type: Boolean, default: true
|
||||
field :including_time, type: Boolean, default: true
|
||||
field :hour_clock_24, type: Boolean, default: true
|
||||
has_many :event_news_status_settings, :autosave => true, :dependent => :destroy
|
||||
accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true
|
||||
after_save do
|
||||
if self.including_day_of_the_week_changed? || self.including_time_changed? || self.hour_clock_24_changed?
|
||||
EventNewsCache.all.destroy
|
||||
end
|
||||
end
|
||||
def self.check_limit_for_user(user_id, b_id = nil)
|
||||
limit = self.first.top_limit rescue 0
|
||||
return true if limit == 0
|
||||
count = Bulletin.where(:is_top => true, :create_user_id => user_id, :id.ne => b_id).count
|
||||
return count < limit
|
||||
end
|
||||
|
||||
def self.is_pro?
|
||||
self.first.pro_enabled rescue false
|
||||
end
|
||||
def self.event_date_default_format
|
||||
setting = self.first
|
||||
setting.event_date_default_format
|
||||
end
|
||||
def event_date_default_format
|
||||
datetime_format = "%Y-%m-%d"
|
||||
if self.including_day_of_the_week
|
||||
datetime_format += " %a"
|
||||
end
|
||||
if self.including_time
|
||||
if self.hour_clock_24
|
||||
datetime_format += " %H:%M"
|
||||
else
|
||||
datetime_format += " %I:%M %P"
|
||||
end
|
||||
end
|
||||
datetime_format
|
||||
end
|
||||
def event_date_format
|
||||
@event_date_format ||= self.event_date_default_format
|
||||
end
|
||||
def self.event_time_formated_for_frontend(st,ed)
|
||||
self.first.event_time_formated_for_frontend(st,ed)
|
||||
end
|
||||
def event_time_formated_for_frontend(st,ed)
|
||||
st,ed = self.event_time_formated(st,ed).split("~")
|
||||
if st.blank?
|
||||
st = "<span class=\"start_date\">#{st}</span>"
|
||||
end
|
||||
if ed.nil?
|
||||
st
|
||||
else
|
||||
ed = "<span class=\"start_date\">#{ed}</span>"
|
||||
"#{st} ~ #{ed}"
|
||||
end
|
||||
end
|
||||
def event_time_formated(st,ed)
|
||||
s = st
|
||||
e = ed
|
||||
if s.blank? && e.blank?
|
||||
""
|
||||
elsif e.blank?
|
||||
custom_strftime(s, self.event_date_format)
|
||||
elsif s.blank?
|
||||
"~ " + custom_strftime(e, self.event_date_format)
|
||||
else
|
||||
parse_format = self.event_date_format
|
||||
if s.to_date == e.to_date
|
||||
parse_format_arr = parse_format.split(/(%d %a|%d) /)
|
||||
parse_format_arr = parse_format_arr[0..-2].join(""), parse_format_arr[-1]
|
||||
date_str = custom_strftime(s, parse_format_arr[0])
|
||||
s_time = s.strftime(parse_format_arr[1])
|
||||
e_time = e.strftime(parse_format_arr[1])
|
||||
"#{date_str} #{s_time} ~ #{e_time}"
|
||||
else
|
||||
custom_strftime(s, self.event_date_format) + " ~ " + custom_strftime(e, self.event_date_format)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,7 +1,7 @@
|
|||
class EventNewsStatusSetting
|
||||
include Mongoid::Document
|
||||
field :role_id
|
||||
field :status
|
||||
field :top_limit
|
||||
belongs_to :event_news_setting
|
||||
class EventNewsStatusSetting
|
||||
include Mongoid::Document
|
||||
field :role_id
|
||||
field :status
|
||||
field :top_limit
|
||||
belongs_to :event_news_setting
|
||||
end
|
|
@ -1,122 +1,122 @@
|
|||
<style>
|
||||
#approvalModal {
|
||||
width: 90%;
|
||||
height: 600px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
margin: auto;
|
||||
position: absolute;
|
||||
}
|
||||
#approvalModal .preview-iframe {
|
||||
border: 0;
|
||||
outline: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#approvalModal .modal-body {
|
||||
background-color: #fff;
|
||||
padding: 0;
|
||||
max-height: none;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
#approvalModal .modal-left {
|
||||
overflow: auto;
|
||||
float: left;
|
||||
width: 19.8%;
|
||||
border-right: 1px solid #DFDFDF;
|
||||
height: 100%;
|
||||
padding: 1em;
|
||||
margin: 0;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#approvalModal .modal-right {
|
||||
float: right;
|
||||
width: 80%;
|
||||
height: 100%;
|
||||
}
|
||||
.approvalModal__form {
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
}
|
||||
label.approvalModal__radio {
|
||||
display: inline-block;
|
||||
}
|
||||
label.control-label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.approvalModal__controls {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.approvalModal__group {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
label.approvalModal__label {
|
||||
display: inline-block;
|
||||
margin: 0 4px 0 7px;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
.approvalModal__controls .approvalModal__privacy {
|
||||
margin: 0 5px;
|
||||
}
|
||||
.approvalModal__controls .approvalModal__large {
|
||||
}
|
||||
#approvalModal .modal-footer {
|
||||
text-align: left;
|
||||
padding: 15px 10px 10px;
|
||||
}
|
||||
.approvalModal__group.confirm {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div id="approvalModal" class="modal hide fade" role="dialog">
|
||||
<div class="modal-header">
|
||||
<a class="close" data-dismiss="modal">×</a>
|
||||
<h3>預覽</h3>
|
||||
</div>
|
||||
<div class="modal-body clearfix">
|
||||
<div class="modal-left">
|
||||
<label for="____">寄送對象</label>
|
||||
</div>
|
||||
<div class="modal-right">
|
||||
<iframe class="preview-iframe"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<%= form_tag "/admin/event_news/approve_event_news", :class=>"approvalModal__form" do %>
|
||||
<div class="approvalModal__group">
|
||||
<label class="control-label" for="event_news_approval_stat">審核狀態</label>
|
||||
<div class="approvalModal__controls">
|
||||
<label class="approvalModal__radio">
|
||||
<input class="approvalModal__privacy" id="event_news_is_checked_true" name="approved" type="radio" value="true">已認可
|
||||
</label>
|
||||
<label class="approvalModal__radio">
|
||||
<input checked="checked" class="approvalModal__privacy" id="event_news_approved_false" name="approved" type="radio" value="false">拒絕
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approvalModal__group group--reject">
|
||||
<label class="approvalModal__label" for="is_checked_false_拒絕原因">拒絕原因</label>
|
||||
<div class="approvalModal__controls">
|
||||
<input class="approvalModal__large" id="event_news_not_checked_reason" name="reason" size="30" type="text">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="approvalModal__group confirm">
|
||||
<input class="approvalModal__btn btn btn-primary" name="commit" type="submit" value="送出">
|
||||
<input type="hidden" id="object_id" name="id" />
|
||||
<button class="approvalModal__btn btn" data-dismiss="modal" aria-hidden="true">關閉</button>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<style>
|
||||
#approvalModal {
|
||||
width: 90%;
|
||||
height: 600px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
margin: auto;
|
||||
position: absolute;
|
||||
}
|
||||
#approvalModal .preview-iframe {
|
||||
border: 0;
|
||||
outline: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#approvalModal .modal-body {
|
||||
background-color: #fff;
|
||||
padding: 0;
|
||||
max-height: none;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
#approvalModal .modal-left {
|
||||
overflow: auto;
|
||||
float: left;
|
||||
width: 19.8%;
|
||||
border-right: 1px solid #DFDFDF;
|
||||
height: 100%;
|
||||
padding: 1em;
|
||||
margin: 0;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#approvalModal .modal-right {
|
||||
float: right;
|
||||
width: 80%;
|
||||
height: 100%;
|
||||
}
|
||||
.approvalModal__form {
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
}
|
||||
label.approvalModal__radio {
|
||||
display: inline-block;
|
||||
}
|
||||
label.control-label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.approvalModal__controls {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.approvalModal__group {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
label.approvalModal__label {
|
||||
display: inline-block;
|
||||
margin: 0 4px 0 7px;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
.approvalModal__controls .approvalModal__privacy {
|
||||
margin: 0 5px;
|
||||
}
|
||||
.approvalModal__controls .approvalModal__large {
|
||||
}
|
||||
#approvalModal .modal-footer {
|
||||
text-align: left;
|
||||
padding: 15px 10px 10px;
|
||||
}
|
||||
.approvalModal__group.confirm {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div id="approvalModal" class="modal hide fade" role="dialog">
|
||||
<div class="modal-header">
|
||||
<a class="close" data-dismiss="modal">×</a>
|
||||
<h3>預覽</h3>
|
||||
</div>
|
||||
<div class="modal-body clearfix">
|
||||
<div class="modal-left">
|
||||
<label for="____">寄送對象</label>
|
||||
</div>
|
||||
<div class="modal-right">
|
||||
<iframe class="preview-iframe"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<%= form_tag "/admin/event_news/approve_event_news", :class=>"approvalModal__form" do %>
|
||||
<div class="approvalModal__group">
|
||||
<label class="control-label" for="event_news_approval_stat">審核狀態</label>
|
||||
<div class="approvalModal__controls">
|
||||
<label class="approvalModal__radio">
|
||||
<input class="approvalModal__privacy" id="event_news_is_checked_true" name="approved" type="radio" value="true">已認可
|
||||
</label>
|
||||
<label class="approvalModal__radio">
|
||||
<input checked="checked" class="approvalModal__privacy" id="event_news_approved_false" name="approved" type="radio" value="false">拒絕
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approvalModal__group group--reject">
|
||||
<label class="approvalModal__label" for="is_checked_false_拒絕原因">拒絕原因</label>
|
||||
<div class="approvalModal__controls">
|
||||
<input class="approvalModal__large" id="event_news_not_checked_reason" name="reason" size="30" type="text">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="approvalModal__group confirm">
|
||||
<input class="approvalModal__btn btn btn-primary" name="commit" type="submit" value="送出">
|
||||
<input type="hidden" id="object_id" name="id" />
|
||||
<button class="approvalModal__btn btn" data-dismiss="modal" aria-hidden="true">關閉</button>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
|
@ -1,61 +1,61 @@
|
|||
<%= form_for @event_news_feed, url: admin_event_news_updatefeed_path(:id => @event_news_feed.id), html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<fieldset>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, data: {"fv-validation" => "required;","fv-messages" => "Cannot be empty.;"}, value: (@event_news_feed.title_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr />
|
||||
<div class="tags">
|
||||
<h4><%=t(:tags)%></h4>
|
||||
<div id="tags-list">
|
||||
<div class="tags-groups checkbox-card module-tags">
|
||||
<% @module_app.tags.each do |tag| %>
|
||||
<label class="filter-item module <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "active" : "" %>">
|
||||
<p class='card pull-left <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "active" : "" %>'>
|
||||
<input type="checkbox" <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "checked=checked" : "" %> class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="categories">
|
||||
<h4><%=t(:category)%></h4>
|
||||
<div id="categories-list">
|
||||
<div class="tags-groups checkbox-card module-categories">
|
||||
<% @module_app.categories.each do |category| %>
|
||||
<label class="filter-item module <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "active" : "" %>">
|
||||
<p class="card pull-left <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "active" : "" %>">
|
||||
<input type="checkbox" class="tag-checkbox" <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "checked=checked" : "" %> value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
<%= form_for @event_news_feed, url: admin_event_news_updatefeed_path(:id => @event_news_feed.id), html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<fieldset>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, data: {"fv-validation" => "required;","fv-messages" => "Cannot be empty.;"}, value: (@event_news_feed.title_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr />
|
||||
<div class="tags">
|
||||
<h4><%=t(:tags)%></h4>
|
||||
<div id="tags-list">
|
||||
<div class="tags-groups checkbox-card module-tags">
|
||||
<% @module_app.tags.each do |tag| %>
|
||||
<label class="filter-item module <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "active" : "" %>">
|
||||
<p class='card pull-left <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "active" : "" %>'>
|
||||
<input type="checkbox" <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "checked=checked" : "" %> class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="categories">
|
||||
<h4><%=t(:category)%></h4>
|
||||
<div id="categories-list">
|
||||
<div class="tags-groups checkbox-card module-categories">
|
||||
<% @module_app.categories.each do |category| %>
|
||||
<label class="filter-item module <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "active" : "" %>">
|
||||
<p class="card pull-left <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "active" : "" %>">
|
||||
<input type="checkbox" class="tag-checkbox" <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "checked=checked" : "" %> value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
|
|
@ -1,83 +1,83 @@
|
|||
<tr>
|
||||
<td>
|
||||
<%= feed.title %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills">
|
||||
<% if can_edit_or_delete?(feed) %>
|
||||
<li><a href="#" class="edit-feed" data-feed-id="<%= feed.id.to_s %>"><%= t(:edit) %></a></li>
|
||||
<li><a href="/admin/event_news/deletefeed?id=<%= feed.id.to_s %>" class="delete-feed text-error" ><%= t(:delete_) %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="tags">
|
||||
<div id="tags-list">
|
||||
<ul class="tags-groups checkbox-card module-tags">
|
||||
<% tags_to_remove = [] %>
|
||||
<% feed.tag_ids.each do |t| %>
|
||||
<% tag = Tag.find(t) rescue nil %>
|
||||
<% if !tag.nil? %>
|
||||
<li class="filter-item module">
|
||||
<a href="#" onclick="return false;">
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</a>
|
||||
</li>
|
||||
<% else %>
|
||||
<% tags_to_remove << t %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if !tags_to_remove.blank?
|
||||
tags_to_remove.each do |t|
|
||||
feed.tag_ids.delete(t)
|
||||
end
|
||||
feed.save
|
||||
end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="categories">
|
||||
<div id="categories-list">
|
||||
<ul class="tags-groups checkbox-card module-categories">
|
||||
<% categories_to_remove = [] %>
|
||||
<% feed.category_ids.each do |c| %>
|
||||
<% category = Category.find(c) rescue nil %>
|
||||
<% if !category.nil? %>
|
||||
<li class="filter-item module">
|
||||
<a href="#" onclick="return false;">
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</a>
|
||||
</li>
|
||||
<% else %>
|
||||
<% categories_to_remove << c %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if !categories_to_remove.blank?
|
||||
categories_to_remove.each do |c|
|
||||
feed.category_ids.delete(c)
|
||||
end
|
||||
feed.save
|
||||
end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/xhr/event_news/rssfeed/<%= feed.uid %>.rss" target="_blank">RSS Feed</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/xhr/event_news/feed/<%= feed.uid %>.json" target="_blank">JSON Feed</a>
|
||||
</td>
|
||||
<tr>
|
||||
<td>
|
||||
<%= feed.title %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills">
|
||||
<% if can_edit_or_delete?(feed) %>
|
||||
<li><a href="#" class="edit-feed" data-feed-id="<%= feed.id.to_s %>"><%= t(:edit) %></a></li>
|
||||
<li><a href="/admin/event_news/deletefeed?id=<%= feed.id.to_s %>" class="delete-feed text-error" ><%= t(:delete_) %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="tags">
|
||||
<div id="tags-list">
|
||||
<ul class="tags-groups checkbox-card module-tags">
|
||||
<% tags_to_remove = [] %>
|
||||
<% feed.tag_ids.each do |t| %>
|
||||
<% tag = Tag.find(t) rescue nil %>
|
||||
<% if !tag.nil? %>
|
||||
<li class="filter-item module">
|
||||
<a href="#" onclick="return false;">
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</a>
|
||||
</li>
|
||||
<% else %>
|
||||
<% tags_to_remove << t %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if !tags_to_remove.blank?
|
||||
tags_to_remove.each do |t|
|
||||
feed.tag_ids.delete(t)
|
||||
end
|
||||
feed.save
|
||||
end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="categories">
|
||||
<div id="categories-list">
|
||||
<ul class="tags-groups checkbox-card module-categories">
|
||||
<% categories_to_remove = [] %>
|
||||
<% feed.category_ids.each do |c| %>
|
||||
<% category = Category.find(c) rescue nil %>
|
||||
<% if !category.nil? %>
|
||||
<li class="filter-item module">
|
||||
<a href="#" onclick="return false;">
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</a>
|
||||
</li>
|
||||
<% else %>
|
||||
<% categories_to_remove << c %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if !categories_to_remove.blank?
|
||||
categories_to_remove.each do |c|
|
||||
feed.category_ids.delete(c)
|
||||
end
|
||||
feed.save
|
||||
end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/xhr/event_news/rssfeed/<%= feed.uid %>.rss" target="_blank">RSS Feed</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="/xhr/event_news/feed/<%= feed.uid %>.json" target="_blank">JSON Feed</a>
|
||||
</td>
|
||||
</tr>
|
|
@ -1,61 +1,61 @@
|
|||
<%= form_for @event_news_feed, url: admin_event_news_createfeed_path, html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<fieldset>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, data: {"fv-validation" => "required;","fv-messages" => "Cannot be empty.;"}, value: (@event_news_feed.title_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr />
|
||||
<div class="tags">
|
||||
<h4><%=t(:tags)%></h4>
|
||||
<div id="tags-list">
|
||||
<div class="tags-groups checkbox-card module-tags">
|
||||
<% @module_app.tags.each do |tag| %>
|
||||
<label class="filter-item module">
|
||||
<p class="card pull-left">
|
||||
<input type="checkbox" class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="categories">
|
||||
<h4><%=t(:category)%></h4>
|
||||
<div id="categories-list">
|
||||
<div class="tags-groups checkbox-card module-categories">
|
||||
<% @module_app.categories.each do |category| %>
|
||||
<label class="filter-item module">
|
||||
<p class="card pull-left">
|
||||
<input type="checkbox" class="tag-checkbox" value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
<%= form_for @event_news_feed, url: admin_event_news_createfeed_path, html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<fieldset>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, data: {"fv-validation" => "required;","fv-messages" => "Cannot be empty.;"}, value: (@event_news_feed.title_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr />
|
||||
<div class="tags">
|
||||
<h4><%=t(:tags)%></h4>
|
||||
<div id="tags-list">
|
||||
<div class="tags-groups checkbox-card module-tags">
|
||||
<% @module_app.tags.each do |tag| %>
|
||||
<label class="filter-item module">
|
||||
<p class="card pull-left">
|
||||
<input type="checkbox" class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= tag.name_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="categories">
|
||||
<h4><%=t(:category)%></h4>
|
||||
<div id="categories-list">
|
||||
<div class="tags-groups checkbox-card module-categories">
|
||||
<% @module_app.categories.each do |category| %>
|
||||
<label class="filter-item module">
|
||||
<p class="card pull-left">
|
||||
<input type="checkbox" class="tag-checkbox" value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]">
|
||||
</p>
|
||||
<div>
|
||||
<% @site_in_use_locales.each_with_index do |locale,index| %>
|
||||
<span class="tag"><%= category.title_translations[locale] %></span>
|
||||
<% if index < (@site_in_use_locales.count - 1) %>
|
||||
/
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,69 +1,69 @@
|
|||
<% if form_file.new_record? %>
|
||||
<div class="fileupload fileupload-new start-line" data-provides="fileupload">
|
||||
<% else %>
|
||||
<div class="fileupload fileupload-exists start-line" data-provides="fileupload">
|
||||
<% if form_file.file.blank? %>
|
||||
<%= t(:no_file) %>
|
||||
<% else %>
|
||||
<%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<div class="input-prepend input-append">
|
||||
<label>
|
||||
<span class="add-on btn btn-file" title='<%= t(:file_) %>'>
|
||||
<i class="icons-paperclip"></i>
|
||||
<%= f.file_field :file %>
|
||||
</span>
|
||||
<div class="uneditable-input input-medium">
|
||||
<i class="icon-file fileupload-exists"></i>
|
||||
<span class="fileupload-preview"><%= (form_file.new_record? || form_file.file.blank?) ? t(:select_file) : t(:change_file) %></span>
|
||||
</div>
|
||||
</label>
|
||||
<span class="add-on icons-pencil" title='<%= t(:alternative) %>'></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
<span class="add-on icons-pencil" title='<%= t(:description) %>'></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :description_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
</span>
|
||||
<span class="add-on btn-group btn" title="<%= t('archive.show_lang') %>">
|
||||
<i class="icons-earth"></i> <span class="caret"></span>
|
||||
<ul class="dropdown-menu">
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<li>
|
||||
<label class="checkbox">
|
||||
<%= check_box_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", locale, form_file.choose_lang.include?(locale.to_s) %>
|
||||
<%= t(locale.to_s) %>
|
||||
</label>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<%= hidden_field_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", '' %>
|
||||
</span>
|
||||
<% if form_file.new_record? %>
|
||||
<span class="delete_file add-on btn" title="<%= t(:delete_) %>">
|
||||
<a class="icon-trash"></a>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<a class="icon-remove"></a>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% if form_file.new_record? %>
|
||||
<div class="fileupload fileupload-new start-line" data-provides="fileupload">
|
||||
<% else %>
|
||||
<div class="fileupload fileupload-exists start-line" data-provides="fileupload">
|
||||
<% if form_file.file.blank? %>
|
||||
<%= t(:no_file) %>
|
||||
<% else %>
|
||||
<%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<div class="input-prepend input-append">
|
||||
<label>
|
||||
<span class="add-on btn btn-file" title='<%= t(:file_) %>'>
|
||||
<i class="icons-paperclip"></i>
|
||||
<%= f.file_field :file %>
|
||||
</span>
|
||||
<div class="uneditable-input input-medium">
|
||||
<i class="icon-file fileupload-exists"></i>
|
||||
<span class="fileupload-preview"><%= (form_file.new_record? || form_file.file.blank?) ? t(:select_file) : t(:change_file) %></span>
|
||||
</div>
|
||||
</label>
|
||||
<span class="add-on icons-pencil" title='<%= t(:alternative) %>'></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
<span class="add-on icons-pencil" title='<%= t(:description) %>'></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :description_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
</span>
|
||||
<span class="add-on btn-group btn" title="<%= t('archive.show_lang') %>">
|
||||
<i class="icons-earth"></i> <span class="caret"></span>
|
||||
<ul class="dropdown-menu">
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<li>
|
||||
<label class="checkbox">
|
||||
<%= check_box_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", locale, form_file.choose_lang.include?(locale.to_s) %>
|
||||
<%= t(locale.to_s) %>
|
||||
</label>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<%= hidden_field_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", '' %>
|
||||
</span>
|
||||
<% if form_file.new_record? %>
|
||||
<span class="delete_file add-on btn" title="<%= t(:delete_) %>">
|
||||
<a class="icon-trash"></a>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<a class="icon-remove"></a>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,49 +1,49 @@
|
|||
<!-- Images Upload -->
|
||||
<div class="image_group">
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= t(:image) %></label>
|
||||
<div class="controls">
|
||||
<div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if form_image.file.present? %>" data-provides="fileupload">
|
||||
<div class="fileupload-new thumbnail pull-left">
|
||||
<% if form_image.file.file %>
|
||||
<%= image_tag form_image.file %>
|
||||
<% else %>
|
||||
<img src="http://www.placehold.it/50x50/EFEFEF/AAAAAA" />
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="fileupload-preview fileupload-exists thumbnail pull-left"></div>
|
||||
<span class="btn btn-file">
|
||||
<span class="fileupload-new"><%= t(:select_image) %></span>
|
||||
<span class="fileupload-exists"><%= t(:change) %></span>
|
||||
<%= f.file_field :file %>
|
||||
</span>
|
||||
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a>
|
||||
<div class="controls" data-toggle="buttons-checkbox">
|
||||
<label class="checkbox inline btn btn-danger fileupload-remove">
|
||||
<% if form_image.new_record? %>
|
||||
<span class="delete_file delete_image add-on" title="<%= t(:delete_) %>">
|
||||
<%= t(:delete_) %>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
<%= t(:remove) %>
|
||||
</span>
|
||||
<% end %>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :description_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="image_description_<%= locale.to_s %>"><%= t(:description) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, value: (form_image.description_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<!-- Images Upload -->
|
||||
<div class="image_group">
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= t(:image) %></label>
|
||||
<div class="controls">
|
||||
<div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if form_image.file.present? %>" data-provides="fileupload">
|
||||
<div class="fileupload-new thumbnail pull-left">
|
||||
<% if form_image.file.file %>
|
||||
<%= image_tag form_image.file %>
|
||||
<% else %>
|
||||
<img src="http://www.placehold.it/50x50/EFEFEF/AAAAAA" />
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="fileupload-preview fileupload-exists thumbnail pull-left"></div>
|
||||
<span class="btn btn-file">
|
||||
<span class="fileupload-new"><%= t(:select_image) %></span>
|
||||
<span class="fileupload-exists"><%= t(:change) %></span>
|
||||
<%= f.file_field :file %>
|
||||
</span>
|
||||
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a>
|
||||
<div class="controls" data-toggle="buttons-checkbox">
|
||||
<label class="checkbox inline btn btn-danger fileupload-remove">
|
||||
<% if form_image.new_record? %>
|
||||
<span class="delete_file delete_image add-on" title="<%= t(:delete_) %>">
|
||||
<%= t(:delete_) %>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
<%= t(:remove) %>
|
||||
</span>
|
||||
<% end %>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% @site_in_use_locales.each do |locale| %>
|
||||
<%= f.fields_for :description_translations do |f| %>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="image_description_<%= locale.to_s %>"><%= t(:description) + " (#{t(locale.to_s)})" %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field locale, value: (form_image.description_translations[locale.to_s] rescue nil) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
|
@ -1,26 +1,26 @@
|
|||
<div class="input-prepend input-append start-line">
|
||||
<span class="add-on icons-link" title="<%= t(:url) %>"></span>
|
||||
<%= f.text_field :url, class: "input-large", placeholder: t(:url) %>
|
||||
<span class="add-on icons-pencil" title="<%= t(:url_alt) %>"></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
|
||||
<% if form_link.new_record? %>
|
||||
<span class="delete_link add-on btn" title="<%= t(:delete_) %>">
|
||||
<a class="icon-trash"></a>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<a class="icon-remove"></a>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="input-prepend input-append start-line">
|
||||
<span class="add-on icons-link" title="<%= t(:url) %>"></span>
|
||||
<%= f.text_field :url, class: "input-large", placeholder: t(:url) %>
|
||||
<span class="add-on icons-pencil" title="<%= t(:url_alt) %>"></span>
|
||||
<span class="tab-content">
|
||||
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
||||
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
|
||||
<%= f.fields_for :title_translations do |f| %>
|
||||
<%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %>
|
||||
<% end %>
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
|
||||
<% if form_link.new_record? %>
|
||||
<span class="delete_link add-on btn" title="<%= t(:delete_) %>">
|
||||
<a class="icon-trash"></a>
|
||||
</span>
|
||||
<% else %>
|
||||
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
|
||||
<%= f.hidden_field :id %>
|
||||
<a class="icon-remove"></a>
|
||||
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
@ -1,99 +1,99 @@
|
|||
<script>
|
||||
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
|
||||
</script>
|
||||
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<% @table_fields.each do |f| %>
|
||||
<%= tmp = f.to_s.split('.')[-1]; EventNewsCustomTitle::KEYS.include?(tmp) ? Admin::EventNewsHelper.thead(tmp): thead(f) %>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @event_news.each do |b| %>
|
||||
<tr>
|
||||
<td>
|
||||
<%= b.status_for_table %>
|
||||
</td>
|
||||
<td>
|
||||
<%= b.category.title rescue "" %>
|
||||
<% if (b.category.disable rescue false) %>
|
||||
<span class='label'><%= t(:disabled) %></span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<% if b.expired? || (b.category.disable rescue false)%>
|
||||
<%= b.title.to_s.html_safe %>
|
||||
<% else %>
|
||||
<a href="<%= page_for_event_news(b) %>" target="_blank"><%= b.title.to_s.html_safe %></a>
|
||||
<% end %>
|
||||
|
||||
<% if b.expired? %>
|
||||
<span class='label'><%= t(:expired) %></span>
|
||||
<% end %>
|
||||
|
||||
<% if b.reapproval %>
|
||||
<span class='label'><%= t("event_news.reapproval") + " " + t(:pending) %></span>
|
||||
<% end %>
|
||||
<% if b.rejected %>
|
||||
<span class='label'><%= t(:rejected) %> : <%= b.rejection_reason rescue "" %></span>
|
||||
<% end %>
|
||||
<% if !b.approved? && !b.rejected %>
|
||||
<span class='label'><%= t(:pending) %></span>
|
||||
<% end %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills">
|
||||
<li><a href="#" class="detail-row" onclick="$('#<%= "#{b.id.to_s}-detail" %>').slideToggle(300); return false;"><%= t(:detail) %></a></li>
|
||||
<% if can_edit_or_delete?(b) %>
|
||||
<li><a href="/admin/event_news/<%=b.id.to_s%>/edit"><%= t(:edit) %></a></li>
|
||||
<li><a href="#" class="delete text-error" rel="/admin/event_news/<%=b.id.to_s%>"><%= t(:delete_) %></a></li>
|
||||
<% end %>
|
||||
<% if ((!b.approved && !b.rejected && !b.reapproval) || (b.rejected && b.reapproval)) && user_can_approve?(b) %>
|
||||
<li><a href="<%= page_for_event_news(b) %>" class="approval_button" data-id="<%= b.id.to_s %>" ><%= t("event_news.approval_waiting") %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td><%= format_value b.event_date %></td>
|
||||
<td><%= format_value b.postdate %></td>
|
||||
<td class="<%= b.expired? ? "expired" : "" %>"><%= format_value b.deadline %></td>
|
||||
<td><%= b.update_user.user_name rescue ""%></td>
|
||||
</tr>
|
||||
<tr class="footable-row-detail">
|
||||
<td class="footable-cell-detail" colspan="6">
|
||||
<div id="<%= "#{b.id.to_s}-detail" %>" class="footable-row-detail-inner" style="display: none;">
|
||||
<div>
|
||||
<strong><%= t(:view_count) %></strong> :
|
||||
<span class="label label-info"><%= b.view_count %></span>
|
||||
</div>
|
||||
<div>
|
||||
<strong><%= t(:tags) %></strong> :
|
||||
<% b.tags.each do |tag| %>
|
||||
<span class="label label-warning"><%= tag.name %></span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div>
|
||||
<strong><%= t("event_news.email_to") %></strong> :
|
||||
<% b.email_members.each do |member| %>
|
||||
<span class="label"><%= member.name %></span>
|
||||
<% end %>
|
||||
<% unless b.other_mailaddress.nil? %>
|
||||
<% b.other_mailaddress.split(',').each do |mailaddress| %>
|
||||
<span class="label"><%= mailaddress %></span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%=
|
||||
content_tag :div, class: "bottomnav clearfix" do
|
||||
content_tag(:div, paginate(@event_news), class: "pagination pagination-centered") +
|
||||
content_tag(:div, link_to(t(:new_),new_admin_event_news_path, :class=>"btn btn-primary"), class: "pull-right")
|
||||
end
|
||||
%>
|
||||
<script>
|
||||
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
|
||||
</script>
|
||||
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<% @table_fields.each do |f| %>
|
||||
<%= tmp = f.to_s.split('.')[-1]; EventNewsCustomTitle::KEYS.include?(tmp) ? Admin::EventNewsHelper.thead(tmp): thead(f) %>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @event_news.each do |b| %>
|
||||
<tr>
|
||||
<td>
|
||||
<%= b.status_for_table %>
|
||||
</td>
|
||||
<td>
|
||||
<%= b.category.title rescue "" %>
|
||||
<% if (b.category.disable rescue false) %>
|
||||
<span class='label'><%= t(:disabled) %></span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<% if b.expired? || (b.category.disable rescue false)%>
|
||||
<%= b.title.to_s.html_safe %>
|
||||
<% else %>
|
||||
<a href="<%= page_for_event_news(b) %>" target="_blank"><%= b.title.to_s.html_safe %></a>
|
||||
<% end %>
|
||||
|
||||
<% if b.expired? %>
|
||||
<span class='label'><%= t(:expired) %></span>
|
||||
<% end %>
|
||||
|
||||
<% if b.reapproval %>
|
||||
<span class='label'><%= t("event_news.reapproval") + " " + t(:pending) %></span>
|
||||
<% end %>
|
||||
<% if b.rejected %>
|
||||
<span class='label'><%= t(:rejected) %> : <%= b.rejection_reason rescue "" %></span>
|
||||
<% end %>
|
||||
<% if !b.approved? && !b.rejected %>
|
||||
<span class='label'><%= t(:pending) %></span>
|
||||
<% end %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills">
|
||||
<li><a href="#" class="detail-row" onclick="$('#<%= "#{b.id.to_s}-detail" %>').slideToggle(300); return false;"><%= t(:detail) %></a></li>
|
||||
<% if can_edit_or_delete?(b) %>
|
||||
<li><a href="/admin/event_news/<%=b.id.to_s%>/edit"><%= t(:edit) %></a></li>
|
||||
<li><a href="#" class="delete text-error" rel="/admin/event_news/<%=b.id.to_s%>"><%= t(:delete_) %></a></li>
|
||||
<% end %>
|
||||
<% if ((!b.approved && !b.rejected && !b.reapproval) || (b.rejected && b.reapproval)) && user_can_approve?(b) %>
|
||||
<li><a href="<%= page_for_event_news(b) %>" class="approval_button" data-id="<%= b.id.to_s %>" ><%= t("event_news.approval_waiting") %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td><%= format_value b.event_date %></td>
|
||||
<td><%= format_value b.postdate %></td>
|
||||
<td class="<%= b.expired? ? "expired" : "" %>"><%= format_value b.deadline %></td>
|
||||
<td><%= b.update_user.user_name rescue ""%></td>
|
||||
</tr>
|
||||
<tr class="footable-row-detail">
|
||||
<td class="footable-cell-detail" colspan="6">
|
||||
<div id="<%= "#{b.id.to_s}-detail" %>" class="footable-row-detail-inner" style="display: none;">
|
||||
<div>
|
||||
<strong><%= t(:view_count) %></strong> :
|
||||
<span class="label label-info"><%= b.view_count %></span>
|
||||
</div>
|
||||
<div>
|
||||
<strong><%= t(:tags) %></strong> :
|
||||
<% b.tags.each do |tag| %>
|
||||
<span class="label label-warning"><%= tag.name %></span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div>
|
||||
<strong><%= t("event_news.email_to") %></strong> :
|
||||
<% b.email_members.each do |member| %>
|
||||
<span class="label"><%= member.name %></span>
|
||||
<% end %>
|
||||
<% unless b.other_mailaddress.nil? %>
|
||||
<% b.other_mailaddress.split(',').each do |mailaddress| %>
|
||||
<span class="label"><%= mailaddress %></span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%=
|
||||
content_tag :div, class: "bottomnav clearfix" do
|
||||
content_tag(:div, paginate(@event_news), class: "pagination pagination-centered") +
|
||||
content_tag(:div, link_to(t(:new_),new_admin_event_news_path, :class=>"btn btn-primary"), class: "pull-right")
|
||||
end
|
||||
%>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
<style type="text/css">
|
||||
.tab-panel .tab-content{
|
||||
display: none;
|
||||
}
|
||||
.tab-panel .tab-content.active{
|
||||
display: block;
|
||||
}
|
||||
.tab-panel .tab-content,.tab-panel .btn-group{
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
<%= form_tag({action: 'update_custom_title',method: 'post'}, {class: "form-horizontal main-forms previewable"}) do %>
|
||||
<% Admin::EventNewsHelper::FormHelper.set_input_name("event_news_custom_title") %>
|
||||
<% @event_news_custom_titles.each_with_index do |v,i| %>
|
||||
<div class="control-group">
|
||||
<%= label_tag :title , v.default_title, :class=>"control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= hidden_field_tag "event_news_custom_title[#{i}][id]", v.id %>
|
||||
<%= Admin::EventNewsHelper::FormHelper.multiple_lang_tag(i,'text_field','title_translations',v.title_translations,{placeholder: v.default_title}) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="form-actions">
|
||||
<%= submit_tag t(:submit),class: 'btn btn-primary' %>
|
||||
</div>
|
||||
<style type="text/css">
|
||||
.tab-panel .tab-content{
|
||||
display: none;
|
||||
}
|
||||
.tab-panel .tab-content.active{
|
||||
display: block;
|
||||
}
|
||||
.tab-panel .tab-content,.tab-panel .btn-group{
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
<%= form_tag({action: 'update_custom_title',method: 'post'}, {class: "form-horizontal main-forms previewable"}) do %>
|
||||
<% Admin::EventNewsHelper::FormHelper.set_input_name("event_news_custom_title") %>
|
||||
<% @event_news_custom_titles.each_with_index do |v,i| %>
|
||||
<div class="control-group">
|
||||
<%= label_tag :title , v.default_title, :class=>"control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= hidden_field_tag "event_news_custom_title[#{i}][id]", v.id %>
|
||||
<%= Admin::EventNewsHelper::FormHelper.multiple_lang_tag(i,'text_field','title_translations',v.title_translations,{placeholder: v.default_title}) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="form-actions">
|
||||
<%= submit_tag t(:submit),class: 'btn btn-primary' %>
|
||||
</div>
|
||||
<% end %>
|
|
@ -1,5 +1,5 @@
|
|||
<%= form_for @event_news, url: admin_event_news_path(@event_news), html: {class: "form-horizontal main-forms previewable"} do |f| %>
|
||||
<fieldset>
|
||||
<%= render :partial => 'form', locals: {f: f} %>
|
||||
</fieldset>
|
||||
<%= form_for @event_news, url: admin_event_news_path(@event_news), html: {class: "form-horizontal main-forms previewable"} do |f| %>
|
||||
<fieldset>
|
||||
<%= render :partial => 'form', locals: {f: f} %>
|
||||
</fieldset>
|
||||
<% end %>
|
|
@ -1,167 +1,167 @@
|
|||
# encoding: utf-8
|
||||
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.add_worksheet(name: "EventNewsModule") do |sheet|
|
||||
|
||||
heading = sheet.styles.add_style(:b => true, :locked => true)
|
||||
example = sheet.styles.add_style(:i => true)
|
||||
row = []
|
||||
row1 = []
|
||||
row2 = []
|
||||
|
||||
row << t("category")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
@module_app.categories.asc(:created_at).each_with_index do |cat,i|
|
||||
t = t + "#{i}" + " -> " + cat.title + ", "
|
||||
end
|
||||
if @module_app.categories.count > 0
|
||||
t = t + " Example : 0"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("tags")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
@module_app.tags.asc(:created_at).each_with_index do |tag,i|
|
||||
t = t + "#{i}" + " -> " + tag.name + ", "
|
||||
end
|
||||
if @module_app.tags.count > 0
|
||||
t = t + " Example : 0,1,2"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("event_news.event_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
|
||||
row << t("event_news.start_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
|
||||
|
||||
row << t("event_news.end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
|
||||
|
||||
row << t("top")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hot")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hide")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true "
|
||||
|
||||
row << t("image")
|
||||
row1 << "url"
|
||||
row2 << "http://www.example.com/images/example.png"
|
||||
|
||||
row << t("image") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("image") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("title") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("title") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.speaker") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.speaker") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.host") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.host") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("subtitle") + " - " + t("en")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
row << t("subtitle") + " - " + t("zh_tw")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
|
||||
row << t("content") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("content") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.notes") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("event_news.notes") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("link")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
|
||||
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
|
||||
row << t("file_")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
|
||||
row << t("file_") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("file_") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
|
||||
row << t("event_news.place") + "-" + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.place") + "-" + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.event_end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
row << t("event_news.carousel_image") + "-" + t("image")
|
||||
row1 << "url"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
sheet.add_row row, :style => heading
|
||||
sheet.add_row row1
|
||||
sheet.add_row row2, :style => example
|
||||
|
||||
# encoding: utf-8
|
||||
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.add_worksheet(name: "EventNewsModule") do |sheet|
|
||||
|
||||
heading = sheet.styles.add_style(:b => true, :locked => true)
|
||||
example = sheet.styles.add_style(:i => true)
|
||||
row = []
|
||||
row1 = []
|
||||
row2 = []
|
||||
|
||||
row << t("category")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
@module_app.categories.asc(:created_at).each_with_index do |cat,i|
|
||||
t = t + "#{i}" + " -> " + cat.title + ", "
|
||||
end
|
||||
if @module_app.categories.count > 0
|
||||
t = t + " Example : 0"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("tags")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
@module_app.tags.asc(:created_at).each_with_index do |tag,i|
|
||||
t = t + "#{i}" + " -> " + tag.name + ", "
|
||||
end
|
||||
if @module_app.tags.count > 0
|
||||
t = t + " Example : 0,1,2"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("event_news.event_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
|
||||
row << t("event_news.start_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
|
||||
|
||||
row << t("event_news.end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
|
||||
|
||||
row << t("top")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hot")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hide")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true "
|
||||
|
||||
row << t("image")
|
||||
row1 << "url"
|
||||
row2 << "http://www.example.com/images/example.png"
|
||||
|
||||
row << t("image") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("image") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("title") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("title") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.speaker") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.speaker") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.host") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.host") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("subtitle") + " - " + t("en")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
row << t("subtitle") + " - " + t("zh_tw")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
|
||||
row << t("content") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("content") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.notes") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("event_news.notes") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("link")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
|
||||
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
|
||||
row << t("file_")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
|
||||
row << t("file_") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("file_") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
|
||||
row << t("event_news.place") + "-" + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.place") + "-" + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.event_end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
row << t("event_news.carousel_image") + "-" + t("image")
|
||||
row1 << "url"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
sheet.add_row row, :style => heading
|
||||
sheet.add_row row1
|
||||
sheet.add_row row2, :style => example
|
||||
|
||||
end
|
|
@ -1,239 +1,239 @@
|
|||
# encoding: utf-8
|
||||
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.add_worksheet(name: "EventNewsModule") do |sheet|
|
||||
|
||||
heading = sheet.styles.add_style(:b => true, :locked => true)
|
||||
example = sheet.styles.add_style(:i => true)
|
||||
row = []
|
||||
row1 = []
|
||||
row2 = []
|
||||
|
||||
row << t("category")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
categories = @module_app.categories.asc(:created_at)
|
||||
categories.each_with_index do |cat,i|
|
||||
t = t + "#{i}" + " -> " + cat.title + ", "
|
||||
end
|
||||
if categories.count > 0
|
||||
t = t + " Example : 0"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("tags")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
tags = @module_app.tags.asc(:created_at)
|
||||
tags.each_with_index do |tag,i|
|
||||
t = t + "#{i}" + " -> " + tag.name + ", "
|
||||
end
|
||||
if tags.count > 0
|
||||
t = t + " Example : 0,1,2"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("event_news.event_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
|
||||
row << t("event_news.start_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
|
||||
|
||||
row << t("event_news.end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
|
||||
|
||||
row << t("top")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hot")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hide")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true "
|
||||
|
||||
row << t("image")
|
||||
row1 << "url"
|
||||
row2 << "http://www.example.com/images/example.png"
|
||||
|
||||
row << t("image") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("image") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("title") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("title") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.speaker") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.speaker") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.host") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.host") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("subtitle") + " - " + t("en")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
row << t("subtitle") + " - " + t("zh_tw")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
|
||||
row << t("content") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("content") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.notes") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("event_news.notes") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("link")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
|
||||
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
|
||||
row << t("file_")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
|
||||
row << t("file_") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("file_") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
|
||||
row << t("event_news.place") + "-" + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.place") + "-" + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.event_end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
row << t("event_news.carousel_image") + "-" + t("image")
|
||||
row1 << "url"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
sheet.add_row row, :style => heading
|
||||
sheet.add_row row1
|
||||
sheet.add_row row2, :style => example
|
||||
|
||||
@event_news.each do |anns|
|
||||
row = []
|
||||
row << categories.to_a.index(anns.category)
|
||||
t = []
|
||||
anns.tags.each do |tag|
|
||||
t << tags.to_a.index(tag)
|
||||
end
|
||||
row << t.join(",")
|
||||
row << (anns.event_date.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.postdate.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.deadline.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.is_top? ? 1 : 0)
|
||||
row << (anns.is_hot? ? 1 : 0)
|
||||
row << (anns.is_hidden? ? 1 : 0)
|
||||
row << ("http://" + request.host_with_port + anns.image.url rescue "")
|
||||
row << anns.image_description_translations["en"]
|
||||
row << anns.image_description_translations["zh_tw"]
|
||||
row << anns.title_translations["en"]
|
||||
row << anns.title_translations["zh_tw"]
|
||||
row << anns.speaker_translations["en"]
|
||||
row << anns.speaker_translations["zh_tw"]
|
||||
row << anns.host_translations["en"]
|
||||
row << anns.host_translations["zh_tw"]
|
||||
row << anns.subtitle_translations["en"]
|
||||
row << anns.subtitle_translations["zh_tw"]
|
||||
row << anns.text_translations["en"]
|
||||
row << anns.text_translations["zh_tw"]
|
||||
row << anns.notes_translations["en"]
|
||||
row << anns.notes_translations["zh_tw"]
|
||||
|
||||
links = anns.event_news_links.asc(:created_at)
|
||||
t = links.collect{|l|l.url}
|
||||
row << t.join(";")
|
||||
t = links.collect{|l|l.title_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = links.collect{|l|l.title_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
|
||||
files = anns.event_news_files.asc(:created_at)
|
||||
t = files.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
|
||||
t.delete(nil)
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.description_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.description_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.title_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.title_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
row << anns.place_translations["en"]
|
||||
row << anns.place_translations["zh_tw"]
|
||||
|
||||
row << (anns.event_end_date.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
|
||||
carousel_images = anns.event_carousel_images.asc(:created_at)
|
||||
t = carousel_images.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
|
||||
t.delete(nil)
|
||||
row << t.join(";")
|
||||
t = carousel_images.collect{|l|l.description_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = carousel_images.collect{|l|l.description_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
sheet.add_row row
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# encoding: utf-8
|
||||
|
||||
wb = xlsx_package.workbook
|
||||
|
||||
wb.add_worksheet(name: "EventNewsModule") do |sheet|
|
||||
|
||||
heading = sheet.styles.add_style(:b => true, :locked => true)
|
||||
example = sheet.styles.add_style(:i => true)
|
||||
row = []
|
||||
row1 = []
|
||||
row2 = []
|
||||
|
||||
row << t("category")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
categories = @module_app.categories.asc(:created_at)
|
||||
categories.each_with_index do |cat,i|
|
||||
t = t + "#{i}" + " -> " + cat.title + ", "
|
||||
end
|
||||
if categories.count > 0
|
||||
t = t + " Example : 0"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("tags")
|
||||
row1 << "select"
|
||||
t = ""
|
||||
tags = @module_app.tags.asc(:created_at)
|
||||
tags.each_with_index do |tag,i|
|
||||
t = t + "#{i}" + " -> " + tag.name + ", "
|
||||
end
|
||||
if tags.count > 0
|
||||
t = t + " Example : 0,1,2"
|
||||
else
|
||||
t = "Leave this field blank"
|
||||
end
|
||||
row2 << t
|
||||
|
||||
row << t("event_news.event_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
|
||||
row << t("event_news.start_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
|
||||
|
||||
row << t("event_news.end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
|
||||
|
||||
row << t("top")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hot")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true"
|
||||
|
||||
row << t("hide")
|
||||
row1 << "boolean"
|
||||
row2 << "0 for false, 1 for true "
|
||||
|
||||
row << t("image")
|
||||
row1 << "url"
|
||||
row2 << "http://www.example.com/images/example.png"
|
||||
|
||||
row << t("image") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("image") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("title") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("title") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.speaker") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.speaker") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.host") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.host") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
|
||||
row << t("subtitle") + " - " + t("en")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
row << t("subtitle") + " - " + t("zh_tw")
|
||||
row1 << "textarea"
|
||||
row2 << ""
|
||||
|
||||
row << t("content") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("content") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("event_news.notes") + " - " + t("en")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
row << t("event_news.notes") + " - " + t("zh_tw")
|
||||
row1 << "editor"
|
||||
row2 << ""
|
||||
|
||||
row << t("link")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
|
||||
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
|
||||
|
||||
row << t("file_")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
|
||||
row << t("file_") + " " + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("file_") + " " + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
|
||||
|
||||
row << t("event_news.place") + "-" + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.place") + "-" + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << ""
|
||||
row << t("event_news.event_end_date")
|
||||
row1 << "datetime"
|
||||
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
|
||||
row << t("event_news.carousel_image") + "-" + t("image")
|
||||
row1 << "url"
|
||||
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
|
||||
row1 << "textfield"
|
||||
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
|
||||
sheet.add_row row, :style => heading
|
||||
sheet.add_row row1
|
||||
sheet.add_row row2, :style => example
|
||||
|
||||
@event_news.each do |anns|
|
||||
row = []
|
||||
row << categories.to_a.index(anns.category)
|
||||
t = []
|
||||
anns.tags.each do |tag|
|
||||
t << tags.to_a.index(tag)
|
||||
end
|
||||
row << t.join(",")
|
||||
row << (anns.event_date.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.postdate.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.deadline.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
row << (anns.is_top? ? 1 : 0)
|
||||
row << (anns.is_hot? ? 1 : 0)
|
||||
row << (anns.is_hidden? ? 1 : 0)
|
||||
row << ("http://" + request.host_with_port + anns.image.url rescue "")
|
||||
row << anns.image_description_translations["en"]
|
||||
row << anns.image_description_translations["zh_tw"]
|
||||
row << anns.title_translations["en"]
|
||||
row << anns.title_translations["zh_tw"]
|
||||
row << anns.speaker_translations["en"]
|
||||
row << anns.speaker_translations["zh_tw"]
|
||||
row << anns.host_translations["en"]
|
||||
row << anns.host_translations["zh_tw"]
|
||||
row << anns.subtitle_translations["en"]
|
||||
row << anns.subtitle_translations["zh_tw"]
|
||||
row << anns.text_translations["en"]
|
||||
row << anns.text_translations["zh_tw"]
|
||||
row << anns.notes_translations["en"]
|
||||
row << anns.notes_translations["zh_tw"]
|
||||
|
||||
links = anns.event_news_links.asc(:created_at)
|
||||
t = links.collect{|l|l.url}
|
||||
row << t.join(";")
|
||||
t = links.collect{|l|l.title_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = links.collect{|l|l.title_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
|
||||
files = anns.event_news_files.asc(:created_at)
|
||||
t = files.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
|
||||
t.delete(nil)
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.description_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.description_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.title_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = files.collect{|l|l.title_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
row << anns.place_translations["en"]
|
||||
row << anns.place_translations["zh_tw"]
|
||||
|
||||
row << (anns.event_end_date.strftime("%Y/%m/%d %H:%M") rescue "")
|
||||
|
||||
carousel_images = anns.event_carousel_images.asc(:created_at)
|
||||
t = carousel_images.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
|
||||
t.delete(nil)
|
||||
row << t.join(";")
|
||||
t = carousel_images.collect{|l|l.description_translations["en"]}
|
||||
row << t.join(";")
|
||||
t = carousel_images.collect{|l|l.description_translations["zh_tw"]}
|
||||
row << t.join(";")
|
||||
sheet.add_row row
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
|
@ -1,124 +1,124 @@
|
|||
<% content_for :page_specific_css do %>
|
||||
<%= stylesheet_link_tag("admin/tags") %>
|
||||
<% end %>
|
||||
<% content_for :page_specific_javascript do %>
|
||||
<%= javascript_include_tag "validator" %>
|
||||
<% end %>
|
||||
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<% @table_feed_fields.each do |f| %>
|
||||
<%= thead(f) %>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<%= render :partial => "feed", :collection => @feeds %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% if current_user.is_admin? or current_user.is_manager?(@module_app) %>
|
||||
|
||||
<div class="bottomnav clearfix" style="left: 81px;">
|
||||
<div class="action pull-right">
|
||||
<a class="btn btn-primary new-feed" href="#">
|
||||
<i class="icon-plus"></i> <%= t(:new_) %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pagination pagination-centered"></div>
|
||||
</div>
|
||||
|
||||
<div id="newFeedModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="newFeedModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="newFeedModalLabel">Create New Feed</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<%#= render :partial => "feed_form" %>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" id="save_new_feed">Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(".new-feed").on("click",function(){
|
||||
var modal = $("#newFeedModal");
|
||||
modal.find("#newFeedModalLabel").text("Create New Feed");
|
||||
modal.modal("show");
|
||||
openFeedModal("new",null);
|
||||
})
|
||||
|
||||
var bindEditButtons = function(){
|
||||
$(".edit-feed").on("click",function(){
|
||||
var modal = $("#newFeedModal");
|
||||
modal.find("#newFeedModalLabel").text("Edit Feed");
|
||||
modal.modal("show");
|
||||
openFeedModal("edit",$(this).data("feed-id"));
|
||||
return false;
|
||||
})
|
||||
$(".delete-feed").on("click",function(){
|
||||
if(confirm("Are you sure?")){
|
||||
var el = $(this);
|
||||
$.ajax({
|
||||
url : el.attr("href"),
|
||||
type : "delete",
|
||||
dataType : "html"
|
||||
}).done(function(data){
|
||||
$("table.main-list tbody").html(data);
|
||||
bindEditButtons();
|
||||
})
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
bindEditButtons();
|
||||
var openFeedModal = function(type,feed_id){
|
||||
$.ajax({
|
||||
url : "/admin/event_news/feedform",
|
||||
type : "get",
|
||||
data : {"type" : type, "id" : feed_id},
|
||||
dataType : "html"
|
||||
}).done(function(form){
|
||||
$("#newFeedModal .modal-body").html(form);
|
||||
bindHandlers();
|
||||
})
|
||||
}
|
||||
|
||||
var bindHandlers = function(){
|
||||
$(".tag-checkbox").on("click",function(){
|
||||
if($(this).is(":checked")){
|
||||
$(this).parent().addClass("active");
|
||||
}else{
|
||||
$(this).parent().removeClass("active");
|
||||
}
|
||||
})
|
||||
|
||||
var fv = new FormValidator($("#newFeedModal form"));
|
||||
fv.form.on("submit",function(){
|
||||
$.ajax({
|
||||
url : fv.form.attr("action"),
|
||||
data : fv.form.serializeArray(),
|
||||
type : "post",
|
||||
dataType : "html"
|
||||
}).done(function(data){
|
||||
$("table.main-list tbody").html(data);
|
||||
bindEditButtons();
|
||||
$("#newFeedModal").modal("hide");
|
||||
fv.form.resetForm();
|
||||
fv.form.find("ul.tags-groups p.active").removeClass("active");
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$("#save_new_feed").on("click",function(){
|
||||
if(fv.isFormValidated()){
|
||||
fv.form.submit();
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<% content_for :page_specific_css do %>
|
||||
<%= stylesheet_link_tag("admin/tags") %>
|
||||
<% end %>
|
||||
<% content_for :page_specific_javascript do %>
|
||||
<%= javascript_include_tag "validator" %>
|
||||
<% end %>
|
||||
|
||||
<table class="table main-list">
|
||||
<thead>
|
||||
<tr class="sort-header">
|
||||
<% @table_feed_fields.each do |f| %>
|
||||
<%= thead(f) %>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<%= render :partial => "feed", :collection => @feeds %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% if current_user.is_admin? or current_user.is_manager?(@module_app) %>
|
||||
|
||||
<div class="bottomnav clearfix" style="left: 81px;">
|
||||
<div class="action pull-right">
|
||||
<a class="btn btn-primary new-feed" href="#">
|
||||
<i class="icon-plus"></i> <%= t(:new_) %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pagination pagination-centered"></div>
|
||||
</div>
|
||||
|
||||
<div id="newFeedModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="newFeedModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="newFeedModalLabel">Create New Feed</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<%#= render :partial => "feed_form" %>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" id="save_new_feed">Save changes</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(".new-feed").on("click",function(){
|
||||
var modal = $("#newFeedModal");
|
||||
modal.find("#newFeedModalLabel").text("Create New Feed");
|
||||
modal.modal("show");
|
||||
openFeedModal("new",null);
|
||||
})
|
||||
|
||||
var bindEditButtons = function(){
|
||||
$(".edit-feed").on("click",function(){
|
||||
var modal = $("#newFeedModal");
|
||||
modal.find("#newFeedModalLabel").text("Edit Feed");
|
||||
modal.modal("show");
|
||||
openFeedModal("edit",$(this).data("feed-id"));
|
||||
return false;
|
||||
})
|
||||
$(".delete-feed").on("click",function(){
|
||||
if(confirm("Are you sure?")){
|
||||
var el = $(this);
|
||||
$.ajax({
|
||||
url : el.attr("href"),
|
||||
type : "delete",
|
||||
dataType : "html"
|
||||
}).done(function(data){
|
||||
$("table.main-list tbody").html(data);
|
||||
bindEditButtons();
|
||||
})
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
bindEditButtons();
|
||||
var openFeedModal = function(type,feed_id){
|
||||
$.ajax({
|
||||
url : "/admin/event_news/feedform",
|
||||
type : "get",
|
||||
data : {"type" : type, "id" : feed_id},
|
||||
dataType : "html"
|
||||
}).done(function(form){
|
||||
$("#newFeedModal .modal-body").html(form);
|
||||
bindHandlers();
|
||||
})
|
||||
}
|
||||
|
||||
var bindHandlers = function(){
|
||||
$(".tag-checkbox").on("click",function(){
|
||||
if($(this).is(":checked")){
|
||||
$(this).parent().addClass("active");
|
||||
}else{
|
||||
$(this).parent().removeClass("active");
|
||||
}
|
||||
})
|
||||
|
||||
var fv = new FormValidator($("#newFeedModal form"));
|
||||
fv.form.on("submit",function(){
|
||||
$.ajax({
|
||||
url : fv.form.attr("action"),
|
||||
data : fv.form.serializeArray(),
|
||||
type : "post",
|
||||
dataType : "html"
|
||||
}).done(function(data){
|
||||
$("table.main-list tbody").html(data);
|
||||
bindEditButtons();
|
||||
$("#newFeedModal").modal("hide");
|
||||
fv.form.resetForm();
|
||||
fv.form.find("ul.tags-groups p.active").removeClass("active");
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$("#save_new_feed").on("click",function(){
|
||||
if(fv.isFormValidated()){
|
||||
fv.form.submit();
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</br>
|
|
@ -1,87 +1,87 @@
|
|||
<% content_for :page_specific_javascript do %>
|
||||
<script type="text/javascript" src="/assets/validator.js"></script>
|
||||
<% end %>
|
||||
<form action="<%= admin_event_news_importanns_path %>" method="post" class="form-horizontal main-forms" id="import-anns-xls" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.export_to_excel") %></h3>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="<%= admin_event_news_export_excel_path(:format => "xlsx") %>"><%= t("event_news.export_all_anns") %></a>
|
||||
</div>
|
||||
</div>
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.import_from_excel") %></h3>
|
||||
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<% if @module_app.categories.count > 0 %>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="<%= admin_event_news_excel_format_path(:format => "xlsx") %>"><%= t("event_news.download_example_sheet_here") %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label for="import-anns" class="control-label muted"><%= t("upload") %></label>
|
||||
<div class="controls">
|
||||
<input type="file" id="import-anns" name="import_file" data-fv-validation="required;mustbexls;" data-fv-messages="Cannot be empty; Must be an excel file.;" />
|
||||
<span class="help-block"><%= t("event_news.please_create_tags_cats") %></span>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<h4><%= t("event_news.create_atleast_one_cat") %></h4>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if @module_app.categories.count > 0 %>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
|
||||
</div>
|
||||
<% end %>
|
||||
</form>
|
||||
|
||||
|
||||
<!-- import from wp xml -->
|
||||
<form action="<%= admin_event_news_import_from_wp_path %>" method="post" class="form-horizontal main-forms" id="import-anns-wp-xml" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.import_from_wp_xml") %></h3>
|
||||
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<label for="import-anns-wp-xml" class="control-label muted"><%= t("upload") %></label>
|
||||
<div class="controls">
|
||||
<input type="file" id="import-anns-wp-xml" name="import_xml" data-fv-validation="required;mustbexml;" data-fv-messages="Cannot be empty; Must be an XML file.;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
|
||||
</div>
|
||||
</form>
|
||||
<!-- <form action="<%#= admin_event_news_import_from_xml_path %>" method="post" class="form-horizontal main-forms" id="import-anns-xml" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;">Import from XML</h3>
|
||||
<%#= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<label for="import-anns" class="control-label muted">URL :</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="import-anns" name="import_xml" data-fv-validation="required;url;" data-fv-messages="Cannot be empty; Must be an URL.;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="Import" class="btn btn-primary">
|
||||
</div>
|
||||
</form> -->
|
||||
<script type="text/javascript">
|
||||
var form = new FormValidator($("#import-anns-xls"));
|
||||
form.validate_functions.mustbexls = function(val){
|
||||
var t = val.split("."),
|
||||
ext = t[t.length - 1];
|
||||
return (ext == "xls" || ext == "xlsx")
|
||||
}
|
||||
var form = new FormValidator($("#import-anns-wp-xml"));
|
||||
form.validate_functions.mustbexml = function(val){
|
||||
var t = val.split("."),
|
||||
ext = t[t.length - 1];
|
||||
return (ext == "xml")
|
||||
}
|
||||
<% content_for :page_specific_javascript do %>
|
||||
<script type="text/javascript" src="/assets/validator.js"></script>
|
||||
<% end %>
|
||||
<form action="<%= admin_event_news_importanns_path %>" method="post" class="form-horizontal main-forms" id="import-anns-xls" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.export_to_excel") %></h3>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="<%= admin_event_news_export_excel_path(:format => "xlsx") %>"><%= t("event_news.export_all_anns") %></a>
|
||||
</div>
|
||||
</div>
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.import_from_excel") %></h3>
|
||||
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<% if @module_app.categories.count > 0 %>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="<%= admin_event_news_excel_format_path(:format => "xlsx") %>"><%= t("event_news.download_example_sheet_here") %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label for="import-anns" class="control-label muted"><%= t("upload") %></label>
|
||||
<div class="controls">
|
||||
<input type="file" id="import-anns" name="import_file" data-fv-validation="required;mustbexls;" data-fv-messages="Cannot be empty; Must be an excel file.;" />
|
||||
<span class="help-block"><%= t("event_news.please_create_tags_cats") %></span>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<h4><%= t("event_news.create_atleast_one_cat") %></h4>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if @module_app.categories.count > 0 %>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
|
||||
</div>
|
||||
<% end %>
|
||||
</form>
|
||||
|
||||
|
||||
<!-- import from wp xml -->
|
||||
<form action="<%= admin_event_news_import_from_wp_path %>" method="post" class="form-horizontal main-forms" id="import-anns-wp-xml" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;"><%= t("event_news.import_from_wp_xml") %></h3>
|
||||
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<label for="import-anns-wp-xml" class="control-label muted"><%= t("upload") %></label>
|
||||
<div class="controls">
|
||||
<input type="file" id="import-anns-wp-xml" name="import_xml" data-fv-validation="required;mustbexml;" data-fv-messages="Cannot be empty; Must be an XML file.;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
|
||||
</div>
|
||||
</form>
|
||||
<!-- <form action="<%#= admin_event_news_import_from_xml_path %>" method="post" class="form-horizontal main-forms" id="import-anns-xml" enctype="multipart/form-data">
|
||||
<h3 style="padding-left: 30px;">Import from XML</h3>
|
||||
<%#= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<label for="import-anns" class="control-label muted">URL :</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="import-anns" name="import_xml" data-fv-validation="required;url;" data-fv-messages="Cannot be empty; Must be an URL.;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<input type="submit" value="Import" class="btn btn-primary">
|
||||
</div>
|
||||
</form> -->
|
||||
<script type="text/javascript">
|
||||
var form = new FormValidator($("#import-anns-xls"));
|
||||
form.validate_functions.mustbexls = function(val){
|
||||
var t = val.split("."),
|
||||
ext = t[t.length - 1];
|
||||
return (ext == "xls" || ext == "xlsx")
|
||||
}
|
||||
var form = new FormValidator($("#import-anns-wp-xml"));
|
||||
form.validate_functions.mustbexml = function(val){
|
||||
var t = val.split("."),
|
||||
ext = t[t.length - 1];
|
||||
return (ext == "xml")
|
||||
}
|
||||
</script>
|
|
@ -1,34 +1,34 @@
|
|||
<%= render_filter @filter_fields, "index_table" %>
|
||||
<span id="index_table">
|
||||
<%= render 'index'%>
|
||||
</span>
|
||||
|
||||
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
|
||||
|
||||
<% if user_can_approve? %>
|
||||
<%= render :partial=> "approval_modal" %>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
var modal = $("#approvalModal");
|
||||
$(document).on("click", ".approval_button",function(){
|
||||
var url = $(this).attr("href");
|
||||
if(window.location.protocol === "https:"){
|
||||
url = url.replace("http:","https:");
|
||||
}
|
||||
modal.find("iframe").attr("src", url);
|
||||
modal.find("#object_id").val($(this).data("id"));
|
||||
modal.modal("show");
|
||||
return false;
|
||||
})
|
||||
|
||||
var params = getUrlVars();
|
||||
console.log(params["url"])
|
||||
if(typeof params["url"] != "undefined"){
|
||||
modal.find("iframe").attr("src", params["url"]);
|
||||
modal.find("#object_id").val(params["id"]);
|
||||
modal.modal("show");
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<%= render_filter @filter_fields, "index_table" %>
|
||||
<span id="index_table">
|
||||
<%= render 'index'%>
|
||||
</span>
|
||||
|
||||
<%= render 'layouts/delete_modal', delete_options: @delete_options %>
|
||||
|
||||
<% if user_can_approve? %>
|
||||
<%= render :partial=> "approval_modal" %>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
var modal = $("#approvalModal");
|
||||
$(document).on("click", ".approval_button",function(){
|
||||
var url = $(this).attr("href");
|
||||
if(window.location.protocol === "https:"){
|
||||
url = url.replace("http:","https:");
|
||||
}
|
||||
modal.find("iframe").attr("src", url);
|
||||
modal.find("#object_id").val($(this).data("id"));
|
||||
modal.modal("show");
|
||||
return false;
|
||||
})
|
||||
|
||||
var params = getUrlVars();
|
||||
console.log(params["url"])
|
||||
if(typeof params["url"] != "undefined"){
|
||||
modal.find("iframe").attr("src", params["url"]);
|
||||
modal.find("#object_id").val(params["id"]);
|
||||
modal.modal("show");
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<% end %>
|
|
@ -1,5 +1,5 @@
|
|||
<%= form_for @event_news, url: admin_event_news_index_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
|
||||
<fieldset>
|
||||
<%= render :partial => 'form', locals: {f: f} %>
|
||||
</fieldset>
|
||||
<%= form_for @event_news, url: admin_event_news_index_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
|
||||
<fieldset>
|
||||
<%= render :partial => 'form', locals: {f: f} %>
|
||||
</fieldset>
|
||||
<% end %>
|
|
@ -1,394 +1,415 @@
|
|||
<%= stylesheet_link_tag "select2/select2" %>
|
||||
<%= javascript_include_tag 'validator' %>
|
||||
<%= javascript_include_tag "select2/select2.min" %>
|
||||
<% content_for :page_specific_css do %>
|
||||
<%= stylesheet_link_tag "lib/main-forms" %>
|
||||
<% end %>
|
||||
<style type="text/css">
|
||||
#notification{
|
||||
background-color: #ececec;
|
||||
font-size: 14px;
|
||||
left: 40%;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 40px;
|
||||
width: auto;
|
||||
z-index: 1200;
|
||||
display: none;
|
||||
}
|
||||
.badge-info{
|
||||
margin-left: 10px;
|
||||
}
|
||||
#approver-list{
|
||||
list-style: none;
|
||||
margin-left: 5px;
|
||||
}
|
||||
#approver-list li {
|
||||
border-bottom: 1px solid #efefef;
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
#approver-list .approver-avatar{
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border-radius: 50px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
#approver-list .approver-check{
|
||||
vertical-align: middle;
|
||||
margin-top: 25px;
|
||||
}
|
||||
#approver-list .approver-check input{
|
||||
margin-right: 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#approver-list .approver-check label{
|
||||
display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#approver-list .approver-title{
|
||||
font-size: 14px;
|
||||
}
|
||||
.table{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.table-row,.role_limit_tr,.role_limit_add {
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.td{
|
||||
width: 30%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.table{
|
||||
border: #2d4cd0 0.1em solid;
|
||||
}
|
||||
.td-3{
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.td>*{
|
||||
max-width: 95%;
|
||||
}
|
||||
.td-delete{
|
||||
width: 10%;
|
||||
}
|
||||
</style>
|
||||
<%
|
||||
sub_managers = @module_app.sub_managers
|
||||
sub_managers.delete(nil)
|
||||
all_statuses = [[t('top'),'is_top'],[t('hot'),'is_hot']]
|
||||
tp1 = select_tag("event_news_setting[anns_status_settings][-1][status]",options_for_select(all_statuses))
|
||||
tp2 = select_tag("event_news_setting[anns_status_settings][-1][role_id]",options_for_select(Role.all.map{|r| [r.title,r.id]}))
|
||||
tp3 = number_field_tag("event_news_setting[anns_status_settings][-1][top_limit]",nil, min: 0,required: true)
|
||||
tp4 = "<button type='button' onclick='delete_limit_role(this)'' class='btn'>#{t('delete_')}</button>"
|
||||
all_tp = "<div class='role_limit_tr'><div class='td'>#{tp1}</div><div class='td'>#{tp2}</div><div class='td'>#{tp3}</div><div class='td-delete'>#{tp4}</div></div>"
|
||||
%>
|
||||
<script type="text/javascript">
|
||||
function add_limit_role(){
|
||||
var role_limit_l = $('.role_limit_tr').length
|
||||
var role_limit_tp = '<%= all_tp.inspect %>'
|
||||
role_limit_tp = role_limit_tp.replace(/-1/g,role_limit_l)
|
||||
$('.role_limit_add').before($('<div/>').html(role_limit_tp).text().slice(1,-2))
|
||||
}
|
||||
function delete_limit_role(ele){
|
||||
var now_index = $(ele).parents('.role_limit_tr').index('.role_limit_tr')
|
||||
console.log(now_index)
|
||||
$(ele).parents('.role_limit_tr').remove()
|
||||
$('.role_limit_tr').each(function(i,v){
|
||||
if (i >= now_index){
|
||||
$(v).find('[name^="event_news_setting[anns_status_settings]"]').each(function(i1,v1){
|
||||
console.log($(v1).attr('name'))
|
||||
$(v1).attr('name',$(v1).attr('name').replace(/\d+/g,i.toString()))
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
var approverList = $(".hidden-approver-list");
|
||||
$(".approver-check input").on("click",function(){
|
||||
var el = $(this);
|
||||
if(el.is(":checked")){
|
||||
var t = $("<input type='hidden'>");
|
||||
t.val(el.val());
|
||||
t.attr("name", "event_news_setting[approvers][]");
|
||||
t.attr("id", "check_" + el.val());
|
||||
approverList.append(t);
|
||||
}else{
|
||||
approverList.find("#check_" + el.val()).remove();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<div id="notification"><%= t("event_news.click_on_submit") %></div>
|
||||
<%= form_for @setting, url: (@setting.new_record? ? admin_event_news_createsettings_path : admin_event_news_updatesettings_path), html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<%= f.label :carousel_image_width, t("event_news.default_carousel_image_width"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.text_field :carousel_image_width %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :only_manager_can_edit_status, t("event_news.only_manager_can_edit_status"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.check_box :only_manager_can_edit_status %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :is_display_edit_only, t("event_news.is_display_edit_only"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.check_box :is_display_edit_only %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :top_limit, t("event_news.top_limit"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.number_field :top_limit, :min => "0" %>
|
||||
<span class="help-block"><%= t("event_news.for_unlimited") %></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="table">
|
||||
<div class="table-row">
|
||||
<div class="td">
|
||||
<%= t('status') %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= t('role') %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= t('event_news.top_limit') %>
|
||||
</div>
|
||||
</div>
|
||||
<% (EventNewsSetting.first.anns_status_settings rescue []).each_with_index do |v,i| %>
|
||||
<div class="role_limit_tr">
|
||||
<%= hidden_field_tag("event_news_setting[anns_status_settings][#{i}][_id]",v.id) %>
|
||||
<div class="td">
|
||||
<%= select_tag("event_news_setting[anns_status_settings][#{i}][status]",options_for_select(all_statuses,:selected => v['status'])) %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= select_tag("event_news_setting[anns_status_settings][#{i}][role_id]",options_for_select(Role.all.map{|r| [r.title,r.id]},:selected => v['role_id'])) %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= number_field_tag("event_news_setting[anns_status_settings][#{i}][top_limit]",v['top_limit'], min: 0,required: true) %>
|
||||
</div>
|
||||
<div class="td-delete">
|
||||
<button type="button" onclick="delete_limit_role(this)" class="btn">
|
||||
<%= t('delete_') %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="role_limit_add">
|
||||
<div class="td-3">
|
||||
<button type="button" onclick="add_limit_role()" class="btn">
|
||||
<%= t('add') %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% if EventNewsSetting.is_pro? %>
|
||||
<% if !sub_managers.blank? %>
|
||||
<div class="control-group">
|
||||
<%= f.label "Approver Setting", :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<a href="#approverModal" role="button" class="btn" data-toggle="modal"><%= t("event_news.approvers_list") %></a>
|
||||
<span class="badge badge-info"><%= @setting.approvers.count %></span>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="control-group">
|
||||
<a href="/admin/authorizations/event_news"><%= t("event_news.click_set_sub_manager") %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="control-group">
|
||||
<%= f.label "Send emails to", :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="admins" <%= @setting.email_to.include?("admins") ? "checked=checked" : "" %>> <%= t("admin") %>
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="managers" <%= @setting.email_to.include?("managers") ? "checked=checked" : "" %>> <%= t("manager") %>
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="approvers" <%= @setting.email_to.include?("approvers") ? "checked=checked" : "" %>> <%= t("event_news.approver") %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden-approver-list">
|
||||
<% sub_managers.each do |sm| %>
|
||||
<% if @setting.approvers.include?(sm.id.to_s) %>
|
||||
<input type="hidden" id="check_<%= sm.id.to_s %>" value="<%= sm.id.to_s %>" name="event_news_setting[approvers][]">
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="form-actions">
|
||||
<%= f.submit t('submit'), class: 'btn btn-primary' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if EventNewsSetting.is_pro? %>
|
||||
<div id="approverModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="approverModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="approverModalLabel"><%= t("sub_manager") %></h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul id="approver-list">
|
||||
<% sub_managers.each do |sm| %>
|
||||
<li>
|
||||
<%= image_tag sm.member_profile.avatar.thumb, :class => "approver-avatar" %>
|
||||
<span class="approver-title"><%= sm.name %></span>
|
||||
<span class="pull-right approver-check">
|
||||
<input id="checkbox_<%= sm.id %>" type="checkbox" value="<%= sm.id %>" <%= @setting.approvers.include?(sm.id.to_s) ? "checked=checked" : "" %>>
|
||||
<label for="checkbox_<%= sm.id %>"><%= t("event_news.approver") %></label>
|
||||
</span>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Ok</button>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$("#approverModal").on("hidden",function(){
|
||||
$("#notification").slideDown();
|
||||
$(".badge-info").text($(".hidden-approver-list input").length);
|
||||
})
|
||||
</script>
|
||||
<% end %>
|
||||
<%= fields_for :iframe do |f| %>
|
||||
<div class="form-horizontal input-area">
|
||||
<fieldset id="iframe_settings">
|
||||
<legend><%=t('event_news.event_news_setting_for_iframe')%></legend>
|
||||
<div class="control-group">
|
||||
<%= f.label :layout_type, t("event_news.layout_type"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<% @layout_types = get_layouts(@module_app.key) %>
|
||||
<% if @layout_types.first.kind_of?(Hash) %>
|
||||
<select name="iframe[layout_type]" id="page_layout" class="select2">
|
||||
<% @layout_types.each do |lt| %>
|
||||
<option value="<%= lt["filename"] %>" data-image="<%= lt["thumbnail"] %>"><%= (lt["name"].kind_of?(Hash) ? (lt["name"][I18n.locale.to_s] || lt["name"]['en']) : lt["name"]) %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<script type="text/javascript">
|
||||
$("select.select2").select2({
|
||||
formatResult: function(el){
|
||||
var $element = $(el.element),
|
||||
image = $element.data("image");
|
||||
return "<img class='thumbnail' src='" + image + "'/><span class='thumbnail-text'>" + el.text + "</span>";
|
||||
},
|
||||
minimumResultsForSearch: -1,
|
||||
width : 250
|
||||
});
|
||||
</script>
|
||||
<% else %>
|
||||
<%= f.select(:layout, @layout_types) %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :tags, t(:tags), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<% @module_app.tags.each_with_index do |t,index| %>
|
||||
<label class="checkbox inline btn" for="<%="tags_#{index}"%>">
|
||||
<input id="<%="tags_#{index}"%>" name="iframe[tags][]" type="checkbox" value="<%=t.id%>" style="opacity: 0;">
|
||||
<%=t.name%>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" ><%=t(:categories)%></label>
|
||||
<div class="controls">
|
||||
<% @module_app.categories.each_with_index do |c,index| %>
|
||||
<label class="checkbox inline btn" for="<%="categories_#{index}"%>">
|
||||
<input id="<%="categories_#{index}"%>" name="iframe[categories][]" type="checkbox" value="<%=c.id%>" style="opacity: 0;">
|
||||
<%=c.title%>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :authors, t('event_news.table.author'), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= render partial: 'admin/members/generate_modal_select' , locals: { :@sorted_members => @sorted_members ,:member_form_id => "card-list-members",:member_field_name=>"iframe[member_ids][]" } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :show_page, t('event_news.show_page'), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%=f.check_box :show_page ,{:checked=>'checked'},'true','false'%>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :data_count, t(:data_count), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%=f.number_field :data_count, {min: 0,:value=> 10} %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a class="btn btn-primary" title="<%= t("event_news.url_generate") %>" id="url_generate"><%= t("event_news.url_generate") %></a>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<% end %>
|
||||
<script type="text/javascript">
|
||||
function getparams(id){
|
||||
var params_array = $("#"+id).serializeArray();
|
||||
var params = {};
|
||||
params_array.forEach(function(dict){
|
||||
if(params[dict.name] == undefined)
|
||||
if(dict.name.substr(dict.name.length-2,2) == "[]")
|
||||
params[dict.name] = [dict.value]
|
||||
else
|
||||
params[dict.name] = dict.value
|
||||
else
|
||||
if(dict.name.substr(dict.name.length-2,2) == "[]")
|
||||
params[dict.name].push(dict.value)
|
||||
else
|
||||
params[dict.name] = dict.value
|
||||
})
|
||||
return params;
|
||||
}
|
||||
$(document).ready(function(){
|
||||
$('label.checkbox input').click(function(){
|
||||
if($(this).parent().hasClass('active'))
|
||||
$(this).parent().removeClass('active');
|
||||
else
|
||||
$(this).parent().addClass('active');
|
||||
})
|
||||
$('#url_generate').off('click').on('click',function(){
|
||||
var params = getparams('iframe_settings');
|
||||
$.post("<%=admin_event_news_generate_iframe_url_path%>",params).done(function(url){
|
||||
var real_url = '/annc_url?url='+window.location.href.split('/')[0]+"//"+window.location.host+url;
|
||||
if($("#dialog-confirm").length == 0){
|
||||
$("#url_generate").before("<div id='dialog-confirm' title='<%="iframe "+t('event_news.URL')%>'>"+
|
||||
"<div style='clear:both;'></div><div id='info_texts'>"+"<label style='float:left;margin-right: 0.2em; line-height: 2em;' for='iframe_url'><%="iframe "+t('event_news.URL') %>:</label><input id= 'iframe_url' style='float:left;cursor:text;' type='text' readyonly value='"+real_url+"'><a class='btn btn-primary copy_text' style='color: white;'><%=t('event_news.copy')%></a>"+"</div>"+
|
||||
"</div>");
|
||||
}
|
||||
$( "#dialog-confirm" ).dialog({
|
||||
resizable: true,
|
||||
minHeight: 100,
|
||||
maxHeight: 400,
|
||||
width: '80%',
|
||||
modal: true,
|
||||
buttons: {
|
||||
"<%= t(:close) %>": function(){$( this ).dialog( "close" );}
|
||||
}
|
||||
});
|
||||
$('.copy_text').off('click').on('click',function(){
|
||||
var copyText = document.getElementById("iframe_url");
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999);
|
||||
document.execCommand("copy");
|
||||
})
|
||||
});
|
||||
});
|
||||
})
|
||||
<%= stylesheet_link_tag "select2/select2" %>
|
||||
<%= javascript_include_tag 'validator' %>
|
||||
<%= javascript_include_tag "select2/select2.min" %>
|
||||
<% content_for :page_specific_css do %>
|
||||
<%= stylesheet_link_tag "lib/main-forms" %>
|
||||
<% end %>
|
||||
<style type="text/css">
|
||||
#notification{
|
||||
background-color: #ececec;
|
||||
font-size: 14px;
|
||||
left: 40%;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 40px;
|
||||
width: auto;
|
||||
z-index: 1200;
|
||||
display: none;
|
||||
}
|
||||
.badge-info{
|
||||
margin-left: 10px;
|
||||
}
|
||||
#approver-list{
|
||||
list-style: none;
|
||||
margin-left: 5px;
|
||||
}
|
||||
#approver-list li {
|
||||
border-bottom: 1px solid #efefef;
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
#approver-list .approver-avatar{
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border-radius: 50px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
#approver-list .approver-check{
|
||||
vertical-align: middle;
|
||||
margin-top: 25px;
|
||||
}
|
||||
#approver-list .approver-check input{
|
||||
margin-right: 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#approver-list .approver-check label{
|
||||
display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#approver-list .approver-title{
|
||||
font-size: 14px;
|
||||
}
|
||||
.table{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.table-row,.role_limit_tr,.role_limit_add {
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.td{
|
||||
width: 30%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.table{
|
||||
border: #2d4cd0 0.1em solid;
|
||||
}
|
||||
.td-3{
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.td>*{
|
||||
max-width: 95%;
|
||||
}
|
||||
.td-delete{
|
||||
width: 10%;
|
||||
}
|
||||
</style>
|
||||
<%
|
||||
sub_managers = @module_app.sub_managers
|
||||
sub_managers.delete(nil)
|
||||
all_statuses = [[t('top'),'is_top'],[t('hot'),'is_hot']]
|
||||
tp1 = select_tag("event_news_setting[anns_status_settings][-1][status]",options_for_select(all_statuses))
|
||||
tp2 = select_tag("event_news_setting[anns_status_settings][-1][role_id]",options_for_select(Role.all.map{|r| [r.title,r.id]}))
|
||||
tp3 = number_field_tag("event_news_setting[anns_status_settings][-1][top_limit]",nil, min: 0,required: true)
|
||||
tp4 = "<button type='button' onclick='delete_limit_role(this)'' class='btn'>#{t('delete_')}</button>"
|
||||
all_tp = "<div class='role_limit_tr'><div class='td'>#{tp1}</div><div class='td'>#{tp2}</div><div class='td'>#{tp3}</div><div class='td-delete'>#{tp4}</div></div>"
|
||||
%>
|
||||
<script type="text/javascript">
|
||||
function add_limit_role(){
|
||||
var role_limit_l = $('.role_limit_tr').length
|
||||
var role_limit_tp = '<%= all_tp.inspect %>'
|
||||
role_limit_tp = role_limit_tp.replace(/-1/g,role_limit_l)
|
||||
$('.role_limit_add').before($('<div/>').html(role_limit_tp).text().slice(1,-2))
|
||||
}
|
||||
function delete_limit_role(ele){
|
||||
var now_index = $(ele).parents('.role_limit_tr').index('.role_limit_tr')
|
||||
console.log(now_index)
|
||||
$(ele).parents('.role_limit_tr').remove()
|
||||
$('.role_limit_tr').each(function(i,v){
|
||||
if (i >= now_index){
|
||||
$(v).find('[name^="event_news_setting[anns_status_settings]"]').each(function(i1,v1){
|
||||
console.log($(v1).attr('name'))
|
||||
$(v1).attr('name',$(v1).attr('name').replace(/\d+/g,i.toString()))
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
var approverList = $(".hidden-approver-list");
|
||||
$(".approver-check input").on("click",function(){
|
||||
var el = $(this);
|
||||
if(el.is(":checked")){
|
||||
var t = $("<input type='hidden'>");
|
||||
t.val(el.val());
|
||||
t.attr("name", "event_news_setting[approvers][]");
|
||||
t.attr("id", "check_" + el.val());
|
||||
approverList.append(t);
|
||||
}else{
|
||||
approverList.find("#check_" + el.val()).remove();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<div id="notification"><%= t("event_news.click_on_submit") %></div>
|
||||
<%= form_for @setting, url: (@setting.new_record? ? admin_event_news_createsettings_path : admin_event_news_updatesettings_path), html: {class: "form-horizontal main-forms"} do |f| %>
|
||||
<div class="input-area">
|
||||
<div class="control-group">
|
||||
<%= f.label :carousel_image_width, t("event_news.default_carousel_image_width"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.text_field :carousel_image_width %>
|
||||
</div>
|
||||
</div>
|
||||
<fieldset id="event_date_setting">
|
||||
<legend><%=t("event_news.event_date_setting")%></legend>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= I18n.t("event_news.including_day_of_the_week") %></label>
|
||||
<div class="controls">
|
||||
<%= f.check_box :including_day_of_the_week %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted"><%= I18n.t("event_news.including_time") %></label>
|
||||
<div class="controls">
|
||||
<%= f.check_box :including_time, :id=>"including_time" %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hour_clock_24_block control-group <%= 'hide' if !(f.object.including_time) %>">
|
||||
<label class="control-label muted"><%= I18n.t("event_news.hour_clock_24") %></label>
|
||||
<div class="controls">
|
||||
<%= f.check_box :hour_clock_24 %>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="control-group">
|
||||
<%= f.label :only_manager_can_edit_status, t("event_news.only_manager_can_edit_status"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.check_box :only_manager_can_edit_status %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :is_display_edit_only, t("event_news.is_display_edit_only"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.check_box :is_display_edit_only %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :top_limit, t("event_news.top_limit"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= f.number_field :top_limit, :min => "0" %>
|
||||
<span class="help-block"><%= t("event_news.for_unlimited") %></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="table">
|
||||
<div class="table-row">
|
||||
<div class="td">
|
||||
<%= t('status') %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= t('role') %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= t('event_news.top_limit') %>
|
||||
</div>
|
||||
</div>
|
||||
<% (EventNewsSetting.first.anns_status_settings rescue []).each_with_index do |v,i| %>
|
||||
<div class="role_limit_tr">
|
||||
<%= hidden_field_tag("event_news_setting[anns_status_settings][#{i}][_id]",v.id) %>
|
||||
<div class="td">
|
||||
<%= select_tag("event_news_setting[anns_status_settings][#{i}][status]",options_for_select(all_statuses,:selected => v['status'])) %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= select_tag("event_news_setting[anns_status_settings][#{i}][role_id]",options_for_select(Role.all.map{|r| [r.title,r.id]},:selected => v['role_id'])) %>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%= number_field_tag("event_news_setting[anns_status_settings][#{i}][top_limit]",v['top_limit'], min: 0,required: true) %>
|
||||
</div>
|
||||
<div class="td-delete">
|
||||
<button type="button" onclick="delete_limit_role(this)" class="btn">
|
||||
<%= t('delete_') %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="role_limit_add">
|
||||
<div class="td-3">
|
||||
<button type="button" onclick="add_limit_role()" class="btn">
|
||||
<%= t('add') %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% if EventNewsSetting.is_pro? %>
|
||||
<% if !sub_managers.blank? %>
|
||||
<div class="control-group">
|
||||
<%= f.label "Approver Setting", :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<a href="#approverModal" role="button" class="btn" data-toggle="modal"><%= t("event_news.approvers_list") %></a>
|
||||
<span class="badge badge-info"><%= @setting.approvers.count %></span>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="control-group">
|
||||
<a href="/admin/authorizations/event_news"><%= t("event_news.click_set_sub_manager") %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="control-group">
|
||||
<%= f.label "Send emails to", :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="admins" <%= @setting.email_to.include?("admins") ? "checked=checked" : "" %>> <%= t("admin") %>
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="managers" <%= @setting.email_to.include?("managers") ? "checked=checked" : "" %>> <%= t("manager") %>
|
||||
<input type="checkbox" name="event_news_setting[email_to][]" value="approvers" <%= @setting.email_to.include?("approvers") ? "checked=checked" : "" %>> <%= t("event_news.approver") %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden-approver-list">
|
||||
<% sub_managers.each do |sm| %>
|
||||
<% if @setting.approvers.include?(sm.id.to_s) %>
|
||||
<input type="hidden" id="check_<%= sm.id.to_s %>" value="<%= sm.id.to_s %>" name="event_news_setting[approvers][]">
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="form-actions">
|
||||
<%= f.submit t('submit'), class: 'btn btn-primary' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% if EventNewsSetting.is_pro? %>
|
||||
<div id="approverModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="approverModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="approverModalLabel"><%= t("sub_manager") %></h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul id="approver-list">
|
||||
<% sub_managers.each do |sm| %>
|
||||
<li>
|
||||
<%= image_tag sm.member_profile.avatar.thumb, :class => "approver-avatar" %>
|
||||
<span class="approver-title"><%= sm.name %></span>
|
||||
<span class="pull-right approver-check">
|
||||
<input id="checkbox_<%= sm.id %>" type="checkbox" value="<%= sm.id %>" <%= @setting.approvers.include?(sm.id.to_s) ? "checked=checked" : "" %>>
|
||||
<label for="checkbox_<%= sm.id %>"><%= t("event_news.approver") %></label>
|
||||
</span>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Ok</button>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$("#approverModal").on("hidden",function(){
|
||||
$("#notification").slideDown();
|
||||
$(".badge-info").text($(".hidden-approver-list input").length);
|
||||
})
|
||||
</script>
|
||||
<% end %>
|
||||
<%= fields_for :iframe do |f| %>
|
||||
<div class="form-horizontal input-area">
|
||||
<fieldset id="iframe_settings">
|
||||
<legend><%=t('event_news.event_news_setting_for_iframe')%></legend>
|
||||
<div class="control-group">
|
||||
<%= f.label :layout_type, t("event_news.layout_type"), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<% @layout_types = get_layouts(@module_app.key) %>
|
||||
<% if @layout_types.first.kind_of?(Hash) %>
|
||||
<select name="iframe[layout_type]" id="page_layout" class="select2">
|
||||
<% @layout_types.each do |lt| %>
|
||||
<option value="<%= lt["filename"] %>" data-image="<%= lt["thumbnail"] %>"><%= (lt["name"].kind_of?(Hash) ? (lt["name"][I18n.locale.to_s] || lt["name"]['en']) : lt["name"]) %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<script type="text/javascript">
|
||||
$("select.select2").select2({
|
||||
formatResult: function(el){
|
||||
var $element = $(el.element),
|
||||
image = $element.data("image");
|
||||
return "<img class='thumbnail' src='" + image + "'/><span class='thumbnail-text'>" + el.text + "</span>";
|
||||
},
|
||||
minimumResultsForSearch: -1,
|
||||
width : 250
|
||||
});
|
||||
</script>
|
||||
<% else %>
|
||||
<%= f.select(:layout, @layout_types) %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :tags, t(:tags), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<% @module_app.tags.each_with_index do |t,index| %>
|
||||
<label class="checkbox inline btn" for="<%="tags_#{index}"%>">
|
||||
<input id="<%="tags_#{index}"%>" name="iframe[tags][]" type="checkbox" value="<%=t.id%>" style="opacity: 0;">
|
||||
<%=t.name%>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" ><%=t(:categories)%></label>
|
||||
<div class="controls">
|
||||
<% @module_app.categories.each_with_index do |c,index| %>
|
||||
<label class="checkbox inline btn" for="<%="categories_#{index}"%>">
|
||||
<input id="<%="categories_#{index}"%>" name="iframe[categories][]" type="checkbox" value="<%=c.id%>" style="opacity: 0;">
|
||||
<%=c.title%>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :authors, t('event_news.table.author'), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%= render partial: 'admin/members/generate_modal_select' , locals: { :@sorted_members => @sorted_members ,:member_form_id => "card-list-members",:member_field_name=>"iframe[member_ids][]" } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :show_page, t('event_news.show_page'), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%=f.check_box :show_page ,{:checked=>'checked'},'true','false'%>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<%= f.label :data_count, t(:data_count), :class => "control-label muted" %>
|
||||
<div class="controls">
|
||||
<%=f.number_field :data_count, {min: 0,:value=> 10} %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a class="btn btn-primary" title="<%= t("event_news.url_generate") %>" id="url_generate"><%= t("event_news.url_generate") %></a>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<% end %>
|
||||
<script type="text/javascript">
|
||||
function getparams(id){
|
||||
var params_array = $("#"+id).serializeArray();
|
||||
var params = {};
|
||||
params_array.forEach(function(dict){
|
||||
if(params[dict.name] == undefined)
|
||||
if(dict.name.substr(dict.name.length-2,2) == "[]")
|
||||
params[dict.name] = [dict.value]
|
||||
else
|
||||
params[dict.name] = dict.value
|
||||
else
|
||||
if(dict.name.substr(dict.name.length-2,2) == "[]")
|
||||
params[dict.name].push(dict.value)
|
||||
else
|
||||
params[dict.name] = dict.value
|
||||
})
|
||||
return params;
|
||||
}
|
||||
$(document).ready(function(){
|
||||
$('label.checkbox input').click(function(){
|
||||
if($(this).parent().hasClass('active'))
|
||||
$(this).parent().removeClass('active');
|
||||
else
|
||||
$(this).parent().addClass('active');
|
||||
})
|
||||
$('#url_generate').off('click').on('click',function(){
|
||||
var params = getparams('iframe_settings');
|
||||
$.post("<%=admin_event_news_generate_iframe_url_path%>",params).done(function(url){
|
||||
var real_url = '/annc_url?url='+window.location.href.split('/')[0]+"//"+window.location.host+url;
|
||||
if($("#dialog-confirm").length == 0){
|
||||
$("#url_generate").before("<div id='dialog-confirm' title='<%="iframe "+t('event_news.URL')%>'>"+
|
||||
"<div style='clear:both;'></div><div id='info_texts'>"+"<label style='float:left;margin-right: 0.2em; line-height: 2em;' for='iframe_url'><%="iframe "+t('event_news.URL') %>:</label><input id= 'iframe_url' style='float:left;cursor:text;' type='text' readyonly value='"+real_url+"'><a class='btn btn-primary copy_text' style='color: white;'><%=t('event_news.copy')%></a>"+"</div>"+
|
||||
"</div>");
|
||||
}
|
||||
$( "#dialog-confirm" ).dialog({
|
||||
resizable: true,
|
||||
minHeight: 100,
|
||||
maxHeight: 400,
|
||||
width: '80%',
|
||||
modal: true,
|
||||
buttons: {
|
||||
"<%= t(:close) %>": function(){$( this ).dialog( "close" );}
|
||||
}
|
||||
});
|
||||
$('.copy_text').off('click').on('click',function(){
|
||||
var copyText = document.getElementById("iframe_url");
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999);
|
||||
document.execCommand("copy");
|
||||
})
|
||||
});
|
||||
});
|
||||
})
|
||||
</script>
|
|
@ -1,3 +1,3 @@
|
|||
<h3>Hello <%= @data["name"] %>,</h3>
|
||||
<p><%= @data["submitter"] %> <%= t("event_news.updated_annoucement") %>
|
||||
<h3>Hello <%= @data["name"] %>,</h3>
|
||||
<p><%= @data["submitter"] %> <%= t("event_news.updated_annoucement") %>
|
||||
<a href="<%= @data['url'] %>" ><%= t("event_news.click_here_to_see") %></a>
|
|
@ -1,3 +1,3 @@
|
|||
<h3>Hello <%= @data["name"] %>,</h3>
|
||||
<p><%= @data["rejector"] %> <%= t("event_news.rejected_event_news") %> : <%= @data["reason"].nil? || @data["reason"] == "" ? "" : "#{@data["reason"]}" %></p>
|
||||
<h3>Hello <%= @data["name"] %>,</h3>
|
||||
<p><%= @data["rejector"] %> <%= t("event_news.rejected_event_news") %> : <%= @data["reason"].nil? || @data["reason"] == "" ? "" : "#{@data["reason"]}" %></p>
|
||||
<a href="<%= @data['url'] %>" ><%= t("event_news.click_here_to_see") %></a>
|
|
@ -1,19 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF">
|
||||
<div style="text-ident:20px"></div>
|
||||
|
||||
<%= t('event_news.mail_hi') %> <br /><br />
|
||||
<%= t('event_news.mail_url_view') %> <br /><br />
|
||||
<a href="<%= @data["url"] %>" target="_blank"> <%= @data["title"] %> </a> <br /><br />
|
||||
|
||||
<span style="color:#555">--<br />
|
||||
<%= t('event_news.mail_source') %> :<a href="http://<%= @data["host"] %>" target="_blank"> <%= Site.first.title %> </a><br />
|
||||
<%= t('event_news.mail_time') %> <%= DateTime.now %>
|
||||
</span>
|
||||
|
||||
</body>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF">
|
||||
<div style="text-ident:20px"></div>
|
||||
|
||||
<%= t('event_news.mail_hi') %> <br /><br />
|
||||
<%= t('event_news.mail_url_view') %> <br /><br />
|
||||
<a href="<%= @data["url"] %>" target="_blank"> <%= @data["title"] %> </a> <br /><br />
|
||||
|
||||
<span style="color:#555">--<br />
|
||||
<%= t('event_news.mail_source') %> :<a href="http://<%= @data["host"] %>" target="_blank"> <%= Site.first.title %> </a><br />
|
||||
<%= t('event_news.mail_time') %> <%= DateTime.now %>
|
||||
</span>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,85 +1,85 @@
|
|||
<% params = OrbitHelper.params
|
||||
page = Page.where(url:params['url']).first
|
||||
enable_search_flag = false
|
||||
if page.methods.include? 'select_option_items'.to_sym
|
||||
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |modile_app|
|
||||
@show_option_items = modile_app.show_option_items rescue nil
|
||||
end
|
||||
page.select_option_items.each do |select_option_item|
|
||||
if !(@show_option_items.nil?) && select_option_item.field_name == @show_option_items.keys[1].to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
if value[I18n.locale] == t('event_news.yes')
|
||||
enable_search_flag = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
%>
|
||||
<% if enable_search_flag %>
|
||||
<style type="text/css">
|
||||
#category_select_box{
|
||||
margin: 0;
|
||||
background: linear-gradient(0deg, #515fff, #ff3e3e);
|
||||
color: white;
|
||||
outline: 0;
|
||||
border-radius: 0.9em;
|
||||
}
|
||||
#category_select_box>option{
|
||||
background: #5640dd;
|
||||
}
|
||||
input.search_box{
|
||||
margin: 0;
|
||||
background: #a2c3df;
|
||||
font-weight: bold;
|
||||
color: #00008b;
|
||||
border-radius: 0.7em;
|
||||
outline: 0;
|
||||
}
|
||||
input.search_box[type='submit']:hover{
|
||||
background: #9100ff;
|
||||
color: white;
|
||||
}
|
||||
input.search_box[type='submit']:active{
|
||||
background: #7201ff;
|
||||
color: white;
|
||||
}
|
||||
input.search_box::-webkit-input-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
input.search_box:-moz-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
input.search_box::-moz-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
||||
<form>
|
||||
<% cats = Array(page.categories)
|
||||
if cats.include? 'all'
|
||||
cats = ModuleApp.where(key: 'event_news').first.categories
|
||||
else
|
||||
cats = cats.map{|v| Category.where(id: v).first}.compact
|
||||
end
|
||||
all_cat = [[t('event_news.all'),'all']]
|
||||
%>
|
||||
<div class="search_widget" style="display: flex;flex-wrap: wrap;font-size: 1.1em;">
|
||||
<%= select_tag('category',options_for_select(all_cat.concat(cats.map{|v| [v.title,v.id.to_s]}),:selected => params['category'].to_s),:id=>"category_select_box",:prompt => t('event_news.select_prompt')) %>
|
||||
<input class="search_box" type="text" name="keywords" value="<%= params['keywords'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.keywords') %>">
|
||||
<div style="display: flex;flex-wrap: wrap;">
|
||||
<div class="default_picker">
|
||||
<input class="search_box" type="text" name="stime" value="<%= params['stime'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.stime') %>" data-format="yyyy/mm/dd">
|
||||
</div>
|
||||
~
|
||||
<div class="default_picker">
|
||||
<input class="search_box" type="text" name="etime" value="<%= params['etime'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.etime') %>" data-format="yyyy/mm/dd">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="authenticity_token" value="<%= (0...46).map { ('a'..'z').to_a[rand(26)] }.join %>">
|
||||
<input class="search_box" type="submit" value="<%= t('event_news.search') %>">
|
||||
</div>
|
||||
</form>
|
||||
<% end %>
|
||||
<% params = OrbitHelper.params
|
||||
page = Page.where(url:params['url']).first
|
||||
enable_search_flag = false
|
||||
if page.methods.include? 'select_option_items'.to_sym
|
||||
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |modile_app|
|
||||
@show_option_items = modile_app.show_option_items rescue nil
|
||||
end
|
||||
page.select_option_items.each do |select_option_item|
|
||||
if !(@show_option_items.nil?) && select_option_item.field_name == @show_option_items.keys[1].to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
if value[I18n.locale] == t('event_news.yes')
|
||||
enable_search_flag = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
%>
|
||||
<% if enable_search_flag %>
|
||||
<style type="text/css">
|
||||
#category_select_box{
|
||||
margin: 0;
|
||||
background: linear-gradient(0deg, #515fff, #ff3e3e);
|
||||
color: white;
|
||||
outline: 0;
|
||||
border-radius: 0.9em;
|
||||
}
|
||||
#category_select_box>option{
|
||||
background: #5640dd;
|
||||
}
|
||||
input.search_box{
|
||||
margin: 0;
|
||||
background: #a2c3df;
|
||||
font-weight: bold;
|
||||
color: #00008b;
|
||||
border-radius: 0.7em;
|
||||
outline: 0;
|
||||
}
|
||||
input.search_box[type='submit']:hover{
|
||||
background: #9100ff;
|
||||
color: white;
|
||||
}
|
||||
input.search_box[type='submit']:active{
|
||||
background: #7201ff;
|
||||
color: white;
|
||||
}
|
||||
input.search_box::-webkit-input-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
input.search_box:-moz-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
input.search_box::-moz-placeholder {
|
||||
color: #aa58e8;
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
||||
<form>
|
||||
<% cats = Array(page.categories)
|
||||
if cats.include? 'all'
|
||||
cats = ModuleApp.where(key: 'event_news').first.categories
|
||||
else
|
||||
cats = cats.map{|v| Category.where(id: v).first}.compact
|
||||
end
|
||||
all_cat = [[t('event_news.all'),'all']]
|
||||
%>
|
||||
<div class="search_widget" style="display: flex;flex-wrap: wrap;font-size: 1.1em;">
|
||||
<%= select_tag('category',options_for_select(all_cat.concat(cats.map{|v| [v.title,v.id.to_s]}),:selected => params['category'].to_s),:id=>"category_select_box",:prompt => t('event_news.select_prompt')) %>
|
||||
<input class="search_box" type="text" name="keywords" value="<%= params['keywords'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.keywords') %>">
|
||||
<div style="display: flex;flex-wrap: wrap;">
|
||||
<div class="default_picker">
|
||||
<input class="search_box" type="text" name="stime" value="<%= params['stime'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.stime') %>" data-format="yyyy/mm/dd">
|
||||
</div>
|
||||
~
|
||||
<div class="default_picker">
|
||||
<input class="search_box" type="text" name="etime" value="<%= params['etime'].to_s.gsub(/\"/,'') %>" placeholder="<%= t('event_news.etime') %>" data-format="yyyy/mm/dd">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="authenticity_token" value="<%= (0...46).map { ('a'..'z').to_a[rand(26)] }.join %>">
|
||||
<input class="search_box" type="submit" value="<%= t('event_news.search') %>">
|
||||
</div>
|
||||
</form>
|
||||
<% end %>
|
||||
<%= render_view %>
|
|
@ -1,237 +1,237 @@
|
|||
<%
|
||||
require 'event_news_helper'
|
||||
data = action_data
|
||||
params = OrbitHelper.params
|
||||
page = Page.where(url:params['url']).first
|
||||
@ad_banner_location = 2
|
||||
@show_back_and_next_flag = 0
|
||||
if page.methods.include? 'select_option_items'.to_sym
|
||||
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |module_app|
|
||||
@show_option_items = module_app.show_option_items rescue nil
|
||||
end
|
||||
page.select_option_items.each do |select_option_item|
|
||||
if !(@show_option_items.nil?)
|
||||
if select_option_item.field_name == @show_option_items.keys.first.to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
tmp = value[:en]
|
||||
I18n.with_locale(:en) do
|
||||
if tmp == t('event_news.not_show')
|
||||
@show_back_and_next_flag = 0
|
||||
elsif tmp == t('event_news.show_top')
|
||||
@show_back_and_next_flag = 1
|
||||
elsif tmp == t('event_news.show_bottom')
|
||||
@show_back_and_next_flag = 2
|
||||
end
|
||||
end
|
||||
elsif select_option_item.field_name == @show_option_items.keys[2].to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
tmp = value[:en]
|
||||
I18n.with_locale(:en) do
|
||||
if tmp == t('event_news.show_top')
|
||||
@ad_banner_location = 1
|
||||
elsif tmp == t('event_news.show_bottom')
|
||||
@ad_banner_location = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if @show_back_and_next_flag != 0
|
||||
uid = params['uid']
|
||||
sorted,total_pages = get_sorted_annc(0)
|
||||
now_index = sorted.to_enum.with_index.select{|v| v[0].uid==uid}[0][1] rescue nil
|
||||
if !now_index.nil?
|
||||
if now_index != 0
|
||||
prev_result = sorted[now_index-1]
|
||||
prev_url = params['url'] + '/' + prev_result.to_param
|
||||
prev_content = "<a href='#{prev_url}' title='#{t('event_news.prev')}' class='prev'><b>#{t('event_news.prev')}</b><p>#{prev_result['title'][I18n.locale]}</p></a>"
|
||||
end
|
||||
if now_index != sorted.length-1
|
||||
next_result = sorted[now_index+1]
|
||||
next_url = params['url'] + '/' + next_result.to_param
|
||||
next_content = "<a href='#{next_url}' title='#{t('event_news.next')}' class='next'><b>#{t('event_news.next')}</b><p>#{next_result['title'][I18n.locale]}</p></a>"
|
||||
end
|
||||
content = "<div class='see_more_boxTitle'>#{prev_content}#{next_content}</div>".html_safe
|
||||
else
|
||||
content = ''
|
||||
end
|
||||
end
|
||||
ad_banner_content = render_ad_banner(data['event_carousel_images'],data['data'])
|
||||
%>
|
||||
<style type="text/css">
|
||||
.carousel_images{
|
||||
<%= data['data']['carousel_display_style'] %>
|
||||
}
|
||||
</style>
|
||||
<%= stylesheet_link_tag 'event_news_front.css' %>
|
||||
<% if @show_back_and_next_flag!=0 %>
|
||||
<style type="text/css">
|
||||
.see_more_boxTitle{
|
||||
display: flex;
|
||||
margin: 1em 0em;
|
||||
padding: 1em;
|
||||
border: 0.2em solid;
|
||||
}
|
||||
a.prev, a.next{
|
||||
width: 50%;
|
||||
border: 0.2em solid;
|
||||
padding: 1em;
|
||||
flex: 1;
|
||||
}
|
||||
a.next{
|
||||
margin-left: 1em;
|
||||
}
|
||||
a.prev{
|
||||
margin-right: 1em;
|
||||
}
|
||||
</style>
|
||||
<% end %>
|
||||
|
||||
<% if @show_back_and_next_flag==1 %>
|
||||
<%= content %>
|
||||
<% end %>
|
||||
|
||||
<% if @ad_banner_location==1 %>
|
||||
<%= ad_banner_content %>
|
||||
<% end %>
|
||||
|
||||
<%= render_view %>
|
||||
|
||||
<% if @ad_banner_location==2 %>
|
||||
<%= ad_banner_content %>
|
||||
<% end %>
|
||||
|
||||
<% if @show_back_and_next_flag==2 %>
|
||||
<%= content %>
|
||||
<% end %>
|
||||
|
||||
<script>
|
||||
(function($) {
|
||||
|
||||
function hideEmptyEl(el, elParent) {
|
||||
if( el.length === 0) {
|
||||
elParent.addClass('hide');
|
||||
}
|
||||
}
|
||||
|
||||
// Hiding parent element when children elements are not present
|
||||
// Tags
|
||||
hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap'));
|
||||
|
||||
// Attachments
|
||||
hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file'));
|
||||
|
||||
// Links
|
||||
hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link'));
|
||||
$("img[src='']").remove();
|
||||
$('.pause-slide').click(function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('pause');
|
||||
$(this).addClass('active');
|
||||
$(this).parents('.carousel_images').find('.resume-slide').removeClass('active');
|
||||
});
|
||||
$('.resume-slide').click(function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('resume');
|
||||
$(this).addClass('active');
|
||||
$(this).parents('.carousel_images').find('.pause-slide').removeClass('active');
|
||||
});
|
||||
$('.next-button').off('click').on('click',function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("next");
|
||||
})
|
||||
$('.prev-button').off('click').on('click',function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("prev");
|
||||
})
|
||||
window.active_slide = 0;
|
||||
$('.prev_img').off('click').on('click',function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
if(carousel_images_slide.find(">li").length > content_size && active_slide > 0){
|
||||
active_slide -= content_size;
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
$('.next_img').off('click').on('click',function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
var li_length = carousel_images_slide.find(">li").length;
|
||||
if(li_length > content_size){
|
||||
active_slide += content_size;
|
||||
active_slide = Math.min(active_slide,li_length - 1);
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
$(".carousel_img_item img").off("click").on("click",function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle($(this).index(".carousel_img_item img"));
|
||||
})
|
||||
$(document).ready(function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle('pause');
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
$(".carousel_images .cycle-slideshow").cycle('resume');
|
||||
$('.carousel_images .resume-slide').addClass('active');
|
||||
$('.cycle-slideshow').on('cycle-after',function(){
|
||||
$(".active_slide").text($('.event_carousel_slide.cycle-slide-active').index());
|
||||
})
|
||||
})
|
||||
$(window).on("load",function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle('pause');
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
$(".carousel_images .cycle-slideshow").cycle('resume');
|
||||
})
|
||||
$(window).resize(function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
var active_count = carousel_images_slide.find(">li").length - active_slide;
|
||||
if(active_count < content_size){
|
||||
active_slide -= (content_size - active_count);
|
||||
}
|
||||
active_slide = Math.max(active_slide,0);
|
||||
console.log(content_size)
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
$(".event_carousel_slide").css("height",'');
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
})
|
||||
}(jQuery));
|
||||
<%
|
||||
require 'event_news_helper'
|
||||
data = action_data
|
||||
params = OrbitHelper.params
|
||||
page = Page.where(url:params['url']).first
|
||||
@ad_banner_location = 2
|
||||
@show_back_and_next_flag = 0
|
||||
if page.methods.include? 'select_option_items'.to_sym
|
||||
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |module_app|
|
||||
@show_option_items = module_app.show_option_items rescue nil
|
||||
end
|
||||
page.select_option_items.each do |select_option_item|
|
||||
if !(@show_option_items.nil?)
|
||||
if select_option_item.field_name == @show_option_items.keys.first.to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
tmp = value[:en]
|
||||
I18n.with_locale(:en) do
|
||||
if tmp == t('event_news.not_show')
|
||||
@show_back_and_next_flag = 0
|
||||
elsif tmp == t('event_news.show_top')
|
||||
@show_back_and_next_flag = 1
|
||||
elsif tmp == t('event_news.show_bottom')
|
||||
@show_back_and_next_flag = 2
|
||||
end
|
||||
end
|
||||
elsif select_option_item.field_name == @show_option_items.keys[2].to_s
|
||||
value = YAML.load(select_option_item.value)
|
||||
tmp = value[:en]
|
||||
I18n.with_locale(:en) do
|
||||
if tmp == t('event_news.show_top')
|
||||
@ad_banner_location = 1
|
||||
elsif tmp == t('event_news.show_bottom')
|
||||
@ad_banner_location = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if @show_back_and_next_flag != 0
|
||||
uid = params['uid']
|
||||
sorted,total_pages = get_sorted_annc(0)
|
||||
now_index = sorted.to_enum.with_index.select{|v| v[0].uid==uid}[0][1] rescue nil
|
||||
if !now_index.nil?
|
||||
if now_index != 0
|
||||
prev_result = sorted[now_index-1]
|
||||
prev_url = params['url'] + '/' + prev_result.to_param
|
||||
prev_content = "<a href='#{prev_url}' title='#{t('event_news.prev')}' class='prev'><b>#{t('event_news.prev')}</b><p>#{prev_result['title'][I18n.locale]}</p></a>"
|
||||
end
|
||||
if now_index != sorted.length-1
|
||||
next_result = sorted[now_index+1]
|
||||
next_url = params['url'] + '/' + next_result.to_param
|
||||
next_content = "<a href='#{next_url}' title='#{t('event_news.next')}' class='next'><b>#{t('event_news.next')}</b><p>#{next_result['title'][I18n.locale]}</p></a>"
|
||||
end
|
||||
content = "<div class='see_more_boxTitle'>#{prev_content}#{next_content}</div>".html_safe
|
||||
else
|
||||
content = ''
|
||||
end
|
||||
end
|
||||
ad_banner_content = render_ad_banner(data['event_carousel_images'],data['data'])
|
||||
%>
|
||||
<style type="text/css">
|
||||
.carousel_images{
|
||||
<%= data['data']['carousel_display_style'] %>
|
||||
}
|
||||
</style>
|
||||
<%= stylesheet_link_tag 'event_news_front.css' %>
|
||||
<% if @show_back_and_next_flag!=0 %>
|
||||
<style type="text/css">
|
||||
.see_more_boxTitle{
|
||||
display: flex;
|
||||
margin: 1em 0em;
|
||||
padding: 1em;
|
||||
border: 0.2em solid;
|
||||
}
|
||||
a.prev, a.next{
|
||||
width: 50%;
|
||||
border: 0.2em solid;
|
||||
padding: 1em;
|
||||
flex: 1;
|
||||
}
|
||||
a.next{
|
||||
margin-left: 1em;
|
||||
}
|
||||
a.prev{
|
||||
margin-right: 1em;
|
||||
}
|
||||
</style>
|
||||
<% end %>
|
||||
|
||||
<% if @show_back_and_next_flag==1 %>
|
||||
<%= content %>
|
||||
<% end %>
|
||||
|
||||
<% if @ad_banner_location==1 %>
|
||||
<%= ad_banner_content %>
|
||||
<% end %>
|
||||
|
||||
<%= render_view %>
|
||||
|
||||
<% if @ad_banner_location==2 %>
|
||||
<%= ad_banner_content %>
|
||||
<% end %>
|
||||
|
||||
<% if @show_back_and_next_flag==2 %>
|
||||
<%= content %>
|
||||
<% end %>
|
||||
|
||||
<script>
|
||||
(function($) {
|
||||
|
||||
function hideEmptyEl(el, elParent) {
|
||||
if( el.length === 0) {
|
||||
elParent.addClass('hide');
|
||||
}
|
||||
}
|
||||
|
||||
// Hiding parent element when children elements are not present
|
||||
// Tags
|
||||
hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap'));
|
||||
|
||||
// Attachments
|
||||
hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file'));
|
||||
|
||||
// Links
|
||||
hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link'));
|
||||
$("img[src='']").remove();
|
||||
$('.pause-slide').click(function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('pause');
|
||||
$(this).addClass('active');
|
||||
$(this).parents('.carousel_images').find('.resume-slide').removeClass('active');
|
||||
});
|
||||
$('.resume-slide').click(function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('resume');
|
||||
$(this).addClass('active');
|
||||
$(this).parents('.carousel_images').find('.pause-slide').removeClass('active');
|
||||
});
|
||||
$('.next-button').off('click').on('click',function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("next");
|
||||
})
|
||||
$('.prev-button').off('click').on('click',function(){
|
||||
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("prev");
|
||||
})
|
||||
window.active_slide = 0;
|
||||
$('.prev_img').off('click').on('click',function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
if(carousel_images_slide.find(">li").length > content_size && active_slide > 0){
|
||||
active_slide -= content_size;
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
$('.next_img').off('click').on('click',function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
var li_length = carousel_images_slide.find(">li").length;
|
||||
if(li_length > content_size){
|
||||
active_slide += content_size;
|
||||
active_slide = Math.min(active_slide,li_length - 1);
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
$(".carousel_img_item img").off("click").on("click",function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle($(this).index(".carousel_img_item img"));
|
||||
})
|
||||
$(document).ready(function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle('pause');
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
$(".carousel_images .cycle-slideshow").cycle('resume');
|
||||
$('.carousel_images .resume-slide').addClass('active');
|
||||
$('.cycle-slideshow').on('cycle-after',function(){
|
||||
$(".active_slide").text($('.event_carousel_slide.cycle-slide-active').index());
|
||||
})
|
||||
})
|
||||
$(window).on("load",function(){
|
||||
$(".carousel_images .cycle-slideshow").cycle('pause');
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
$(".carousel_images .cycle-slideshow").cycle('resume');
|
||||
})
|
||||
$(window).resize(function(){
|
||||
var carousel_images_slide = $('.carousel_images_slide');
|
||||
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
|
||||
if(carousel_images_slide_first_child.length > 0){
|
||||
var content_size = Math.floor((carousel_images_slide.outerWidth() - Number.parseInt(carousel_images_slide.css('font-size')) * 3) / carousel_images_slide_first_child.outerWidth(true));
|
||||
content_size = Math.max(content_size,1);
|
||||
carousel_images_slide.find(">li").css("display","none");
|
||||
var active_count = carousel_images_slide.find(">li").length - active_slide;
|
||||
if(active_count < content_size){
|
||||
active_slide -= (content_size - active_count);
|
||||
}
|
||||
active_slide = Math.max(active_slide,0);
|
||||
console.log(content_size)
|
||||
for(var i = active_slide; i < active_slide + content_size;i++){
|
||||
carousel_images_slide.find(">li").eq(i).css("display","block");
|
||||
}
|
||||
}
|
||||
var carousel_image_block_width = $('.carousel_images').width();
|
||||
$(".event_carousel_slide").css("height",'');
|
||||
var heights = $(".event_carousel_slide").map(function(i,v){
|
||||
return $(v).height() * carousel_image_block_width / $(v).width();
|
||||
})
|
||||
var max_height = Math.max.apply(null,heights);
|
||||
$(".event_carousel_slide").each(function(i,v){
|
||||
$(v).height(max_height);
|
||||
})
|
||||
})
|
||||
}(jQuery));
|
||||
</script>
|
|
@ -1,15 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= render_site_title %></title>
|
||||
<%= stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css"%>
|
||||
<%= stylesheet_link_tag "event_news/bootstrap/bootstrap.min.css"%>
|
||||
<%= stylesheet_link_tag "template/template"%>
|
||||
<%= javascript_include_tag "jquery.min"%>
|
||||
<%= javascript_include_tag "bootstrap.min"%>
|
||||
</head>
|
||||
<body>
|
||||
<% @target_action = "show_widget" %>
|
||||
<%=render_view_for_event_news((!params[:layout_type].blank? ? params[:layout_type] : 'event_news_index1'))%>
|
||||
</body>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= render_site_title %></title>
|
||||
<%= stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css"%>
|
||||
<%= stylesheet_link_tag "event_news/bootstrap/bootstrap.min.css"%>
|
||||
<%= stylesheet_link_tag "template/template"%>
|
||||
<%= javascript_include_tag "jquery.min"%>
|
||||
<%= javascript_include_tag "bootstrap.min"%>
|
||||
</head>
|
||||
<body>
|
||||
<% @target_action = "show_widget" %>
|
||||
<%=render_view_for_event_news((!params[:layout_type].blank? ? params[:layout_type] : 'event_news_index1'))%>
|
||||
</body>
|
||||
</html>
|
|
@ -1,16 +1,16 @@
|
|||
xml.instruct! :xml, :version => "1.0"
|
||||
xml.rss :version => "2.0" do
|
||||
xml.channel do
|
||||
xml.title @bf.title
|
||||
xml.link "/xhr/event_news/rssfeed/#{params[:uid]}.rss"
|
||||
|
||||
for e in @event_news
|
||||
xml.item do
|
||||
xml.title e.title
|
||||
xml.description e.subtitle
|
||||
xml.pubDate e.created_at.to_s(:rfc822)
|
||||
xml.link page_for_event_news(e)
|
||||
end
|
||||
end
|
||||
end
|
||||
xml.instruct! :xml, :version => "1.0"
|
||||
xml.rss :version => "2.0" do
|
||||
xml.channel do
|
||||
xml.title @bf.title
|
||||
xml.link "/xhr/event_news/rssfeed/#{params[:uid]}.rss"
|
||||
|
||||
for e in @event_news
|
||||
xml.item do
|
||||
xml.title e.title
|
||||
xml.description e.subtitle
|
||||
xml.pubDate e.created_at.to_s(:rfc822)
|
||||
xml.link page_for_event_news(e)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
36
bin/rails
36
bin/rails
|
@ -1,18 +1,18 @@
|
|||
#!/usr/bin/env ruby
|
||||
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
|
||||
|
||||
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
||||
ENGINE_PATH = File.expand_path('../../lib/announcement/engine', __FILE__)
|
||||
|
||||
# Set up gems listed in the Gemfile.
|
||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
||||
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
||||
|
||||
# require 'rails/all'
|
||||
# require 'rails/engine/commands'
|
||||
require "action_controller/railtie"
|
||||
require "action_mailer/railtie"
|
||||
require "sprockets/railtie"
|
||||
require "rails/test_unit/railtie"
|
||||
require 'rails/engine/commands'
|
||||
require "mongoid/railtie"
|
||||
#!/usr/bin/env ruby
|
||||
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
|
||||
|
||||
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
||||
ENGINE_PATH = File.expand_path('../../lib/announcement/engine', __FILE__)
|
||||
|
||||
# Set up gems listed in the Gemfile.
|
||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
||||
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
||||
|
||||
# require 'rails/all'
|
||||
# require 'rails/engine/commands'
|
||||
require "action_controller/railtie"
|
||||
require "action_mailer/railtie"
|
||||
require "sprockets/railtie"
|
||||
require "rails/test_unit/railtie"
|
||||
require 'rails/engine/commands'
|
||||
require "mongoid/railtie"
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
require 'rufus-scheduler'
|
||||
|
||||
scheduler = Rufus::Scheduler.new
|
||||
|
||||
#return if defined?(Rails::Console) || Rails.env.test? || File.split($0).last == 'rake'
|
||||
|
||||
scheduler.cron '43 2 * * *' do
|
||||
system('bundle exec rake event_news:remove_preview_event_news')
|
||||
end
|
||||
require 'rufus-scheduler'
|
||||
|
||||
scheduler = Rufus::Scheduler.new
|
||||
|
||||
#return if defined?(Rails::Console) || Rails.env.test? || File.split($0).last == 'rake'
|
||||
|
||||
scheduler.cron '43 2 * * *' do
|
||||
system('bundle exec rake event_news:remove_preview_event_news')
|
||||
end
|
||||
|
|
|
@ -1,178 +1,183 @@
|
|||
en:
|
||||
module_name:
|
||||
event_news: Event News
|
||||
event_news:
|
||||
title: Title
|
||||
all_day: All Day
|
||||
show_today_data_first: Show today data first
|
||||
custom_fields_title: Custom Fields Title
|
||||
custom_carousel_image_width_hint: "If blank, width will be default value."
|
||||
carousel_image_width: Carousel Image Width
|
||||
default_carousel_image_width: Default Carousel Image Width
|
||||
place: Place
|
||||
cover_image_display_setting: Cover Image display setting
|
||||
full_width: Full width
|
||||
up_left_corner: Up-left corner
|
||||
up_right_corner: Up-right corner
|
||||
all_tabs_setting: '"All" tab setting'
|
||||
the_same_as_data_count: The same as data count
|
||||
display_all_in_other_tabs: Display all contents in other tabs
|
||||
read_more_position_options: '"read more" button position'
|
||||
default: Default
|
||||
upper_left: Upper left
|
||||
lower_left: Lower left
|
||||
upper_right: Upper right
|
||||
lower_right: Lower right
|
||||
tabs_options: Tabs options
|
||||
not_enable_tabs: Not enable tabs
|
||||
enable_tabs_with_categories_include_all: Enable tabs with categories(include all)
|
||||
enable_tabs_with_categories: Enable tabs with categories
|
||||
notes: Notes
|
||||
speaker: Speaker
|
||||
host: Host
|
||||
event_date: Event Date
|
||||
event_end_date: Event End Date
|
||||
start_date: Start date
|
||||
end_date: End date
|
||||
add_to_calendar: Add to calendar
|
||||
blank_to_set: (blank to use event news setting)
|
||||
stime: start time
|
||||
etime: end time
|
||||
select_prompt: --select category--
|
||||
all: All
|
||||
keywords: Keywords
|
||||
enable_search: Enable search feature
|
||||
'yes': 'Yes'
|
||||
'no': 'No'
|
||||
image: Cover Image
|
||||
carousel_image: Carousel Image
|
||||
carousel_image_title: Carousel Image(display at the bottom of show page)
|
||||
picture_showing_size: Picture Showing Size
|
||||
orignal_size: Original Size
|
||||
small_size: Small Size
|
||||
medium_size: Medium Size
|
||||
showing_back_and_next: Show back and next
|
||||
not_show: Not show
|
||||
show_top: Show at top
|
||||
show_bottom: Show at bottom
|
||||
prev: previous
|
||||
next: next
|
||||
table:
|
||||
title : Title
|
||||
date : Date
|
||||
status : Status
|
||||
sub_title: Sub Title
|
||||
category: Category
|
||||
author: Author
|
||||
link: Link
|
||||
file: File
|
||||
view_count: View Count
|
||||
department: Department
|
||||
add_new: Add New
|
||||
export_to_excel: Export to Excel
|
||||
export_all_anns: Export all Event News
|
||||
import_from_excel: Import from Excel
|
||||
download_example_sheet_here: Download example sheet here
|
||||
please_create_tags_cats: Please create all the tags and categories before hand. Only excel file is allowed
|
||||
create_atleast_one_cat: Please create atleast one category before importing.
|
||||
import_from_wp_xml: Import from WordPress XML
|
||||
click_on_submit: Click on Submit to save the changes
|
||||
approvers_list: Approvers List
|
||||
click_set_sub_manager: Click here to set Sub Managers for this module
|
||||
approver: Approver
|
||||
top_limit: Top Limit
|
||||
for_unlimited: Put 0 for unlimited
|
||||
feed_name: Feed Name
|
||||
rssfeed: RSS Feed Link
|
||||
jsonfeed: JSON Feed Link
|
||||
feed_list: Feed List
|
||||
approve: Approve
|
||||
all_articles: All Articles
|
||||
settings: Settings
|
||||
import: Import / Export
|
||||
event_news_module: Event News
|
||||
approval_setting: Approval Setting
|
||||
approve_event_news_fail: Approval Fail
|
||||
approve_event_news_success: Approve Successfully
|
||||
approval_waiting: Approval
|
||||
submitted_new_event_news: "%{poster} submitted a new event news waiting for your approval."
|
||||
click_here_to_see: Please click the link below to view the event news.
|
||||
rejected_annoucement: has rejected your event news, because
|
||||
updated_annoucement: "%{poster} updated the rejected event news."
|
||||
event_news_subject: New event news waiting for approval
|
||||
approval_site: Site
|
||||
approval_mail_hi: Hello %{name},
|
||||
approval_event_news_title: Event News Title
|
||||
event_news: Event News
|
||||
categories: Categories
|
||||
create_event_news_success: Create Bulletin Successfully
|
||||
create_event_news_category_success: Create Category Successfully
|
||||
date: Event News Date
|
||||
default_widget:
|
||||
event_news_category_with_title: Bulletin Category with Title
|
||||
postdate: Post Date
|
||||
subtitle: Subtitle
|
||||
title: Title
|
||||
editing_event_news: Edit event news
|
||||
editing_event_news_category: Edit Category
|
||||
file: Attachment
|
||||
file_description: File Description
|
||||
file_name: File Name
|
||||
frontend:
|
||||
event_news: Event News front-end
|
||||
search_result: Search result
|
||||
link_name: Link Name
|
||||
new_event_news_category: New Bulletin Category
|
||||
picture: Cover Picture
|
||||
search: Search
|
||||
selected_file: Select File
|
||||
update_event_news_category_success: Update Category Successfully
|
||||
url: URL
|
||||
widget:
|
||||
event_news_and_web_links: Differential Nav.
|
||||
index: Index
|
||||
search: Search
|
||||
more_: "More "
|
||||
more: More
|
||||
email_reminder: Email Reminder
|
||||
activate_email_reminder: Activate Email Reminder
|
||||
email_sentdate: Email Time
|
||||
email_to: Email To
|
||||
mail_subject: this is an event news reminder from【%{site_title}】
|
||||
view_count: View Counts
|
||||
other_mailaddress: Other Email
|
||||
other_mailaddress_note: Divide different email accounts with ","
|
||||
mail_hi: Hi
|
||||
mail_url_view: This email is the reminder of an event news, please click the link for the details
|
||||
mail_source: Source
|
||||
mail_time: Time
|
||||
image_upload_size_note: The following recommendations %{image_upload_size} upload size
|
||||
resend_mail: Re-send Email
|
||||
is_external_link: Enable External Link
|
||||
external_link: External Link
|
||||
external_link_hint: "Make sure URL starts with http://"
|
||||
display_subtitle: Display Subtitle in Content Page
|
||||
display_img: Display Cover Image in Content Page
|
||||
is_display_edit_only: Only display editable event news
|
||||
only_manager_can_edit_status: Only manager can edit status of event news
|
||||
layout_type: Layout type
|
||||
event_news_setting_for_iframe: Event News settings for iframe
|
||||
url_generate: Url Generate
|
||||
show_page: Show pagination
|
||||
URL: URL
|
||||
copy: Copy
|
||||
month_name:
|
||||
'1': 'January'
|
||||
'2': 'February'
|
||||
'3': 'March'
|
||||
'4': 'April'
|
||||
'5': 'May'
|
||||
'6': 'June'
|
||||
'7': 'July'
|
||||
'8': 'August'
|
||||
'9': 'September'
|
||||
'10': 'October'
|
||||
'11': 'November'
|
||||
'12': 'December'
|
||||
calendar_title: "%{month} %{year}"
|
||||
ad_banner_location: Ad Banner Location(Need to Upload in Edit Page)
|
||||
en:
|
||||
module_name:
|
||||
event_news: Event News
|
||||
event_news:
|
||||
event_date_setting: "Event date setting"
|
||||
event_date_use_default_setting: "Event date use default setting"
|
||||
including_day_of_the_week: "Including day of the week"
|
||||
including_time: "Including time"
|
||||
hour_clock_24: "24 hour clock"
|
||||
title: Title
|
||||
all_day: All Day
|
||||
show_today_data_first: Show today data first
|
||||
custom_fields_title: Custom Fields Title
|
||||
custom_carousel_image_width_hint: "If blank, width will be default value."
|
||||
carousel_image_width: Carousel Image Width
|
||||
default_carousel_image_width: Default Carousel Image Width
|
||||
place: Place
|
||||
cover_image_display_setting: Cover Image display setting
|
||||
full_width: Full width
|
||||
up_left_corner: Up-left corner
|
||||
up_right_corner: Up-right corner
|
||||
all_tabs_setting: '"All" tab setting'
|
||||
the_same_as_data_count: The same as data count
|
||||
display_all_in_other_tabs: Display all contents in other tabs
|
||||
read_more_position_options: '"read more" button position'
|
||||
default: Default
|
||||
upper_left: Upper left
|
||||
lower_left: Lower left
|
||||
upper_right: Upper right
|
||||
lower_right: Lower right
|
||||
tabs_options: Tabs options
|
||||
not_enable_tabs: Not enable tabs
|
||||
enable_tabs_with_categories_include_all: Enable tabs with categories(include all)
|
||||
enable_tabs_with_categories: Enable tabs with categories
|
||||
notes: Notes
|
||||
speaker: Speaker
|
||||
host: Host
|
||||
event_date: Event Date
|
||||
event_end_date: Event End Date
|
||||
start_date: Start date
|
||||
end_date: End date
|
||||
add_to_calendar: Add to calendar
|
||||
blank_to_set: (blank to use event news setting)
|
||||
stime: start time
|
||||
etime: end time
|
||||
select_prompt: --select category--
|
||||
all: All
|
||||
keywords: Keywords
|
||||
enable_search: Enable search feature
|
||||
'yes': 'Yes'
|
||||
'no': 'No'
|
||||
image: Cover Image
|
||||
carousel_image: Carousel Image
|
||||
carousel_image_title: Carousel Image(display at the bottom of show page)
|
||||
picture_showing_size: Picture Showing Size
|
||||
orignal_size: Original Size
|
||||
small_size: Small Size
|
||||
medium_size: Medium Size
|
||||
showing_back_and_next: Show back and next
|
||||
not_show: Not show
|
||||
show_top: Show at top
|
||||
show_bottom: Show at bottom
|
||||
prev: previous
|
||||
next: next
|
||||
table:
|
||||
title : Title
|
||||
date : Date
|
||||
status : Status
|
||||
sub_title: Sub Title
|
||||
category: Category
|
||||
author: Author
|
||||
link: Link
|
||||
file: File
|
||||
view_count: View Count
|
||||
department: Department
|
||||
add_new: Add New
|
||||
export_to_excel: Export to Excel
|
||||
export_all_anns: Export all Event News
|
||||
import_from_excel: Import from Excel
|
||||
download_example_sheet_here: Download example sheet here
|
||||
please_create_tags_cats: Please create all the tags and categories before hand. Only excel file is allowed
|
||||
create_atleast_one_cat: Please create atleast one category before importing.
|
||||
import_from_wp_xml: Import from WordPress XML
|
||||
click_on_submit: Click on Submit to save the changes
|
||||
approvers_list: Approvers List
|
||||
click_set_sub_manager: Click here to set Sub Managers for this module
|
||||
approver: Approver
|
||||
top_limit: Top Limit
|
||||
for_unlimited: Put 0 for unlimited
|
||||
feed_name: Feed Name
|
||||
rssfeed: RSS Feed Link
|
||||
jsonfeed: JSON Feed Link
|
||||
feed_list: Feed List
|
||||
approve: Approve
|
||||
all_articles: All Articles
|
||||
settings: Settings
|
||||
import: Import / Export
|
||||
event_news_module: Event News
|
||||
approval_setting: Approval Setting
|
||||
approve_event_news_fail: Approval Fail
|
||||
approve_event_news_success: Approve Successfully
|
||||
approval_waiting: Approval
|
||||
submitted_new_event_news: "%{poster} submitted a new event news waiting for your approval."
|
||||
click_here_to_see: Please click the link below to view the event news.
|
||||
rejected_annoucement: has rejected your event news, because
|
||||
updated_annoucement: "%{poster} updated the rejected event news."
|
||||
event_news_subject: New event news waiting for approval
|
||||
approval_site: Site
|
||||
approval_mail_hi: Hello %{name},
|
||||
approval_event_news_title: Event News Title
|
||||
event_news: Event News
|
||||
categories: Categories
|
||||
create_event_news_success: Create Bulletin Successfully
|
||||
create_event_news_category_success: Create Category Successfully
|
||||
date: Event News Date
|
||||
default_widget:
|
||||
event_news_category_with_title: Bulletin Category with Title
|
||||
postdate: Post Date
|
||||
subtitle: Subtitle
|
||||
title: Title
|
||||
editing_event_news: Edit event news
|
||||
editing_event_news_category: Edit Category
|
||||
file: Attachment
|
||||
file_description: File Description
|
||||
file_name: File Name
|
||||
frontend:
|
||||
event_news: Event News front-end
|
||||
search_result: Search result
|
||||
link_name: Link Name
|
||||
new_event_news_category: New Bulletin Category
|
||||
picture: Cover Picture
|
||||
search: Search
|
||||
selected_file: Select File
|
||||
update_event_news_category_success: Update Category Successfully
|
||||
url: URL
|
||||
widget:
|
||||
event_news_and_web_links: Differential Nav.
|
||||
index: Index
|
||||
search: Search
|
||||
more_: "More "
|
||||
more: More
|
||||
email_reminder: Email Reminder
|
||||
activate_email_reminder: Activate Email Reminder
|
||||
email_sentdate: Email Time
|
||||
email_to: Email To
|
||||
mail_subject: this is an event news reminder from【%{site_title}】
|
||||
view_count: View Counts
|
||||
other_mailaddress: Other Email
|
||||
other_mailaddress_note: Divide different email accounts with ","
|
||||
mail_hi: Hi
|
||||
mail_url_view: This email is the reminder of an event news, please click the link for the details
|
||||
mail_source: Source
|
||||
mail_time: Time
|
||||
image_upload_size_note: The following recommendations %{image_upload_size} upload size
|
||||
resend_mail: Re-send Email
|
||||
is_external_link: Enable External Link
|
||||
external_link: External Link
|
||||
external_link_hint: "Make sure URL starts with http://"
|
||||
display_subtitle: Display Subtitle in Content Page
|
||||
display_img: Display Cover Image in Content Page
|
||||
is_display_edit_only: Only display editable event news
|
||||
only_manager_can_edit_status: Only manager can edit status of event news
|
||||
layout_type: Layout type
|
||||
event_news_setting_for_iframe: Event News settings for iframe
|
||||
url_generate: Url Generate
|
||||
show_page: Show pagination
|
||||
URL: URL
|
||||
copy: Copy
|
||||
month_name:
|
||||
'1': 'January'
|
||||
'2': 'February'
|
||||
'3': 'March'
|
||||
'4': 'April'
|
||||
'5': 'May'
|
||||
'6': 'June'
|
||||
'7': 'July'
|
||||
'8': 'August'
|
||||
'9': 'September'
|
||||
'10': 'October'
|
||||
'11': 'November'
|
||||
'12': 'December'
|
||||
calendar_title: "%{month} %{year}"
|
||||
ad_banner_location: Ad Banner Location(Need to Upload in Edit Page)
|
||||
|
|
|
@ -2,6 +2,11 @@ zh_tw:
|
|||
module_name:
|
||||
event_news: 活動公告
|
||||
event_news:
|
||||
event_date_setting: "事件日期設定"
|
||||
event_date_use_default_setting: "使用預設的事件日期設定"
|
||||
including_day_of_the_week: "包含星期幾"
|
||||
including_time: "包含時間"
|
||||
hour_clock_24: "24小時制"
|
||||
title: 講題
|
||||
all_day: 全天
|
||||
show_today_data_first: 優先顯示當日資料
|
||||
|
@ -135,7 +140,7 @@ zh_tw:
|
|||
event_news_and_web_links: 分眾頁籤
|
||||
index: 索引
|
||||
search: 搜尋
|
||||
more: 更多+
|
||||
more: 更多→
|
||||
more_: 更多
|
||||
email_reminder: 寄送提醒
|
||||
activate_email_reminder: 開啟寄送提醒
|
||||
|
|
104
config/routes.rb
104
config/routes.rb
|
@ -1,52 +1,52 @@
|
|||
Rails.application.routes.draw do
|
||||
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
|
||||
Thread.new do
|
||||
EventNewsFeedCache.regenerate_all
|
||||
end
|
||||
end
|
||||
locales = Site.first.in_use_locales rescue I18n.available_locales
|
||||
|
||||
scope "(:locale)", locale: Regexp.new(locales.join("|")) do
|
||||
namespace :admin do
|
||||
post 'event_news/preview', to: 'event_news#preview'
|
||||
post 'event_news/createfeed', to: 'event_news#createfeed'
|
||||
post 'event_news/importanns', to: 'event_news#importanns'
|
||||
post 'event_news/import_from_xml', to: 'event_news#import_from_xml'
|
||||
get 'event_news/excel_format', to: 'event_news#excel_format'
|
||||
get 'event_news/export_excel', to: 'event_news#export_excel'
|
||||
patch 'event_news/updatefeed', to: 'event_news#updatefeed'
|
||||
delete 'event_news/deletefeed', to: 'event_news#deletefeed'
|
||||
get 'event_news/destroy_preview/:slug_title-:uid', to: 'event_news#destroy_preview'
|
||||
post 'event_news/approve_event_news', to: 'event_news#approve_event_news'
|
||||
get 'event_news/feed', to: 'event_news#feed'
|
||||
get 'event_news/feedform', to: 'event_news#feedform'
|
||||
get 'event_news/settings', to: 'event_news#settings'
|
||||
get 'event_news/import', to: 'event_news#import'
|
||||
post 'event_news/createsettings', to: 'event_news#createsettings'
|
||||
patch 'event_news/updatesettings', to: 'event_news#updatesettings'
|
||||
post 'event_news/import_from_wp', to: 'event_news#import_from_wp'
|
||||
post 'event_news/generate_iframe_url' => 'event_news#generate_iframe_url'
|
||||
resources :event_news do
|
||||
collection do
|
||||
get 'custom_fields_title'
|
||||
post 'update_custom_title'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
resources :event_news do
|
||||
collection do
|
||||
get ':slug_title-:uid', to: 'event_news#show', as: :display
|
||||
end
|
||||
end
|
||||
get '/xhr/event_news/agenda' => 'event_news#agenda'
|
||||
get "/xhr/event_news/feed/:uid" => "event_news_feeds#feed"
|
||||
get "/xhr/event_news/rssfeed/:uid" => "event_news_feeds#rssfeed"
|
||||
get "/xhr/event_news/feeds" => "event_news_feeds#feeds"
|
||||
get '/xhr/event_news/event_news.json', to: 'event_news_module#get_event_news'
|
||||
get '/xhr/panel/event_news/widget/sync_data' => 'event_news#show_widget'
|
||||
get '/xhr/event_news/file/:id/*f_name', to: 'event_news#get_file', format: false
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Rails.application.routes.draw do
|
||||
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
|
||||
Thread.new do
|
||||
EventNewsFeedCache.regenerate_all
|
||||
end
|
||||
end
|
||||
locales = Site.first.in_use_locales rescue I18n.available_locales
|
||||
|
||||
scope "(:locale)", locale: Regexp.new(locales.join("|")) do
|
||||
namespace :admin do
|
||||
post 'event_news/preview', to: 'event_news#preview'
|
||||
post 'event_news/createfeed', to: 'event_news#createfeed'
|
||||
post 'event_news/importanns', to: 'event_news#importanns'
|
||||
post 'event_news/import_from_xml', to: 'event_news#import_from_xml'
|
||||
get 'event_news/excel_format', to: 'event_news#excel_format'
|
||||
get 'event_news/export_excel', to: 'event_news#export_excel'
|
||||
patch 'event_news/updatefeed', to: 'event_news#updatefeed'
|
||||
delete 'event_news/deletefeed', to: 'event_news#deletefeed'
|
||||
get 'event_news/destroy_preview/:slug_title-:uid', to: 'event_news#destroy_preview'
|
||||
post 'event_news/approve_event_news', to: 'event_news#approve_event_news'
|
||||
get 'event_news/feed', to: 'event_news#feed'
|
||||
get 'event_news/feedform', to: 'event_news#feedform'
|
||||
get 'event_news/settings', to: 'event_news#settings'
|
||||
get 'event_news/import', to: 'event_news#import'
|
||||
post 'event_news/createsettings', to: 'event_news#createsettings'
|
||||
patch 'event_news/updatesettings', to: 'event_news#updatesettings'
|
||||
post 'event_news/import_from_wp', to: 'event_news#import_from_wp'
|
||||
post 'event_news/generate_iframe_url' => 'event_news#generate_iframe_url'
|
||||
resources :event_news do
|
||||
collection do
|
||||
get 'custom_fields_title'
|
||||
post 'update_custom_title'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
resources :event_news do
|
||||
collection do
|
||||
get ':slug_title-:uid', to: 'event_news#show', as: :display
|
||||
end
|
||||
end
|
||||
get '/xhr/event_news/agenda' => 'event_news#agenda'
|
||||
get "/xhr/event_news/feed/:uid" => "event_news_feeds#feed"
|
||||
get "/xhr/event_news/rssfeed/:uid" => "event_news_feeds#rssfeed"
|
||||
get "/xhr/event_news/feeds" => "event_news_feeds#feeds"
|
||||
get '/xhr/event_news/event_news.json', to: 'event_news_module#get_event_news'
|
||||
get '/xhr/panel/event_news/widget/sync_data' => 'event_news#show_widget'
|
||||
get '/xhr/event_news/file/:id/*f_name', to: 'event_news#get_file', format: false
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1,103 +1,104 @@
|
|||
# encoding: UTF-8
|
||||
$:.push File.expand_path("../lib", __FILE__)
|
||||
|
||||
# Maintain your gem's version:
|
||||
require "event_news_mod/version"
|
||||
bundle_update_flag = ARGV[0]=='update' || ARGV[0]=='install'
|
||||
if bundle_update_flag
|
||||
require File.expand_path("../update_event_news", __FILE__)
|
||||
env_pwd = ENV['PWD']
|
||||
app_path = File.expand_path(__dir__)
|
||||
template_path = env_pwd + '/app/templates'
|
||||
all_template = Dir.glob(template_path+'/*/')
|
||||
default_event_news_widget_info = JSON.parse(File.read("#{app_path}/modules/event_news/info.json"))["widgets"].sort_by{|h| h["filename"].to_i} rescue []
|
||||
all_template.each do |folder|
|
||||
if !folder.include?('mobile')
|
||||
info_json_file = "#{folder}modules/event_news/info.json"
|
||||
if File.exist?(info_json_file)
|
||||
Bundler.with_clean_env{system ('cp -f '+ app_path + '/modules/event_news/show.html.erb ' + "#{folder}modules/event_news/.")}
|
||||
update_event_news_template(folder)
|
||||
begin
|
||||
file_text = File.read(info_json_file) rescue ""
|
||||
encode_file_text = file_text.encode("UTF-8", "UTF-8", invalid: :replace, replace: "???")
|
||||
next if (encode_file_text.include?("???") rescue true)
|
||||
info = JSON.parse(encode_file_text) rescue {}
|
||||
flag = (info.count != 0 rescue false)
|
||||
if flag
|
||||
puts "Checking event_news widgets"
|
||||
widget_info = info["widgets"].sort_by{|h| h["filename"].to_i} rescue []
|
||||
update_flag = false
|
||||
last_index = widget_info.collect{|v| v["filename"].to_s.scan(/\d+/).collect{|v1| v1.to_i}}.flatten.sort[-1] rescue nil
|
||||
if !last_index.nil?
|
||||
idx_regex = /^(\d+[\. \t]*)|[ \t]+$/
|
||||
default_event_news_widget_info.each do |h|
|
||||
name_without_index = h["name"]["zh_tw"].gsub(idx_regex,'')
|
||||
widget_info_index = (widget_info.index{|hh| hh["name"]["zh_tw"].gsub(idx_regex,'') == name_without_index}||-1 rescue -1)
|
||||
if widget_info_index == -1
|
||||
update_flag = true
|
||||
copy_h = h.dup
|
||||
h.delete("force_cover")
|
||||
last_index = last_index + 1
|
||||
copy_h["filename"] = copy_h["filename"].sub(/\d+/){|ff| last_index.to_s}
|
||||
copy_h["name"].keys.each do |locale|
|
||||
copy_h["name"][locale] = copy_h["name"][locale].sub(/\d+/){|ff| last_index.to_s}
|
||||
end
|
||||
widget_info << copy_h
|
||||
Bundler.with_clean_env{%x[cp -f #{app_path}/modules/event_news/_#{h["filename"]}.html.erb #{folder}modules/event_news/_#{copy_h["filename"]}.html.erb]}
|
||||
elsif h["force_cover"] == "true"
|
||||
Bundler.with_clean_env{%x[cp -f #{app_path}/modules/event_news/_#{h["filename"]}.html.erb #{folder}modules/event_news/_#{widget_info[widget_info_index]["filename"]}.html.erb]}
|
||||
end
|
||||
end
|
||||
if update_flag
|
||||
info["widgets"] = widget_info
|
||||
puts "Writing json #{info["widgets"].count} in #{info_json_file}"
|
||||
begin
|
||||
info_json = JSON.pretty_generate(info).gsub(":[",":[\n").gsub(":{",":{\n")
|
||||
rescue
|
||||
info_json = info.to_s.gsub("=>",": \n")
|
||||
end
|
||||
File.open(info_json_file,"w+"){|f| f.write(info_json)}
|
||||
end
|
||||
end
|
||||
end
|
||||
rescue => e
|
||||
puts e
|
||||
puts "There has some error when checking event_news widgets"
|
||||
end
|
||||
else
|
||||
if !Dir.exist?(File.dirname(info_json_file)) && Dir.exist?(File.dirname(File.dirname(info_json_file)))
|
||||
Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# all_template.each do |folder|
|
||||
# if !folder.include?('mobile')
|
||||
# moudle_path = "#{folder}modules/universal_table/"
|
||||
# begin
|
||||
# if Dir.exist?(File.dirname(moudle_path))
|
||||
# Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
|
||||
# end
|
||||
# rescue => e
|
||||
# puts "There was some error when updating event_news widget."
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
end
|
||||
# Describe your gem and declare its dependencies:
|
||||
Gem::Specification.new do |s|
|
||||
s.name = "event_news_mod"
|
||||
s.version = EventNewsMod::VERSION
|
||||
s.authors = ["RulingDigital"]
|
||||
s.email = ["orbit@rulingcom.com"]
|
||||
s.homepage = "http://www.rulingcom.com"
|
||||
s.summary = "EventNews for Orbit"
|
||||
s.description = "EventNews for Orbit"
|
||||
s.license = "MIT"
|
||||
|
||||
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
|
||||
s.test_files = Dir["test/**/*"]
|
||||
|
||||
s.add_dependency "rufus-scheduler", "~> 3.6.0"
|
||||
end
|
||||
# encoding: UTF-8
|
||||
$:.push File.expand_path("../lib", __FILE__)
|
||||
|
||||
# Maintain your gem's version:
|
||||
require "event_news_mod/version"
|
||||
bundle_update_flag = ARGV[0]=='update' || ARGV[0]=='install'
|
||||
if bundle_update_flag
|
||||
require File.expand_path("../update_event_news", __FILE__)
|
||||
env_pwd = ENV['PWD']
|
||||
app_path = File.expand_path(__dir__)
|
||||
template_path = env_pwd + '/app/templates'
|
||||
all_template = Dir.glob(template_path+'/*/')
|
||||
default_event_news_widget_info = JSON.parse(File.read("#{app_path}/modules/event_news/info.json"))["widgets"].sort_by{|h| h["filename"].to_i} rescue []
|
||||
all_template.each do |folder|
|
||||
if !folder.include?('mobile')
|
||||
info_json_file = "#{folder}modules/event_news/info.json"
|
||||
if File.exist?(info_json_file)
|
||||
Bundler.with_clean_env{system ('cp -f '+ app_path + '/modules/event_news/show.html.erb ' + "#{folder}modules/event_news/.")}
|
||||
update_event_news_template(folder)
|
||||
begin
|
||||
file_text = File.read(info_json_file) rescue ""
|
||||
encode_file_text = file_text.encode("UTF-8", "UTF-8", invalid: :replace, replace: "???")
|
||||
next if (encode_file_text.include?("???") rescue true)
|
||||
info = JSON.parse(encode_file_text) rescue {}
|
||||
flag = (info.count != 0 rescue false)
|
||||
if flag
|
||||
puts "Checking event_news widgets"
|
||||
widget_info = info["widgets"].sort_by{|h| h["filename"].to_i} rescue []
|
||||
update_flag = false
|
||||
last_index = widget_info.collect{|v| v["filename"].to_s.scan(/\d+/).collect{|v1| v1.to_i}}.flatten.sort[-1] rescue nil
|
||||
if !last_index.nil?
|
||||
idx_regex = /^(\d+[\. \t]*)|[ \t]+$/
|
||||
default_event_news_widget_info.each do |h|
|
||||
name_without_index = h["name"]["zh_tw"].gsub(idx_regex,'')
|
||||
widget_info_index = (widget_info.index{|hh| hh["name"]["zh_tw"].gsub(idx_regex,'') == name_without_index}||-1 rescue -1)
|
||||
if widget_info_index == -1
|
||||
update_flag = true
|
||||
copy_h = h.dup
|
||||
h.delete("force_cover")
|
||||
last_index = last_index + 1
|
||||
copy_h["filename"] = copy_h["filename"].sub(/\d+/){|ff| last_index.to_s}
|
||||
copy_h["name"].keys.each do |locale|
|
||||
copy_h["name"][locale] = copy_h["name"][locale].sub(/\d+/){|ff| last_index.to_s}
|
||||
end
|
||||
widget_info << copy_h
|
||||
Bundler.with_clean_env{%x[cp -f #{app_path}/modules/event_news/_#{h["filename"]}.html.erb #{folder}modules/event_news/_#{copy_h["filename"]}.html.erb]}
|
||||
elsif h["force_cover"] == "true"
|
||||
puts "fffffffffffffff"
|
||||
Bundler.with_clean_env{%x[cp -f #{app_path}/modules/event_news/_#{h["filename"]}.html.erb #{folder}modules/event_news/_#{widget_info[widget_info_index]["filename"]}.html.erb]}
|
||||
end
|
||||
end
|
||||
if update_flag
|
||||
info["widgets"] = widget_info
|
||||
puts "Writing json #{info["widgets"].count} in #{info_json_file}"
|
||||
begin
|
||||
info_json = JSON.pretty_generate(info).gsub(":[",":[\n").gsub(":{",":{\n")
|
||||
rescue
|
||||
info_json = info.to_s.gsub("=>",": \n")
|
||||
end
|
||||
File.open(info_json_file,"w+"){|f| f.write(info_json)}
|
||||
end
|
||||
end
|
||||
end
|
||||
rescue => e
|
||||
puts e
|
||||
puts "There has some error when checking event_news widgets"
|
||||
end
|
||||
else
|
||||
if !Dir.exist?(File.dirname(info_json_file)) && Dir.exist?(File.dirname(File.dirname(info_json_file)))
|
||||
Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# all_template.each do |folder|
|
||||
# if !folder.include?('mobile')
|
||||
# moudle_path = "#{folder}modules/universal_table/"
|
||||
# begin
|
||||
# if Dir.exist?(File.dirname(moudle_path))
|
||||
# Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
|
||||
# end
|
||||
# rescue => e
|
||||
# puts "There was some error when updating event_news widget."
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
end
|
||||
# Describe your gem and declare its dependencies:
|
||||
Gem::Specification.new do |s|
|
||||
s.name = "event_news_mod"
|
||||
s.version = EventNewsMod::VERSION
|
||||
s.authors = ["RulingDigital"]
|
||||
s.email = ["orbit@rulingcom.com"]
|
||||
s.homepage = "http://www.rulingcom.com"
|
||||
s.summary = "EventNews for Orbit"
|
||||
s.description = "EventNews for Orbit"
|
||||
s.license = "MIT"
|
||||
|
||||
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
|
||||
s.test_files = Dir["test/**/*"]
|
||||
|
||||
s.add_dependency "rufus-scheduler", "~> 3.6.0"
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require "event_news_mod/engine"
|
||||
module EventNewsMod
|
||||
|
||||
end
|
||||
require "event_news_mod/engine"
|
||||
module EventNewsMod
|
||||
|
||||
end
|
||||
|
|
|
@ -1,172 +1,172 @@
|
|||
require "yaml"
|
||||
module EventNewsMod
|
||||
class Engine < ::Rails::Engine
|
||||
initializer "event_news" do
|
||||
begin
|
||||
translate_data = Dir["#{EventNewsMod::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
|
||||
data = {}
|
||||
key1 = {}
|
||||
key2 = {}
|
||||
key3 = {}
|
||||
key4 = {}
|
||||
key5 = {}
|
||||
key1_attr = []
|
||||
key2_attr = []
|
||||
key3_attr = []
|
||||
key4_attr = []
|
||||
data_item = {}
|
||||
key_item1 = {}
|
||||
key_item2 = {}
|
||||
key_item3 = {}
|
||||
value_item1 = {}
|
||||
value_item2 = {}
|
||||
value_item3 = {}
|
||||
value2_item1 = {}
|
||||
value2_item2 = {}
|
||||
key1_options = ['small_size','medium_size','orignal_size']
|
||||
key2_options = ['not_enable_tabs','enable_tabs_with_categories_include_all','enable_tabs_with_categories']
|
||||
key3_options = ['default','upper_left','lower_left','upper_right','lower_right']
|
||||
key4_options = ['the_same_as_data_count','display_all_in_other_tabs']
|
||||
#After fix I18n.load_path, translation can work there
|
||||
key5_attr = ['no_','yes_'].map{|v| I18n.available_locales.map{|k| I18n.with_locale(k){[k,I18n.t(v)]}}.to_h}
|
||||
key1_options.each_with_index do |k,i|
|
||||
key1_attr[i] = {}
|
||||
end
|
||||
key2_options.each_with_index do |k,i|
|
||||
key2_attr[i] = {}
|
||||
end
|
||||
key3_options.each_with_index do |k,i|
|
||||
key3_attr[i] = {}
|
||||
end
|
||||
key4_options.each_with_index do |k,i|
|
||||
key4_attr[i] = {}
|
||||
end
|
||||
translate_data.each do |t_data|
|
||||
v = t_data.values
|
||||
k = t_data.keys[0]
|
||||
key1[k] = v[0]['event_news']['picture_showing_size']
|
||||
key2[k] = v[0]['event_news']['tabs_options']
|
||||
key3[k] = v[0]['event_news']['read_more_position_options']
|
||||
key4[k] = v[0]['event_news']['all_tabs_setting']
|
||||
key5[k] = v[0]['event_news']['show_today_data_first']
|
||||
key1_options.each_with_index do |kk,i|
|
||||
key1_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key2_options.each_with_index do |kk,i|
|
||||
key2_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key3_options.each_with_index do |kk,i|
|
||||
key3_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key4_options.each_with_index do |kk,i|
|
||||
key4_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key_item1[k] = v[0]['event_news']['showing_back_and_next']
|
||||
key_item2[k] = v[0]['event_news']['enable_search']
|
||||
key_item3[k] = v[0]['event_news']['ad_banner_location']
|
||||
value_item1[k] = v[0]['event_news']['not_show']
|
||||
value_item2[k] = v[0]['event_news']['show_bottom']
|
||||
value_item3[k] = v[0]['event_news']['show_top']
|
||||
value2_item1[k] = v[0]['event_news']['no']
|
||||
value2_item2[k] = v[0]['event_news']['yes']
|
||||
end
|
||||
data[key1] = key1_attr
|
||||
data[key2] = key2_attr
|
||||
data[key3] = key3_attr
|
||||
data[key4] = key4_attr
|
||||
data[key5] = key5_attr
|
||||
data_item[key_item1] = [value_item1,value_item2,value_item3]
|
||||
data_item[key_item2] = [value2_item1,value2_item2]
|
||||
data_item[key_item3] = [value_item2,value_item3]
|
||||
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
|
||||
require File.expand_path('../../../app/models/event_news_cache', __FILE__)
|
||||
if defined?(EventNewsCache)
|
||||
EventNewsCache.destroy_all
|
||||
end
|
||||
require File.expand_path('../../../app/models/event_news_custom_title', __FILE__)
|
||||
if defined? EventNewsCustomTitle
|
||||
EventNewsCustomTitle.get_map
|
||||
end
|
||||
end
|
||||
rescue => e
|
||||
puts ['error in event_news',e,e.backtrace]
|
||||
end
|
||||
OrbitApp.registration "event_news", :type => "ModuleApp" do
|
||||
module_label "event_news.event_news"
|
||||
base_url File.expand_path File.dirname(__FILE__)
|
||||
widget_methods ["widget","random_event_news_widget", "tag_cloud"]
|
||||
widget_settings [{"data_count"=>30}]
|
||||
taggable "EventNews"
|
||||
categorizable
|
||||
authorizable
|
||||
frontend_enabled
|
||||
feeds_url "/xhr/event_news/feeds"
|
||||
data_count 1..30
|
||||
begin
|
||||
show_options data
|
||||
show_option_items data_item
|
||||
rescue => e
|
||||
puts ['there_was_no_show_option_method',e]
|
||||
end
|
||||
side_bar do
|
||||
head_label_i18n 'event_news.event_news', icon_class: "icons-megaphone"
|
||||
available_for "users"
|
||||
active_for_controllers (['admin/event_news'])
|
||||
head_link_path "admin_event_news_index_path"
|
||||
|
||||
context_link 'event_news.all_articles',
|
||||
:link_path=>"admin_event_news_index_path" ,
|
||||
:priority=>1,
|
||||
:active_for_action=>{'admin/event_news'=>'index'},
|
||||
:available_for => 'users'
|
||||
context_link 'new_',
|
||||
:link_path=>"new_admin_event_news_path" ,
|
||||
:priority=>2,
|
||||
:active_for_action=>{'admin/event_news'=>'new'},
|
||||
:available_for => 'sub_managers'
|
||||
context_link 'categories',
|
||||
:link_path=>"admin_module_app_categories_path" ,
|
||||
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
|
||||
:priority=>3,
|
||||
:active_for_action=>{'admin/event_news'=>'categories'},
|
||||
:active_for_category => 'EventNewsModule',
|
||||
:available_for => 'managers'
|
||||
context_link 'tags',
|
||||
:link_path=>"admin_module_app_tags_path" ,
|
||||
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
|
||||
:priority=>4,
|
||||
:active_for_action=>{'admin/event_news'=>'tags'},
|
||||
:active_for_tag => 'EventNewsModule',
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.custom_fields_title',
|
||||
:link_path=>"custom_fields_title_admin_event_news_index_path" ,
|
||||
:priority=>5,
|
||||
:active_for_action=>{'admin/event_news'=>'custom_fields_title'},
|
||||
:available_for => 'managers'
|
||||
|
||||
context_link 'event_news.feed_list',
|
||||
:link_path=>"admin_event_news_feed_path" ,
|
||||
:priority=>6,
|
||||
:active_for_action=>{'admin/event_news'=>'feed'},
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.import',
|
||||
:link_path=>"admin_event_news_import_path" ,
|
||||
:priority=>7,
|
||||
:active_for_action=>{'admin/event_news'=>'import'},
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.settings',
|
||||
:link_path=>"admin_event_news_settings_path" ,
|
||||
:priority=>8,
|
||||
:active_for_action=>{'admin/event_news'=>'settings'},
|
||||
:available_for => 'managers'
|
||||
end
|
||||
|
||||
end
|
||||
# temp = YAML.load_file(File.join(Rails.root,"config","mongoid.yml"))
|
||||
# dbsettings = temp["production"]["sessions"]["default"]
|
||||
# s = Moped::Session.new(dbsettings["hosts"])
|
||||
# s.use dbsettings["database"]
|
||||
# s[:bulletins].indexes.create({expirable_created_at: 1},{ expireAfterSeconds: 180 })
|
||||
end
|
||||
end
|
||||
require "yaml"
|
||||
module EventNewsMod
|
||||
class Engine < ::Rails::Engine
|
||||
initializer "event_news" do
|
||||
begin
|
||||
translate_data = Dir["#{EventNewsMod::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
|
||||
data = {}
|
||||
key1 = {}
|
||||
key2 = {}
|
||||
key3 = {}
|
||||
key4 = {}
|
||||
key5 = {}
|
||||
key1_attr = []
|
||||
key2_attr = []
|
||||
key3_attr = []
|
||||
key4_attr = []
|
||||
data_item = {}
|
||||
key_item1 = {}
|
||||
key_item2 = {}
|
||||
key_item3 = {}
|
||||
value_item1 = {}
|
||||
value_item2 = {}
|
||||
value_item3 = {}
|
||||
value2_item1 = {}
|
||||
value2_item2 = {}
|
||||
key1_options = ['small_size','medium_size','orignal_size']
|
||||
key2_options = ['not_enable_tabs','enable_tabs_with_categories_include_all','enable_tabs_with_categories']
|
||||
key3_options = ['default','upper_left','lower_left','upper_right','lower_right']
|
||||
key4_options = ['the_same_as_data_count','display_all_in_other_tabs']
|
||||
#After fix I18n.load_path, translation can work there
|
||||
key5_attr = ['no_','yes_'].map{|v| I18n.available_locales.map{|k| I18n.with_locale(k){[k,I18n.t(v)]}}.to_h}
|
||||
key1_options.each_with_index do |k,i|
|
||||
key1_attr[i] = {}
|
||||
end
|
||||
key2_options.each_with_index do |k,i|
|
||||
key2_attr[i] = {}
|
||||
end
|
||||
key3_options.each_with_index do |k,i|
|
||||
key3_attr[i] = {}
|
||||
end
|
||||
key4_options.each_with_index do |k,i|
|
||||
key4_attr[i] = {}
|
||||
end
|
||||
translate_data.each do |t_data|
|
||||
v = t_data.values
|
||||
k = t_data.keys[0]
|
||||
key1[k] = v[0]['event_news']['picture_showing_size']
|
||||
key2[k] = v[0]['event_news']['tabs_options']
|
||||
key3[k] = v[0]['event_news']['read_more_position_options']
|
||||
key4[k] = v[0]['event_news']['all_tabs_setting']
|
||||
key5[k] = v[0]['event_news']['show_today_data_first']
|
||||
key1_options.each_with_index do |kk,i|
|
||||
key1_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key2_options.each_with_index do |kk,i|
|
||||
key2_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key3_options.each_with_index do |kk,i|
|
||||
key3_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key4_options.each_with_index do |kk,i|
|
||||
key4_attr[i][k] = v[0]['event_news'][kk]
|
||||
end
|
||||
key_item1[k] = v[0]['event_news']['showing_back_and_next']
|
||||
key_item2[k] = v[0]['event_news']['enable_search']
|
||||
key_item3[k] = v[0]['event_news']['ad_banner_location']
|
||||
value_item1[k] = v[0]['event_news']['not_show']
|
||||
value_item2[k] = v[0]['event_news']['show_bottom']
|
||||
value_item3[k] = v[0]['event_news']['show_top']
|
||||
value2_item1[k] = v[0]['event_news']['no']
|
||||
value2_item2[k] = v[0]['event_news']['yes']
|
||||
end
|
||||
data[key1] = key1_attr
|
||||
data[key2] = key2_attr
|
||||
data[key3] = key3_attr
|
||||
data[key4] = key4_attr
|
||||
data[key5] = key5_attr
|
||||
data_item[key_item1] = [value_item1,value_item2,value_item3]
|
||||
data_item[key_item2] = [value2_item1,value2_item2]
|
||||
data_item[key_item3] = [value_item2,value_item3]
|
||||
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
|
||||
require File.expand_path('../../../app/models/event_news_cache', __FILE__)
|
||||
if defined?(EventNewsCache)
|
||||
EventNewsCache.destroy_all
|
||||
end
|
||||
require File.expand_path('../../../app/models/event_news_custom_title', __FILE__)
|
||||
if defined? EventNewsCustomTitle
|
||||
EventNewsCustomTitle.get_map
|
||||
end
|
||||
end
|
||||
rescue => e
|
||||
puts ['error in event_news',e,e.backtrace]
|
||||
end
|
||||
OrbitApp.registration "event_news", :type => "ModuleApp" do
|
||||
module_label "event_news.event_news"
|
||||
base_url File.expand_path File.dirname(__FILE__)
|
||||
widget_methods ["widget","random_event_news_widget", "tag_cloud"]
|
||||
widget_settings [{"data_count"=>30}]
|
||||
taggable "EventNews"
|
||||
categorizable
|
||||
authorizable
|
||||
frontend_enabled
|
||||
feeds_url "/xhr/event_news/feeds"
|
||||
data_count 1..30
|
||||
begin
|
||||
show_options data
|
||||
show_option_items data_item
|
||||
rescue => e
|
||||
puts ['there_was_no_show_option_method',e]
|
||||
end
|
||||
side_bar do
|
||||
head_label_i18n 'event_news.event_news', icon_class: "icons-megaphone"
|
||||
available_for "users"
|
||||
active_for_controllers (['admin/event_news'])
|
||||
head_link_path "admin_event_news_index_path"
|
||||
|
||||
context_link 'event_news.all_articles',
|
||||
:link_path=>"admin_event_news_index_path" ,
|
||||
:priority=>1,
|
||||
:active_for_action=>{'admin/event_news'=>'index'},
|
||||
:available_for => 'users'
|
||||
context_link 'new_',
|
||||
:link_path=>"new_admin_event_news_path" ,
|
||||
:priority=>2,
|
||||
:active_for_action=>{'admin/event_news'=>'new'},
|
||||
:available_for => 'sub_managers'
|
||||
context_link 'categories',
|
||||
:link_path=>"admin_module_app_categories_path" ,
|
||||
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
|
||||
:priority=>3,
|
||||
:active_for_action=>{'admin/event_news'=>'categories'},
|
||||
:active_for_category => 'EventNewsModule',
|
||||
:available_for => 'managers'
|
||||
context_link 'tags',
|
||||
:link_path=>"admin_module_app_tags_path" ,
|
||||
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
|
||||
:priority=>4,
|
||||
:active_for_action=>{'admin/event_news'=>'tags'},
|
||||
:active_for_tag => 'EventNewsModule',
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.custom_fields_title',
|
||||
:link_path=>"custom_fields_title_admin_event_news_index_path" ,
|
||||
:priority=>5,
|
||||
:active_for_action=>{'admin/event_news'=>'custom_fields_title'},
|
||||
:available_for => 'managers'
|
||||
|
||||
context_link 'event_news.feed_list',
|
||||
:link_path=>"admin_event_news_feed_path" ,
|
||||
:priority=>6,
|
||||
:active_for_action=>{'admin/event_news'=>'feed'},
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.import',
|
||||
:link_path=>"admin_event_news_import_path" ,
|
||||
:priority=>7,
|
||||
:active_for_action=>{'admin/event_news'=>'import'},
|
||||
:available_for => 'managers'
|
||||
context_link 'event_news.settings',
|
||||
:link_path=>"admin_event_news_settings_path" ,
|
||||
:priority=>8,
|
||||
:active_for_action=>{'admin/event_news'=>'settings'},
|
||||
:available_for => 'managers'
|
||||
end
|
||||
|
||||
end
|
||||
# temp = YAML.load_file(File.join(Rails.root,"config","mongoid.yml"))
|
||||
# dbsettings = temp["production"]["sessions"]["default"]
|
||||
# s = Moped::Session.new(dbsettings["hosts"])
|
||||
# s.use dbsettings["database"]
|
||||
# s[:bulletins].indexes.create({expirable_created_at: 1},{ expireAfterSeconds: 180 })
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,3 +1,3 @@
|
|||
module EventNewsMod
|
||||
VERSION = "0.0.1"
|
||||
end
|
||||
module EventNewsMod
|
||||
VERSION = "0.0.1"
|
||||
end
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
module EventNewsModel
|
||||
module Cache
|
||||
require 'active_support/concern'
|
||||
extend ActiveSupport::Concern
|
||||
included do
|
||||
before_save :do_before_save
|
||||
end
|
||||
def do_before_save
|
||||
if self.class == SubPart
|
||||
EventNewsCache.where(parent_id:self.id).destroy
|
||||
elsif self.class == EventNews || (self.class == Page && self.module == "event_news")
|
||||
if self.class == EventNews
|
||||
tmp_tag_ids = (Array(self.tag_ids) + Array(self.org_tag_ids)).uniq
|
||||
Thread.new do
|
||||
EventNewsCache.where(:uid.in => EventNewsFeed.where(:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}).pluck(:uid)).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
end
|
||||
EventNewsCache.all.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
module EventNewsModel
|
||||
module Cache
|
||||
require 'active_support/concern'
|
||||
extend ActiveSupport::Concern
|
||||
included do
|
||||
before_save :do_before_save
|
||||
end
|
||||
def do_before_save
|
||||
if self.class == SubPart
|
||||
EventNewsCache.where(parent_id:self.id).destroy
|
||||
elsif self.class == EventNews || (self.class == Page && self.module == "event_news")
|
||||
if self.class == EventNews
|
||||
tmp_tag_ids = (Array(self.tag_ids) + Array(self.org_tag_ids)).uniq
|
||||
Thread.new do
|
||||
EventNewsCache.where(:uid.in => EventNewsFeed.where(:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}).pluck(:uid)).each do |cache|
|
||||
cache.regenerate
|
||||
end
|
||||
end
|
||||
end
|
||||
EventNewsCache.all.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,8 +1,8 @@
|
|||
desc 'Remove duplicated EventNews created by preview'
|
||||
|
||||
namespace :event_news do
|
||||
task :remove_preview_event_news => [:environment] do
|
||||
event_news = EventNews.where(is_preview: true)
|
||||
event_news.destroy_all
|
||||
end
|
||||
end
|
||||
desc 'Remove duplicated EventNews created by preview'
|
||||
|
||||
namespace :event_news do
|
||||
task :remove_preview_event_news => [:environment] do
|
||||
event_news = EventNews.where(is_preview: true)
|
||||
event_news.destroy_all
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,34 +1,34 @@
|
|||
<div class="w-annc widget-announcement-1">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<div class="w-annc__subtitle">{{subtitle}}</div>
|
||||
<div class="w-annc__speaker" style="{{speaker-css}}">【{{speaker-head}}】 {{speaker}}</div>
|
||||
<div class="w-annc__host" style="{{host-css}}">【{{host-head}}】 {{host}}</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-1">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<div class="w-annc__subtitle">{{subtitle}}</div>
|
||||
<div class="w-annc__speaker" style="{{speaker-css}}">【{{speaker-head}}】 {{speaker}}</div>
|
||||
<div class="w-annc__host" style="{{host-css}}">【{{host-head}}】 {{host}}</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<div class="w-annc widget-announcement-10">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<h4 class="w-annc__entry-title col-sm-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-10">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<h4 class="w-annc__entry-title col-sm-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<div class="w-annc widget-announcement-11">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-11">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
<div class="w-annc widget-announcement-12">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-12">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
|
@ -1,27 +1,27 @@
|
|||
<div class="w-annc widget-announcement-13">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-13">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
|
@ -1,29 +1,29 @@
|
|||
<div class="w-annc widget-announcement-14">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<div class="w-annc__inner row">
|
||||
<div class="w-annc__img-wrap col-xs-4 bullseye">
|
||||
<img class="w-annc__img" src="{{main_picture}}" alt="{{main_picture_description}}" title="{{main_picture_description}}">
|
||||
</div>
|
||||
<ul class="w-annc__list col-xs-8" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__content row">
|
||||
<h4 class="w-annc__entry-title col-xs-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-xs-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-14">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<div class="w-annc__inner row">
|
||||
<div class="w-annc__img-wrap col-xs-4 bullseye">
|
||||
<img class="w-annc__img" src="{{main_picture}}" alt="{{main_picture_description}}" title="{{main_picture_description}}">
|
||||
</div>
|
||||
<ul class="w-annc__list col-xs-8" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__content row">
|
||||
<h4 class="w-annc__entry-title col-xs-9">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-xs-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,162 +1,162 @@
|
|||
<div class="w-annc widget-announcement-4 w-annc widget-announcement-15" style="position:relative;">
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<h2 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h2>
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div style="position: absolute;top: 50%;bottom: 50%;width:100%;">
|
||||
<button class="btn-left" title = "<%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %>" style="float: left;height: 2.5em; width: 2.5em;background: url(/assets/left-01.png) no-repeat;border: 0;background-size: contain;position: absolute;transition:.3s; left: 0.6%;"></button>
|
||||
<button class="btn-right" title = "<%= (I18n.locale.to_s =="zh_tw") ? "下一張" : "next" %>" style="float: right;;height: 2.5em; width: 2.5em;background: url(/assets/right-01.png) no-repeat;background-size: contain;border: 0;position: absolute;transition:.3s;right: 0.6%;"></button>
|
||||
</div>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item col-md-4">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<script>
|
||||
function combineul_{{subpart-id}}(){
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find('>li').eq(-1).after($(v).find('ul.w-annc__list').eq(i).html());
|
||||
var ullength = $(v).find('ul.w-annc__list').length;
|
||||
for(var i = 1;i < ullength;i++)
|
||||
$(v).find('ul.w-annc__list').eq(-1).remove();
|
||||
})
|
||||
};
|
||||
var num;
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
function reorganize_{{subpart-id}}(num){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').toArray();
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active") && !$(v).hasClass("hidden_item");
|
||||
})
|
||||
if(currentul == -1)
|
||||
currentul = 0;
|
||||
var li_active_idx = 0;
|
||||
if(currentul != 0)
|
||||
li_active_idx = $(uls[currentul]).find("li.w-annc__item").eq(0).index("li.w-annc__item");
|
||||
combineul_{{subpart-id}}();
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
var lilength = $(v).find('li.w-annc__item').length;
|
||||
var ul_length = Math.ceil(lilength/num);
|
||||
for(var ii=1;ii< ul_length;ii++){
|
||||
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
|
||||
clone_ul.empty();
|
||||
clone_ul.removeClass("active");
|
||||
clone_ul.css("display","");
|
||||
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
|
||||
var lihtml="";
|
||||
if(ii != (ul_length-1)){
|
||||
for(var j=0;j<num;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
}else{
|
||||
for(var j=0;j< lilength - num *(ul_length-1) ;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
};
|
||||
$(v).find('ul.w-annc__list').eq(-1).html(lihtml);
|
||||
}
|
||||
if(ul_length != 1 )
|
||||
for(var i=0;i< lilength -num ; i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove();
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css("display","none");
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('padding','0 1.125em');
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] button').css('z-index','10');
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left');
|
||||
var active_ul = $("[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item").eq(li_active_idx).parents("ul.w-annc__list");
|
||||
active_ul.addClass("active");
|
||||
active_ul.removeClass("hidden_item");
|
||||
active_ul.css("display","");
|
||||
};
|
||||
$(window).resize(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
$(document).ready(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
var flag=false;
|
||||
$('.btn-left').click(function(){
|
||||
if(!flag){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
|
||||
var ul_length = uls.length;
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active");
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
|
||||
if(currentul - 1 < 0)
|
||||
currentul += ul_length;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
|
||||
var active_item = $(uls[currentul-1]);
|
||||
active_item.addClass("active");
|
||||
active_item.find("li").css("display","block");
|
||||
flag=true;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
|
||||
};
|
||||
});
|
||||
$('.btn-right').click(function(){
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
if(!flag){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
|
||||
var ul_length = uls.length;
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active");
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
|
||||
if(currentul + 1 > ul_length - 1)
|
||||
currentul -= ul_length;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
|
||||
var active_item = $(uls[currentul+1]);
|
||||
active_item.addClass("active");
|
||||
active_item.find("li").css("display","block");
|
||||
flag=true;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
|
||||
};
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div class="w-annc widget-announcement-4 w-annc widget-announcement-15" style="position:relative;">
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<h2 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h2>
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div style="position: absolute;top: 50%;bottom: 50%;width:100%;">
|
||||
<button class="btn-left" title = "<%= (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" %>" style="float: left;height: 2.5em; width: 2.5em;background: url(/assets/left-01.png) no-repeat;border: 0;background-size: contain;position: absolute;transition:.3s; left: 0.6%;"></button>
|
||||
<button class="btn-right" title = "<%= (I18n.locale.to_s =="zh_tw") ? "下一張" : "next" %>" style="float: right;;height: 2.5em; width: 2.5em;background: url(/assets/right-01.png) no-repeat;background-size: contain;border: 0;position: absolute;transition:.3s;right: 0.6%;"></button>
|
||||
</div>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item col-md-4">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<script>
|
||||
function combineul_{{subpart-id}}(){
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find('>li').eq(-1).after($(v).find('ul.w-annc__list').eq(i).html());
|
||||
var ullength = $(v).find('ul.w-annc__list').length;
|
||||
for(var i = 1;i < ullength;i++)
|
||||
$(v).find('ul.w-annc__list').eq(-1).remove();
|
||||
})
|
||||
};
|
||||
var num;
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
function reorganize_{{subpart-id}}(num){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').toArray();
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active") && !$(v).hasClass("hidden_item");
|
||||
})
|
||||
if(currentul == -1)
|
||||
currentul = 0;
|
||||
var li_active_idx = 0;
|
||||
if(currentul != 0)
|
||||
li_active_idx = $(uls[currentul]).find("li.w-annc__item").eq(0).index("li.w-annc__item");
|
||||
combineul_{{subpart-id}}();
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
var lilength = $(v).find('li.w-annc__item').length;
|
||||
var ul_length = Math.ceil(lilength/num);
|
||||
for(var ii=1;ii< ul_length;ii++){
|
||||
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
|
||||
clone_ul.empty();
|
||||
clone_ul.removeClass("active");
|
||||
clone_ul.css("display","");
|
||||
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
|
||||
var lihtml="";
|
||||
if(ii != (ul_length-1)){
|
||||
for(var j=0;j<num;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
}else{
|
||||
for(var j=0;j< lilength - num *(ul_length-1) ;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
};
|
||||
$(v).find('ul.w-annc__list').eq(-1).html(lihtml);
|
||||
}
|
||||
if(ul_length != 1 )
|
||||
for(var i=0;i< lilength -num ; i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove();
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css("display","none");
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('padding','0 1.125em');
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] button').css('z-index','10');
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left');
|
||||
var active_ul = $("[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item").eq(li_active_idx).parents("ul.w-annc__list");
|
||||
active_ul.addClass("active");
|
||||
active_ul.removeClass("hidden_item");
|
||||
active_ul.css("display","");
|
||||
};
|
||||
$(window).resize(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
$(document).ready(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
var flag=false;
|
||||
$('.btn-left').click(function(){
|
||||
if(!flag){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
|
||||
var ul_length = uls.length;
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active");
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
|
||||
if(currentul - 1 < 0)
|
||||
currentul += ul_length;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
|
||||
var active_item = $(uls[currentul-1]);
|
||||
active_item.addClass("active");
|
||||
active_item.find("li").css("display","block");
|
||||
flag=true;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
|
||||
};
|
||||
});
|
||||
$('.btn-right').click(function(){
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
if(!flag){
|
||||
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
|
||||
var ul_length = uls.length;
|
||||
var currentul = uls.findIndex(function(v){
|
||||
return $(v).hasClass("active");
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
|
||||
if(currentul + 1 > ul_length - 1)
|
||||
currentul -= ul_length;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
|
||||
var active_item = $(uls[currentul+1]);
|
||||
active_item.addClass("active");
|
||||
active_item.find("li").css("display","block");
|
||||
flag=true;
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
|
||||
};
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
<div class="w-annc widget-announcement-13">
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{event_date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{speaker-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{subtitle-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{host-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{notes-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc__speaker">{{speaker}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc_subtitle">{{subtitle}}</td>
|
||||
<td class="w-annc__host">{{host}}</td>
|
||||
<td class="w-annc__notes">{{notes}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-13">
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{event_date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{speaker-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{subtitle-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{host-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{notes-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc__speaker">{{speaker}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc_subtitle">{{subtitle}}</td>
|
||||
<td class="w-annc__host">{{host}}</td>
|
||||
<td class="w-annc__notes">{{notes}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
|
@ -3,30 +3,22 @@
|
|||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{event_date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{subtitle-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{speaker-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{host-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{notes-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">【{{title-head}}】{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__speaker">【{{speaker-head}}】{{speaker}}</td>
|
||||
<td class="w-annc__host">{{host}}</td>
|
||||
<td class="w-annc__subtitle">{{subtitle}}</td>
|
||||
<td class="w-annc__notes">【{{notes-head}}】{{notes}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="w-annc__postdate">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title-head}}{{title}}</a>
|
||||
</td>
|
||||
<td style="{{speaker-css}}" class="w-annc__speaker">{{speaker-head}}{{speaker}}</td>
|
||||
<td style="{{host-css}}" class="w-annc__host">{{host-head}}{{host}}</td>
|
||||
<td style="{{place-css}}" class="w-annc__host">{{place-head}}{{place}}</td>
|
||||
<td style="{{event-time-css}}" class="w-annc__host">{{event_date-head}}{{event-time-formated}}</td>
|
||||
<td class="w-annc__subtitle">{{subtitle}}</td>
|
||||
<td style="{{notes-css}}" class="w-annc__notes">{{notes-head}}{{notes}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
|
|
|
@ -1,83 +1,83 @@
|
|||
<div class="w-calendar widget-calendar-2 widget-event-news-calendar-2" data-module="event_news">
|
||||
<div class="w-calendar-title {{widget_title_class}}">
|
||||
<span>{{calendar_title}}</span>
|
||||
<span>{{widget_title}}</span>
|
||||
</div>
|
||||
<div class='month_template'>
|
||||
<h4 class="widget-title ">
|
||||
<span class="text"><span style="display: none;">placeholder</span></span>
|
||||
<i class="fa fa-circle-o-notch fa-spin fa-fw loading hide"></i>
|
||||
</h4>
|
||||
<div class="w-calendar-nav">
|
||||
<a href="#" class="w-calendar-nav-prev">
|
||||
<i class="fa fa-chevron-left"></i>
|
||||
<span class="w-calendar-nav-prev-text hide">Prev</span>
|
||||
</a>
|
||||
<a href="#" class="w-calendar-nav-next">
|
||||
<i class="fa fa-chevron-right"></i>
|
||||
<span class="w-calendar-nav-next-text hide">Next</span>
|
||||
</a>
|
||||
</div>
|
||||
<table class="table table-condensed w-calendar-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Sun</th>
|
||||
<th>Mon</th>
|
||||
<th>Tue</th>
|
||||
<th>Wed</th>
|
||||
<th>Thu</th>
|
||||
<th>Fri</th>
|
||||
<th>Sat</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="calendar-events" style="display: none;">
|
||||
<div class="event">
|
||||
<div class="event-header">
|
||||
<div class="date">
|
||||
<div class="day"></div>
|
||||
<div class="month"></div>
|
||||
</div>
|
||||
<div class="event-title">
|
||||
<div class="event-inner-title"></div>
|
||||
<div class="duration"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="event-wraper">
|
||||
<div class="event-containers">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%= stylesheet_link_tag "event_news_calendar_widget2" %>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
if(document.getElementById("event-news-calendar-widget_module2") == null){
|
||||
var tag = document.createElement('script');
|
||||
tag.setAttribute("id", "event-news-calendar-widget_module2");
|
||||
tag.src = "<%= asset_path('event_news_calendar_widget2.js') %>";
|
||||
tag.onload = function(){
|
||||
$("div.widget-calendar-2[data-module=event_news]").each(function(index){
|
||||
var calendar = $(this),
|
||||
cmi = new EventCalendarModuleMonth2(new Date(), calendar,calendar.data("subpart-id"),"{{more_url}}",false);
|
||||
cmi.currentMonth();
|
||||
calendar.find("div.w-calendar-nav a").on("click",function(){
|
||||
var el = $(this);
|
||||
if(el.hasClass("w-calendar-nav-prev")){
|
||||
cmi.prevMonth();
|
||||
}else if(el.hasClass("w-calendar-nav-next")){
|
||||
cmi.nextMonth();
|
||||
}
|
||||
return false;
|
||||
})
|
||||
})
|
||||
}
|
||||
var head = document.getElementsByTagName("head");
|
||||
head[0].appendChild(tag);
|
||||
}
|
||||
})
|
||||
<div class="w-calendar widget-calendar-2 widget-event-news-calendar-2" data-module="event_news">
|
||||
<div class="w-calendar-title {{widget_title_class}}">
|
||||
<span>{{calendar_title}}</span>
|
||||
<span>{{widget_title}}</span>
|
||||
</div>
|
||||
<div class='month_template'>
|
||||
<h4 class="widget-title ">
|
||||
<span class="text"><span style="display: none;">placeholder</span></span>
|
||||
<i class="fa fa-circle-o-notch fa-spin fa-fw loading hide"></i>
|
||||
</h4>
|
||||
<div class="w-calendar-nav">
|
||||
<a href="#" class="w-calendar-nav-prev">
|
||||
<i class="fa fa-chevron-left"></i>
|
||||
<span class="w-calendar-nav-prev-text hide">Prev</span>
|
||||
</a>
|
||||
<a href="#" class="w-calendar-nav-next">
|
||||
<i class="fa fa-chevron-right"></i>
|
||||
<span class="w-calendar-nav-next-text hide">Next</span>
|
||||
</a>
|
||||
</div>
|
||||
<table class="table table-condensed w-calendar-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Sun</th>
|
||||
<th>Mon</th>
|
||||
<th>Tue</th>
|
||||
<th>Wed</th>
|
||||
<th>Thu</th>
|
||||
<th>Fri</th>
|
||||
<th>Sat</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="calendar-events" style="display: none;">
|
||||
<div class="event">
|
||||
<div class="event-header">
|
||||
<div class="date">
|
||||
<div class="day"></div>
|
||||
<div class="month"></div>
|
||||
</div>
|
||||
<div class="event-title">
|
||||
<div class="event-inner-title"></div>
|
||||
<div class="duration"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="event-wraper">
|
||||
<div class="event-containers">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<%= stylesheet_link_tag "event_news_calendar_widget2" %>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
if(document.getElementById("event-news-calendar-widget_module2") == null){
|
||||
var tag = document.createElement('script');
|
||||
tag.setAttribute("id", "event-news-calendar-widget_module2");
|
||||
tag.src = "<%= asset_path('event_news_calendar_widget2.js') %>";
|
||||
tag.onload = function(){
|
||||
$("div.widget-calendar-2[data-module=event_news]").each(function(index){
|
||||
var calendar = $(this),
|
||||
cmi = new EventCalendarModuleMonth2(new Date(), calendar,calendar.data("subpart-id"),"{{more_url}}",false);
|
||||
cmi.currentMonth();
|
||||
calendar.find("div.w-calendar-nav a").on("click",function(){
|
||||
var el = $(this);
|
||||
if(el.hasClass("w-calendar-nav-prev")){
|
||||
cmi.prevMonth();
|
||||
}else if(el.hasClass("w-calendar-nav-next")){
|
||||
cmi.nextMonth();
|
||||
}
|
||||
return false;
|
||||
})
|
||||
})
|
||||
}
|
||||
var head = document.getElementsByTagName("head");
|
||||
head[0].appendChild(tag);
|
||||
}
|
||||
})
|
||||
</script>
|
|
@ -1,34 +1,34 @@
|
|||
<div class="w-annc widget-announcement-2">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<div class="w-annc__img-wrap col-sm-4 bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap col-sm-8">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-2">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<div class="w-annc__img-wrap col-sm-4 bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap col-sm-8">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,34 +1,34 @@
|
|||
<div class="w-annc widget-announcement-3">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<div class="w-annc__content-wrap col-sm-8">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
<div class="w-annc__img-wrap col-sm-4 bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-3">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<div class="w-annc__content-wrap col-sm-8">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
<div class="w-annc__img-wrap col-sm-4 bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,108 +1,108 @@
|
|||
<div class="w-annc widget-announcement-4">
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<h2 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h2>
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item col-md-4">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<style type="text/css">
|
||||
[data-subpart-id="{{subpart-id}}"] .bullseye{
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function combineul_{{subpart-id}}(){
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find('>li').eq(-1).after($(v).find('ul.w-annc__list').eq(i).html());
|
||||
var ullength = $(v).find('ul.w-annc__list').length;
|
||||
for(var i = 1;i < ullength;i++)
|
||||
$(v).find('ul.w-annc__list').eq(-1).remove();
|
||||
})
|
||||
};
|
||||
var num;
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
function reorganize_{{subpart-id}}(num){
|
||||
combineul_{{subpart-id}}();
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
var lilength = $(v).find('li.w-annc__item').length;
|
||||
var ul_length = Math.ceil(lilength/num);
|
||||
for(var ii=1;ii< ul_length;ii++){
|
||||
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
|
||||
clone_ul.empty();
|
||||
clone_ul.removeClass("active");
|
||||
clone_ul.css("display","");
|
||||
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
|
||||
var lihtml="";
|
||||
if(ii != (ul_length-1)){
|
||||
for(var j=0;j<num;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
}else{
|
||||
for(var j=0;j< lilength - num *(ul_length-1) ;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
};
|
||||
$(v).find('ul.w-annc__list').eq(-1).html(lihtml);
|
||||
}
|
||||
if(ul_length != 1 )
|
||||
for(var i=0;i< lilength -num ; i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove();
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left');
|
||||
};
|
||||
$(window).resize(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
$(document).ready(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<div class="w-annc widget-announcement-4">
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<h2 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h2>
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item col-md-4">
|
||||
<div class="w-annc__img-wrap bullseye">
|
||||
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
|
||||
</div>
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<style type="text/css">
|
||||
[data-subpart-id="{{subpart-id}}"] .bullseye{
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function combineul_{{subpart-id}}(){
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find('>li').eq(-1).after($(v).find('ul.w-annc__list').eq(i).html());
|
||||
var ullength = $(v).find('ul.w-annc__list').length;
|
||||
for(var i = 1;i < ullength;i++)
|
||||
$(v).find('ul.w-annc__list').eq(-1).remove();
|
||||
})
|
||||
};
|
||||
var num;
|
||||
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
|
||||
function reorganize_{{subpart-id}}(num){
|
||||
combineul_{{subpart-id}}();
|
||||
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
|
||||
parents.each(function(i,v){
|
||||
var lilength = $(v).find('li.w-annc__item').length;
|
||||
var ul_length = Math.ceil(lilength/num);
|
||||
for(var ii=1;ii< ul_length;ii++){
|
||||
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
|
||||
clone_ul.empty();
|
||||
clone_ul.removeClass("active");
|
||||
clone_ul.css("display","");
|
||||
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
|
||||
var lihtml="";
|
||||
if(ii != (ul_length-1)){
|
||||
for(var j=0;j<num;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
}else{
|
||||
for(var j=0;j< lilength - num *(ul_length-1) ;j++){
|
||||
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
|
||||
};
|
||||
};
|
||||
$(v).find('ul.w-annc__list').eq(-1).html(lihtml);
|
||||
}
|
||||
if(ul_length != 1 )
|
||||
for(var i=0;i< lilength -num ; i++)
|
||||
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove();
|
||||
})
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
|
||||
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left');
|
||||
};
|
||||
$(window).resize(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
$(document).ready(function(){
|
||||
if($(window).width()>1024){
|
||||
reorganize_{{subpart-id}}(3);
|
||||
num=3;
|
||||
}else if($(window).width()>576){
|
||||
reorganize_{{subpart-id}}(2);
|
||||
num=2;
|
||||
}else{
|
||||
reorganize_{{subpart-id}}(1);
|
||||
num=1;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
<div class="w-annc widget-announcement-5">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-5">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list row" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item">
|
||||
<div class="w-annc__content-wrap">
|
||||
<div class="w-annc__meta">
|
||||
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<span class="w-annc__category-wrap">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="w-annc__entry-title">
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<p class="w-annc__subtitle">{{subtitle}}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
<div class="w-annc widget-announcement-6">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-8">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-6">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-8">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
<div class="w-annc widget-announcement-7">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-8">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-7">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<ul class="w-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="w-annc__item row">
|
||||
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="w-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="w-annc__entry-title col-sm-8">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="w-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="w-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
<div class="w-annc widget-announcement-8">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__category">{{category}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-8">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__category">{{category}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
|
@ -1,29 +1,29 @@
|
|||
<div class="w-annc widget-announcement-9">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__category">{{category}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
<div class="w-annc widget-announcement-9">
|
||||
<h3 class="w-annc__widget-title">
|
||||
<span>{{widget-title}}</span>
|
||||
</h3>
|
||||
<table class="w-annc__table table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-annc__th w-annc__th--date">{{date-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--title">{{title-head}}</th>
|
||||
<th class="w-annc__th w-annc__th--category">{{category-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="w-annc_content">
|
||||
<span class="w-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="w-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="w-annc__category">{{category}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="w-annc__more-wrap clearfix">
|
||||
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
|
||||
</div>
|
||||
</div>
|
|
@ -1,25 +1,25 @@
|
|||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<div class="i-annc index-announcement-10">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<span class="i-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="i-annc__entry-title col-sm-8">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="i-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="i-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>>
|
||||
</div>
|
||||
<div class="i-annc index-announcement-10">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<span class="i-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="i-annc__entry-title col-sm-8">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="i-annc__category-wrap col-sm-2">
|
||||
<i class="fa fa-tasks"></i>
|
||||
<span class="i-annc__category">{{category}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
|
@ -1,18 +1,18 @@
|
|||
<div class="i-annc index-announcement-11">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<h4 class="i-annc__entry-title col-sm-9">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="i-annc index-announcement-11">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<h4 class="i-annc__entry-title col-sm-9">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
|
@ -1,18 +1,18 @@
|
|||
<div class="i-annc index-announcement-12">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="i-annc__entry-title col-sm-9">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="i-annc index-announcement-12">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<ul class="i-annc__list" data-level="0" data-list="event_news">
|
||||
<li class="i-annc__item row">
|
||||
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
<span class="i-annc__postdate">{{postdate}}</span>
|
||||
</span>
|
||||
<h4 class="i-annc__entry-title col-sm-9">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
|
@ -1,23 +1,23 @@
|
|||
<div class="i-annc index-announcement-13 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-13 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
<div class="i-annc index-announcement-14 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-14 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
<div class="i-annc index-announcement-15 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__view-count">{{view_count}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-15 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__view-count">{{view_count}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,39 +1,39 @@
|
|||
<div class="i-annc index-announcement-16 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{link-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{file-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__links">
|
||||
<ul data-list="event_news_links" data-level="1">
|
||||
<li>
|
||||
<a class="i-annc__title" href="{{link_url}}">{{link_title}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td class="i-annc__files">
|
||||
<ul data-list="event_news_files" data-level="1">
|
||||
<li>
|
||||
<a class="i-annc__title" href="{{file_url}}">{{file_title}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-16 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{link-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{file-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__links">
|
||||
<ul data-list="event_news_links" data-level="1">
|
||||
<li>
|
||||
<a class="i-annc__title" href="{{link_url}}">{{link_title}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td class="i-annc__files">
|
||||
<ul data-list="event_news_files" data-level="1">
|
||||
<li>
|
||||
<a class="i-annc__title" href="{{file_url}}">{{file_title}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--department">{{department-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__department"><span class="i-annc__department-content">{{department}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--department">{{department-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__department"><span class="i-annc__department-content">{{department}}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--event_date">{{event_date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--speaker">{{speaker-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--host">{{host-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--notes">{{notes-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__speaker">{{speaker}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__host">{{host}}</td>
|
||||
<td class="i-annc__notes">{{notes}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
<div class="i-annc index-announcement-1 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--event_date">{{event_date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--speaker">{{speaker-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--host">{{host-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--notes">{{notes-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__speaker">{{speaker}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__host">{{host}}</td>
|
||||
<td class="i-annc__notes">{{notes}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
<div class="i-annc index-announcement-2 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__view-count">{{view_count}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="i-annc index-announcement-2 {{display}}">
|
||||
<h1 class="i-annc__page-title">{{page-title}}</h1>
|
||||
<table class="i-annc__table table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="i-annc__th i-annc__th--category">{{category-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--title">{{title-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--date">{{date-head}}</th>
|
||||
<th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-level="0" data-list="event_news">
|
||||
<tr>
|
||||
<td class="i-annc__category">{{category}}</td>
|
||||
<td class="i-annc__content">
|
||||
<span class="i-annc__status-wrap" data-list="statuses" data-level="1">
|
||||
<span class="i-annc__status label status {{status-class}}">{{status}}</span>
|
||||
</span>
|
||||
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
|
||||
</td>
|
||||
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
|
||||
<td class="i-annc__view-count">{{view_count}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{pagination_goes_here}}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue