fix some error

This commit is contained in:
邱博亞 2022-01-21 10:09:31 +08:00
parent 96665aeb93
commit 716a1ca64a
145 changed files with 14022 additions and 13844 deletions

16
.gitignore vendored
View File

@ -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
View File

@ -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'

View File

@ -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!

View File

@ -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.

View File

@ -1,3 +1,3 @@
= Event News
= Event News
This project rocks and uses MIT-LICENSE.

View File

@ -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

View File

@ -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

View File

@ -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);
})
});

View File

@ -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

View File

@ -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;
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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'),

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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 %>

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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
%>

View File

@ -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 %>

View File

@ -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 %>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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 %>

View File

@ -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 %>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 %>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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)

View File

@ -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: 開啟寄送提醒

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
require "event_news_mod/engine"
module EventNewsMod
end
require "event_news_mod/engine"
module EventNewsMod
end

View File

@ -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

View File

@ -1,3 +1,3 @@
module EventNewsMod
VERSION = "0.0.1"
end
module EventNewsMod
VERSION = "0.0.1"
end

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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