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/ .bundle/
log/*.log log/*.log
pkg/ pkg/
test/dummy/db/*.sqlite3 test/dummy/db/*.sqlite3
test/dummy/db/*.sqlite3-journal test/dummy/db/*.sqlite3-journal
test/dummy/log/*.log test/dummy/log/*.log
test/dummy/tmp/ test/dummy/tmp/
test/dummy/.sass-cache test/dummy/.sass-cache

28
Gemfile
View File

@ -1,14 +1,14 @@
source "https://rubygems.org" source "https://rubygems.org"
# Declare your gem's dependencies in bulletin.gemspec. # Declare your gem's dependencies in bulletin.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and # Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group. # development dependencies will be added by default to the :development group.
gemspec gemspec
# Declare any dependencies that are still in development here instead of in # 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 # your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing # Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org. # your gem to rubygems.org.
# To use debugger # To use debugger
# gem 'debugger' # gem 'debugger'

View File

@ -1,106 +1,106 @@
PATH PATH
remote: . remote: .
specs: specs:
announcement (0.0.1) announcement (0.0.1)
mongoid (= 4.0.0.beta1) mongoid (= 4.0.0.beta1)
rails (~> 4.1.0.rc2) rails (~> 4.1.0.rc2)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actionmailer (4.1.0.rc2) actionmailer (4.1.0.rc2)
actionpack (= 4.1.0.rc2) actionpack (= 4.1.0.rc2)
actionview (= 4.1.0.rc2) actionview (= 4.1.0.rc2)
mail (~> 2.5.4) mail (~> 2.5.4)
actionpack (4.1.0.rc2) actionpack (4.1.0.rc2)
actionview (= 4.1.0.rc2) actionview (= 4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
rack (~> 1.5.2) rack (~> 1.5.2)
rack-test (~> 0.6.2) rack-test (~> 0.6.2)
actionview (4.1.0.rc2) actionview (4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
builder (~> 3.1) builder (~> 3.1)
erubis (~> 2.7.0) erubis (~> 2.7.0)
activemodel (4.1.0.rc2) activemodel (4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
builder (~> 3.1) builder (~> 3.1)
activerecord (4.1.0.rc2) activerecord (4.1.0.rc2)
activemodel (= 4.1.0.rc2) activemodel (= 4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
arel (~> 5.0.0) arel (~> 5.0.0)
activesupport (4.1.0.rc2) activesupport (4.1.0.rc2)
i18n (~> 0.6, >= 0.6.9) i18n (~> 0.6, >= 0.6.9)
json (~> 1.7, >= 1.7.7) json (~> 1.7, >= 1.7.7)
minitest (~> 5.1) minitest (~> 5.1)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
arel (5.0.0) arel (5.0.0)
atomic (1.1.16) atomic (1.1.16)
bson (2.2.1) bson (2.2.1)
builder (3.2.2) builder (3.2.2)
connection_pool (2.0.0) connection_pool (2.0.0)
erubis (2.7.0) erubis (2.7.0)
hike (1.2.3) hike (1.2.3)
i18n (0.6.9) i18n (0.6.9)
json (1.8.1) json (1.8.1)
mail (2.5.4) mail (2.5.4)
mime-types (~> 1.16) mime-types (~> 1.16)
treetop (~> 1.4.8) treetop (~> 1.4.8)
mime-types (1.25.1) mime-types (1.25.1)
minitest (5.3.1) minitest (5.3.1)
mongoid (4.0.0.beta1) mongoid (4.0.0.beta1)
activemodel (>= 4.0.0) activemodel (>= 4.0.0)
moped (~> 2.0.beta6) moped (~> 2.0.beta6)
origin (~> 2.1) origin (~> 2.1)
tzinfo (>= 0.3.37) tzinfo (>= 0.3.37)
moped (2.0.0.rc1) moped (2.0.0.rc1)
bson (~> 2.2) bson (~> 2.2)
connection_pool (~> 2.0) connection_pool (~> 2.0)
optionable (~> 0.2.0) optionable (~> 0.2.0)
multi_json (1.9.2) multi_json (1.9.2)
optionable (0.2.0) optionable (0.2.0)
origin (2.1.1) origin (2.1.1)
polyglot (0.3.4) polyglot (0.3.4)
rack (1.5.2) rack (1.5.2)
rack-test (0.6.2) rack-test (0.6.2)
rack (>= 1.0) rack (>= 1.0)
rails (4.1.0.rc2) rails (4.1.0.rc2)
actionmailer (= 4.1.0.rc2) actionmailer (= 4.1.0.rc2)
actionpack (= 4.1.0.rc2) actionpack (= 4.1.0.rc2)
actionview (= 4.1.0.rc2) actionview (= 4.1.0.rc2)
activemodel (= 4.1.0.rc2) activemodel (= 4.1.0.rc2)
activerecord (= 4.1.0.rc2) activerecord (= 4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
bundler (>= 1.3.0, < 2.0) bundler (>= 1.3.0, < 2.0)
railties (= 4.1.0.rc2) railties (= 4.1.0.rc2)
sprockets-rails (~> 2.0.0) sprockets-rails (~> 2.0.0)
railties (4.1.0.rc2) railties (4.1.0.rc2)
actionpack (= 4.1.0.rc2) actionpack (= 4.1.0.rc2)
activesupport (= 4.1.0.rc2) activesupport (= 4.1.0.rc2)
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.18.1, < 2.0)
rake (10.2.2) rake (10.2.2)
sprockets (2.12.0) sprockets (2.12.0)
hike (~> 1.2) hike (~> 1.2)
multi_json (~> 1.0) multi_json (~> 1.0)
rack (~> 1.0) rack (~> 1.0)
tilt (~> 1.1, != 1.3.0) tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.0.1) sprockets-rails (2.0.1)
actionpack (>= 3.0) actionpack (>= 3.0)
activesupport (>= 3.0) activesupport (>= 3.0)
sprockets (~> 2.8) sprockets (~> 2.8)
thor (0.19.1) thor (0.19.1)
thread_safe (0.3.1) thread_safe (0.3.1)
atomic (>= 1.1.7, < 2) atomic (>= 1.1.7, < 2)
tilt (1.4.1) tilt (1.4.1)
treetop (1.4.15) treetop (1.4.15)
polyglot polyglot
polyglot (>= 0.3.1) polyglot (>= 0.3.1)
tzinfo (1.1.0) tzinfo (1.1.0)
thread_safe (~> 0.1) thread_safe (~> 0.1)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
announcement! announcement!

View File

@ -1,20 +1,20 @@
Copyright 2014 YOURNAME Copyright 2014 YOURNAME
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to permit persons to whom the Software is furnished to do so, subject to
the following conditions: the following conditions:
The above copyright notice and this permission notice shall be The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software. included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 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. This project rocks and uses MIT-LICENSE.

View File

@ -1,32 +1,32 @@
begin begin
require 'bundler/setup' require 'bundler/setup'
rescue LoadError rescue LoadError
puts 'You must `gem install bundler` and `bundle install` to run rake tasks' puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
end end
require 'rdoc/task' require 'rdoc/task'
RDoc::Task.new(:rdoc) do |rdoc| RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc' rdoc.rdoc_dir = 'rdoc'
rdoc.title = 'Announcement' rdoc.title = 'Announcement'
rdoc.options << '--line-numbers' rdoc.options << '--line-numbers'
rdoc.rdoc_files.include('README.rdoc') rdoc.rdoc_files.include('README.rdoc')
rdoc.rdoc_files.include('lib/**/*.rb') rdoc.rdoc_files.include('lib/**/*.rb')
end end
Bundler::GemHelper.install_tasks Bundler::GemHelper.install_tasks
require 'rake/testtask' require 'rake/testtask'
Rake::TestTask.new(:test) do |t| Rake::TestTask.new(:test) do |t|
t.libs << 'lib' t.libs << 'lib'
t.libs << 'test' t.libs << 'test'
t.pattern = 'test/**/*_test.rb' t.pattern = 'test/**/*_test.rb'
t.verbose = false t.verbose = false
end end
task default: :test task default: :test

View File

@ -1,2 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here. // Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js. // 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() { $(document).ready(function() {
var config = {} var config = {}
config.autoGrow_minHeight = 50; config.autoGrow_minHeight = 50;
config.allowedContent = false; config.allowedContent = false;
config.disallowedContent = 'img'; config.disallowedContent = 'img';
config.toolbar = [ config.toolbar = [
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] }, { name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
{ name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] }, { name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat' ] }, { name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat' ] },
'/', '/',
{ name: 'insert', items: [ 'SpecialChar'] }, { name: 'insert', items: [ 'SpecialChar'] },
{ name: 'styles', items: [ 'Font' ] }, { name: 'styles', items: [ 'Font' ] },
{ name: 'colors', items: [ 'TextColor', 'BGColor' ] } { name: 'colors', items: [ 'TextColor', 'BGColor' ] }
]; ];
var ckeditor_reduce = $('.ckeditor_reduce') var ckeditor_reduce = $('.ckeditor_reduce')
ckeditor_reduce.each(function(i,v){ ckeditor_reduce.each(function(i,v){
CKEDITOR.replace(v,config); CKEDITOR.replace(v,config);
}) })
}); });

View File

@ -1,7 +1,7 @@
/* /*
Place all the styles related to the matching controller here. Place all the styles related to the matching controller here.
They will automatically be included in application.css. They will automatically be included in application.css.
*/ */
.table .expired{ .table .expired{
color: #BE2E2E; 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{ .widget-event-news-calendar-2.w-calendar{
.w-calendar-table { .w-calendar-table {
table-layout: fixed; table-layout: fixed;
width: 100%; width: 100%;
flex: 1; flex: 1;
} }
.height100 { .height100 {
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
a.event-container-one{ a.event-container-one{
color: inherit; color: inherit;
} }
.close_box{ .close_box{
font-weight: bold; font-weight: bold;
position: relative; position: relative;
float: right; float: right;
padding: 0.5em; padding: 0.5em;
cursor: pointer; cursor: pointer;
} }
.close_box:hover{ .close_box:hover{
color: red; color: red;
} }
.event-bullet-event { .event-bullet-event {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; border-radius: 50%;
} }
.event-bullet-event { .event-bullet-event {
width: 2em; width: 2em;
height: 2em; height: 2em;
border-radius: 1em; border-radius: 1em;
} }
.event-header{ .event-header{
width: 100%; width: 100%;
text-align: center; text-align: center;
font-size: 1.7em; font-size: 1.7em;
font-weight: bold; font-weight: bold;
padding: 0.35em 0; padding: 0.35em 0;
} }
.event-info{ .event-info{
padding-left: 15%; padding-left: 15%;
} }
.calendar-events{ .calendar-events{
position: relative; position: relative;
background: #fbfbfb; background: #fbfbfb;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.month_template{ .month_template{
position: relative; position: relative;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 2em; margin-top: 2em;
margin-bottom: 1em; margin-bottom: 1em;
.w-calendar-table td:hover { .w-calendar-table td:hover {
background-color: #eaeaea; background-color: #eaeaea;
color: #333; color: #333;
} }
.w-calendar-table td { .w-calendar-table td {
background: inherit; background: inherit;
color: inherit; color: inherit;
cursor: pointer; cursor: pointer;
border: 0; border: 0;
vertical-align: middle; vertical-align: middle;
} }
.w-calendar-table td div{ .w-calendar-table td div{
display: inline-flex; display: inline-flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: auto; margin: auto;
padding: 10%; padding: 10%;
line-height: 1.2; line-height: 1.2;
} }
.w-calendar-table th { .w-calendar-table th {
background: unset; background: unset;
color: unset; color: unset;
border: 0; border: 0;
padding: 1.5% 0.5%; padding: 1.5% 0.5%;
} }
.widget-title { .widget-title {
padding: 0.2em; padding: 0.2em;
font-size: 1.5em; font-size: 1.5em;
} }
table.w-calendar-table td.w-calendar-toggle div, table.w-calendar-table td.w-calendar-toggle div{ table.w-calendar-table td.w-calendar-toggle div, table.w-calendar-table td.w-calendar-toggle div{
background: #6f0007; background: #6f0007;
border-radius: 50%; border-radius: 50%;
color: white; color: white;
} }
.w-calendar-table td.w-calendar-event div{ .w-calendar-table td.w-calendar-event div{
border: 1px #6f0007 solid; border: 1px #6f0007 solid;
border-radius: 50%; border-radius: 50%;
background: #eee; background: #eee;
} }
.w-calendar-title{ .w-calendar-title{
background: rgb(146, 8, 17); background: rgb(146, 8, 17);
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
padding: 0px 10%; padding: 0px 10%;
display: flex; display: flex;
line-height: 2em; line-height: 2em;
justify-content: space-between; justify-content: space-between;
font-size: 1.85em; font-size: 1.85em;
width: 100%; width: 100%;
.w-calendar-title span:last-child{ .w-calendar-title span:last-child{
float: right; float: right;
} }
} }
.w-calendar-title.center{ .w-calendar-title.center{
text-align: center; text-align: center;
justify-content: center; justify-content: center;
} }
.calendar-dialog div.ui-dialog-content { .calendar-dialog div.ui-dialog-content {
max-height: 20em !important; max-height: 20em !important;
overflow-wrap: break-word; overflow-wrap: break-word;
} }
table td.w-calendar-other-month { table td.w-calendar-other-month {
color: #999797; color: #999797;
} }
.event-header{ .event-header{
display: flex; display: flex;
background: #dadada; background: #dadada;
cursor: default; cursor: default;
} }
.event-header .date{ .event-header .date{
width: 30%; width: 30%;
} }
.event.active .event-header .day{ .event.active .event-header .day{
color: #bf1f1f; color: #bf1f1f;
} }
.event.active .event-header .date{ .event.active .event-header .date{
color: #202427; color: #202427;
} }
.event .event-header .day{ .event .event-header .day{
font-size: 1.4em; font-size: 1.4em;
} }
.event .event-header .month{ .event .event-header .month{
font-size: 0.7em; font-size: 0.7em;
} }
.event .event-header .date{ .event .event-header .date{
color: #a08a70; color: #a08a70;
} }
.event-title{ .event-title{
width: 70%; width: 70%;
display: inline-flex; display: inline-flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
} }
.event-title .duration{ .event-title .duration{
font-size: 0.7em; font-size: 0.7em;
text-align: left; text-align: left;
color: #a0a1a1; color: #a0a1a1;
} }
.duration_temp,.title_temp{ .duration_temp,.title_temp{
display: none; display: none;
} }
.event-inner-title{ .event-inner-title{
line-height: 2em; line-height: 2em;
text-align: left; text-align: left;
} }
.event-containers{ .event-containers{
height: 0; height: 0;
min-height: unset; min-height: unset;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
margin: 0 10%; margin: 0 10%;
} }
.event-container-one { .event-container-one {
position: absolute; position: absolute;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
display: flex; display: flex;
width: calc(100% - 0.7em);; width: calc(100% - 0.7em);;
height: calc(100% - 0.7em); height: calc(100% - 0.7em);
flex-wrap: wrap; flex-wrap: wrap;
border-radius: 10px; border-radius: 10px;
margin-bottom: 1em; margin-bottom: 1em;
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
margin: 0; margin: 0;
color: rgba(50, 50, 50, 0.45); color: rgba(50, 50, 50, 0.45);
} }
.event-container-one:hover { .event-container-one:hover {
background-color: #fff; background-color: #fff;
box-shadow: 0 0.1em 0.7em 0em; box-shadow: 0 0.1em 0.7em 0em;
} }
.event-container-one .event-content{ .event-container-one .event-content{
color: #000000; color: #000000;
} }
button.switch_button { button.switch_button {
margin: 10%; margin: 10%;
width: 2.5em; width: 2.5em;
height: 2.5em; height: 2.5em;
border-radius: 1.25em; border-radius: 1.25em;
border: 0; border: 0;
background: #96231a; background: #96231a;
color: white; color: white;
outline: 0; outline: 0;
} }
.switch_button:hover { .switch_button:hover {
background: #c07b76; background: #c07b76;
} }
.switch_button_wraper{ .switch_button_wraper{
position: absolute; position: absolute;
right: 0%; right: 0%;
margin-right: 2%; margin-right: 2%;
width: 3em; width: 3em;
margin-bottom: 2%; margin-bottom: 2%;
bottom: 0; bottom: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.event-wraper{ .event-wraper{
position: relative; position: relative;
overflow: hidden; overflow: hidden;
flex: 1; flex: 1;
} }
.event-container-one:not(.active) { .event-container-one:not(.active) {
right: -100%; right: -100%;
} }
.event.active .event-containers{ .event.active .event-containers{
min-height: 13em; min-height: 13em;
height: 100%; height: 100%;
} }
.calendar-events.width-100 .switch_button_wraper{ .calendar-events.width-100 .switch_button_wraper{
width: 100%; width: 100%;
height: 100%; height: 100%;
margin: 0; margin: 0;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.calendar-events.width-100 .switch_button{ .calendar-events.width-100 .switch_button{
margin: 2%; margin: 2%;
} }
.calendar-events.width-100 .event-containers{ .calendar-events.width-100 .event-containers{
z-index: 3; z-index: 3;
} }
.month_template .widget-title { .month_template .widget-title {
border: 0; border: 0;
border-bottom: 0.0625em solid #ddd; border-bottom: 0.0625em solid #ddd;
} }
&>div:first-child { &>div:first-child {
box-shadow: 0em 0.1em 0.3em 0em; box-shadow: 0em 0.1em 0.3em 0em;
margin-bottom: 0.25em; margin-bottom: 0.25em;
} }
.event{ .event{
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
} }

View File

@ -1,152 +1,152 @@
.full-size-img img { .full-size-img img {
width: 100%; width: 100%;
} }
.full-size-img { .full-size-img {
width: 100%; width: 100%;
} }
.s-annc__sub-img.pull-right { .s-annc__sub-img.pull-right {
margin-left: 2em; margin-left: 2em;
} }
.s-annc__sub-img.pull-left { .s-annc__sub-img.pull-left {
margin-right: 2em; margin-right: 2em;
} }
strong.carousel__description { strong.carousel__description {
color: white; color: white;
} }
@media (max-width: 767px){ @media (max-width: 767px){
.carousel_images{ .carousel_images{
width: 100%; width: 100%;
} }
} }
.carousel_img_item{ .carousel_img_item{
display: none; display: none;
float: left; float: left;
} }
.controlplay { .controlplay {
position: absolute; position: absolute;
right: 1em; right: 1em;
top: 3%; top: 3%;
z-index: 200; z-index: 200;
} }
.controlplay a { .controlplay a {
display: inline-block; display: inline-block;
margin-right: 0.25em; margin-right: 0.25em;
cursor: pointer; cursor: pointer;
padding: 5px 10px; padding: 5px 10px;
border: 1px solid rgba(255,255,255,0.5); border: 1px solid rgba(255,255,255,0.5);
background: rgba(0,0,0,0.2); background: rgba(0,0,0,0.2);
} }
.controlplay a i { .controlplay a i {
font-family: FontAwesome; font-family: FontAwesome;
position: relative; position: relative;
font-size: 1rem; font-size: 1rem;
line-height: 1; line-height: 1;
color: #FFF; color: #FFF;
vertical-align: middle; vertical-align: middle;
font-style: unset; font-style: unset;
} }
.controlplay .resume-slide i::before { .controlplay .resume-slide i::before {
content: "\f04b"; content: "\f04b";
} }
.controlplay .pause-slide i::before { .controlplay .pause-slide i::before {
content: "\f04c"; content: "\f04c";
} }
ul.button-mid .prev-button { ul.button-mid .prev-button {
transition: 0.4s; transition: 0.4s;
position: relative; position: relative;
float: left; float: left;
left: 0.5rem; left: 0.5rem;
width: 2.5rem; width: 2.5rem;
height: 2.5rem; height: 2.5rem;
font-size: 2.2rem; font-size: 2.2rem;
color: #ffffff; color: #ffffff;
background: rgba(0,0,0,0.2); background: rgba(0,0,0,0.2);
text-align: center; text-align: center;
line-height: 2.5rem; line-height: 2.5rem;
top: 50%; top: 50%;
position: absolute; position: absolute;
transform: translateY(-50%); transform: translateY(-50%);
z-index: 999; z-index: 999;
} }
ul.button-mid .next-button { ul.button-mid .next-button {
float: right; float: right;
transition: 0.4s; transition: 0.4s;
position: relative; position: relative;
right: 0.5rem; right: 0.5rem;
width: 2.5rem; width: 2.5rem;
height: 2.5rem; height: 2.5rem;
font-size: 2.2rem; font-size: 2.2rem;
color: #fff; color: #fff;
background: rgba(0,0,0,0.2); background: rgba(0,0,0,0.2);
text-align: center; text-align: center;
line-height: 2.5rem; line-height: 2.5rem;
top: 50%; top: 50%;
position: absolute; position: absolute;
transform: translateY(-50%); transform: translateY(-50%);
z-index: 999; z-index: 999;
} }
.carousel_images_slide{ .carousel_images_slide{
padding: 3em; padding: 3em;
} }
.carousel_img_item img{ .carousel_img_item img{
cursor: pointer; cursor: pointer;
} }
@media (max-width: 479px){ @media (max-width: 479px){
.carousel_img_item:nth-child(-n+1){ .carousel_img_item:nth-child(-n+1){
display: block; display: block;
width: 100%; width: 100%;
float: left; float: left;
} }
.carousel_img_item{ .carousel_img_item{
width: 100%; width: 100%;
} }
} }
@media (min-width: 480px){ @media (min-width: 480px){
.carousel_img_item:nth-child(-n+2){ .carousel_img_item:nth-child(-n+2){
display: block; display: block;
width: 50%; width: 50%;
float: left; float: left;
} }
.carousel_img_item{ .carousel_img_item{
width: 50%; width: 50%;
} }
} }
@media (min-width: 768px){ @media (min-width: 768px){
.carousel_img_item:nth-child(-n+3){ .carousel_img_item:nth-child(-n+3){
display: block; display: block;
width: 33%; width: 33%;
float: left; float: left;
} }
.carousel_img_item{ .carousel_img_item{
width: 33%; width: 33%;
} }
} }
@media (min-width: 1280px){ @media (min-width: 1280px){
.carousel_img_item:nth-child(-n+4){ .carousel_img_item:nth-child(-n+4){
display: block; display: block;
width: 25%; width: 25%;
float: left; float: left;
} }
.carousel_img_item{ .carousel_img_item{
width: 25%; width: 25%;
} }
} }
.w-ba-banner .controlplay .resume-slide.active i{ .w-ba-banner .controlplay .resume-slide.active i{
color: #32D9C3; color: #32D9C3;
} }
.w-ba-banner .controlplay .pause-slide.active i{ .w-ba-banner .controlplay .pause-slide.active i{
color: #ff4500; color: #ff4500;
} }
.w-ba-banner .controlplay{ .w-ba-banner .controlplay{
width: auto; width: auto;
} }
.w-ba-banner .button-mid{ .w-ba-banner .button-mid{
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;
top: 0; top: 0;
left: 0; left: 0;
} }
.next-button,.prev-button{ .next-button,.prev-button{
cursor: pointer; cursor: pointer;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
module ActionDispatch module ActionDispatch
class Request class Request
def original_url def original_url
original_fullpath original_fullpath
end end
end end
end end

View File

@ -1,499 +1,499 @@
# encoding: utf-8 # encoding: utf-8
require 'rubyXL' require 'rubyXL'
class Admin::EventNewsController < OrbitAdminController class Admin::EventNewsController < OrbitAdminController
include Admin::EventNewsHelper include Admin::EventNewsHelper
before_action ->(module_app = @app_title) { set_variables module_app } before_action ->(module_app = @app_title) { set_variables module_app }
before_action :set_event_news, only: [:edit, :destroy] before_action :set_event_news, only: [:edit, :destroy]
before_action :load_access_level, :load_settings before_action :load_access_level, :load_settings
def initialize def initialize
super super
@app_title = "event_news" @app_title = "event_news"
end end
def index def index
EventNews.remove_expired_status EventNews.remove_expired_status
@tags = @module_app.tags @tags = @module_app.tags
@table_fields = [:status, :category, :title, "event_news.event_date", "event_news.start_date", "event_news.end_date", :last_modified] @table_fields = [:status, :category, :title, "event_news.event_date", "event_news.start_date", "event_news.end_date", :last_modified]
@current_user = current_user @current_user = current_user
if params[:sort].blank? if params[:sort].blank?
params[:sort] = 'event_date' params[:sort] = 'event_date'
params[:order] = 'desc' params[:order] = 'desc'
end end
if EventNewsSetting.first.is_display_edit_only && !current_user.is_admin? && !current_user.is_manager?(@module_app) 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 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 if current_user_is_sub_manager
@categories = current_user.approved_categories.select{|c| c.module_app_id == @module_app.id} rescue [] @categories = current_user.approved_categories.select{|c| c.module_app_id == @module_app.id} rescue []
@filter_fields = filter_fields(@categories, @tags) @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]) @event_news = EventNews.where(:category_id.ne=>nil, :create_user_id=>current_user.id,:is_preview.in=>[false,nil])
.order_by(sort) .order_by(sort)
.with_categories(filters("category")) .with_categories(filters("category"))
.with_tags(filters("tag")) .with_tags(filters("tag"))
.with_status(filters("status")) .with_status(filters("status"))
else else
@event_news = EventNews.where(:category_id.ne=>nil, :uid=>nil).order_by(sort) @event_news = EventNews.where(:category_id.ne=>nil, :uid=>nil).order_by(sort)
@categories = @module_app.categories.enabled @categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories, @tags) @filter_fields = filter_fields(@categories, @tags)
end end
else else
@categories = @module_app.categories.enabled @categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories, @tags) @filter_fields = filter_fields(@categories, @tags)
@event_news = EventNews.where(:category_id.ne=>nil, :is_preview.in=>[false,nil]) @event_news = EventNews.where(:category_id.ne=>nil, :is_preview.in=>[false,nil])
.order_by(sort) .order_by(sort)
.with_categories(filters("category")) .with_categories(filters("category"))
.with_tags(filters("tag")) .with_tags(filters("tag"))
.with_status(filters("status")) .with_status(filters("status"))
end end
@event_news = search_data(@event_news,[:title]).page(params[:page]).per(10) @event_news = search_data(@event_news,[:title]).page(params[:page]).per(10)
if request.xhr? if request.xhr?
render :partial => "index" render :partial => "index"
end end
end end
def feed def feed
@table_feed_fields = ["event_news.feed_name", :tags, :categories, "event_news.rssfeed", "event_news.jsonfeed"] @table_feed_fields = ["event_news.feed_name", :tags, :categories, "event_news.rssfeed", "event_news.jsonfeed"]
@feeds = EventNewsFeed.all.asc(:created_at) @feeds = EventNewsFeed.all.asc(:created_at)
end end
def generate_iframe_url def generate_iframe_url
iframe_params = params.require(:iframe).permit! 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?} 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 = iframe_params.except(:member_ids)
url_params['uids'] = uids if uids != [] url_params['uids'] = uids if uids != []
render :text => '/xhr/panel/event_news/widget/sync_data?'+url_params.to_param render :text => '/xhr/panel/event_news/widget/sync_data?'+url_params.to_param
end end
def settings def settings
@setting = @event_news_setting @setting = @event_news_setting
roles = Role.all roles = Role.all
@sorted_members = roles.inject({}) do |members,role| @sorted_members = roles.inject({}) do |members,role|
members_for_role = role.member_profiles.select{|m| (m.user.nil? ? false : m.user.approved)} members_for_role = role.member_profiles.select{|m| (m.user.nil? ? false : m.user.approved)}
members[role] = members_for_role members[role] = members_for_role
members members
end end
@sorted_members['no_role'] = MemberProfile.any_in(:role_ids=>[nil,[]]).select{|m| (m.user.nil? ? false : m.user.approved)} @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} @unapproved_members = User.where(:approved => false).map{|u| u.member_profile}
end end
def import def import
end end
def excel_format def excel_format
respond_to do |format| respond_to do |format|
format.xlsx { format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="event_news_import_format.xlsx"' response.headers['Content-Disposition'] = 'attachment; filename="event_news_import_format.xlsx"'
} }
end end
end end
def export_excel def export_excel
@event_news = EventNews.where(:category_id.ne=>nil).desc(:created_at) @event_news = EventNews.where(:category_id.ne=>nil).desc(:created_at)
respond_to do |format| respond_to do |format|
format.xlsx { format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="event_news_export.xlsx"' response.headers['Content-Disposition'] = 'attachment; filename="event_news_export.xlsx"'
} }
end end
end end
def import_from_xml def import_from_xml
download_tmp_xml params["import_xml"] download_tmp_xml params["import_xml"]
import_from_tmp_xml File.read(File.join(Rails.root, "tmp", "ann_cc_ntu.xml")) import_from_tmp_xml File.read(File.join(Rails.root, "tmp", "ann_cc_ntu.xml"))
redirect_to admin_event_news_index_path redirect_to admin_event_news_index_path
end end
def import def import
end end
def import_from_wp def import_from_wp
import_from_wordpress params["import_xml"].tempfile import_from_wordpress params["import_xml"].tempfile
redirect_to admin_event_news_index_path redirect_to admin_event_news_index_path
end end
def importanns def importanns
workbook = RubyXL::Parser.parse(params["import_file"].tempfile) workbook = RubyXL::Parser.parse(params["import_file"].tempfile)
categories = @module_app.categories.asc(:created_at).to_a categories = @module_app.categories.asc(:created_at).to_a
tags = @module_app.tags.asc(:created_at).to_a tags = @module_app.tags.asc(:created_at).to_a
sheet = workbook[0] sheet = workbook[0]
if sheet.count <= 503 if sheet.count <= 503
sheet.each_with_index do |row, i| sheet.each_with_index do |row, i|
next if i < 3 next if i < 3
v = row.cells.first.value rescue nil v = row.cells.first.value rescue nil
next if v == "" || v.nil? next if v == "" || v.nil?
import_this_event_news(row, categories, tags) import_this_event_news(row, categories, tags)
end end
redirect_to admin_event_news_index_path redirect_to admin_event_news_index_path
else else
redirect_to admin_event_news_index_path(:error => "1") redirect_to admin_event_news_index_path(:error => "1")
end end
end end
def createsettings def createsettings
setting = EventNewsSetting.new(settings_params) setting = EventNewsSetting.new(settings_params)
setting.save setting.save
redirect_to admin_event_news_settings_path redirect_to admin_event_news_settings_path
end end
def updatesettings def updatesettings
setting = @event_news_setting setting = @event_news_setting
ids = params['event_news_setting']['anns_status_settings'].to_a.collect do |i,v| ids = params['event_news_setting']['anns_status_settings'].to_a.collect do |i,v|
v['_id'] v['_id']
end.compact end.compact
AnnsStatusSetting.where(:id.nin=>ids).destroy AnnsStatusSetting.where(:id.nin=>ids).destroy
setting.update_attributes(settings_params) setting.update_attributes(settings_params)
setting.save setting.save
redirect_to admin_event_news_settings_path redirect_to admin_event_news_settings_path
end end
def feedform def feedform
if params[:type] == "new" if params[:type] == "new"
@event_news_feed = EventNewsFeed.new @event_news_feed = EventNewsFeed.new
render :partial => "feed_form" render :partial => "feed_form"
else params[:type] == "edit" else params[:type] == "edit"
@event_news_feed = EventNewsFeed.find(params[:id]) @event_news_feed = EventNewsFeed.find(params[:id])
render :partial => "edit_feed_form" render :partial => "edit_feed_form"
end end
end end
def createfeed def createfeed
event_news_feed = EventNewsFeed.new(feed_params) event_news_feed = EventNewsFeed.new(feed_params)
event_news_feed.save event_news_feed.save
feeds = EventNewsFeed.all.asc(:created_at) feeds = EventNewsFeed.all.asc(:created_at)
render :partial => "feed", :collection => feeds render :partial => "feed", :collection => feeds
end end
def updatefeed def updatefeed
ann_feed = EventNewsFeed.find(params[:id]) ann_feed = EventNewsFeed.find(params[:id])
ann_feed.update_attributes(feed_params) ann_feed.update_attributes(feed_params)
ann_feed.save ann_feed.save
feeds = EventNewsFeed.all.asc(:created_at) feeds = EventNewsFeed.all.asc(:created_at)
render :partial => "feed", :collection => feeds render :partial => "feed", :collection => feeds
end end
def deletefeed def deletefeed
ann_feed = EventNewsFeed.find(params[:id]) ann_feed = EventNewsFeed.find(params[:id])
ann_feed.destroy ann_feed.destroy
feeds = EventNewsFeed.all.asc(:created_at) feeds = EventNewsFeed.all.asc(:created_at)
render :partial => "feed", :collection => feeds render :partial => "feed", :collection => feeds
end end
def new def new
@tags = @module_app.tags @tags = @module_app.tags
@statuses = [] @statuses = []
@event_news = EventNews.new @event_news = EventNews.new
@event_news.email_sentdate = Time.now @event_news.email_sentdate = Time.now
@reach_limit = @event_news.check_status_limit(current_user,true) @reach_limit = @event_news.check_status_limit(current_user,true)
if defined? Calendar if defined? Calendar
categories = user_authenticated_categories rescue ['all'] categories = user_authenticated_categories rescue ['all']
if categories.first == "all" if categories.first == "all"
@calendar_categories = CalendarType.all @calendar_categories = CalendarType.all
else else
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue [] @calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
end end
end end
end end
def create def create
bps = event_news_params bps = event_news_params
event_news = EventNews.new(bps) event_news = EventNews.new(bps)
if !bps['event_news_links_attributes'].nil? if !bps['event_news_links_attributes'].nil?
bps['event_news_links_attributes'].each do |idx,link| bps['event_news_links_attributes'].each do |idx,link|
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank? bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
end end
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((!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) if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
bps[:is_top] = "0" bps[:is_top] = "0"
bps[:top_end_date] = nil bps[:top_end_date] = nil
end end
else else
bps[:is_top] = false bps[:is_top] = false
bps[:is_hot] = false bps[:is_hot] = false
bps[:is_hidden] = false bps[:is_hidden] = false
end end
# if !defined?(Calendar).nil? # if !defined?(Calendar).nil?
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank? # if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
# Event.find(bps[:event_id]).destroy rescue nil # Event.find(bps[:event_id]).destroy rescue nil
# bps[:event_id] = nil # bps[:event_id] = nil
# elsif bps[:add_to_calendar] == '1' # elsif bps[:add_to_calendar] == '1'
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id) # 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 = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
# e_start = Time.now.to_datetime if e_start.blank? # 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 = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
# e_end = Time.now.to_datetime + 1.year if e_end.blank? # 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]) # 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 # bps[:event_id] = event.id
# end # end
# end # end
event_news.create_user_id = current_user.id event_news.create_user_id = current_user.id
event_news.update_user_id = current_user.id event_news.update_user_id = current_user.id
if EventNewsSetting.is_pro? if EventNewsSetting.is_pro?
if user_can_approve? if user_can_approve?
event_news.approved = true event_news.approved = true
else else
send_notification_mail_to_managers(event_news,"approval",I18n.locale) send_notification_mail_to_managers(event_news,"approval",I18n.locale)
end end
else else
event_news.approved = true event_news.approved = true
end end
event_news.save event_news.save
build_email(event_news,I18n.locale) build_email(event_news,I18n.locale)
redirect_to params['referer_url'] redirect_to params['referer_url']
end end
def approve_event_news def approve_event_news
id = params[:id] id = params[:id]
event_news = EventNews.find(id) event_news = EventNews.find(id)
if params["approved"] == "true" if params["approved"] == "true"
event_news.approved = true event_news.approved = true
event_news.rejected = false event_news.rejected = false
event_news.reapproval = false event_news.reapproval = false
else else
event_news.rejected = true event_news.rejected = true
event_news.reapproval = false event_news.reapproval = false
event_news.rejection_reason = params["reason"] event_news.rejection_reason = params["reason"]
send_rejection_email(event_news,I18n.locale) send_rejection_email(event_news,I18n.locale)
end end
event_news.save event_news.save
redirect_to admin_event_news_index_path redirect_to admin_event_news_index_path
end end
def edit def edit
if can_edit_or_delete?(@event_news) if can_edit_or_delete?(@event_news)
@reach_limit = @event_news.check_status_limit(current_user,true) @reach_limit = @event_news.check_status_limit(current_user,true)
@tags = @module_app.tags @tags = @module_app.tags
@categories = @module_app.categories.enabled @categories = @module_app.categories.enabled
if defined? Calendar if defined? Calendar
categories = user_authenticated_categories rescue ['all'] categories = user_authenticated_categories rescue ['all']
if categories.first == "all" if categories.first == "all"
@calendar_categories = CalendarType.all @calendar_categories = CalendarType.all
else else
@calendar_categories = CalendarType.where(:category_id.in => categories) rescue [] @calendar_categories = CalendarType.where(:category_id.in => categories) rescue []
end end
end end
@statuses = [] @statuses = []
@event_news.email_sentdate = Time.now if @event_news.email_sent == false @event_news.email_sentdate = Time.now if @event_news.email_sent == false
else else
render_401 render_401
end end
end end
def update def update
uid = params[:id].split('-').last uid = params[:id].split('-').last
event_news = EventNews.find_by(:uid=>uid) event_news = EventNews.find_by(:uid=>uid)
bps = event_news_params bps = event_news_params
bps[:tags] = bps[:tags].blank? ? [] : bps[:tags] bps[:tags] = bps[:tags].blank? ? [] : bps[:tags]
bps[:email_member_ids] = bps[:email_member_ids].blank? ? [] : bps[:email_member_ids] bps[:email_member_ids] = bps[:email_member_ids].blank? ? [] : bps[:email_member_ids]
if !bps['event_news_links_attributes'].nil? if !bps['event_news_links_attributes'].nil?
bps['event_news_links_attributes'].each do |idx,link| bps['event_news_links_attributes'].each do |idx,link|
bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank? bps['event_news_links_attributes'].delete(idx.to_s) if link['url'].blank?
end end
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((!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) if bps[:is_top] == "1" && !EventNewsSetting.check_limit_for_user(event_news.create_user_id, event_news.id)
bps[:is_top] = "0" bps[:is_top] = "0"
bps[:top_end_date] = nil bps[:top_end_date] = nil
end end
else else
bps[:is_top] = event_news.is_top bps[:is_top] = event_news.is_top
bps[:is_hot] = event_news.is_hot bps[:is_hot] = event_news.is_hot
bps[:is_hidden] = event_news.is_hidden bps[:is_hidden] = event_news.is_hidden
end end
# if !defined?(Calendar).nil? # if !defined?(Calendar).nil?
# if bps[:add_to_calendar] == '0' && !bps[:event_id].blank? # if bps[:add_to_calendar] == '0' && !bps[:event_id].blank?
# Event.find(bps[:event_id]).destroy rescue nil # Event.find(bps[:event_id]).destroy rescue nil
# bps[:event_id] = nil # bps[:event_id] = nil
# elsif bps[:add_to_calendar] == '1' # elsif bps[:add_to_calendar] == '1'
# event = Event.find(bps[:event_id]) rescue Event.new(create_user_id: current_user.id) # 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 = bps[:calendar_start_date].blank? ? bps[:postdate] : bps[:calendar_start_date]
# e_start = Time.now.to_datetime if e_start.blank? # 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 = bps[:calendar_end_date].blank? ? bps[:deadline] : bps[:calendar_end_date]
# e_end = Time.now.to_datetime + 1.year if e_end.blank? # 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]) # 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 # bps[:event_id] = event.id
# end # end
# end # end
event_news.update_attributes(bps) event_news.update_attributes(bps)
event_news.update_user_id = current_user.id event_news.update_user_id = current_user.id
if event_news.rejected if event_news.rejected
event_news.reapproval = true event_news.reapproval = true
event_news.save event_news.save
send_notification_mail_to_managers(event_news,"reapproval",I18n.locale) send_notification_mail_to_managers(event_news,"reapproval",I18n.locale)
else else
event_news.save event_news.save
end end
build_email(event_news,I18n.locale) build_email(event_news,I18n.locale)
now_event_news_page = EventNews.where(:title.ne => "",:is_preview.in=>[false,nil]) 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 .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 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) redirect_to admin_event_news_index_path(:page=>now_event_news_page)
end end
def destroy def destroy
@event_news.destroy @event_news.destroy
redirect_to "/admin/event_news" redirect_to "/admin/event_news"
end end
def delete def delete
if params[:ids] if params[:ids]
EventNews.any_in(:uid => params[:ids]).destroy_all EventNews.any_in(:uid => params[:ids]).destroy_all
end end
redirect_to "/admin/event_news" redirect_to "/admin/event_news"
end end
def preview def preview
if params['preview_type'].eql?('edit') if params['preview_type'].eql?('edit')
event_news_data = event_news_params event_news_data = event_news_params
org_event_news = EventNews.find(params['event_news_id']) org_event_news = EventNews.find(params['event_news_id'])
event_news = org_event_news.clone event_news = org_event_news.clone
event_news.generate_uid event_news.generate_uid
event_news.event_news_files = [] event_news.event_news_files = []
event_news.event_news_links = [] event_news.event_news_links = []
if event_news_data['image'].blank? if event_news_data['image'].blank?
event_news.image = org_event_news.image event_news.image = org_event_news.image
end end
if !event_news_data['event_news_files_attributes'].blank? if !event_news_data['event_news_files_attributes'].blank?
event_news_data['event_news_files_attributes'].each do |key, event_news_file| event_news_data['event_news_files_attributes'].each do |key, event_news_file|
next if !event_news_file['_destroy'].blank? next if !event_news_file['_destroy'].blank?
file = nil file = nil
if event_news_file['id'].blank? if event_news_file['id'].blank?
file = EventNewsFile.new(event_news_file) file = EventNewsFile.new(event_news_file)
file.event_news_id = event_news.id file.event_news_id = event_news.id
file.save file.save
else else
org_file = EventNewsFile.find(event_news_file['id']) org_file = EventNewsFile.find(event_news_file['id'])
file = org_file.clone file = org_file.clone
file.event_news_id = event_news.id file.event_news_id = event_news.id
file.file = org_file.file file.file = org_file.file
event_news_file.delete('id') event_news_file.delete('id')
event_news_file.delete('_destroy') event_news_file.delete('_destroy')
file.update_attributes(event_news_file) file.update_attributes(event_news_file)
end end
file.save file.save
event_news.event_news_files << file event_news.event_news_files << file
end end
end end
if !event_news_data['event_news_links_attributes'].blank? if !event_news_data['event_news_links_attributes'].blank?
event_news_data['event_news_links_attributes'].each do |key, event_news_link| event_news_data['event_news_links_attributes'].each do |key, event_news_link|
next if !event_news_link['_destroy'].blank? next if !event_news_link['_destroy'].blank?
if event_news_link['id'].blank? if event_news_link['id'].blank?
link = EventNewsLink.new(event_news_link) link = EventNewsLink.new(event_news_link)
link.event_news_id = event_news.id link.event_news_id = event_news.id
else else
link = EventNewsLink.find(event_news_link['id']).clone link = EventNewsLink.find(event_news_link['id']).clone
link.event_news_id = event_news.id link.event_news_id = event_news.id
event_news_link.delete('id') event_news_link.delete('id')
event_news_link.delete('_destroy') event_news_link.delete('_destroy')
link.update_attributes(event_news_link) link.update_attributes(event_news_link)
end end
link.save link.save
event_news.event_news_links << link event_news.event_news_links << link
end end
end end
event_news_data.delete('event_news_files_attributes') event_news_data.delete('event_news_files_attributes')
event_news_data.delete('event_news_links_attributes') event_news_data.delete('event_news_links_attributes')
event_news.update_attributes(event_news_data) event_news.update_attributes(event_news_data)
else else
event_news = EventNews.new(event_news_params) event_news = EventNews.new(event_news_params)
end end
event_news.is_preview = true event_news.is_preview = true
event_news.save event_news.save
render :text=>page_for_event_news(event_news) + "?preview=true" render :text=>page_for_event_news(event_news) + "?preview=true"
end end
def destroy_preview def destroy_preview
event_news = EventNews.find_by(:uid=>params['uid']) event_news = EventNews.find_by(:uid=>params['uid'])
if event_news.is_preview if event_news.is_preview
event_news.destroy event_news.destroy
end end
render :json=>{'destroy'=>event_news.id.to_s} render :json=>{'destroy'=>event_news.id.to_s}
end end
def build_email(event_news,locale) def build_email(event_news,locale)
if event_news.email_sent and !event_news.email_addresses.blank? if event_news.email_sent and !event_news.email_addresses.blank?
if event_news.email.nil? if event_news.email.nil?
email = Email.new email = Email.new
email.save email.save
email.deliver rescue nil email.deliver rescue nil
event_news.email_id = email.id event_news.email_id = email.id
event_news.save event_news.save
end end
is_sent = event_news.email.is_sent is_sent = event_news.email.is_sent
is_sent = !params[:resend_mail].eql?("true") if !params[:resend_mail].blank? is_sent = !params[:resend_mail].eql?("true") if !params[:resend_mail].blank?
doc = Nokogiri::HTML(event_news.title_translations[locale]) doc = Nokogiri::HTML(event_news.title_translations[locale])
title = doc.text.empty? ? 'no content' : doc.text title = doc.text.empty? ? 'no content' : doc.text
event_news.email.update_attributes( event_news.email.update_attributes(
:create_user=>current_user, :create_user=>current_user,
:mail_sentdate=>event_news.email_sentdate, :mail_sentdate=>event_news.email_sentdate,
:module_app=>@module_app, :module_app=>@module_app,
:mail_lang => locale, :mail_lang => locale,
:mail_to=>event_news.email_addresses, :mail_to=>event_news.email_addresses,
:mail_subject=>title, :mail_subject=>title,
:template=>'event_news/email', :template=>'event_news/email',
:template_data=>{ :template_data=>{
"host" => request.host_with_port, "host" => request.host_with_port,
"title" => title, "title" => title,
"url" => page_for_event_news(event_news) "url" => page_for_event_news(event_news)
}, },
:is_sent=>is_sent :is_sent=>is_sent
) )
event_news.email.deliver event_news.email.deliver
else else
event_news.email.destroy if !event_news.email.nil? event_news.email.destroy if !event_news.email.nil?
end end
end end
def custom_fields_title def custom_fields_title
@event_news_custom_titles = EventNewsCustomTitle.get_map @event_news_custom_titles = EventNewsCustomTitle.get_map
end end
def update_custom_title def update_custom_title
event_news_custom_title_params = params.require(:event_news_custom_title).permit! 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| 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) EventNewsCustomTitle.find(event_news_custom_title_param['id']).update_attributes(event_news_custom_title_param)
end end
Thread.new do 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" 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) system(content)
end end
redirect_to action: :index redirect_to action: :index
end end
private private
def load_settings def load_settings
@event_news_setting = EventNewsSetting.first rescue nil @event_news_setting = EventNewsSetting.first rescue nil
if @event_news_setting.nil? if @event_news_setting.nil?
@event_news_setting = EventNewsSetting.create @event_news_setting = EventNewsSetting.create
end end
end end
def set_event_news def set_event_news
@event_news = EventNews.find(params[:id]) @event_news = EventNews.find(params[:id])
end end
def event_news_params def event_news_params
params[:event_news][:email_sent] = params[:event_news][:email_sent].nil? ? 0 : params[:event_news][:email_sent] params[:event_news][:email_sent] = params[:event_news][:email_sent].nil? ? 0 : params[:event_news][:email_sent]
params.require(:event_news).permit! params.require(:event_news).permit!
end end
def feed_params def feed_params
params.require(:event_news_feed).permit! params.require(:event_news_feed).permit!
end end
def settings_params def settings_params
params.require(:event_news_setting).permit! params.require(:event_news_setting).permit!
end end
end end

View File

@ -21,10 +21,7 @@ class EventNewsController < ApplicationController
target = a.is_external_link ? "_blank" : "_self" target = a.is_external_link ? "_blank" : "_self"
doc = Nokogiri::HTML(a.title) doc = Nokogiri::HTML(a.title)
title = doc.text.empty? ? 'no content' : doc.text title = doc.text.empty? ? 'no content' : doc.text
event_time = (a.event_date.strftime(a.date_parse_format) rescue "") event_time = a.event_time_formated_for_frontend
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_formated = a.event_time_formated event_time_formated = a.event_time_formated
{ {
"department" => author, "department" => author,
@ -53,7 +50,7 @@ class EventNewsController < ApplicationController
"target" => target, "target" => target,
"img_src" => a.image.thumb.url || "/assets/event_news-default.jpg", "img_src" => a.image.thumb.url || "/assets/event_news-default.jpg",
"img_description" => desc, "img_description" => desc,
"more" => t(:more_plus), "more" => t("event_news.more"),
"view_count" => a.view_count "view_count" => a.view_count
} }
else else
@ -72,11 +69,11 @@ class EventNewsController < ApplicationController
"event_news" => event_news, "event_news" => event_news,
"extras" => { "extras" => {
"widget-title" =>t('event_news.event_news'), "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'), "speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
"place-head" => EventNewsCustomTitle.get_trans('place'), "place-head" => EventNewsCustomTitle.get_trans('place'),
"host-head" => EventNewsCustomTitle.get_trans('host'), "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'), "event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
"date-head" => EventNewsCustomTitle.get_trans('event_date'), "date-head" => EventNewsCustomTitle.get_trans('event_date'),
"status-head" => t('event_news.table.status'), "status-head" => t('event_news.table.status'),
@ -379,12 +376,13 @@ class EventNewsController < ApplicationController
"more_url"=>OrbitHelper.widget_more_url, "more_url"=>OrbitHelper.widget_more_url,
"main_picture" => mp, "main_picture" => mp,
"main_picture_description" => mpd, "main_picture_description" => mpd,
"title-head" => t('event_news.title'), "title-head" => EventNewsCustomTitle.get_trans('title'),
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'), "speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
"place-head" => EventNewsCustomTitle.get_trans('place'), "place-head" => EventNewsCustomTitle.get_trans('place'),
"host-head" => EventNewsCustomTitle.get_trans('host'), "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'), "event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
"date-head" => t('event_news.table.date'), "date-head" => t('event_news.table.date'),
"author-head" => t('event_news.table.author'), "author-head" => t('event_news.table.author'),
"status-head" => t('event_news.table.status'), "status-head" => t('event_news.table.status'),
@ -532,7 +530,6 @@ class EventNewsController < ApplicationController
event_news = top_event_news + rest_event_news event_news = top_event_news + rest_event_news
end end
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 event_news
end end
@ -623,20 +620,26 @@ class EventNewsController < ApplicationController
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause" pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
prev_btn_title = (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev" prev_btn_title = (I18n.locale.to_s =="zh_tw") ? "上一張" : "prev"
next_btn_title = (I18n.locale.to_s =="zh_tw") ? "下一張" : "next" next_btn_title = (I18n.locale.to_s =="zh_tw") ? "下一張" : "next"
event_time = (event_news.event_date.strftime(event_news.date_parse_format) rescue "") begin
if event_news.event_end_date event_time = event_news.event_time_formated_for_frontend
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>" rescue => e
puts e.to_s
event_time = ""
end end
{ {
"tags" => tags, "tags" => tags,
"event_news_files" => files, "event_news_files" => files,
"event_news_links" => links, "event_news_links" => links,
"event_carousel_images" => event_carousel_images, "event_carousel_images" => event_carousel_images,
"data" => { "data" => {
"title-head" => EventNewsCustomTitle.get_trans('title'),
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'), "speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
"place-head" => EventNewsCustomTitle.get_trans('place'),
"host-head" => EventNewsCustomTitle.get_trans('host'), "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;" : ""), "speaker-css" => (event_news.speaker.blank? ? "display: none;" : ""),
"host-css" => (event_news.host.blank? ? "display: none;" : ""), "host-css" => (event_news.host.blank? ? "display: none;" : ""),
"speaker" => event_news.speaker, "speaker" => event_news.speaker,
@ -713,10 +716,7 @@ class EventNewsController < ApplicationController
event_date = DateTime.parse(event_news["event_date"].to_s) rescue nil 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_end_date = DateTime.parse(event_news["event_end_date"].to_s) rescue nil
event_time = (event_date.strftime(event_news.date_parse_format) rescue "") event_time = EventNewsSetting.event_time_formated_for_frontend(event_news["event_date"],event_news["event_end_date"])
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_carousel_images = Array(event_news["event_carousel_images"]) event_carousel_images = Array(event_news["event_carousel_images"])
resume_btn_title = (I18n.locale.to_s =="zh_tw") ? "繼續播放" : "resume" resume_btn_title = (I18n.locale.to_s =="zh_tw") ? "繼續播放" : "resume"
pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause" pause_btn_title = (I18n.locale.to_s =="zh_tw") ? "暫停播放" : "pause"
@ -735,10 +735,14 @@ class EventNewsController < ApplicationController
"update_user" => update_user, "update_user" => update_user,
"updated_at" => event_time, "updated_at" => event_time,
"body" => event_news["text_translations"][locale], "body" => event_news["text_translations"][locale],
"title-head" => EventNewsCustomTitle.get_trans('title'),
"speaker-head" => EventNewsCustomTitle.get_trans('speaker'), "speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
"place-head" => EventNewsCustomTitle.get_trans('place'),
"host-head" => EventNewsCustomTitle.get_trans('host'), "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'), "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;" : ""), "speaker-css" => (speaker.blank? ? "display: none;" : ""),
"host-css" => (host.blank? ? "display: none;" : ""), "host-css" => (host.blank? ? "display: none;" : ""),
"speaker" => speaker, "speaker" => speaker,
@ -809,10 +813,7 @@ class EventNewsController < ApplicationController
target = a.is_external_link ? "_blank" : "_self" target = a.is_external_link ? "_blank" : "_self"
doc = Nokogiri::HTML(a.title) doc = Nokogiri::HTML(a.title)
title = doc.text.empty? ? 'no content' : doc.text title = doc.text.empty? ? 'no content' : doc.text
event_time = (a.event_date.strftime(a.date_parse_format) rescue "") event_time = a.event_time_formated_for_frontend
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_formated = a.event_time_formated event_time_formated = a.event_time_formated
{ {
"department" => author, "department" => author,
@ -824,6 +825,8 @@ class EventNewsController < ApplicationController
"place-css" => (a.place.blank? ? "display: none;" : ""), "place-css" => (a.place.blank? ? "display: none;" : ""),
"event-time-formated" => event_time_formated, "event-time-formated" => event_time_formated,
"event-time-css" => (event_time_formated.blank? ? "display: none;" : ""), "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, "speaker" => a.speaker,
"place" => a.place, "place" => a.place,
"host" => a.host, "host" => a.host,
@ -841,7 +844,7 @@ class EventNewsController < ApplicationController
"target" => target, "target" => target,
"img_src" => a.image.thumb.url || "/assets/event_news-default.jpg", "img_src" => a.image.thumb.url || "/assets/event_news-default.jpg",
"img_description" => desc, "img_description" => desc,
"more" => t(:more_plus), "more" => t("event_news.more"),
"view_count" => a.view_count "view_count" => a.view_count
} }
else else
@ -860,11 +863,13 @@ class EventNewsController < ApplicationController
"event_news" => event_news, "event_news" => event_news,
"extras" => { "extras" => {
"widget-title" =>t('event_news.event_news'), "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'), "speaker-head" => EventNewsCustomTitle.get_trans('speaker'),
"place-head" => EventNewsCustomTitle.get_trans('place'),
"host-head" => EventNewsCustomTitle.get_trans('host'), "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'), "event_date-head" => EventNewsCustomTitle.get_trans('event_date'),
"date-head" => EventNewsCustomTitle.get_trans('event_date'),
"date-head" => t('event_news.table.date'), "date-head" => t('event_news.table.date'),
"status-head" => t('event_news.table.status'), "status-head" => t('event_news.table.status'),
"author-head" => t('event_news.table.author'), "author-head" => t('event_news.table.author'),

View File

@ -1,187 +1,187 @@
require "rss" require "rss"
class EventNewsFeedsController < ApplicationController class EventNewsFeedsController < ApplicationController
include Admin::EventNewsHelper include Admin::EventNewsHelper
def feed def feed
uid = params[:uid] uid = params[:uid]
anns = get_event_news(uid) anns = get_event_news(uid)
render :json => anns.to_json render :json => anns.to_json
end end
def rssfeed def rssfeed
uid = params[:uid] uid = params[:uid]
@bf = EventNewsFeed.find_by(:uid => uid) rescue nil @bf = EventNewsFeed.find_by(:uid => uid) rescue nil
if !@bf.nil? if !@bf.nil?
tags = @bf.tag_ids tags = @bf.tag_ids
if !tags.empty? if !tags.empty?
@event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags) @event_news = EventNews.can_display_and_sorted.is_approved.filter_by_tags(tags)
end end
categories = @bf.category_ids categories = @bf.category_ids
if !categories.empty? if !categories.empty?
@event_news = @event_news.filter_by_categories(categories) @event_news = @event_news.filter_by_categories(categories)
end end
else else
@event_news = [] @event_news = []
end end
respond_to do |format| respond_to do |format|
format.html {redirect_to "/xhr/event_news/rssfeed/#{@bf.uid}.rss"} format.html {redirect_to "/xhr/event_news/rssfeed/#{@bf.uid}.rss"}
format.rss format.rss
end end
end end
def feeds def feeds
feeds = [] feeds = []
EventNewsFeed.all.each do |bf| EventNewsFeed.all.each do |bf|
feed = {} feed = {}
feed["title_translations"] = bf.title_translations feed["title_translations"] = bf.title_translations
feed["uid"] = bf.uid feed["uid"] = bf.uid
feed["url"] = "#{request.base_url}/xhr/event_news/feed/#{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["xml_url"] = "#{request.base_url}/xhr/event_news/rssfeed/#{bf.uid}.rss"
feed["tags"] = [] feed["tags"] = []
bf.tag_ids.each do |t| bf.tag_ids.each do |t|
tag = Tag.find(t) tag = Tag.find(t)
d = {} d = {}
d["name_translations"] = tag.name_translations d["name_translations"] = tag.name_translations
feed["tags"] << d feed["tags"] << d
end end
feeds << feed feeds << feed
end end
render :json => {"feeds" => feeds}.to_json render :json => {"feeds" => feeds}.to_json
end end
private private
def smart_convertor(text) def smart_convertor(text)
html_string = text html_string = text
links = html_string.scan(/img.*?src="(.*?)"/i) links = html_string.scan(/img.*?src="(.*?)"/i)
links = links + html_string.scan(/a.*?href="(.*?)"/i) links = links + html_string.scan(/a.*?href="(.*?)"/i)
links.uniq! links.uniq!
links.each do |link| links.each do |link|
l = link.first l = link.first
new_link = nil new_link = nil
if l.starts_with?("/") if l.starts_with?("/")
new_link = request.protocol + request.host_with_port + l new_link = request.protocol + request.host_with_port + l
elsif l.starts_with?("..") elsif l.starts_with?("..")
l1 = l.gsub("../","") l1 = l.gsub("../","")
new_link = request.protocol + request.host_with_port + "/" + l1 new_link = request.protocol + request.host_with_port + "/" + l1
end end
html_string = html_string.gsub(l,new_link) if !new_link.nil? html_string = html_string.gsub(l,new_link) if !new_link.nil?
end end
return html_string return html_string
end end
def get_event_news(uid) def get_event_news(uid)
bf = EventNewsFeed.find_by(:uid => uid) rescue nil bf = EventNewsFeed.find_by(:uid => uid) rescue nil
startdt = params[:start] startdt = params[:start]
enddt = params[:end] enddt = params[:end]
dt = params[:date] dt = params[:date]
if !bf.nil? if !bf.nil?
tags = bf.tag_ids tags = bf.tag_ids
categories = bf.category_ids categories = bf.category_ids
if !(categories.empty? && tags.empty?) if !(categories.empty? && tags.empty?)
if !dt.nil? if !dt.nil?
dt = DateTime.parse(dt) dt = DateTime.parse(dt)
dtt = dt + 1.day dtt = dt + 1.day
event_news = EventNews.where(:postdate.gt => dt, :postdate.lt => dtt).can_display_and_sorted.is_approved event_news = EventNews.where(:postdate.gt => dt, :postdate.lt => dtt).can_display_and_sorted.is_approved
elsif !startdt.nil? && enddt.nil? elsif !startdt.nil? && enddt.nil?
startdt = DateTime.parse(startdt) startdt = DateTime.parse(startdt)
enddt = DateTime.now enddt = DateTime.now
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
elsif !startdt.nil? && !enddt.nil? elsif !startdt.nil? && !enddt.nil?
startdt = DateTime.parse(startdt) startdt = DateTime.parse(startdt)
enddt = DateTime.parse(enddt) + 1.day enddt = DateTime.parse(enddt) + 1.day
event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved event_news = EventNews.where(:postdate.gt => startdt, :postdate.lt => enddt).can_display_and_sorted.is_approved
else else
event_news = EventNews.all.can_display_and_sorted.is_approved event_news = EventNews.all.can_display_and_sorted.is_approved
end end
if !tags.empty? if !tags.empty?
event_news = event_news.filter_by_tags(tags) event_news = event_news.filter_by_tags(tags)
end end
if !categories.empty? if !categories.empty?
event_news = event_news.filter_by_categories(categories) event_news = event_news.filter_by_categories(categories)
end end
else else
event_news = [] event_news = []
end end
end end
all_anns = [] all_anns = []
tag_names = [] tag_names = []
category_titles = [] category_titles = []
tag_ids = [] tag_ids = []
category_ids = [] category_ids = []
event_news.each do |anns| event_news.each do |anns|
user = User.find(anns.create_user_id) rescue nil user = User.find(anns.create_user_id) rescue nil
if !user.nil? if !user.nil?
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
else else
author = "" author = ""
end end
a = {} a = {}
a["id"] = anns.uid a["id"] = anns.uid
translations_fields = ["title","subtitle","speaker","place","host","notes"] translations_fields = ["title","subtitle","speaker","place","host","notes"]
translations_fields.each do |translations_field| translations_fields.each do |translations_field|
a[translations_field+"_translations"] = anns.send(translations_field+"_translations") rescue {} a[translations_field+"_translations"] = anns.send(translations_field+"_translations") rescue {}
end end
a["text_translations"] = {} a["text_translations"] = {}
a["text_translations"]["en"] = smart_convertor(anns.text_translations["en"]) if !anns.text_translations["en"].blank? 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["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_date"] = anns.event_date
a["event_end_date"] = anns.event_end_date a["event_end_date"] = anns.event_end_date
a["postdate"] = anns.event_date#anns.postdate a["postdate"] = anns.event_date#anns.postdate
a["image_description_translations"] = anns.image_description_translations a["image_description_translations"] = anns.image_description_translations
a["image"] = {} a["image"] = {}
a["image"]["original"] = ("#{request.base_url}" + anns.image.url rescue "") a["image"]["original"] = ("#{request.base_url}" + anns.image.url rescue "")
a["image"]["thumb"] = ("#{request.base_url}" + anns.image.thumb.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["image"]["mobile"] = ("#{request.base_url}" + anns.image.mobile.url rescue "")
a["img_src"] = a["image"]["thumb"] || "/assets/announcement-default.jpg" a["img_src"] = a["image"]["thumb"] || "/assets/announcement-default.jpg"
a["tags"] = [] a["tags"] = []
a["category"] = {} a["category"] = {}
a["author"] = author a["author"] = author
a["params"] = anns.to_param a["params"] = anns.to_param
a["event_news_links"] = [] a["event_news_links"] = []
a["event_news_files"] = [] 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 }} 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| anns.tags.each do |tag|
if !tag_ids.include?(tag.id.to_s) if !tag_ids.include?(tag.id.to_s)
tag_ids << tag.id.to_s tag_ids << tag.id.to_s
tag_names << {"name_translations" => tag.name_translations} tag_names << {"name_translations" => tag.name_translations}
end end
a["tags"] << {"name_translations" => tag.name_translations} a["tags"] << {"name_translations" => tag.name_translations}
end end
cat = anns.category cat = anns.category
if (!category_ids.include?(cat.id.to_s) rescue false) if (!category_ids.include?(cat.id.to_s) rescue false)
category_ids << cat.id.to_s category_ids << cat.id.to_s
category_titles << {"title_translations" => cat.title_translations} category_titles << {"title_translations" => cat.title_translations}
end end
a["category"] = {"title_translations" => (cat.title_translations rescue {})} a["category"] = {"title_translations" => (cat.title_translations rescue {})}
anns.event_news_links.each do |bl| anns.event_news_links.each do |bl|
b = {} b = {}
b["url"] = bl.url b["url"] = bl.url
b["title_translations"] = bl.title_translations b["title_translations"] = bl.title_translations
b["link_url"] = b["url"] 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 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 a["event_news_links"] << b
end end
anns.event_news_files.each do |bf| anns.event_news_files.each do |bf|
b = {} b = {}
b["description_translations"] = bf.description_translations b["description_translations"] = bf.description_translations
b["title_translations"] = bf.title_translations b["title_translations"] = bf.title_translations
b["url"] = ("#{request.base_url}" + bf.file.url rescue "") b["url"] = ("#{request.base_url}" + bf.file.url rescue "")
b["file_url"] = b["url"] 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 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 a["event_news_files"] << b
end end
all_anns << a all_anns << a
end end
{ {
"event_news" => all_anns, "event_news" => all_anns,
"tags" => tag_names, "tags" => tag_names,
"categories" => category_titles "categories" => category_titles
} }
end end
end end

View File

@ -1,129 +1,129 @@
# encoding: utf-8 # encoding: utf-8
class EventNewsModuleController < ApplicationController class EventNewsModuleController < ApplicationController
before_filter :set_I18n before_filter :set_I18n
def get_event_news def get_event_news
page = Page.where(:module => "event_news").first rescue nil page = Page.where(:module => "event_news").first rescue nil
# 頁次 # 頁次
page_num = params[:page_num].blank? ? 0 : params[:page_num].to_i 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 = params[:per_page].blank? ? 10 : params[:per_page].to_i
per_page = per_page > 0 ? per_page : 10 per_page = per_page > 0 ? per_page : 10
I18n.locale = :zh_tw I18n.locale = :zh_tw
if !params[:keyword].blank? if !params[:keyword].blank?
keyword = Regexp.new(".*"+params[:keyword]+".*") keyword = Regexp.new(".*"+params[:keyword]+".*")
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword}) event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
else else
event_news = EventNews.all event_news = EventNews.all
end end
if !params[:category].blank? if !params[:category].blank?
module_id = ModuleApp.where(:key=>"event_news").first.id module_id = ModuleApp.where(:key=>"event_news").first.id
category = Regexp.new(".*"+params[:category]+".*") category = Regexp.new(".*"+params[:category]+".*")
category_id = Category.where(:title => category, :module_app_id => module_id).first.id category_id = Category.where(:title => category, :module_app_id => module_id).first.id
event_news = event_news.where(:category_id => category_id) event_news = event_news.where(:category_id => category_id)
else else
event_news = event_news event_news = event_news
end end
event_news = event_news.where(:is_preview.in=>[false,nil]) 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(:approved.ne => false , :rejected.ne => true)
event_news = event_news.where(:postdate.lt=>Time.now) 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.desc( :is_top, :postdate).page(page_num).per(per_page)
event_news = event_news.collect do |b| event_news = event_news.collect do |b|
image = request.protocol + request.host_with_port + b.image.url rescue nil image = request.protocol + request.host_with_port + b.image.url rescue nil
links = b.event_news_links.collect do |bl| links = b.event_news_links.collect do |bl|
{ {
"title" => bl.title_translations, "title" => bl.title_translations,
"url" => bl.url "url" => bl.url
} }
end rescue nil end rescue nil
files = b.event_news_files.collect do |bf| files = b.event_news_files.collect do |bf|
file = request.protocol + request.host_with_port + bf.file.url rescue nil file = request.protocol + request.host_with_port + bf.file.url rescue nil
{ {
"title" => bf.title_translations, "title" => bf.title_translations,
"description" => bf.description_translations, "description" => bf.description_translations,
"file" => file "file" => file
} }
end rescue nil end rescue nil
ts = b.tags.collect do |t| ts = b.tags.collect do |t|
{ {
"name" => t.name_translations "name" => t.name_translations
} }
end rescue nil end rescue nil
text = {"en" => "", "zh_tw" => ""} text = {"en" => "", "zh_tw" => ""}
text["en"] = (b.text_translations["en"].nil? ? "" :smart_convertor(b.text_translations["en"])) 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"])) 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 "" author = User.find(b.create_user_id).member_profile.name rescue ""
{ {
"id" => b.id.to_s, "id" => b.id.to_s,
"title" => b.title_translations, "title" => b.title_translations,
"subtitle" => b.subtitle_translations, "subtitle" => b.subtitle_translations,
"text" => text, "text" => text,
"postdate" => b.postdate, "postdate" => b.postdate,
"deadline" => b.deadline, "deadline" => b.deadline,
"category" => b.category.title_translations, "category" => b.category.title_translations,
"tags" => ts, "tags" => ts,
"image" => image, "image" => image,
"links" => links, "links" => links,
"files" => files, "files" => files,
"author" => author, "author" => author,
"url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}" "url" => "/#{I18n.locale.to_s + page.url}/#{b.to_param}"
} }
end end
# 計算總筆數 Start # 計算總筆數 Start
if !params[:keyword].blank? if !params[:keyword].blank?
keyword = Regexp.new(".*"+params[:keyword]+".*") keyword = Regexp.new(".*"+params[:keyword]+".*")
event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword}) event_news = EventNews.any_of({:title=>keyword},{:subtitle=>keyword},{:text=>keyword})
else else
event_news = EventNews.all event_news = EventNews.all
end end
event_news = event_news.where(:is_preview.in=>[false,nil]) 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(:approved.ne => false , :rejected.ne => true)
event_news = event_news.where(:postdate.lt=>Time.now) event_news = event_news.where(:postdate.lt=>Time.now)
total_pages = event_news.count total_pages = event_news.count
# End # End
render :json => { render :json => {
"event_news" => event_news, "event_news" => event_news,
"event_news_count" => event_news.count, "event_news_count" => event_news.count,
"page_num" => page_num, "page_num" => page_num,
"total_pages" => total_pages, "total_pages" => total_pages,
}.to_json }.to_json
end end
def smart_convertor(text) def smart_convertor(text)
html_string = text html_string = text
links = html_string.scan(/img.*?src="(.*?)"/i) links = html_string.scan(/img.*?src="(.*?)"/i)
links.each do |link| links.each do |link|
l = link.first l = link.first
new_link = nil new_link = nil
if l.starts_with?("/") if l.starts_with?("/")
new_link = request.protocol + request.host_with_port + l new_link = request.protocol + request.host_with_port + l
elsif l.starts_with?("..") elsif l.starts_with?("..")
l1 = l.gsub("../","") l1 = l.gsub("../","")
new_link = request.protocol + request.host_with_port + "/" + l1 new_link = request.protocol + request.host_with_port + "/" + l1
end end
html_string = html_string.sub(l,new_link) if !new_link.nil? html_string = html_string.sub(l,new_link) if !new_link.nil?
end end
return html_string return html_string
end end
protected protected
def set_I18n def set_I18n
I18n.locale = params[:lang] if params[:lang].present? I18n.locale = params[:lang] if params[:lang].present?
end end
end end

View File

@ -1,424 +1,424 @@
require "net/http" require "net/http"
require "uri" require "uri"
require 'json' require 'json'
module Admin::EventNewsHelper module Admin::EventNewsHelper
module FormHelper module FormHelper
extend self extend self
extend ActionView::Helpers::FormTagHelper extend ActionView::Helpers::FormTagHelper
extend ActionView::Helpers::FormOptionsHelper extend ActionView::Helpers::FormOptionsHelper
extend ActionView::Helpers::DateHelper extend ActionView::Helpers::DateHelper
extend ActionView::Helpers::TagHelper extend ActionView::Helpers::TagHelper
extend ActionView::Helpers::RenderingHelper extend ActionView::Helpers::RenderingHelper
extend ActionView::Context extend ActionView::Context
extend OrbitBasis::RenderAnywhere extend OrbitBasis::RenderAnywhere
extend ActionView::Helpers::UrlHelper extend ActionView::Helpers::UrlHelper
extend OrbitFormHelper extend OrbitFormHelper
extend Ckeditor::Helpers::FormHelper extend Ckeditor::Helpers::FormHelper
def available_locales def available_locales
@available_locales = @available_locales || Site.first.in_use_locales || I18n.available_locales @available_locales = @available_locales || Site.first.in_use_locales || I18n.available_locales
end end
def set_input_name(input_name) def set_input_name(input_name)
@input_name = input_name @input_name = input_name
end end
def get_input_name def get_input_name
@input_name.to_s @input_name.to_s
end end
def create_lang_panel(field) def create_lang_panel(field)
tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do
available_locales.collect do |key| available_locales.collect do |key|
link_entry_ary = ["##{field}","_#{key}"] link_entry_ary = ["##{field}","_#{key}"]
link_entry = link_entry_ary.join 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) link_to(I18n.t(key),link_entry,:data=>{:toggle=>"tab"},:class=>"btn #{(key == I18n.locale ? "active" : nil)}",:for=>key)
end.join.html_safe end.join.html_safe
end end
end end
def multiple_lang_tag(index1,type_of_tag,field,value=nil,custom_options={},combine_element='',exteral_options={},sortable=false) def multiple_lang_tag(index1,type_of_tag,field,value=nil,custom_options={},combine_element='',exteral_options={},sortable=false)
if !index1.nil? if !index1.nil?
all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'') all_field = (get_input_name + "[#{index1}][#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
else else
all_field = (get_input_name + "[#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'') all_field = (get_input_name + "[#{field}][parant]").gsub(/\[/,'_').gsub(/\]/,'')
end end
tmp = (available_locales.collect do |locale| tmp = (available_locales.collect do |locale|
active_flag = ((locale == I18n.locale) ? ' in active' : '') active_flag = ((locale == I18n.locale) ? ' in active' : '')
content_tag(:div,:class => "tab-content fade#{active_flag}",:id=>"#{all_field}_#{locale}") do content_tag(:div,:class => "tab-content fade#{active_flag}",:id=>"#{all_field}_#{locale}") do
value_locale = value[locale.to_s] rescue nil value_locale = value[locale.to_s] rescue nil
if !index1.nil? if !index1.nil?
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{index1}][#{field}][#{locale}]",value_locale,custom_options) self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{index1}][#{field}][#{locale}]",value_locale,custom_options)
else else
self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{field}][#{locale}]",value_locale,custom_options) self.__send__("#{type_of_tag}_tag","#{get_input_name}[#{field}][#{locale}]",value_locale,custom_options)
end end
end end
end.join + create_lang_panel(all_field)).html_safe + combine_element end.join + create_lang_panel(all_field)).html_safe + combine_element
if sortable if sortable
if exteral_options['style'].nil? if exteral_options['style'].nil?
exteral_options['style'] = 'display: flex;align-items: center;flex-wrap: nowrap;' exteral_options['style'] = 'display: flex;align-items: center;flex-wrap: nowrap;'
else else
exteral_options['style'] = exteral_options['style'] + 'display: flex;align-items: center;flex-wrap: nowrap;' exteral_options['style'] = exteral_options['style'] + 'display: flex;align-items: center;flex-wrap: nowrap;'
end end
content_tag(:div,{:class => "tab-panel border"}.merge(exteral_options)) do 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 ("<i class=\"icons-list-2\" style=\"cursor: grab;font-size: x-large;\"></i>" +content_tag(:div) do
tmp tmp
end).html_safe end).html_safe
end end
else else
content_tag(:div,{:class => "tab-panel"}.merge(exteral_options)) do content_tag(:div,{:class => "tab-panel"}.merge(exteral_options)) do
tmp tmp
end end
end end
end end
end end
def self.thead(field,center=false,enable_sort=true) def self.thead(field,center=false,enable_sort=true)
sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s
active = OrbitHelper.params[:sort].eql? sort active = OrbitHelper.params[:sort].eql? sort
order = active ? (["asc", "desc"]-[OrbitHelper.params[:order]]).first : "asc" 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>" arrow = (order.eql? "desc") ? "<b class='icons-arrow-up-3'></b>" : "<b class='icons-arrow-down-4'></b>"
klass = field.eql?(:title) ? "span5" : "span2" 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_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 "<th class='#{klass} #{active ? "active" : ""}' style='#{center ? "text-align:center" : ""}'>#{th_data}</th>".html_safe
end end
def page_for_event_news(event_news) def page_for_event_news(event_news)
ann_page = nil ann_page = nil
pages = Page.where(:module=>'event_news') pages = Page.where(:module=>'event_news')
pages.each do |page| pages.each do |page|
if page.categories.count ==1 if page.categories.count ==1
if page.categories.include?(event_news.category.id.to_s) if page.categories.include?(event_news.category.id.to_s)
ann_page = page ann_page = page
end end
end end
break if !ann_page.nil? break if !ann_page.nil?
end end
if ann_page.nil? if ann_page.nil?
pages.each do |page| pages.each do |page|
if page.categories.include?(event_news.category.id.to_s) if page.categories.include?(event_news.category.id.to_s)
ann_page = page ann_page = page
end end
break if !ann_page.nil? break if !ann_page.nil?
end end
end end
ann_page = pages.first if ann_page.nil? ann_page = pages.first if ann_page.nil?
request.protocol+(request.host_with_port+ann_page.url+'/'+event_news.to_param).gsub('//','/') rescue "/" request.protocol+(request.host_with_port+ann_page.url+'/'+event_news.to_param).gsub('//','/') rescue "/"
end end
def import_this_event_news(row,categories,tags) def import_this_event_news(row,categories,tags)
value = {} value = {}
anns = EventNews.new anns = EventNews.new
row.cells.each_with_index do |cell,index| row.cells.each_with_index do |cell,index|
val = cell.nil? ? nil : cell.value val = cell.nil? ? nil : cell.value
next if val.nil? || val == "" next if val.nil? || val == ""
case index case index
when 0 when 0
anns.category = categories[val.to_i] anns.category = categories[val.to_i]
when 1 when 1
new_tags = [] new_tags = []
if (val.include?(",") rescue false) if (val.include?(",") rescue false)
ts = val.split(",") ts = val.split(",")
ts.each do |t| ts.each do |t|
new_tags << tags[t.to_i] new_tags << tags[t.to_i]
end end
else else
new_tags << tags[val.to_i] new_tags << tags[val.to_i]
end end
anns.tags=new_tags anns.tags=new_tags
when 2 when 2
anns.event_date = val anns.event_date = val
when 3 when 3
anns.postdate = val anns.postdate = val
when 4 when 4
anns.deadline = val anns.deadline = val
when 5 when 5
anns.is_top = (val.to_i == 1 ? true : false) anns.is_top = (val.to_i == 1 ? true : false)
when 6 when 6
anns.is_hot = (val.to_i == 1 ? true : false) anns.is_hot = (val.to_i == 1 ? true : false)
when 7 when 7
anns.is_hidden = (val.to_i == 1 ? true : false) anns.is_hidden = (val.to_i == 1 ? true : false)
when 8 when 8
anns.remote_image_url = val anns.remote_image_url = val
when 9 when 9
value["en"] = val value["en"] = val
anns.image_description_translations = value.clone anns.image_description_translations = value.clone
when 10 when 10
value["zh_tw"] = val value["zh_tw"] = val
anns.image_description_translations = value.clone anns.image_description_translations = value.clone
value = {} value = {}
when 11 when 11
value["en"] = val value["en"] = val
anns.title_translations = value.clone anns.title_translations = value.clone
when 12 when 12
value["zh_tw"] = val value["zh_tw"] = val
anns.title_translations = value.clone anns.title_translations = value.clone
value = {} value = {}
when 13 when 13
value["en"] = val value["en"] = val
anns.speaker_translations = value.clone anns.speaker_translations = value.clone
when 14 when 14
value["zh_tw"] = val value["zh_tw"] = val
anns.speaker_translations = value.clone anns.speaker_translations = value.clone
value = {} value = {}
when 15 when 15
value["en"] = val value["en"] = val
anns.host_translations = value.clone anns.host_translations = value.clone
when 16 when 16
value["zh_tw"] = val value["zh_tw"] = val
anns.host_translations = value.clone anns.host_translations = value.clone
value = {} value = {}
when 17 when 17
value["en"] = val value["en"] = val
anns.subtitle_translations = value.clone anns.subtitle_translations = value.clone
when 18 when 18
value["zh_tw"] = val value["zh_tw"] = val
anns.subtitle_translations = value.clone anns.subtitle_translations = value.clone
value = {} value = {}
when 19 when 19
value["en"] = val value["en"] = val
anns.text_translations = value.clone anns.text_translations = value.clone
when 20 when 20
value["zh_tw"] = val value["zh_tw"] = val
anns.text_translations = value.clone anns.text_translations = value.clone
value = {} value = {}
when 21 when 21
value["en"] = val value["en"] = val
anns.notes_translations = value.clone anns.notes_translations = value.clone
when 22 when 22
value["zh_tw"] = val value["zh_tw"] = val
anns.notes_translations = value.clone anns.notes_translations = value.clone
value = {} value = {}
when 23 when 23
links = val.split(";") rescue [] links = val.split(";") rescue []
desc_en = row.cells[24].value.split(";") rescue [] desc_en = row.cells[24].value.split(";") rescue []
desc_zh_tw = row.cells[25].value.split(";") rescue [] desc_zh_tw = row.cells[25].value.split(";") rescue []
links.each_with_index do |link,i| links.each_with_index do |link,i|
bl = EventNewsLink.new bl = EventNewsLink.new
bl.url = link.strip bl.url = link.strip
bl.title_translations = {"en" => desc_en[i], "zh_tw" => desc_zh_tw[i]} bl.title_translations = {"en" => desc_en[i], "zh_tw" => desc_zh_tw[i]}
bl.event_news_id = anns.id bl.event_news_id = anns.id
bl.save bl.save
end end
when 26 when 26
files = val.split(";") rescue [] files = val.split(";") rescue []
desc_en = row.cells[27].value.split(";") rescue [] desc_en = row.cells[27].value.split(";") rescue []
desc_zh_tw = row.cells[28].value.split(";") rescue [] desc_zh_tw = row.cells[28].value.split(";") rescue []
alt_en = row.cells[29].value.split(";") rescue [] alt_en = row.cells[29].value.split(";") rescue []
alt_zh_tw = row.cells[30].value.split(";") rescue [] alt_zh_tw = row.cells[30].value.split(";") rescue []
files.each_with_index do |file, i| files.each_with_index do |file, i|
bf = EventNewsFile.new bf = EventNewsFile.new
bf.remote_file_url = file.strip rescue nil bf.remote_file_url = file.strip rescue nil
bf.title_translations = {"en" => (alt_en[i] rescue ""), "zh_tw" => (alt_zh_tw[i] rescue "")} 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.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
bf.event_news_id = anns.id bf.event_news_id = anns.id
bf.save bf.save
end end
when 31 when 31
value["en"] = val value["en"] = val
anns.place_translations = value.clone anns.place_translations = value.clone
when 32 when 32
value["zh_tw"] = val value["zh_tw"] = val
anns.place_translations = value.clone anns.place_translations = value.clone
value = {} value = {}
when 33 when 33
anns.event_end_date = val anns.event_end_date = val
when 34 when 34
carousel_images = val.split(";") rescue [] carousel_images = val.split(";") rescue []
desc_en = row.cells[35].value.split(";") rescue [] desc_en = row.cells[35].value.split(";") rescue []
desc_zh_tw = row.cells[36].value.split(";") rescue [] desc_zh_tw = row.cells[36].value.split(";") rescue []
carousel_images.each_with_index do |image, i| carousel_images.each_with_index do |image, i|
bc = EventCarouselImage.new bc = EventCarouselImage.new
bc.remote_file_url = image.strip rescue nil bc.remote_file_url = image.strip rescue nil
bc.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")} bc.description_translations = {"en" => (desc_en[i] rescue ""), "zh_tw" => (desc_zh_tw[i] rescue "")}
bc.event_news_id = anns.id bc.event_news_id = anns.id
bc.save bc.save
end end
end end
end end
anns.create_user_id = current_user.id.to_s anns.create_user_id = current_user.id.to_s
anns.update_user_id = current_user.id.to_s anns.update_user_id = current_user.id.to_s
anns.approved = true anns.approved = true
anns.save anns.save
end end
def send_rejection_email(event_news,locale) def send_rejection_email(event_news,locale)
user = User.find(event_news.create_user_id) rescue nil user = User.find(event_news.create_user_id) rescue nil
if !user.nil? if !user.nil?
email = user.member_profile.email email = user.member_profile.email
if !email.nil? && email != "" if !email.nil? && email != ""
url = "http://#{request.host_with_port}/admin/event_news/#{event_news.id}/edit" 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>" 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 = 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.save
mail.deliver rescue nil mail.deliver rescue nil
end end
end end
end end
def send_notification_mail_to_managers(event_news, type, locale) def send_notification_mail_to_managers(event_news, type, locale)
users = [] users = []
if @event_news_setting.email_to.include?("managers") if @event_news_setting.email_to.include?("managers")
authorizations = Authorization.where(:module_app_id => @module_app.id) authorizations = Authorization.where(:module_app_id => @module_app.id)
users = authorizations.collect do |auth| users = authorizations.collect do |auth|
auth.user auth.user
end end
end end
if @event_news_setting.email_to.include?("admins") if @event_news_setting.email_to.include?("admins")
wg = Workgroup.where(:key => "admin").first wg = Workgroup.where(:key => "admin").first
admins = User.where(:workgroup_id => wg.id) admins = User.where(:workgroup_id => wg.id)
users.delete(nil) users.delete(nil)
users = users.concat(admins.to_a) users = users.concat(admins.to_a)
end end
if @event_news_setting.email_to.include?("approvers") if @event_news_setting.email_to.include?("approvers")
approvers = User.find(@event_news_setting.approvers).to_a rescue [] approvers = User.find(@event_news_setting.approvers).to_a rescue []
auths = Authorization.where(:category_id => event_news.category_id).collect{|a| a.user} auths = Authorization.where(:category_id => event_news.category_id).collect{|a| a.user}
users = users.concat(approvers & auths) users = users.concat(approvers & auths)
end end
users.each do |user| users.each do |user|
email = user.member_profile.email email = user.member_profile.email
if !email.nil? && email != "" if !email.nil? && email != ""
send_email(user.name, email, event_news, type, locale) send_email(user.name, email, event_news, type, locale)
# sleep(1) # sleep(1)
end end
end end
end end
def send_email(name, useremail, event_news, type, locale) 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}" 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 case type
when "approval" 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>" 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" 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>" 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 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 = 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.save
email.deliver rescue nil email.deliver rescue nil
end end
def download_tmp_xml(url) def download_tmp_xml(url)
xml = File.join(Rails.root, "tmp", "ann_cc_ntu.xml") xml = File.join(Rails.root, "tmp", "ann_cc_ntu.xml")
open(xml, 'wb') do |fo| open(xml, 'wb') do |fo|
fo.print open(url).read fo.print open(url).read
end end
end end
def import_from_tmp_xml(file) def import_from_tmp_xml(file)
xml = Nokogiri::XML(file) xml = Nokogiri::XML(file)
return if xml.nil? return if xml.nil?
event_news = [] event_news = []
xml.xpath("//channel").xpath("//item").each do |anns| xml.xpath("//channel").xpath("//item").each do |anns|
event_news << { event_news << {
:title => (anns>"title").text, :title => (anns>"title").text,
:category => (anns>"category").text, :category => (anns>"category").text,
:postdate => (anns>"pubDate").text, :postdate => (anns>"pubDate").text,
:text => (anns>"description").text, :text => (anns>"description").text,
:rss2_sn => (anns>"link").text.split("=").last :rss2_sn => (anns>"link").text.split("=").last
} }
end end
event_news.each do |anns| event_news.each do |anns|
ma = ModuleApp.where(:key => "event_news").first ma = ModuleApp.where(:key => "event_news").first
cat = Category.where(:title => anns[:category]).first rescue nil cat = Category.where(:title => anns[:category]).first rescue nil
if cat.nil? if cat.nil?
cat = Category.create(:title_translations => {"en" => anns[:category], "zh_tw" => anns[:category]}, :module_app_id => ma.id) cat = Category.create(:title_translations => {"en" => anns[:category], "zh_tw" => anns[:category]}, :module_app_id => ma.id)
end end
ann = EventNews.where(:rss2_sn => anns[:rss2_sn]).first rescue nil ann = EventNews.where(:rss2_sn => anns[:rss2_sn]).first rescue nil
if ann.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) 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 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]}) 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 end
ann.save ann.save
end end
File.delete(file) File.delete(file)
end end
def import_from_wordpress(xmlfile) def import_from_wordpress(xmlfile)
xml_file = File.read(xmlfile) xml_file = File.read(xmlfile)
doc = Nokogiri::XML.parse(xml_file) doc = Nokogiri::XML.parse(xml_file)
doc.xpath("//channel").each do|channel_data| doc.xpath("//channel").each do|channel_data|
channel_data.xpath('//item').each do|itme| channel_data.xpath('//item').each do|itme|
bu = EventNews.where(:rss2_sn => itme.xpath('wp:post_id').text ).first rescue nil bu = EventNews.where(:rss2_sn => itme.xpath('wp:post_id').text ).first rescue nil
if bu.nil? if bu.nil?
bu = EventNews.new bu = EventNews.new
bu.approved = true bu.approved = true
bu.rss2_sn = itme.xpath('wp:post_id').text bu.rss2_sn = itme.xpath('wp:post_id').text
bu.title_translations = {"en" => itme.xpath('title').text, "zh_tw" => itme.xpath('title').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.text_translations = {"en" => itme.xpath('content:encoded').text, "zh_tw" => itme.xpath('content:encoded').text}
bu.postdate = itme.xpath('wp:post_date').text bu.postdate = itme.xpath('wp:post_date').text
itme.xpath('category').each do |i_cate| itme.xpath('category').each do |i_cate|
if i_cate["domain"].to_s == "category" if i_cate["domain"].to_s == "category"
cat = @module_app.categories.where(:title => i_cate.text.to_s).first rescue nil cat = @module_app.categories.where(:title => i_cate.text.to_s).first rescue nil
if cat.nil? if cat.nil?
cat = Category.new cat = Category.new
cat.module_app = @module_app cat.module_app = @module_app
cat.title_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s} cat.title_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
cat.save cat.save
end end
bu.category = cat bu.category = cat
elsif i_cate["domain"].to_s == "post_tag" elsif i_cate["domain"].to_s == "post_tag"
tag = Tag.where(:name => i_cate.text.to_s ).first rescue nil tag = Tag.where(:name => i_cate.text.to_s ).first rescue nil
if tag.nil? if tag.nil?
tag = Tag.new tag = Tag.new
tag.name_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s} tag.name_translations = {"en" => i_cate.text.to_s, "zh_tw" => i_cate.text.to_s}
tag.module_app_ids << @module_app.id tag.module_app_ids << @module_app.id
tag.save tag.save
end end
bu.tags = tag bu.tags = tag
end end
end end
bu.save bu.save
end end
end end
end end
File.delete(xmlfile) File.delete(xmlfile)
end end
def load_access_level def load_access_level
if (current_user.is_admin? rescue false) if (current_user.is_admin? rescue false)
@access_level = "admin" @access_level = "admin"
elsif (current_user.is_manager?(@module_app) rescue false) elsif (current_user.is_manager?(@module_app) rescue false)
@access_level = "manager" @access_level = "manager"
else else
@access_level = "users" @access_level = "users"
end end
end end
def user_can_approve?(anns=nil) def user_can_approve?(anns=nil)
can_approve = false can_approve = false
setting = EventNewsSetting.first setting = EventNewsSetting.first
case @access_level case @access_level
when "admin" when "admin"
can_approve = true can_approve = true
when "manager" when "manager"
can_approve = true can_approve = true
else else
can_approve = false can_approve = false
end end
if !can_approve if !can_approve
if !anns.nil? if !anns.nil?
if setting.approvers.include?(current_user.id.to_s) if setting.approvers.include?(current_user.id.to_s)
if (current_user.approved_categories_for_module(@module_app).include?(anns.category) rescue false) if (current_user.approved_categories_for_module(@module_app).include?(anns.category) rescue false)
can_approve = true can_approve = true
end end
end end
else else
can_approve = setting.approvers.include?(current_user.id.to_s) can_approve = setting.approvers.include?(current_user.id.to_s)
end end
end end
can_approve can_approve
end end
end end

View File

@ -50,8 +50,9 @@ module EventNewsHelper
"speaker-css" => (a.speaker.blank? ? "display: none;" : ""), "speaker-css" => (a.speaker.blank? ? "display: none;" : ""),
"host-css" => (a.host.blank? ? "display: none;" : ""), "host-css" => (a.host.blank? ? "display: none;" : ""),
"place-css" => (a.place.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;" : ""), "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, "speaker" => a.speaker,
"place" => a.place, "place" => a.place,
"host" => a.host, "host" => a.host,
@ -63,8 +64,8 @@ module EventNewsHelper
"statuses" => statuses, "statuses" => statuses,
"category" => (a.category.title rescue ""), "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), "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, "postdate" => event_time_formated,
"event_date" => a.event_date, "event_date" => event_time_formated,
"author" => author, "author" => author,
"link_to_show" => link_to_show, "link_to_show" => link_to_show,
"target" => target, "target" => target,
@ -143,8 +144,9 @@ module EventNewsHelper
"speaker-css" => (fa["speaker_translations"][locale].blank? ? "display: none;" : ""), "speaker-css" => (fa["speaker_translations"][locale].blank? ? "display: none;" : ""),
"host-css" => (fa["host_translations"][locale].blank? ? "display: none;" : ""), "host-css" => (fa["host_translations"][locale].blank? ? "display: none;" : ""),
"place-css" => (fa["place_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;" : ""), "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 ""), "speaker" => (fa["speaker_translations"][locale].to_s rescue ""),
"place" => (fa["place_translations"][locale].to_s rescue ""), "place" => (fa["place_translations"][locale].to_s rescue ""),
"host" => (fa["host_translations"][locale].to_s rescue ""), "host" => (fa["host_translations"][locale].to_s rescue ""),
@ -162,7 +164,7 @@ module EventNewsHelper
"target" => "_self", "target" => "_self",
"img_src" => fa["image"]["thumb"] || "/assets/event_news-default.jpg", "img_src" => fa["image"]["thumb"] || "/assets/event_news-default.jpg",
"img_description" => fa["image_description_translations"][locale], "img_description" => fa["image_description_translations"][locale],
"more" => t(:more_plus), "more" => t("event_news.more"),
"view_count" => "" "view_count" => ""
} }
if (!x["title"].empty? rescue false) if (!x["title"].empty? rescue false)

View File

@ -1,15 +1,15 @@
# encoding: utf-8 # encoding: utf-8
class EventCarouselImage class EventCarouselImage
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
mount_uploader :file, AssetUploader mount_uploader :file, AssetUploader
field :description, localize: true field :description, localize: true
belongs_to :event_news belongs_to :event_news
def description_text def description_text
Nokogiri::HTML(self.description.to_s).css("body").text() rescue "" Nokogiri::HTML(self.description.to_s).css("body").text() rescue ""
end end
end end

View File

@ -1,283 +1,338 @@
class EventNews class EventNews
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
include OrbitModel::Status include OrbitModel::Status
include OrbitModel::Impression include OrbitModel::Impression
# encoding: utf-8 # encoding: utf-8
include OrbitTag::Taggable include OrbitTag::Taggable
include OrbitCategory::Categorizable include OrbitCategory::Categorizable
include Slug include Slug
require 'event_news_model/cache' require 'event_news_model/cache'
include EventNewsModel::Cache include EventNewsModel::Cache
attr_accessor :org_tag_ids attr_accessor :org_tag_ids
def tags=(ids) def tags=(ids)
self.org_tag_ids = self.tag_ids self.org_tag_ids = self.tag_ids
super(ids) super(ids)
end end
def []=(index,value) def []=(index,value)
if index.to_s=='tags' if index.to_s=='tags'
self.org_tag_ids = self.tag_ids self.org_tag_ids = self.tag_ids
end end
super(index,value) super(index,value)
end end
SubPart.class_eval { include EventNewsModel::Cache } SubPart.class_eval { include EventNewsModel::Cache }
Page.class_eval { include EventNewsModel::Cache } Page.class_eval { include EventNewsModel::Cache }
before_destroy do before_destroy do
EventNewsCache.all.destroy EventNewsCache.all.destroy
end end
field :is_edit, type: Boolean, default: false #use to check whether the preview record changed Week_day_trans = {:en=>["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
field :copy_id :zh_tw=>["(日)","(一)","(二)","(三)","(四)","(五)","(六)"]}
field :custom_carousel_image_width, type: String, default: "" field :event_date_use_default_setting, type: Boolean, default: true
field :image_display_class, type: String, default: "full-size-img" #3 choices: full-size-img , pull-left , pull-right field :including_day_of_the_week, type: Boolean, default: true
field :add_to_calendar,type: Boolean,default: false field :including_time, type: Boolean, default: true
field :calendar_start_date, :type => DateTime field :hour_clock_24, type: Boolean, default: true
field :calendar_end_date, :type => DateTime field :is_edit, type: Boolean, default: false #use to check whether the preview record changed
field :calendar_all_day,type: Boolean,default: false field :copy_id
field :all_day,type: Boolean,default: false field :custom_carousel_image_width, type: String, default: ""
field :calendar_type_id field :image_display_class, type: String, default: "full-size-img" #3 choices: full-size-img , pull-left , pull-right
field :event_id field :add_to_calendar,type: Boolean,default: false
field :place, type: String, localize: true field :calendar_start_date, :type => DateTime
field :title, as: :slug_title, type: String, localize: true field :calendar_end_date, :type => DateTime
field :speaker, type: String, localize: true field :calendar_all_day,type: Boolean,default: false
field :host, type: String, localize: true field :all_day,type: Boolean,default: false #old field
field :subtitle, localize: true field :calendar_type_id
field :text, localize: true, default: '' field :event_id
field :notes, localize: true field :place, type: String, localize: true
field :create_user_id field :title, as: :slug_title, type: String, localize: true
field :update_user_id field :speaker, type: String, localize: true
field :public, :type => Boolean, :default => true field :host, type: String, localize: true
field :event_date , :type => DateTime, :default => Time.now field :subtitle, localize: true
field :event_end_date , :type => DateTime field :text, localize: true, default: ''
field :postdate , :type => DateTime, :default => Time.now field :notes, localize: true
field :deadline , :type => DateTime field :create_user_id
field :rss2_sn field :update_user_id
field :approved, :type => Boolean, :default => false field :public, :type => Boolean, :default => true
field :is_preview, :type => Boolean, :default => false field :event_date , :type => DateTime, :default => Time.now
field :expirable_created_at, type: DateTime field :event_end_date , :type => DateTime
field :rejected, :type => Boolean, :default => false field :postdate , :type => DateTime, :default => Time.now
field :reapproval, :type => Boolean, :default => false field :deadline , :type => DateTime
field :rejection_reason field :rss2_sn
field :is_external_link, :type => Boolean, :default => false field :approved, :type => Boolean, :default => false
field :external_link field :is_preview, :type => Boolean, :default => false
field :display_subtitle, :type => Boolean, :default => false field :expirable_created_at, type: DateTime
field :display_img, :type => Boolean, :default => false field :rejected, :type => Boolean, :default => false
field :reapproval, :type => Boolean, :default => false
field :email_id field :rejection_reason
field :email_sent, :type => Boolean, :default => false field :is_external_link, :type => Boolean, :default => false
field :email_sentdate , :type => DateTime field :external_link
field :email_member_ids field :display_subtitle, :type => Boolean, :default => false
field :other_mailaddress field :display_img, :type => Boolean, :default => false
field :image_description, localize: true
field :top_end_date, :type => DateTime field :email_id
field :email_sent, :type => Boolean, :default => false
mount_uploader :image, ImageUploader field :email_sentdate , :type => DateTime
field :email_member_ids
has_many :event_news_links, :autosave => true, :dependent => :destroy field :other_mailaddress
has_many :event_news_files, :autosave => true, :dependent => :destroy field :image_description, localize: true
has_many :event_carousel_images, :autosave => true, :dependent => :destroy field :top_end_date, :type => DateTime
accepts_nested_attributes_for :event_news_files, :allow_destroy => true
accepts_nested_attributes_for :event_news_links, :allow_destroy => true mount_uploader :image, ImageUploader
accepts_nested_attributes_for :event_carousel_images, :allow_destroy => true
before_destroy :destroy_email has_many :event_news_links, :autosave => true, :dependent => :destroy
has_many :event_news_files, :autosave => true, :dependent => :destroy
scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)} has_many :event_carousel_images, :autosave => true, :dependent => :destroy
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)} accepts_nested_attributes_for :event_news_files, :allow_destroy => true
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)} accepts_nested_attributes_for :event_news_links, :allow_destroy => true
scope :is_approved, ->{where(:approved => true)} accepts_nested_attributes_for :event_carousel_images, :allow_destroy => true
scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)} before_destroy :destroy_email
scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)}
before_create :set_expire scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)}
before_save :check_limit 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)}
index({postdate: 1}, { unique: false, background: true }) 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)}
index({is_top: -1, postdate: -1, event_date: -1, _id: -1}, { unique: false, background: true }) scope :is_approved, ->{where(:approved => true)}
index({is_top: -1, event_date: 1, postdate: -1, _id: -1}, { unique: false, background: true }) scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)}
def get_org_model scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)}
if self.is_preview before_create :set_expire
org_model = nil before_save :check_limit
if self.copy_id index({postdate: 1}, { unique: false, background: true })
org_model = self.class.find(self.copy_id) rescue nil index({is_top: -1, postdate: -1, event_date: -1, _id: -1}, { unique: false, background: true })
else index({is_top: -1, event_date: 1, postdate: -1, _id: -1}, { unique: false, background: true })
org_model = self.class.where(:title=>self.title,:is_preview.ne=>true).desc(:updated_at).first def get_org_model
end if self.is_preview
org_model.nil? ? self : org_model org_model = nil
else if self.copy_id
self org_model = self.class.find(self.copy_id) rescue nil
end else
end org_model = self.class.where(:title=>self.title,:is_preview.ne=>true).desc(:updated_at).first
def date_parse_format end
all_day ? '%Y-%m-%d' : '%Y-%m-%d %H:%M' org_model.nil? ? self : org_model
end else
self
def event_time_formated end
s = self.event_date end
e = self.event_end_date def date_parse_format
if s.blank? && e.blank? #all_day ? '%Y-%m-%d' : '%Y-%m-%d %H:%M'
"" event_date_format
elsif e.blank? end
s.strftime(self.date_parse_format) def get_weekday(w)
elsif s.blank? trans = self.class::Week_day_trans
"~ " + e.strftime(self.date_parse_format) if trans.keys.include?(I18n.locale)
else trans[I18n.locale][w]
if s.to_date == e.to_date else
date_str = s.strftime('%Y-%m-%d') trans[:en][w]
s_time = s.strftime('%H:%M') end
e_time = e.strftime('%H:%M') end
"#{date_str} #{s_time} ~ #{e_time}" def event_date_format
else @event_date_format ||= (self.event_date_use_default_setting ? EventNewsSetting.event_date_default_format : self.event_date_custom_format)
s.strftime(self.date_parse_format) + " ~ " + e.strftime(self.date_parse_format) end
end def event_date_custom_format
end datetime_format = "%Y-%m-%d"
end if self.including_day_of_the_week
def to_calendar_param datetime_format += " %a"
self.to_param end
end if self.including_time
def calendar_type if self.hour_clock_24
CalendarType.where(:category_id.in => self.calendar_type_id) datetime_format += " %H:%M"
end else
def event datetime_format += " %I:%M %P"
if !self.event_id.nil? end
Event.where(:id => self.event_id).first end
else datetime_format
nil end
end def custom_strftime(dt, datetime_format)
end if dt
def check_limit dt.strftime(datetime_format.sub("%a","%%a")).sub("%a",get_weekday(dt.wday))
check_status_limit(update_user) else
end ""
def check_status_limit(user,check_only=false) end
role_ids = user.member_profile.roles.map(&:id) rescue [] end
status_settings = (role_ids.collect do |role_id| def event_time_formated_for_frontend
EventNewsSetting.first.event_news_status_settings.select{|v| v.role_id.to_s == role_id.to_s} st,ed = self.event_time_formated.split("~")
end.flatten rescue []) if st.nil?
reach_limit = [] st = ""
if status_settings.count != 0 else
reach_limit = status_settings.collect do |status_setting| st = "<span class=\"start_date\">#{st}</span>"
status = status_setting.status end
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 ed.nil?
if !check_only st
if self[status] && !self.class.where(id:self.id).first[status] else
self[status] = false ed = "<span class=\"start_date\">#{ed}</span>"
nil "#{st} ~ #{ed}"
end end
else end
status def event_time_formated
end s = self.event_date.in_time_zone(Time.zone.utc_offset / 3600) rescue nil
else e = self.event_end_date.in_time_zone(Time.zone.utc_offset / 3600) rescue nil
nil if s.blank? && e.blank?
end ""
end.compact elsif e.blank?
reach_limit = reach_limit.group_by{|v| v}.collect do |k,v| custom_strftime(s, self.date_parse_format)
if v.count >= user.member_profile.roles.count elsif s.blank?
k "~ " + custom_strftime(e, self.date_parse_format)
else else
nil parse_format = self.date_parse_format
end if s.to_date == e.to_date
end.compact parse_format_arr = parse_format.split(/(%d %a|%d) /)
end parse_format_arr = parse_format_arr[0..-2].join(""), parse_format_arr[-1]
reach_limit date_str = custom_strftime(s, parse_format_arr[0])
end s_time = s.strftime(parse_format_arr[1])
def set_expire e_time = e.strftime(parse_format_arr[1])
self.expirable_created_at = Time.now if self.is_preview "#{date_str} #{s_time} ~ #{e_time}"
return true else
end custom_strftime(s, self.date_parse_format) + " ~ " + custom_strftime(e, self.date_parse_format)
end
def update_user end
User.find(update_user_id) rescue nil end
end def to_calendar_param
self.to_param
def update_user=(user) end
self.update_user_id = user.id def calendar_type
end CalendarType.where(:category_id.in => self.calendar_type_id)
end
def email_members def event
MemberProfile.find(self.email_member_ids) rescue [] if !self.event_id.nil?
end Event.where(:id => self.event_id).first
else
def email_addresses nil
addresses = self.email_members.collect{|member| member.email} rescue [] end
addresses = addresses +[self.other_mailaddress] if !self.other_mailaddress.blank? end
addresses.flatten def check_limit
end check_status_limit(update_user)
end
def email def check_status_limit(user,check_only=false)
mail = Email.find(self.email_id) rescue nil role_ids = user.member_profile.roles.map(&:id) rescue []
end 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}
def expired? end.flatten rescue [])
(self.deadline < Time.now) rescue false reach_limit = []
end if status_settings.count != 0
reach_limit = status_settings.collect do |status_setting|
def destroy_email status = status_setting.status
mail = Email.find(self.email_id) rescue nil 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
mail.destroy if !mail.nil? if !check_only
end if self[status] && !self.class.where(id:self.id).first[status]
self[status] = false
def self.remove_expired_status nil
self.where(:is_top => true, :top_end_date.ne => nil, :top_end_date.lt => Time.now).each do |b| end
b.is_top = false else
b.top_end_date = nil status
b.save end
end else
end nil
end
def display_subtitle? end.compact
self.display_subtitle rescue false reach_limit = reach_limit.group_by{|v| v}.collect do |k,v|
end if v.count >= user.member_profile.roles.count
k
def display_img? else
self.display_img rescue false nil
end end
def statuses end.compact
statuses = [] end
statuses << top_text if is_top? reach_limit
statuses << hot_text if is_hot? end
statuses << hidden_text if is_hidden? def set_expire
statuses self.expirable_created_at = Time.now if self.is_preview
end return true
def statuses_with_classname end
statuses = []
statuses << {"name" => top_text, "classname" => "top"} if is_top? def update_user
statuses << {"name" => hot_text, "classname" => "hot"} if is_hot? User.find(update_user_id) rescue nil
statuses << {"name" => hidden_text, "classname" => "hidden"} if is_hidden? end
statuses
end def update_user=(user)
def status_for_table self.update_user_id = user.id
status = "" end
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 def email_members
status << "<span class='label'>#{hidden_text}</span>"if self.is_hidden MemberProfile.find(self.email_member_ids) rescue []
status.html_safe end
end
def top_text def email_addresses
I18n.t("announcement.status.top") addresses = self.email_members.collect{|member| member.email} rescue []
end addresses = addresses +[self.other_mailaddress] if !self.other_mailaddress.blank?
def hot_text addresses.flatten
I18n.t("announcement.status.hot") end
end
def hidden_text def email
I18n.t("announcement.status.hidden") mail = Email.find(self.email_id) rescue nil
end end
def carousel_image_width
(self.custom_carousel_image_width.blank? ? AnnouncementSetting.last.carousel_image_width : self.custom_carousel_image_width) def expired?
end (self.deadline < Time.now) rescue false
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) def destroy_email
end mail = Email.find(self.email_id) rescue nil
def self.monthly_event(start_date,end_date) mail.destroy if !mail.nil?
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
end
def self.convert_front(read_more_url) def self.remove_expired_status
self.all.collect do |re| self.where(:is_top => true, :top_end_date.ne => nil, :top_end_date.lt => Time.now).each do |b|
{:id => re.id.to_s, b.is_top = false
:title=>re.title, b.top_end_date = nil
:note=>re.subtitle || "", b.save
:allDay => false, end
:color => nil, end
:url_linked => (re.is_external_link ? re.external_link : "#{read_more_url}/#{re.to_param}" rescue ""),
:start => re.event_date, def display_subtitle?
:end => re.event_end_date} self.display_subtitle rescue false
end end
end
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 class EventNewsCache
include Mongoid::Document include Mongoid::Document
field :parent_id field :parent_id
field :filter_result field :filter_result
field :locale,type: String,default: 'zh_tw' field :locale,type: String,default: 'zh_tw'
field :invalid_date, type: DateTime field :invalid_date, type: DateTime
end end

View File

@ -1,24 +1,24 @@
class EventNewsCustomTitle class EventNewsCustomTitle
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :key field :key
field :title, type: String, localize: true field :title, type: String, localize: true
KEYS = ['title','event_date','speaker','place','host'] KEYS = ['title','speaker','host','event_date','place','notes']
def self.get_map def self.get_map
KEYS.map do |k| 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) 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 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) s.update_attributes(title_translations: I18n.available_locales.map{|l| [l,I18n.with_locale(l){I18n.t("event_news.#{k}")}]}.to_h)
end end
s s
end end
end end
def default_title def default_title
I18n.t("event_news.#{self.key}") I18n.t("event_news.#{self.key}")
end end
def self.get_trans(key) def self.get_trans(key)
tmp = TitleMap[key][I18n.locale] rescue I18n.t("event_news.#{key}") tmp = TitleMap[key][I18n.locale] rescue I18n.t("event_news.#{key}")
tmp.blank? ? I18n.t("event_news.#{key}") : tmp tmp.blank? ? I18n.t("event_news.#{key}") : tmp
end end
TitleMap = self.get_map.map{|v| [v.key,v.title_translations]}.to_h TitleMap = self.get_map.map{|v| [v.key,v.title_translations]}.to_h
end end

View File

@ -1,171 +1,171 @@
class EventNewsFeed class EventNewsFeed
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
include Slug include Slug
field :title, as: :slug_title, type: String, localize: true field :title, as: :slug_title, type: String, localize: true
field :tag_ids, type: Array, default: [] field :tag_ids, type: Array, default: []
field :category_ids, type: Array, default: [] field :category_ids, type: Array, default: []
before_save do before_save do
EventNewsCache.where(uid: self.uid).each do |cache| EventNewsCache.where(uid: self.uid).each do |cache|
cache.regenerate cache.regenerate
end end
end end
def self.create_feed_cache(bulletin=nil,bulletin_feed=nil) def self.create_feed_cache(bulletin=nil,bulletin_feed=nil)
Thread.new do Thread.new do
if !bulletin.nil? if !bulletin.nil?
self.where(:tag_ids.in => Array(bulletin.tag_ids).collect{|v| v.to_s}).each do |bulletin_feed| self.where(:tag_ids.in => Array(bulletin.tag_ids).collect{|v| v.to_s}).each do |bulletin_feed|
uid = bulletin_feed.uid uid = bulletin_feed.uid
EventNewsCache.where(:uid => uid).each do |cache| EventNewsCache.where(:uid => uid).each do |cache|
cache.regenerate cache.regenerate
end end
end end
elsif !bulletin_feed.nil? elsif !bulletin_feed.nil?
uid = bulletin_feed.uid uid = bulletin_feed.uid
EventNewsCache.where(:uid => uid).each do |cache| EventNewsCache.where(:uid => uid).each do |cache|
cache.regenerate cache.regenerate
end end
end end
end end
end end
def generate_one_cache_timeout(startdt: nil,enddt: nil,dt: nil, base_url: nil, timeout: nil) def generate_one_cache_timeout(startdt: nil,enddt: nil,dt: nil, base_url: nil, timeout: nil)
timeout = 100000 if timeout.nil? timeout = 100000 if timeout.nil?
begin begin
Timeout::timeout(timeout) { Timeout::timeout(timeout) {
feed_cache = nil feed_cache = nil
Thread.new do Thread.new do
feed_cache = self.generate_one_cache(startdt: startdt,enddt: enddt,dt: dt,base_url: base_url) feed_cache = self.generate_one_cache(startdt: startdt,enddt: enddt,dt: dt,base_url: base_url)
end end
(1..(timeout.to_i+1)).each do (1..(timeout.to_i+1)).each do
sleep(1) sleep(1)
break if !feed_cache.nil? break if !feed_cache.nil?
end end
feed_cache.content feed_cache.content
} }
rescue=> e rescue=> e
puts [e,e.backtrace] puts [e,e.backtrace]
"" ""
end end
end end
def generate_one_cache(startdt: nil,enddt: nil,dt: nil, base_url: nil) def generate_one_cache(startdt: nil,enddt: nil,dt: nil, base_url: nil)
base_url = Site.first.root_url if base_url.nil? base_url = Site.first.root_url if base_url.nil?
uid = self.uid uid = self.uid
bf = self bf = self
if !bf.nil? if !bf.nil?
tags = bf.tag_ids tags = bf.tag_ids
categories = bf.category_ids categories = bf.category_ids
if !(categories.empty? && tags.empty?) if !(categories.empty? && tags.empty?)
anns_before_filter = EventNews.any_of(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}}).is_approved_and_show anns_before_filter = EventNews.any_of(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}}).is_approved_and_show
if !dt.nil? if !dt.nil?
dt = DateTime.parse(dt) dt = DateTime.parse(dt)
dtt = dt + 1.day dtt = dt + 1.day
anns_before_filter = anns_before_filter.where(:postdate.gt => dt, :postdate.lt => dtt) anns_before_filter = anns_before_filter.where(:postdate.gt => dt, :postdate.lt => dtt)
elsif !startdt.blank? && enddt.blank? elsif !startdt.blank? && enddt.blank?
startdt = DateTime.parse(startdt) startdt = DateTime.parse(startdt)
enddt = DateTime.now enddt = DateTime.now
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt) anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
elsif !startdt.blank? && !enddt.blank? elsif !startdt.blank? && !enddt.blank?
startdt = DateTime.parse(startdt) startdt = DateTime.parse(startdt)
enddt = DateTime.parse(enddt) + 1.day enddt = DateTime.parse(enddt) + 1.day
anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt) anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt)
end end
anns_before_filter = anns_before_filter.can_display_and_sorted anns_before_filter = anns_before_filter.can_display_and_sorted
if !tags.empty? if !tags.empty?
anns_before_filter = anns_before_filter.filter_by_tags(tags) anns_before_filter = anns_before_filter.filter_by_tags(tags)
end end
if !categories.empty? if !categories.empty?
anns_before_filter = anns_before_filter.filter_by_categories(categories) anns_before_filter = anns_before_filter.filter_by_categories(categories)
end end
announcements = anns_before_filter.can_display_and_sorted announcements = anns_before_filter.can_display_and_sorted
else else
announcements = [] announcements = []
end end
end end
all_anns = [] all_anns = []
tag_names = [] tag_names = []
category_titles = [] category_titles = []
tag_ids = [] tag_ids = []
category_ids = [] category_ids = []
first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0] first_postdate = anns_before_filter.open_in_future.limit(1).pluck(:postdate)[0]
first_deadline = nil first_deadline = nil
announcements.each do |anns| announcements.each do |anns|
deadline = anns.deadline deadline = anns.deadline
if !deadline.blank? if !deadline.blank?
if first_deadline.nil? || first_deadline>deadline if first_deadline.nil? || first_deadline>deadline
first_deadline = deadline first_deadline = deadline
end end
end end
user = User.find(anns.create_user_id) rescue nil user = User.find(anns.create_user_id) rescue nil
if !user.nil? if !user.nil?
author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name author = user.member_profile && user.member_profile.name == "" ? user.user_name : user.member_profile.name
else else
author = "" author = ""
end end
a = {} a = {}
a["id"] = anns.uid a["id"] = anns.uid
a["title_translations"] = anns.title_translations a["title_translations"] = anns.title_translations
a["subtitle_translations"] = anns.subtitle_translations a["subtitle_translations"] = anns.subtitle_translations
a["text_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"]["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["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["postdate"] = anns.postdate
a["image_description_translations"] = anns.image_description_translations a["image_description_translations"] = anns.image_description_translations
a["image"] = {} a["image"] = {}
a["display_img"] = anns.display_img a["display_img"] = anns.display_img
a["image"]["original"] = ("#{base_url}" + anns.image.url rescue "") a["image"]["original"] = ("#{base_url}" + anns.image.url rescue "")
a["image"]["thumb"] = ("#{base_url}" + anns.image.thumb.url rescue "") a["image"]["thumb"] = ("#{base_url}" + anns.image.thumb.url rescue "")
a["image"]["mobile"] = ("#{base_url}" + anns.image.mobile.url rescue "") a["image"]["mobile"] = ("#{base_url}" + anns.image.mobile.url rescue "")
a["tags"] = [] a["tags"] = []
a["category"] = {} a["category"] = {}
a["author"] = author a["author"] = author
a["params"] = anns.to_param a["params"] = anns.to_param
a["subtitle_ann"] = anns.subtitle if anns.display_subtitle? a["subtitle_ann"] = anns.subtitle if anns.display_subtitle?
a["bulletin_links"] = [] a["bulletin_links"] = []
a["bulletin_files"] = [] 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["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 a["external_link"] = anns["is_external_link"] ? anns.external_link : nil
anns.tags.each do |tag| anns.tags.each do |tag|
if !tag_ids.include?(tag.id.to_s) if !tag_ids.include?(tag.id.to_s)
tag_ids << tag.id.to_s tag_ids << tag.id.to_s
tag_names << {"name_translations" => tag.name_translations} tag_names << {"name_translations" => tag.name_translations}
end end
a["tags"] << {"name_translations" => tag.name_translations} a["tags"] << {"name_translations" => tag.name_translations}
end end
cat = anns.category cat = anns.category
if (!category_ids.include?(cat.id.to_s) rescue false) if (!category_ids.include?(cat.id.to_s) rescue false)
category_ids << cat.id.to_s category_ids << cat.id.to_s
category_titles << {"title_translations" => cat.title_translations} category_titles << {"title_translations" => cat.title_translations}
end end
a["category"] = {"title_translations" => (cat.title_translations rescue {})} a["category"] = {"title_translations" => (cat.title_translations rescue {})}
anns.bulletin_links.each do |bl| anns.bulletin_links.each do |bl|
b = {} b = {}
b["url"] = bl.url b["url"] = bl.url
b["title_translations"] = bl.title_translations b["title_translations"] = bl.title_translations
a["bulletin_links"] << b a["bulletin_links"] << b
end end
anns.bulletin_files.each do |bf| anns.bulletin_files.each do |bf|
b = {} b = {}
b["description_translations"] = bf.description_translations b["description_translations"] = bf.description_translations
b["title_translations"] = bf.title_translations b["title_translations"] = bf.title_translations
b["url"] = ("#{base_url}" + bf.file.url rescue "") b["url"] = ("#{base_url}" + bf.file.url rescue "")
a["bulletin_files"] << b a["bulletin_files"] << b
end end
all_anns << a all_anns << a
end end
invalid_date = [first_postdate,first_deadline].compact.sort[0] invalid_date = [first_postdate,first_deadline].compact.sort[0]
anns = { anns = {
"announcements" => all_anns, "announcements" => all_anns,
"tags" => tag_names, "tags" => tag_names,
"categories" => category_titles "categories" => category_titles
}.to_json }.to_json
feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date) feed_cache = EventNewsFeedCache.create(uid: uid,content: anns,start: startdt,end: enddt,date: dt,invalid_date: invalid_date)
end end
def self.smart_convertor(text,url) def self.smart_convertor(text,url)
html_string = text 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+url}
html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url} html_string = html_string.gsub(/img.*?src="\.\.(?=\/)(.*?)|a.*?href="\.\.(?=\/)(.*?)/i){|w| w[0...-2]+url}
return html_string return html_string
end end
end end

View File

@ -1,29 +1,29 @@
class EventNewsFeedCache class EventNewsFeedCache
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :content, type: String, default: '' field :content, type: String, default: ''
field :uid field :uid
field :start field :start
field :end field :end
field :date field :date
field :invalid_date, type: DateTime field :invalid_date, type: DateTime
def self.regenerate_all def self.regenerate_all
caches = self.all.to_a caches = self.all.to_a
caches.each do |cache| caches.each do |cache|
cache.regenerate cache.regenerate
end end
uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid) uids = EventNewsFeed.all.pluck(:uid) - caches.collect(&:uid)
EventNewsFeed.where(:uid.in=> uids).each do |feed| EventNewsFeed.where(:uid.in=> uids).each do |feed|
feed.generate_one_cache() feed.generate_one_cache()
end end
end end
def regenerate def regenerate
st = self.start st = self.start
et = self.end et = self.end
dt = self.date dt = self.date
uid = self.uid uid = self.uid
EventNewsFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil EventNewsFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil
self.destroy self.destroy
end end
end end

View File

@ -1,47 +1,47 @@
# encoding: utf-8 # encoding: utf-8
class EventNewsFile class EventNewsFile
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
mount_uploader :file, AssetUploader mount_uploader :file, AssetUploader
field :description, localize: true field :description, localize: true
field :title, localize: true field :title, localize: true
field :choose_lang, :type => Array, :default => ["en","zh_tw"] field :choose_lang, :type => Array, :default => ["en","zh_tw"]
field :privacy_type, type: String, default: 'public' field :privacy_type, type: String, default: 'public'
belongs_to :event_news belongs_to :event_news
def self.to_fronted(locale=I18n.locale) def self.to_fronted(locale=I18n.locale)
self.all.map{|file| file.to_fronted(locale)}.compact rescue [] self.all.map{|file| file.to_fronted(locale)}.compact rescue []
end end
def to_fronted(locale=I18n.locale) def to_fronted(locale=I18n.locale)
file = self file = self
(file.enabled_for?(locale) && !file[:file].blank?) ? { "file_url" => "/xhr/event_news/file/#{file.id}/#{file['file']}" + "\" title=\"#{file.file_title}", (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 '') "file_title" => (file.title.blank? ? URI.unescape(File.basename(file.file.path)) : file.title rescue '')
} : nil rescue nil } : nil rescue nil
end end
def file_title def file_title
if self.description.present? if self.description.present?
return self.description return self.description
elsif self.title.present? elsif self.title.present?
return self.title return self.title
else else
return File.basename(self.file.path) return File.basename(self.file.path)
end end
end end
def enabled_for?(lang) def enabled_for?(lang)
if lang.nil? if lang.nil?
return true return true
else else
return self.choose_lang.include?(lang) return self.choose_lang.include?(lang)
end end
end end
def can_access?(user) def can_access?(user)
if user.nil? && self.privacy_type == 'logged_in' if user.nil? && self.privacy_type == 'logged_in'
return false return false
else else
return true return true
end end
end end
end end

View File

@ -1,25 +1,25 @@
# encoding: utf-8 # encoding: utf-8
require 'uri' require 'uri'
class EventNewsLink class EventNewsLink
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :url field :url
field :title, localize: true field :title, localize: true
belongs_to :event_news belongs_to :event_news
before_validation :add_http 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 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 protected
def add_http def add_http
unless self.url[/^http:\/\//] || self.url[/^https:\/\//] unless self.url[/^http:\/\//] || self.url[/^https:\/\//]
self.url = 'http://' + self.url self.url = 'http://' + self.url
end end
end end
end end

View File

@ -1,23 +1,90 @@
class EventNewsSetting class EventNewsSetting
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :carousel_image_width, type: String, :default => "75%" field :carousel_image_width, type: String, :default => "75%"
field :top_limit, type: Integer, :default => 0 field :top_limit, type: Integer, :default => 0
field :pro_enabled, type: Boolean, :default => false field :pro_enabled, type: Boolean, :default => false
field :approvers, type: Array, :default => [] field :approvers, type: Array, :default => []
field :email_to, type: Array, :default => ["admins","managers","approvers"] field :email_to, type: Array, :default => ["admins","managers","approvers"]
field :is_display_edit_only, type: Boolean, :default => false field :is_display_edit_only, type: Boolean, :default => false
field :only_manager_can_edit_status, type: Boolean, :default => false field :only_manager_can_edit_status, type: Boolean, :default => false
has_many :event_news_status_settings, :autosave => true, :dependent => :destroy field :including_day_of_the_week, type: Boolean, default: true
accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true field :including_time, type: Boolean, default: true
def self.check_limit_for_user(user_id, b_id = nil) field :hour_clock_24, type: Boolean, default: true
limit = self.first.top_limit rescue 0 has_many :event_news_status_settings, :autosave => true, :dependent => :destroy
return true if limit == 0 accepts_nested_attributes_for :event_news_status_settings, :allow_destroy => true
count = Bulletin.where(:is_top => true, :create_user_id => user_id, :id.ne => b_id).count after_save do
return count < limit if self.including_day_of_the_week_changed? || self.including_time_changed? || self.hour_clock_24_changed?
end EventNewsCache.all.destroy
end
def self.is_pro? end
self.first.pro_enabled rescue false def self.check_limit_for_user(user_id, b_id = nil)
end 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 end

View File

@ -1,7 +1,7 @@
class EventNewsStatusSetting class EventNewsStatusSetting
include Mongoid::Document include Mongoid::Document
field :role_id field :role_id
field :status field :status
field :top_limit field :top_limit
belongs_to :event_news_setting belongs_to :event_news_setting
end end

View File

@ -1,122 +1,122 @@
<style> <style>
#approvalModal { #approvalModal {
width: 90%; width: 90%;
height: 600px; height: 600px;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
margin: auto; margin: auto;
position: absolute; position: absolute;
} }
#approvalModal .preview-iframe { #approvalModal .preview-iframe {
border: 0; border: 0;
outline: none; outline: none;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
#approvalModal .modal-body { #approvalModal .modal-body {
background-color: #fff; background-color: #fff;
padding: 0; padding: 0;
max-height: none; max-height: none;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
} }
#approvalModal .modal-left { #approvalModal .modal-left {
overflow: auto; overflow: auto;
float: left; float: left;
width: 19.8%; width: 19.8%;
border-right: 1px solid #DFDFDF; border-right: 1px solid #DFDFDF;
height: 100%; height: 100%;
padding: 1em; padding: 1em;
margin: 0; margin: 0;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
#approvalModal .modal-right { #approvalModal .modal-right {
float: right; float: right;
width: 80%; width: 80%;
height: 100%; height: 100%;
} }
.approvalModal__form { .approvalModal__form {
padding: 0 10px; padding: 0 10px;
margin: 0; margin: 0;
} }
label.approvalModal__radio { label.approvalModal__radio {
display: inline-block; display: inline-block;
} }
label.control-label { label.control-label {
display: inline-block; display: inline-block;
} }
.approvalModal__controls { .approvalModal__controls {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
} }
.approvalModal__group { .approvalModal__group {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
} }
label.approvalModal__label { label.approvalModal__label {
display: inline-block; display: inline-block;
margin: 0 4px 0 7px; margin: 0 4px 0 7px;
position: relative; position: relative;
top: -1px; top: -1px;
} }
.approvalModal__controls .approvalModal__privacy { .approvalModal__controls .approvalModal__privacy {
margin: 0 5px; margin: 0 5px;
} }
.approvalModal__controls .approvalModal__large { .approvalModal__controls .approvalModal__large {
} }
#approvalModal .modal-footer { #approvalModal .modal-footer {
text-align: left; text-align: left;
padding: 15px 10px 10px; padding: 15px 10px 10px;
} }
.approvalModal__group.confirm { .approvalModal__group.confirm {
float: right; float: right;
} }
</style> </style>
<div id="approvalModal" class="modal hide fade" role="dialog"> <div id="approvalModal" class="modal hide fade" role="dialog">
<div class="modal-header"> <div class="modal-header">
<a class="close" data-dismiss="modal">×</a> <a class="close" data-dismiss="modal">×</a>
<h3>預覽</h3> <h3>預覽</h3>
</div> </div>
<div class="modal-body clearfix"> <div class="modal-body clearfix">
<div class="modal-left"> <div class="modal-left">
<label for="____">寄送對象</label> <label for="____">寄送對象</label>
</div> </div>
<div class="modal-right"> <div class="modal-right">
<iframe class="preview-iframe"></iframe> <iframe class="preview-iframe"></iframe>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<%= form_tag "/admin/event_news/approve_event_news", :class=>"approvalModal__form" do %> <%= form_tag "/admin/event_news/approve_event_news", :class=>"approvalModal__form" do %>
<div class="approvalModal__group"> <div class="approvalModal__group">
<label class="control-label" for="event_news_approval_stat">審核狀態</label> <label class="control-label" for="event_news_approval_stat">審核狀態</label>
<div class="approvalModal__controls"> <div class="approvalModal__controls">
<label class="approvalModal__radio"> <label class="approvalModal__radio">
<input class="approvalModal__privacy" id="event_news_is_checked_true" name="approved" type="radio" value="true">已認可 <input class="approvalModal__privacy" id="event_news_is_checked_true" name="approved" type="radio" value="true">已認可
</label> </label>
<label class="approvalModal__radio"> <label class="approvalModal__radio">
<input checked="checked" class="approvalModal__privacy" id="event_news_approved_false" name="approved" type="radio" value="false">拒絕 <input checked="checked" class="approvalModal__privacy" id="event_news_approved_false" name="approved" type="radio" value="false">拒絕
</label> </label>
</div> </div>
</div> </div>
<div class="approvalModal__group group--reject"> <div class="approvalModal__group group--reject">
<label class="approvalModal__label" for="is_checked_false_拒絕原因">拒絕原因</label> <label class="approvalModal__label" for="is_checked_false_拒絕原因">拒絕原因</label>
<div class="approvalModal__controls"> <div class="approvalModal__controls">
<input class="approvalModal__large" id="event_news_not_checked_reason" name="reason" size="30" type="text"> <input class="approvalModal__large" id="event_news_not_checked_reason" name="reason" size="30" type="text">
</div> </div>
</div> </div>
<div class="approvalModal__group confirm"> <div class="approvalModal__group confirm">
<input class="approvalModal__btn btn btn-primary" name="commit" type="submit" value="送出"> <input class="approvalModal__btn btn btn-primary" name="commit" type="submit" value="送出">
<input type="hidden" id="object_id" name="id" /> <input type="hidden" id="object_id" name="id" />
<button class="approvalModal__btn btn" data-dismiss="modal" aria-hidden="true">關閉</button> <button class="approvalModal__btn btn" data-dismiss="modal" aria-hidden="true">關閉</button>
</div> </div>
<% end %> <% end %>
</div> </div>
</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| %> <%= 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> <fieldset>
<% @site_in_use_locales.each do |locale| %> <% @site_in_use_locales.each do |locale| %>
<%= f.fields_for :title_translations do |f| %> <%= f.fields_for :title_translations do |f| %>
<div class="control-group"> <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> <label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
<div class="controls"> <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) %> <%= 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>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<hr /> <hr />
<div class="tags"> <div class="tags">
<h4><%=t(:tags)%></h4> <h4><%=t(:tags)%></h4>
<div id="tags-list"> <div id="tags-list">
<div class="tags-groups checkbox-card module-tags"> <div class="tags-groups checkbox-card module-tags">
<% @module_app.tags.each do |tag| %> <% @module_app.tags.each do |tag| %>
<label class="filter-item module <%= @event_news_feed.tag_ids.include?(tag.id.to_s) ? "active" : "" %>"> <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" : "" %>'> <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][]"> <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> </p>
<div> <div>
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= tag.name_translations[locale] %></span> <span class="tag"><%= tag.name_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</label> </label>
<% end %> <% end %>
</div> </div>
</div> </div>
</div> </div>
<div class="categories"> <div class="categories">
<h4><%=t(:category)%></h4> <h4><%=t(:category)%></h4>
<div id="categories-list"> <div id="categories-list">
<div class="tags-groups checkbox-card module-categories"> <div class="tags-groups checkbox-card module-categories">
<% @module_app.categories.each do |category| %> <% @module_app.categories.each do |category| %>
<label class="filter-item module <%= @event_news_feed.category_ids.include?(category.id.to_s) ? "active" : "" %>"> <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" : "" %>"> <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][]"> <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> </p>
<div> <div>
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= category.title_translations[locale] %></span> <span class="tag"><%= category.title_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</label> </label>
<% end %> <% end %>
</div> </div>
</div> </div>
</div> </div>
</fieldset> </fieldset>
<% end %> <% end %>

View File

@ -1,83 +1,83 @@
<tr> <tr>
<td> <td>
<%= feed.title %> <%= feed.title %>
<div class="quick-edit"> <div class="quick-edit">
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<% if can_edit_or_delete?(feed) %> <% 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="#" 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> <li><a href="/admin/event_news/deletefeed?id=<%= feed.id.to_s %>" class="delete-feed text-error" ><%= t(:delete_) %></a></li>
<% end %> <% end %>
</ul> </ul>
</div> </div>
</td> </td>
<td> <td>
<div class="tags"> <div class="tags">
<div id="tags-list"> <div id="tags-list">
<ul class="tags-groups checkbox-card module-tags"> <ul class="tags-groups checkbox-card module-tags">
<% tags_to_remove = [] %> <% tags_to_remove = [] %>
<% feed.tag_ids.each do |t| %> <% feed.tag_ids.each do |t| %>
<% tag = Tag.find(t) rescue nil %> <% tag = Tag.find(t) rescue nil %>
<% if !tag.nil? %> <% if !tag.nil? %>
<li class="filter-item module"> <li class="filter-item module">
<a href="#" onclick="return false;"> <a href="#" onclick="return false;">
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= tag.name_translations[locale] %></span> <span class="tag"><%= tag.name_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</a> </a>
</li> </li>
<% else %> <% else %>
<% tags_to_remove << t %> <% tags_to_remove << t %>
<% end %> <% end %>
<% end %> <% end %>
<% if !tags_to_remove.blank? <% if !tags_to_remove.blank?
tags_to_remove.each do |t| tags_to_remove.each do |t|
feed.tag_ids.delete(t) feed.tag_ids.delete(t)
end end
feed.save feed.save
end %> end %>
</ul> </ul>
</div> </div>
</div> </div>
</td> </td>
<td> <td>
<div class="categories"> <div class="categories">
<div id="categories-list"> <div id="categories-list">
<ul class="tags-groups checkbox-card module-categories"> <ul class="tags-groups checkbox-card module-categories">
<% categories_to_remove = [] %> <% categories_to_remove = [] %>
<% feed.category_ids.each do |c| %> <% feed.category_ids.each do |c| %>
<% category = Category.find(c) rescue nil %> <% category = Category.find(c) rescue nil %>
<% if !category.nil? %> <% if !category.nil? %>
<li class="filter-item module"> <li class="filter-item module">
<a href="#" onclick="return false;"> <a href="#" onclick="return false;">
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= category.title_translations[locale] %></span> <span class="tag"><%= category.title_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</a> </a>
</li> </li>
<% else %> <% else %>
<% categories_to_remove << c %> <% categories_to_remove << c %>
<% end %> <% end %>
<% end %> <% end %>
<% if !categories_to_remove.blank? <% if !categories_to_remove.blank?
categories_to_remove.each do |c| categories_to_remove.each do |c|
feed.category_ids.delete(c) feed.category_ids.delete(c)
end end
feed.save feed.save
end %> end %>
</ul> </ul>
</div> </div>
</div> </div>
</td> </td>
<td> <td>
<a href="/xhr/event_news/rssfeed/<%= feed.uid %>.rss" target="_blank">RSS Feed</a> <a href="/xhr/event_news/rssfeed/<%= feed.uid %>.rss" target="_blank">RSS Feed</a>
</td> </td>
<td> <td>
<a href="/xhr/event_news/feed/<%= feed.uid %>.json" target="_blank">JSON Feed</a> <a href="/xhr/event_news/feed/<%= feed.uid %>.json" target="_blank">JSON Feed</a>
</td> </td>
</tr> </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| %> <%= form_for @event_news_feed, url: admin_event_news_createfeed_path, html: {class: "form-horizontal main-forms"} do |f| %>
<fieldset> <fieldset>
<% @site_in_use_locales.each do |locale| %> <% @site_in_use_locales.each do |locale| %>
<%= f.fields_for :title_translations do |f| %> <%= f.fields_for :title_translations do |f| %>
<div class="control-group"> <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> <label class="control-label muted" for="event_news_feed_title_translations_<%= locale.to_s %>"><%= t(:title) + " (#{t(locale.to_s)})" %></label>
<div class="controls"> <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) %> <%= 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>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<hr /> <hr />
<div class="tags"> <div class="tags">
<h4><%=t(:tags)%></h4> <h4><%=t(:tags)%></h4>
<div id="tags-list"> <div id="tags-list">
<div class="tags-groups checkbox-card module-tags"> <div class="tags-groups checkbox-card module-tags">
<% @module_app.tags.each do |tag| %> <% @module_app.tags.each do |tag| %>
<label class="filter-item module"> <label class="filter-item module">
<p class="card pull-left"> <p class="card pull-left">
<input type="checkbox" class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]"> <input type="checkbox" class="tag-checkbox" value="<%= tag.id.to_s %>" name="event_news_feed[tag_ids][]">
</p> </p>
<div> <div>
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= tag.name_translations[locale] %></span> <span class="tag"><%= tag.name_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</label> </label>
<% end %> <% end %>
</div> </div>
</div> </div>
</div> </div>
<div class="categories"> <div class="categories">
<h4><%=t(:category)%></h4> <h4><%=t(:category)%></h4>
<div id="categories-list"> <div id="categories-list">
<div class="tags-groups checkbox-card module-categories"> <div class="tags-groups checkbox-card module-categories">
<% @module_app.categories.each do |category| %> <% @module_app.categories.each do |category| %>
<label class="filter-item module"> <label class="filter-item module">
<p class="card pull-left"> <p class="card pull-left">
<input type="checkbox" class="tag-checkbox" value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]"> <input type="checkbox" class="tag-checkbox" value="<%= category.id.to_s %>" name="event_news_feed[category_ids][]">
</p> </p>
<div> <div>
<% @site_in_use_locales.each_with_index do |locale,index| %> <% @site_in_use_locales.each_with_index do |locale,index| %>
<span class="tag"><%= category.title_translations[locale] %></span> <span class="tag"><%= category.title_translations[locale] %></span>
<% if index < (@site_in_use_locales.count - 1) %> <% if index < (@site_in_use_locales.count - 1) %>
/ /
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</label> </label>
<% end %> <% end %>
</div> </div>
</div> </div>
</div> </div>
</fieldset> </fieldset>
<% end %> <% end %>

File diff suppressed because it is too large Load Diff

View File

@ -1,69 +1,69 @@
<% if form_file.new_record? %> <% if form_file.new_record? %>
<div class="fileupload fileupload-new start-line" data-provides="fileupload"> <div class="fileupload fileupload-new start-line" data-provides="fileupload">
<% else %> <% else %>
<div class="fileupload fileupload-exists start-line" data-provides="fileupload"> <div class="fileupload fileupload-exists start-line" data-provides="fileupload">
<% if form_file.file.blank? %> <% if form_file.file.blank? %>
<%= t(:no_file) %> <%= t(:no_file) %>
<% else %> <% 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} %> <%= 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 %>
<% end %> <% end %>
<div class="input-prepend input-append"> <div class="input-prepend input-append">
<label> <label>
<span class="add-on btn btn-file" title='<%= t(:file_) %>'> <span class="add-on btn btn-file" title='<%= t(:file_) %>'>
<i class="icons-paperclip"></i> <i class="icons-paperclip"></i>
<%= f.file_field :file %> <%= f.file_field :file %>
</span> </span>
<div class="uneditable-input input-medium"> <div class="uneditable-input input-medium">
<i class="icon-file fileupload-exists"></i> <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> <span class="fileupload-preview"><%= (form_file.new_record? || form_file.file.blank?) ? t(:select_file) : t(:change_file) %></span>
</div> </div>
</label> </label>
<span class="add-on icons-pencil" title='<%= t(:alternative) %>'></span> <span class="add-on icons-pencil" title='<%= t(:alternative) %>'></span>
<span class="tab-content"> <span class="tab-content">
<% @site_in_use_locales.each_with_index do |locale, i| %> <% @site_in_use_locales.each_with_index do |locale, i| %>
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>"> <span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
<%= f.fields_for :title_translations do |f| %> <%= 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) %> <%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %>
<% end %> <% end %>
</span> </span>
<% end %> <% end %>
</span> </span>
<span class="add-on icons-pencil" title='<%= t(:description) %>'></span> <span class="add-on icons-pencil" title='<%= t(:description) %>'></span>
<span class="tab-content"> <span class="tab-content">
<% @site_in_use_locales.each_with_index do |locale, i| %> <% @site_in_use_locales.each_with_index do |locale, i| %>
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>"> <span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
<%= f.fields_for :description_translations do |f| %> <%= 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) %> <%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %>
<% end %> <% end %>
</span> </span>
<% end %> <% end %>
</span> </span>
</span> </span>
<span class="add-on btn-group btn" title="<%= t('archive.show_lang') %>"> <span class="add-on btn-group btn" title="<%= t('archive.show_lang') %>">
<i class="icons-earth"></i> <span class="caret"></span> <i class="icons-earth"></i> <span class="caret"></span>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<% @site_in_use_locales.each do |locale| %> <% @site_in_use_locales.each do |locale| %>
<li> <li>
<label class="checkbox"> <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) %> <%= 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) %> <%= t(locale.to_s) %>
</label> </label>
</li> </li>
<% end %> <% end %>
</ul> </ul>
<%= hidden_field_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", '' %> <%= hidden_field_tag "event_news[event_news_files_attributes][#{( form_file.new_record? ? 'new_event_news_files' : "#{i}" )}][choose_lang][]", '' %>
</span> </span>
<% if form_file.new_record? %> <% if form_file.new_record? %>
<span class="delete_file add-on btn" title="<%= t(:delete_) %>"> <span class="delete_file add-on btn" title="<%= t(:delete_) %>">
<a class="icon-trash"></a> <a class="icon-trash"></a>
</span> </span>
<% else %> <% else %>
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>"> <span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
<%= f.hidden_field :id %> <%= f.hidden_field :id %>
<a class="icon-remove"></a> <a class="icon-remove"></a>
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
</span> </span>
<% end %> <% end %>
</div> </div>
</div> </div>

View File

@ -1,49 +1,49 @@
<!-- Images Upload --> <!-- Images Upload -->
<div class="image_group"> <div class="image_group">
<div class="control-group"> <div class="control-group">
<label class="control-label muted"><%= t(:image) %></label> <label class="control-label muted"><%= t(:image) %></label>
<div class="controls"> <div class="controls">
<div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if form_image.file.present? %>" data-provides="fileupload"> <div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if form_image.file.present? %>" data-provides="fileupload">
<div class="fileupload-new thumbnail pull-left"> <div class="fileupload-new thumbnail pull-left">
<% if form_image.file.file %> <% if form_image.file.file %>
<%= image_tag form_image.file %> <%= image_tag form_image.file %>
<% else %> <% else %>
<img src="http://www.placehold.it/50x50/EFEFEF/AAAAAA" /> <img src="http://www.placehold.it/50x50/EFEFEF/AAAAAA" />
<% end %> <% end %>
</div> </div>
<div class="fileupload-preview fileupload-exists thumbnail pull-left"></div> <div class="fileupload-preview fileupload-exists thumbnail pull-left"></div>
<span class="btn btn-file"> <span class="btn btn-file">
<span class="fileupload-new"><%= t(:select_image) %></span> <span class="fileupload-new"><%= t(:select_image) %></span>
<span class="fileupload-exists"><%= t(:change) %></span> <span class="fileupload-exists"><%= t(:change) %></span>
<%= f.file_field :file %> <%= f.file_field :file %>
</span> </span>
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a> <a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a>
<div class="controls" data-toggle="buttons-checkbox"> <div class="controls" data-toggle="buttons-checkbox">
<label class="checkbox inline btn btn-danger fileupload-remove"> <label class="checkbox inline btn btn-danger fileupload-remove">
<% if form_image.new_record? %> <% if form_image.new_record? %>
<span class="delete_file delete_image add-on" title="<%= t(:delete_) %>"> <span class="delete_file delete_image add-on" title="<%= t(:delete_) %>">
<%= t(:delete_) %> <%= t(:delete_) %>
</span> </span>
<% else %> <% else %>
<span class="remove_existing_record add-on" title="<%= t(:remove) %>"> <span class="remove_existing_record add-on" title="<%= t(:remove) %>">
<%= f.hidden_field :id %> <%= f.hidden_field :id %>
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
<%= t(:remove) %> <%= t(:remove) %>
</span> </span>
<% end %> <% end %>
</label> </label>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<% @site_in_use_locales.each do |locale| %> <% @site_in_use_locales.each do |locale| %>
<%= f.fields_for :description_translations do |f| %> <%= f.fields_for :description_translations do |f| %>
<div class="control-group"> <div class="control-group">
<label class="control-label muted" for="image_description_<%= locale.to_s %>"><%= t(:description) + " (#{t(locale.to_s)})" %></label> <label class="control-label muted" for="image_description_<%= locale.to_s %>"><%= t(:description) + " (#{t(locale.to_s)})" %></label>
<div class="controls"> <div class="controls">
<%= f.text_field locale, value: (form_image.description_translations[locale.to_s] rescue nil) %> <%= f.text_field locale, value: (form_image.description_translations[locale.to_s] rescue nil) %>
</div> </div>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>

View File

@ -1,26 +1,26 @@
<div class="input-prepend input-append start-line"> <div class="input-prepend input-append start-line">
<span class="add-on icons-link" title="<%= t(:url) %>"></span> <span class="add-on icons-link" title="<%= t(:url) %>"></span>
<%= f.text_field :url, class: "input-large", placeholder: t(:url) %> <%= f.text_field :url, class: "input-large", placeholder: t(:url) %>
<span class="add-on icons-pencil" title="<%= t(:url_alt) %>"></span> <span class="add-on icons-pencil" title="<%= t(:url_alt) %>"></span>
<span class="tab-content"> <span class="tab-content">
<% @site_in_use_locales.each_with_index do |locale, i| %> <% @site_in_use_locales.each_with_index do |locale, i| %>
<span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>"> <span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
<%= f.fields_for :title_translations do |f| %> <%= 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) %> <%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %>
<% end %> <% end %>
</span> </span>
<% end %> <% end %>
</span> </span>
<% if form_link.new_record? %> <% if form_link.new_record? %>
<span class="delete_link add-on btn" title="<%= t(:delete_) %>"> <span class="delete_link add-on btn" title="<%= t(:delete_) %>">
<a class="icon-trash"></a> <a class="icon-trash"></a>
</span> </span>
<% else %> <% else %>
<span class="remove_existing_record add-on btn" title="<%= t(:remove) %>"> <span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
<%= f.hidden_field :id %> <%= f.hidden_field :id %>
<a class="icon-remove"></a> <a class="icon-remove"></a>
<%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
</span> </span>
<% end %> <% end %>
</div> </div>

View File

@ -1,99 +1,99 @@
<script> <script>
if(document.querySelectorAll("#orbit-bar").length==0) location.reload(); if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
</script> </script>
<table class="table main-list"> <table class="table main-list">
<thead> <thead>
<tr class="sort-header"> <tr class="sort-header">
<% @table_fields.each do |f| %> <% @table_fields.each do |f| %>
<%= tmp = f.to_s.split('.')[-1]; EventNewsCustomTitle::KEYS.include?(tmp) ? Admin::EventNewsHelper.thead(tmp): thead(f) %> <%= tmp = f.to_s.split('.')[-1]; EventNewsCustomTitle::KEYS.include?(tmp) ? Admin::EventNewsHelper.thead(tmp): thead(f) %>
<% end %> <% end %>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<% @event_news.each do |b| %> <% @event_news.each do |b| %>
<tr> <tr>
<td> <td>
<%= b.status_for_table %> <%= b.status_for_table %>
</td> </td>
<td> <td>
<%= b.category.title rescue "" %> <%= b.category.title rescue "" %>
<% if (b.category.disable rescue false) %> <% if (b.category.disable rescue false) %>
<span class='label'><%= t(:disabled) %></span> <span class='label'><%= t(:disabled) %></span>
<% end %> <% end %>
</td> </td>
<td> <td>
<% if b.expired? || (b.category.disable rescue false)%> <% if b.expired? || (b.category.disable rescue false)%>
<%= b.title.to_s.html_safe %> <%= b.title.to_s.html_safe %>
<% else %> <% else %>
<a href="<%= page_for_event_news(b) %>" target="_blank"><%= b.title.to_s.html_safe %></a> <a href="<%= page_for_event_news(b) %>" target="_blank"><%= b.title.to_s.html_safe %></a>
<% end %> <% end %>
<% if b.expired? %> <% if b.expired? %>
<span class='label'><%= t(:expired) %></span> <span class='label'><%= t(:expired) %></span>
<% end %> <% end %>
<% if b.reapproval %> <% if b.reapproval %>
<span class='label'><%= t("event_news.reapproval") + " " + t(:pending) %></span> <span class='label'><%= t("event_news.reapproval") + " " + t(:pending) %></span>
<% end %> <% end %>
<% if b.rejected %> <% if b.rejected %>
<span class='label'><%= t(:rejected) %> : <%= b.rejection_reason rescue "" %></span> <span class='label'><%= t(:rejected) %> : <%= b.rejection_reason rescue "" %></span>
<% end %> <% end %>
<% if !b.approved? && !b.rejected %> <% if !b.approved? && !b.rejected %>
<span class='label'><%= t(:pending) %></span> <span class='label'><%= t(:pending) %></span>
<% end %> <% end %>
<div class="quick-edit"> <div class="quick-edit">
<ul class="nav nav-pills"> <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> <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) %> <% if can_edit_or_delete?(b) %>
<li><a href="/admin/event_news/<%=b.id.to_s%>/edit"><%= t(:edit) %></a></li> <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> <li><a href="#" class="delete text-error" rel="/admin/event_news/<%=b.id.to_s%>"><%= t(:delete_) %></a></li>
<% end %> <% end %>
<% if ((!b.approved && !b.rejected && !b.reapproval) || (b.rejected && b.reapproval)) && user_can_approve?(b) %> <% 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> <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 %> <% end %>
</ul> </ul>
</div> </div>
</td> </td>
<td><%= format_value b.event_date %></td> <td><%= format_value b.event_date %></td>
<td><%= format_value b.postdate %></td> <td><%= format_value b.postdate %></td>
<td class="<%= b.expired? ? "expired" : "" %>"><%= format_value b.deadline %></td> <td class="<%= b.expired? ? "expired" : "" %>"><%= format_value b.deadline %></td>
<td><%= b.update_user.user_name rescue ""%></td> <td><%= b.update_user.user_name rescue ""%></td>
</tr> </tr>
<tr class="footable-row-detail"> <tr class="footable-row-detail">
<td class="footable-cell-detail" colspan="6"> <td class="footable-cell-detail" colspan="6">
<div id="<%= "#{b.id.to_s}-detail" %>" class="footable-row-detail-inner" style="display: none;"> <div id="<%= "#{b.id.to_s}-detail" %>" class="footable-row-detail-inner" style="display: none;">
<div> <div>
<strong><%= t(:view_count) %></strong> : <strong><%= t(:view_count) %></strong> :
<span class="label label-info"><%= b.view_count %></span> <span class="label label-info"><%= b.view_count %></span>
</div> </div>
<div> <div>
<strong><%= t(:tags) %></strong> : <strong><%= t(:tags) %></strong> :
<% b.tags.each do |tag| %> <% b.tags.each do |tag| %>
<span class="label label-warning"><%= tag.name %></span> <span class="label label-warning"><%= tag.name %></span>
<% end %> <% end %>
</div> </div>
<div> <div>
<strong><%= t("event_news.email_to") %></strong> : <strong><%= t("event_news.email_to") %></strong> :
<% b.email_members.each do |member| %> <% b.email_members.each do |member| %>
<span class="label"><%= member.name %></span> <span class="label"><%= member.name %></span>
<% end %> <% end %>
<% unless b.other_mailaddress.nil? %> <% unless b.other_mailaddress.nil? %>
<% b.other_mailaddress.split(',').each do |mailaddress| %> <% b.other_mailaddress.split(',').each do |mailaddress| %>
<span class="label"><%= mailaddress %></span> <span class="label"><%= mailaddress %></span>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</div> </div>
</td> </td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
<%= <%=
content_tag :div, class: "bottomnav clearfix" do content_tag :div, class: "bottomnav clearfix" do
content_tag(:div, paginate(@event_news), class: "pagination pagination-centered") + 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") content_tag(:div, link_to(t(:new_),new_admin_event_news_path, :class=>"btn btn-primary"), class: "pull-right")
end end
%> %>

View File

@ -1,26 +1,26 @@
<style type="text/css"> <style type="text/css">
.tab-panel .tab-content{ .tab-panel .tab-content{
display: none; display: none;
} }
.tab-panel .tab-content.active{ .tab-panel .tab-content.active{
display: block; display: block;
} }
.tab-panel .tab-content,.tab-panel .btn-group{ .tab-panel .tab-content,.tab-panel .btn-group{
float: left; float: left;
} }
</style> </style>
<%= form_tag({action: 'update_custom_title',method: 'post'}, {class: "form-horizontal main-forms previewable"}) do %> <%= 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") %> <% Admin::EventNewsHelper::FormHelper.set_input_name("event_news_custom_title") %>
<% @event_news_custom_titles.each_with_index do |v,i| %> <% @event_news_custom_titles.each_with_index do |v,i| %>
<div class="control-group"> <div class="control-group">
<%= label_tag :title , v.default_title, :class=>"control-label muted" %> <%= label_tag :title , v.default_title, :class=>"control-label muted" %>
<div class="controls"> <div class="controls">
<%= hidden_field_tag "event_news_custom_title[#{i}][id]", v.id %> <%= 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}) %> <%= Admin::EventNewsHelper::FormHelper.multiple_lang_tag(i,'text_field','title_translations',v.title_translations,{placeholder: v.default_title}) %>
</div> </div>
</div> </div>
<% end %> <% end %>
<div class="form-actions"> <div class="form-actions">
<%= submit_tag t(:submit),class: 'btn btn-primary' %> <%= submit_tag t(:submit),class: 'btn btn-primary' %>
</div> </div>
<% end %> <% 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| %> <%= form_for @event_news, url: admin_event_news_path(@event_news), html: {class: "form-horizontal main-forms previewable"} do |f| %>
<fieldset> <fieldset>
<%= render :partial => 'form', locals: {f: f} %> <%= render :partial => 'form', locals: {f: f} %>
</fieldset> </fieldset>
<% end %> <% end %>

View File

@ -1,167 +1,167 @@
# encoding: utf-8 # encoding: utf-8
wb = xlsx_package.workbook wb = xlsx_package.workbook
wb.add_worksheet(name: "EventNewsModule") do |sheet| wb.add_worksheet(name: "EventNewsModule") do |sheet|
heading = sheet.styles.add_style(:b => true, :locked => true) heading = sheet.styles.add_style(:b => true, :locked => true)
example = sheet.styles.add_style(:i => true) example = sheet.styles.add_style(:i => true)
row = [] row = []
row1 = [] row1 = []
row2 = [] row2 = []
row << t("category") row << t("category")
row1 << "select" row1 << "select"
t = "" t = ""
@module_app.categories.asc(:created_at).each_with_index do |cat,i| @module_app.categories.asc(:created_at).each_with_index do |cat,i|
t = t + "#{i}" + " -> " + cat.title + ", " t = t + "#{i}" + " -> " + cat.title + ", "
end end
if @module_app.categories.count > 0 if @module_app.categories.count > 0
t = t + " Example : 0" t = t + " Example : 0"
else else
t = "Leave this field blank" t = "Leave this field blank"
end end
row2 << t row2 << t
row << t("tags") row << t("tags")
row1 << "select" row1 << "select"
t = "" t = ""
@module_app.tags.asc(:created_at).each_with_index do |tag,i| @module_app.tags.asc(:created_at).each_with_index do |tag,i|
t = t + "#{i}" + " -> " + tag.name + ", " t = t + "#{i}" + " -> " + tag.name + ", "
end end
if @module_app.tags.count > 0 if @module_app.tags.count > 0
t = t + " Example : 0,1,2" t = t + " Example : 0,1,2"
else else
t = "Leave this field blank" t = "Leave this field blank"
end end
row2 << t row2 << t
row << t("event_news.event_date") row << t("event_news.event_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
row << t("event_news.start_date") row << t("event_news.start_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
row << t("event_news.end_date") row << t("event_news.end_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
row << t("top") row << t("top")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true" row2 << "0 for false, 1 for true"
row << t("hot") row << t("hot")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true" row2 << "0 for false, 1 for true"
row << t("hide") row << t("hide")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true " row2 << "0 for false, 1 for true "
row << t("image") row << t("image")
row1 << "url" row1 << "url"
row2 << "http://www.example.com/images/example.png" row2 << "http://www.example.com/images/example.png"
row << t("image") + " " + t("description") + " - " + t("en") row << t("image") + " " + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("image") + " " + t("description") + " - " + t("zh_tw") row << t("image") + " " + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("title") + " - " + t("en") row << t("title") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("title") + " - " + t("zh_tw") row << t("title") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.speaker") + " - " + t("en") row << t("event_news.speaker") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.speaker") + " - " + t("zh_tw") row << t("event_news.speaker") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.host") + " - " + t("en") row << t("event_news.host") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.host") + " - " + t("zh_tw") row << t("event_news.host") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("subtitle") + " - " + t("en") row << t("subtitle") + " - " + t("en")
row1 << "textarea" row1 << "textarea"
row2 << "" row2 << ""
row << t("subtitle") + " - " + t("zh_tw") row << t("subtitle") + " - " + t("zh_tw")
row1 << "textarea" row1 << "textarea"
row2 << "" row2 << ""
row << t("content") + " - " + t("en") row << t("content") + " - " + t("en")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("content") + " - " + t("zh_tw") row << t("content") + " - " + t("zh_tw")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("event_news.notes") + " - " + t("en") row << t("event_news.notes") + " - " + t("en")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("event_news.notes") + " - " + t("zh_tw") row << t("event_news.notes") + " - " + t("zh_tw")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("link") row << t("link")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com" row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
row << t("link") + " " + t("url_alt") + " - " + t("en") row << t("link") + " " + t("url_alt") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine" 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") row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine" row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
row << t("file_") row << t("file_")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png" 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") row << t("file_") + " " + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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") row << t("file_") + " " + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
row << t("file_") + " " + t("alternative") + " - " + t("en") row << t("file_") + " " + t("alternative") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2" row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw") row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2" row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
row << t("event_news.place") + "-" + t("en") row << t("event_news.place") + "-" + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.place") + "-" + t("zh_tw") row << t("event_news.place") + "-" + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.event_end_date") row << t("event_news.event_end_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
row << t("event_news.carousel_image") + "-" + t("image") row << t("event_news.carousel_image") + "-" + t("image")
row1 << "url" row1 << "url"
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png" 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") row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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") row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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 row, :style => heading
sheet.add_row row1 sheet.add_row row1
sheet.add_row row2, :style => example sheet.add_row row2, :style => example
end end

View File

@ -1,239 +1,239 @@
# encoding: utf-8 # encoding: utf-8
wb = xlsx_package.workbook wb = xlsx_package.workbook
wb.add_worksheet(name: "EventNewsModule") do |sheet| wb.add_worksheet(name: "EventNewsModule") do |sheet|
heading = sheet.styles.add_style(:b => true, :locked => true) heading = sheet.styles.add_style(:b => true, :locked => true)
example = sheet.styles.add_style(:i => true) example = sheet.styles.add_style(:i => true)
row = [] row = []
row1 = [] row1 = []
row2 = [] row2 = []
row << t("category") row << t("category")
row1 << "select" row1 << "select"
t = "" t = ""
categories = @module_app.categories.asc(:created_at) categories = @module_app.categories.asc(:created_at)
categories.each_with_index do |cat,i| categories.each_with_index do |cat,i|
t = t + "#{i}" + " -> " + cat.title + ", " t = t + "#{i}" + " -> " + cat.title + ", "
end end
if categories.count > 0 if categories.count > 0
t = t + " Example : 0" t = t + " Example : 0"
else else
t = "Leave this field blank" t = "Leave this field blank"
end end
row2 << t row2 << t
row << t("tags") row << t("tags")
row1 << "select" row1 << "select"
t = "" t = ""
tags = @module_app.tags.asc(:created_at) tags = @module_app.tags.asc(:created_at)
tags.each_with_index do |tag,i| tags.each_with_index do |tag,i|
t = t + "#{i}" + " -> " + tag.name + ", " t = t + "#{i}" + " -> " + tag.name + ", "
end end
if tags.count > 0 if tags.count > 0
t = t + " Example : 0,1,2" t = t + " Example : 0,1,2"
else else
t = "Leave this field blank" t = "Leave this field blank"
end end
row2 << t row2 << t
row << t("event_news.event_date") row << t("event_news.event_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
row << t("event_news.start_date") row << t("event_news.start_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:30"
row << t("event_news.end_date") row << t("event_news.end_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/12 17:30"
row << t("top") row << t("top")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true" row2 << "0 for false, 1 for true"
row << t("hot") row << t("hot")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true" row2 << "0 for false, 1 for true"
row << t("hide") row << t("hide")
row1 << "boolean" row1 << "boolean"
row2 << "0 for false, 1 for true " row2 << "0 for false, 1 for true "
row << t("image") row << t("image")
row1 << "url" row1 << "url"
row2 << "http://www.example.com/images/example.png" row2 << "http://www.example.com/images/example.png"
row << t("image") + " " + t("description") + " - " + t("en") row << t("image") + " " + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("image") + " " + t("description") + " - " + t("zh_tw") row << t("image") + " " + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("title") + " - " + t("en") row << t("title") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("title") + " - " + t("zh_tw") row << t("title") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.speaker") + " - " + t("en") row << t("event_news.speaker") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.speaker") + " - " + t("zh_tw") row << t("event_news.speaker") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.host") + " - " + t("en") row << t("event_news.host") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.host") + " - " + t("zh_tw") row << t("event_news.host") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("subtitle") + " - " + t("en") row << t("subtitle") + " - " + t("en")
row1 << "textarea" row1 << "textarea"
row2 << "" row2 << ""
row << t("subtitle") + " - " + t("zh_tw") row << t("subtitle") + " - " + t("zh_tw")
row1 << "textarea" row1 << "textarea"
row2 << "" row2 << ""
row << t("content") + " - " + t("en") row << t("content") + " - " + t("en")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("content") + " - " + t("zh_tw") row << t("content") + " - " + t("zh_tw")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("event_news.notes") + " - " + t("en") row << t("event_news.notes") + " - " + t("en")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("event_news.notes") + " - " + t("zh_tw") row << t("event_news.notes") + " - " + t("zh_tw")
row1 << "editor" row1 << "editor"
row2 << "" row2 << ""
row << t("link") row << t("link")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com" row2 << "Seperate with ';'. Example: http://rulingcom.com; http://google.com"
row << t("link") + " " + t("url_alt") + " - " + t("en") row << t("link") + " " + t("url_alt") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine" 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") row << t("link") + " " + t("url_alt") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine" row2 << "Seperate with ';' with respective to the links in the link columns. Example : Rulingcom official site; Google search engine"
row << t("file_") row << t("file_")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png" 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") row << t("file_") + " " + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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") row << t("file_") + " " + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait"
row << t("file_") + " " + t("alternative") + " - " + t("en") row << t("file_") + " " + t("alternative") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2" row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
row << t("file_") + " " + t("alternative") + " - " + t("zh_tw") row << t("file_") + " " + t("alternative") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2" row2 << "Seperate with ';' with respective to the links in the link columns. Example : example1; example2"
row << t("event_news.place") + "-" + t("en") row << t("event_news.place") + "-" + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.place") + "-" + t("zh_tw") row << t("event_news.place") + "-" + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "" row2 << ""
row << t("event_news.event_end_date") row << t("event_news.event_end_date")
row1 << "datetime" row1 << "datetime"
row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20" row2 << "Format: YYYY/MM/DD HH:mm, Example: 2015/12/10 15:20"
row << t("event_news.carousel_image") + "-" + t("image") row << t("event_news.carousel_image") + "-" + t("image")
row1 << "url" row1 << "url"
row2 << "Seperate with ';'. Example: http://www.example.com/images/example.png; http://www.example.com/images/example2.png" 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") row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("en")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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") row << t("event_news.carousel_image") + "-" + t("description") + " - " + t("zh_tw")
row1 << "textfield" row1 << "textfield"
row2 << "Seperate with ';' with respective to the links in the link columns. Example : Great view; Nice potrait" 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 row, :style => heading
sheet.add_row row1 sheet.add_row row1
sheet.add_row row2, :style => example sheet.add_row row2, :style => example
@event_news.each do |anns| @event_news.each do |anns|
row = [] row = []
row << categories.to_a.index(anns.category) row << categories.to_a.index(anns.category)
t = [] t = []
anns.tags.each do |tag| anns.tags.each do |tag|
t << tags.to_a.index(tag) t << tags.to_a.index(tag)
end end
row << t.join(",") row << t.join(",")
row << (anns.event_date.strftime("%Y/%m/%d %H:%M") rescue "") row << (anns.event_date.strftime("%Y/%m/%d %H:%M") rescue "")
row << (anns.postdate.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.deadline.strftime("%Y/%m/%d %H:%M") rescue "")
row << (anns.is_top? ? 1 : 0) row << (anns.is_top? ? 1 : 0)
row << (anns.is_hot? ? 1 : 0) row << (anns.is_hot? ? 1 : 0)
row << (anns.is_hidden? ? 1 : 0) row << (anns.is_hidden? ? 1 : 0)
row << ("http://" + request.host_with_port + anns.image.url rescue "") row << ("http://" + request.host_with_port + anns.image.url rescue "")
row << anns.image_description_translations["en"] row << anns.image_description_translations["en"]
row << anns.image_description_translations["zh_tw"] row << anns.image_description_translations["zh_tw"]
row << anns.title_translations["en"] row << anns.title_translations["en"]
row << anns.title_translations["zh_tw"] row << anns.title_translations["zh_tw"]
row << anns.speaker_translations["en"] row << anns.speaker_translations["en"]
row << anns.speaker_translations["zh_tw"] row << anns.speaker_translations["zh_tw"]
row << anns.host_translations["en"] row << anns.host_translations["en"]
row << anns.host_translations["zh_tw"] row << anns.host_translations["zh_tw"]
row << anns.subtitle_translations["en"] row << anns.subtitle_translations["en"]
row << anns.subtitle_translations["zh_tw"] row << anns.subtitle_translations["zh_tw"]
row << anns.text_translations["en"] row << anns.text_translations["en"]
row << anns.text_translations["zh_tw"] row << anns.text_translations["zh_tw"]
row << anns.notes_translations["en"] row << anns.notes_translations["en"]
row << anns.notes_translations["zh_tw"] row << anns.notes_translations["zh_tw"]
links = anns.event_news_links.asc(:created_at) links = anns.event_news_links.asc(:created_at)
t = links.collect{|l|l.url} t = links.collect{|l|l.url}
row << t.join(";") row << t.join(";")
t = links.collect{|l|l.title_translations["en"]} t = links.collect{|l|l.title_translations["en"]}
row << t.join(";") row << t.join(";")
t = links.collect{|l|l.title_translations["zh_tw"]} t = links.collect{|l|l.title_translations["zh_tw"]}
row << t.join(";") row << t.join(";")
files = anns.event_news_files.asc(:created_at) files = anns.event_news_files.asc(:created_at)
t = files.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)} t = files.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
t.delete(nil) t.delete(nil)
row << t.join(";") row << t.join(";")
t = files.collect{|l|l.description_translations["en"]} t = files.collect{|l|l.description_translations["en"]}
row << t.join(";") row << t.join(";")
t = files.collect{|l|l.description_translations["zh_tw"]} t = files.collect{|l|l.description_translations["zh_tw"]}
row << t.join(";") row << t.join(";")
t = files.collect{|l|l.title_translations["en"]} t = files.collect{|l|l.title_translations["en"]}
row << t.join(";") row << t.join(";")
t = files.collect{|l|l.title_translations["zh_tw"]} t = files.collect{|l|l.title_translations["zh_tw"]}
row << t.join(";") row << t.join(";")
row << anns.place_translations["en"] row << anns.place_translations["en"]
row << anns.place_translations["zh_tw"] row << anns.place_translations["zh_tw"]
row << (anns.event_end_date.strftime("%Y/%m/%d %H:%M") rescue "") row << (anns.event_end_date.strftime("%Y/%m/%d %H:%M") rescue "")
carousel_images = anns.event_carousel_images.asc(:created_at) 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 = carousel_images.collect{|f|("http://" + request.host_with_port + f.file.url rescue nil)}
t.delete(nil) t.delete(nil)
row << t.join(";") row << t.join(";")
t = carousel_images.collect{|l|l.description_translations["en"]} t = carousel_images.collect{|l|l.description_translations["en"]}
row << t.join(";") row << t.join(";")
t = carousel_images.collect{|l|l.description_translations["zh_tw"]} t = carousel_images.collect{|l|l.description_translations["zh_tw"]}
row << t.join(";") row << t.join(";")
sheet.add_row row sheet.add_row row
end end
end end

View File

@ -1,124 +1,124 @@
<% content_for :page_specific_css do %> <% content_for :page_specific_css do %>
<%= stylesheet_link_tag("admin/tags") %> <%= stylesheet_link_tag("admin/tags") %>
<% end %> <% end %>
<% content_for :page_specific_javascript do %> <% content_for :page_specific_javascript do %>
<%= javascript_include_tag "validator" %> <%= javascript_include_tag "validator" %>
<% end %> <% end %>
<table class="table main-list"> <table class="table main-list">
<thead> <thead>
<tr class="sort-header"> <tr class="sort-header">
<% @table_feed_fields.each do |f| %> <% @table_feed_fields.each do |f| %>
<%= thead(f) %> <%= thead(f) %>
<% end %> <% end %>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<%= render :partial => "feed", :collection => @feeds %> <%= render :partial => "feed", :collection => @feeds %>
</tbody> </tbody>
</table> </table>
<% if current_user.is_admin? or current_user.is_manager?(@module_app) %> <% if current_user.is_admin? or current_user.is_manager?(@module_app) %>
<div class="bottomnav clearfix" style="left: 81px;"> <div class="bottomnav clearfix" style="left: 81px;">
<div class="action pull-right"> <div class="action pull-right">
<a class="btn btn-primary new-feed" href="#"> <a class="btn btn-primary new-feed" href="#">
<i class="icon-plus"></i> <%= t(:new_) %> <i class="icon-plus"></i> <%= t(:new_) %>
</a> </a>
</div> </div>
<div class="pagination pagination-centered"></div> <div class="pagination pagination-centered"></div>
</div> </div>
<div id="newFeedModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="newFeedModalLabel" aria-hidden="true"> <div id="newFeedModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="newFeedModalLabel" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="newFeedModalLabel">Create New Feed</h3> <h3 id="newFeedModalLabel">Create New Feed</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<%#= render :partial => "feed_form" %> <%#= render :partial => "feed_form" %>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" id="save_new_feed">Save changes</button> <button class="btn btn-primary" id="save_new_feed">Save changes</button>
</div> </div>
</div> </div>
<% end %> <% end %>
<script type="text/javascript"> <script type="text/javascript">
$(".new-feed").on("click",function(){ $(".new-feed").on("click",function(){
var modal = $("#newFeedModal"); var modal = $("#newFeedModal");
modal.find("#newFeedModalLabel").text("Create New Feed"); modal.find("#newFeedModalLabel").text("Create New Feed");
modal.modal("show"); modal.modal("show");
openFeedModal("new",null); openFeedModal("new",null);
}) })
var bindEditButtons = function(){ var bindEditButtons = function(){
$(".edit-feed").on("click",function(){ $(".edit-feed").on("click",function(){
var modal = $("#newFeedModal"); var modal = $("#newFeedModal");
modal.find("#newFeedModalLabel").text("Edit Feed"); modal.find("#newFeedModalLabel").text("Edit Feed");
modal.modal("show"); modal.modal("show");
openFeedModal("edit",$(this).data("feed-id")); openFeedModal("edit",$(this).data("feed-id"));
return false; return false;
}) })
$(".delete-feed").on("click",function(){ $(".delete-feed").on("click",function(){
if(confirm("Are you sure?")){ if(confirm("Are you sure?")){
var el = $(this); var el = $(this);
$.ajax({ $.ajax({
url : el.attr("href"), url : el.attr("href"),
type : "delete", type : "delete",
dataType : "html" dataType : "html"
}).done(function(data){ }).done(function(data){
$("table.main-list tbody").html(data); $("table.main-list tbody").html(data);
bindEditButtons(); bindEditButtons();
}) })
} }
return false; return false;
}) })
} }
bindEditButtons(); bindEditButtons();
var openFeedModal = function(type,feed_id){ var openFeedModal = function(type,feed_id){
$.ajax({ $.ajax({
url : "/admin/event_news/feedform", url : "/admin/event_news/feedform",
type : "get", type : "get",
data : {"type" : type, "id" : feed_id}, data : {"type" : type, "id" : feed_id},
dataType : "html" dataType : "html"
}).done(function(form){ }).done(function(form){
$("#newFeedModal .modal-body").html(form); $("#newFeedModal .modal-body").html(form);
bindHandlers(); bindHandlers();
}) })
} }
var bindHandlers = function(){ var bindHandlers = function(){
$(".tag-checkbox").on("click",function(){ $(".tag-checkbox").on("click",function(){
if($(this).is(":checked")){ if($(this).is(":checked")){
$(this).parent().addClass("active"); $(this).parent().addClass("active");
}else{ }else{
$(this).parent().removeClass("active"); $(this).parent().removeClass("active");
} }
}) })
var fv = new FormValidator($("#newFeedModal form")); var fv = new FormValidator($("#newFeedModal form"));
fv.form.on("submit",function(){ fv.form.on("submit",function(){
$.ajax({ $.ajax({
url : fv.form.attr("action"), url : fv.form.attr("action"),
data : fv.form.serializeArray(), data : fv.form.serializeArray(),
type : "post", type : "post",
dataType : "html" dataType : "html"
}).done(function(data){ }).done(function(data){
$("table.main-list tbody").html(data); $("table.main-list tbody").html(data);
bindEditButtons(); bindEditButtons();
$("#newFeedModal").modal("hide"); $("#newFeedModal").modal("hide");
fv.form.resetForm(); fv.form.resetForm();
fv.form.find("ul.tags-groups p.active").removeClass("active"); fv.form.find("ul.tags-groups p.active").removeClass("active");
}) })
return false; return false;
}) })
$("#save_new_feed").on("click",function(){ $("#save_new_feed").on("click",function(){
if(fv.isFormValidated()){ if(fv.isFormValidated()){
fv.form.submit(); fv.form.submit();
}else{ }else{
return false; return false;
} }
}) })
} }
</script> </script>
</br> </br>

View File

@ -1,87 +1,87 @@
<% content_for :page_specific_javascript do %> <% content_for :page_specific_javascript do %>
<script type="text/javascript" src="/assets/validator.js"></script> <script type="text/javascript" src="/assets/validator.js"></script>
<% end %> <% end %>
<form action="<%= admin_event_news_importanns_path %>" method="post" class="form-horizontal main-forms" id="import-anns-xls" enctype="multipart/form-data"> <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> <h3 style="padding-left: 30px;"><%= t("event_news.export_to_excel") %></h3>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<a href="<%= admin_event_news_export_excel_path(:format => "xlsx") %>"><%= t("event_news.export_all_anns") %></a> <a href="<%= admin_event_news_export_excel_path(:format => "xlsx") %>"><%= t("event_news.export_all_anns") %></a>
</div> </div>
</div> </div>
<h3 style="padding-left: 30px;"><%= t("event_news.import_from_excel") %></h3> <h3 style="padding-left: 30px;"><%= t("event_news.import_from_excel") %></h3>
<%= hidden_field_tag :authenticity_token, form_authenticity_token %> <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<div class="input-area"> <div class="input-area">
<% if @module_app.categories.count > 0 %> <% if @module_app.categories.count > 0 %>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<a href="<%= admin_event_news_excel_format_path(:format => "xlsx") %>"><%= t("event_news.download_example_sheet_here") %></a> <a href="<%= admin_event_news_excel_format_path(:format => "xlsx") %>"><%= t("event_news.download_example_sheet_here") %></a>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label for="import-anns" class="control-label muted"><%= t("upload") %></label> <label for="import-anns" class="control-label muted"><%= t("upload") %></label>
<div class="controls"> <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.;" /> <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> <span class="help-block"><%= t("event_news.please_create_tags_cats") %></span>
</div> </div>
</div> </div>
<% else %> <% else %>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<h4><%= t("event_news.create_atleast_one_cat") %></h4> <h4><%= t("event_news.create_atleast_one_cat") %></h4>
</div> </div>
</div> </div>
<% end %> <% end %>
</div> </div>
<% if @module_app.categories.count > 0 %> <% if @module_app.categories.count > 0 %>
<div class="form-actions"> <div class="form-actions">
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary"> <input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
</div> </div>
<% end %> <% end %>
</form> </form>
<!-- import from wp xml --> <!-- 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"> <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> <h3 style="padding-left: 30px;"><%= t("event_news.import_from_wp_xml") %></h3>
<%= hidden_field_tag :authenticity_token, form_authenticity_token %> <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<div class="input-area"> <div class="input-area">
<div class="control-group"> <div class="control-group">
<label for="import-anns-wp-xml" class="control-label muted"><%= t("upload") %></label> <label for="import-anns-wp-xml" class="control-label muted"><%= t("upload") %></label>
<div class="controls"> <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.;" /> <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>
</div> </div>
<div class="form-actions"> <div class="form-actions">
<input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary"> <input type="submit" value="<%= t("restful_actions.import") %>" class="btn btn-primary">
</div> </div>
</form> </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"> <!-- <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> <h3 style="padding-left: 30px;">Import from XML</h3>
<%#= hidden_field_tag :authenticity_token, form_authenticity_token %> <%#= hidden_field_tag :authenticity_token, form_authenticity_token %>
<div class="input-area"> <div class="input-area">
<div class="control-group"> <div class="control-group">
<label for="import-anns" class="control-label muted">URL :</label> <label for="import-anns" class="control-label muted">URL :</label>
<div class="controls"> <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.;" /> <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>
</div> </div>
<div class="form-actions"> <div class="form-actions">
<input type="submit" value="Import" class="btn btn-primary"> <input type="submit" value="Import" class="btn btn-primary">
</div> </div>
</form> --> </form> -->
<script type="text/javascript"> <script type="text/javascript">
var form = new FormValidator($("#import-anns-xls")); var form = new FormValidator($("#import-anns-xls"));
form.validate_functions.mustbexls = function(val){ form.validate_functions.mustbexls = function(val){
var t = val.split("."), var t = val.split("."),
ext = t[t.length - 1]; ext = t[t.length - 1];
return (ext == "xls" || ext == "xlsx") return (ext == "xls" || ext == "xlsx")
} }
var form = new FormValidator($("#import-anns-wp-xml")); var form = new FormValidator($("#import-anns-wp-xml"));
form.validate_functions.mustbexml = function(val){ form.validate_functions.mustbexml = function(val){
var t = val.split("."), var t = val.split("."),
ext = t[t.length - 1]; ext = t[t.length - 1];
return (ext == "xml") return (ext == "xml")
} }
</script> </script>

View File

@ -1,34 +1,34 @@
<%= render_filter @filter_fields, "index_table" %> <%= render_filter @filter_fields, "index_table" %>
<span id="index_table"> <span id="index_table">
<%= render 'index'%> <%= render 'index'%>
</span> </span>
<%= render 'layouts/delete_modal', delete_options: @delete_options %> <%= render 'layouts/delete_modal', delete_options: @delete_options %>
<% if user_can_approve? %> <% if user_can_approve? %>
<%= render :partial=> "approval_modal" %> <%= render :partial=> "approval_modal" %>
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function(){
var modal = $("#approvalModal"); var modal = $("#approvalModal");
$(document).on("click", ".approval_button",function(){ $(document).on("click", ".approval_button",function(){
var url = $(this).attr("href"); var url = $(this).attr("href");
if(window.location.protocol === "https:"){ if(window.location.protocol === "https:"){
url = url.replace("http:","https:"); url = url.replace("http:","https:");
} }
modal.find("iframe").attr("src", url); modal.find("iframe").attr("src", url);
modal.find("#object_id").val($(this).data("id")); modal.find("#object_id").val($(this).data("id"));
modal.modal("show"); modal.modal("show");
return false; return false;
}) })
var params = getUrlVars(); var params = getUrlVars();
console.log(params["url"]) console.log(params["url"])
if(typeof params["url"] != "undefined"){ if(typeof params["url"] != "undefined"){
modal.find("iframe").attr("src", params["url"]); modal.find("iframe").attr("src", params["url"]);
modal.find("#object_id").val(params["id"]); modal.find("#object_id").val(params["id"]);
modal.modal("show"); modal.modal("show");
} }
}) })
</script> </script>
<% end %> <% 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| %> <%= form_for @event_news, url: admin_event_news_index_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
<fieldset> <fieldset>
<%= render :partial => 'form', locals: {f: f} %> <%= render :partial => 'form', locals: {f: f} %>
</fieldset> </fieldset>
<% end %> <% end %>

View File

@ -1,394 +1,415 @@
<%= stylesheet_link_tag "select2/select2" %> <%= stylesheet_link_tag "select2/select2" %>
<%= javascript_include_tag 'validator' %> <%= javascript_include_tag 'validator' %>
<%= javascript_include_tag "select2/select2.min" %> <%= javascript_include_tag "select2/select2.min" %>
<% content_for :page_specific_css do %> <% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %> <%= stylesheet_link_tag "lib/main-forms" %>
<% end %> <% end %>
<style type="text/css"> <style type="text/css">
#notification{ #notification{
background-color: #ececec; background-color: #ececec;
font-size: 14px; font-size: 14px;
left: 40%; left: 40%;
padding: 10px; padding: 10px;
position: absolute; position: absolute;
text-align: center; text-align: center;
top: 40px; top: 40px;
width: auto; width: auto;
z-index: 1200; z-index: 1200;
display: none; display: none;
} }
.badge-info{ .badge-info{
margin-left: 10px; margin-left: 10px;
} }
#approver-list{ #approver-list{
list-style: none; list-style: none;
margin-left: 5px; margin-left: 5px;
} }
#approver-list li { #approver-list li {
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
margin-bottom: 10px; margin-bottom: 10px;
padding-bottom: 10px; padding-bottom: 10px;
} }
#approver-list .approver-avatar{ #approver-list .approver-avatar{
width: 60px; width: 60px;
height: 60px; height: 60px;
border-radius: 50px; border-radius: 50px;
margin-right: 20px; margin-right: 20px;
} }
#approver-list .approver-check{ #approver-list .approver-check{
vertical-align: middle; vertical-align: middle;
margin-top: 25px; margin-top: 25px;
} }
#approver-list .approver-check input{ #approver-list .approver-check input{
margin-right: 5px; margin-right: 5px;
vertical-align: middle; vertical-align: middle;
} }
#approver-list .approver-check label{ #approver-list .approver-check label{
display: inline; display: inline;
vertical-align: middle; vertical-align: middle;
} }
#approver-list .approver-title{ #approver-list .approver-title{
font-size: 14px; font-size: 14px;
} }
.table{ .table{
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.table-row,.role_limit_tr,.role_limit_add { .table-row,.role_limit_tr,.role_limit_add {
width: 100%; width: 100%;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
.td{ .td{
width: 30%; width: 30%;
display: inline-flex; display: inline-flex;
justify-content: center; justify-content: center;
} }
.table{ .table{
border: #2d4cd0 0.1em solid; border: #2d4cd0 0.1em solid;
} }
.td-3{ .td-3{
width: 100%; width: 100%;
display: inline-flex; display: inline-flex;
justify-content: center; justify-content: center;
} }
.td>*{ .td>*{
max-width: 95%; max-width: 95%;
} }
.td-delete{ .td-delete{
width: 10%; width: 10%;
} }
</style> </style>
<% <%
sub_managers = @module_app.sub_managers sub_managers = @module_app.sub_managers
sub_managers.delete(nil) sub_managers.delete(nil)
all_statuses = [[t('top'),'is_top'],[t('hot'),'is_hot']] 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)) 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]})) 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) 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>" 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>" 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"> <script type="text/javascript">
function add_limit_role(){ function add_limit_role(){
var role_limit_l = $('.role_limit_tr').length var role_limit_l = $('.role_limit_tr').length
var role_limit_tp = '<%= all_tp.inspect %>' var role_limit_tp = '<%= all_tp.inspect %>'
role_limit_tp = role_limit_tp.replace(/-1/g,role_limit_l) 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)) $('.role_limit_add').before($('<div/>').html(role_limit_tp).text().slice(1,-2))
} }
function delete_limit_role(ele){ function delete_limit_role(ele){
var now_index = $(ele).parents('.role_limit_tr').index('.role_limit_tr') var now_index = $(ele).parents('.role_limit_tr').index('.role_limit_tr')
console.log(now_index) console.log(now_index)
$(ele).parents('.role_limit_tr').remove() $(ele).parents('.role_limit_tr').remove()
$('.role_limit_tr').each(function(i,v){ $('.role_limit_tr').each(function(i,v){
if (i >= now_index){ if (i >= now_index){
$(v).find('[name^="event_news_setting[anns_status_settings]"]').each(function(i1,v1){ $(v).find('[name^="event_news_setting[anns_status_settings]"]').each(function(i1,v1){
console.log($(v1).attr('name')) console.log($(v1).attr('name'))
$(v1).attr('name',$(v1).attr('name').replace(/\d+/g,i.toString())) $(v1).attr('name',$(v1).attr('name').replace(/\d+/g,i.toString()))
}) })
} }
}) })
} }
var approverList = $(".hidden-approver-list"); var approverList = $(".hidden-approver-list");
$(".approver-check input").on("click",function(){ $(".approver-check input").on("click",function(){
var el = $(this); var el = $(this);
if(el.is(":checked")){ if(el.is(":checked")){
var t = $("<input type='hidden'>"); var t = $("<input type='hidden'>");
t.val(el.val()); t.val(el.val());
t.attr("name", "event_news_setting[approvers][]"); t.attr("name", "event_news_setting[approvers][]");
t.attr("id", "check_" + el.val()); t.attr("id", "check_" + el.val());
approverList.append(t); approverList.append(t);
}else{ }else{
approverList.find("#check_" + el.val()).remove(); approverList.find("#check_" + el.val()).remove();
} }
}) })
</script> </script>
<div id="notification"><%= t("event_news.click_on_submit") %></div> <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| %> <%= 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="input-area">
<div class="control-group"> <div class="control-group">
<%= f.label :carousel_image_width, t("event_news.default_carousel_image_width"), :class => "control-label muted" %> <%= f.label :carousel_image_width, t("event_news.default_carousel_image_width"), :class => "control-label muted" %>
<div class="controls"> <div class="controls">
<%= f.text_field :carousel_image_width %> <%= f.text_field :carousel_image_width %>
</div> </div>
</div> </div>
<div class="control-group"> <fieldset id="event_date_setting">
<%= f.label :only_manager_can_edit_status, t("event_news.only_manager_can_edit_status"), :class => "control-label muted" %> <legend><%=t("event_news.event_date_setting")%></legend>
<div class="controls"> <div class="control-group">
<%= f.check_box :only_manager_can_edit_status %> <label class="control-label muted"><%= I18n.t("event_news.including_day_of_the_week") %></label>
</div> <div class="controls">
</div> <%= f.check_box :including_day_of_the_week %>
<div class="control-group"> </div>
<%= f.label :is_display_edit_only, t("event_news.is_display_edit_only"), :class => "control-label muted" %> </div>
<div class="controls"> <div class="control-group">
<%= f.check_box :is_display_edit_only %> <label class="control-label muted"><%= I18n.t("event_news.including_time") %></label>
</div> <div class="controls">
</div> <%= f.check_box :including_time, :id=>"including_time" %>
<div class="control-group"> </div>
<%= f.label :top_limit, t("event_news.top_limit"), :class => "control-label muted" %> </div>
<div class="controls"> <div class="hour_clock_24_block control-group <%= 'hide' if !(f.object.including_time) %>">
<%= f.number_field :top_limit, :min => "0" %> <label class="control-label muted"><%= I18n.t("event_news.hour_clock_24") %></label>
<span class="help-block"><%= t("event_news.for_unlimited") %></span> <div class="controls">
</div> <%= f.check_box :hour_clock_24 %>
</div> </div>
<div class="control-group"> </div>
<div class="table"> </fieldset>
<div class="table-row"> <div class="control-group">
<div class="td"> <%= f.label :only_manager_can_edit_status, t("event_news.only_manager_can_edit_status"), :class => "control-label muted" %>
<%= t('status') %> <div class="controls">
</div> <%= f.check_box :only_manager_can_edit_status %>
<div class="td"> </div>
<%= t('role') %> </div>
</div> <div class="control-group">
<div class="td"> <%= f.label :is_display_edit_only, t("event_news.is_display_edit_only"), :class => "control-label muted" %>
<%= t('event_news.top_limit') %> <div class="controls">
</div> <%= f.check_box :is_display_edit_only %>
</div> </div>
<% (EventNewsSetting.first.anns_status_settings rescue []).each_with_index do |v,i| %> </div>
<div class="role_limit_tr"> <div class="control-group">
<%= hidden_field_tag("event_news_setting[anns_status_settings][#{i}][_id]",v.id) %> <%= f.label :top_limit, t("event_news.top_limit"), :class => "control-label muted" %>
<div class="td"> <div class="controls">
<%= select_tag("event_news_setting[anns_status_settings][#{i}][status]",options_for_select(all_statuses,:selected => v['status'])) %> <%= f.number_field :top_limit, :min => "0" %>
</div> <span class="help-block"><%= t("event_news.for_unlimited") %></span>
<div class="td"> </div>
<%= 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> <div class="control-group">
<div class="td"> <div class="table">
<%= number_field_tag("event_news_setting[anns_status_settings][#{i}][top_limit]",v['top_limit'], min: 0,required: true) %> <div class="table-row">
</div> <div class="td">
<div class="td-delete"> <%= t('status') %>
<button type="button" onclick="delete_limit_role(this)" class="btn"> </div>
<%= t('delete_') %> <div class="td">
</button> <%= t('role') %>
</div> </div>
</div> <div class="td">
<% end %> <%= t('event_news.top_limit') %>
<div class="role_limit_add"> </div>
<div class="td-3"> </div>
<button type="button" onclick="add_limit_role()" class="btn"> <% (EventNewsSetting.first.anns_status_settings rescue []).each_with_index do |v,i| %>
<%= t('add') %> <div class="role_limit_tr">
</button> <%= hidden_field_tag("event_news_setting[anns_status_settings][#{i}][_id]",v.id) %>
</div> <div class="td">
</div> <%= select_tag("event_news_setting[anns_status_settings][#{i}][status]",options_for_select(all_statuses,:selected => v['status'])) %>
</div> </div>
</div> <div class="td">
<% if EventNewsSetting.is_pro? %> <%= 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'])) %>
<% if !sub_managers.blank? %> </div>
<div class="control-group"> <div class="td">
<%= f.label "Approver Setting", :class => "control-label muted" %> <%= number_field_tag("event_news_setting[anns_status_settings][#{i}][top_limit]",v['top_limit'], min: 0,required: true) %>
<div class="controls"> </div>
<a href="#approverModal" role="button" class="btn" data-toggle="modal"><%= t("event_news.approvers_list") %></a> <div class="td-delete">
<span class="badge badge-info"><%= @setting.approvers.count %></span> <button type="button" onclick="delete_limit_role(this)" class="btn">
</div> <%= t('delete_') %>
</div> </button>
<% else %> </div>
<div class="control-group"> </div>
<a href="/admin/authorizations/event_news"><%= t("event_news.click_set_sub_manager") %></a> <% end %>
</div> <div class="role_limit_add">
<% end %> <div class="td-3">
<div class="control-group"> <button type="button" onclick="add_limit_role()" class="btn">
<%= f.label "Send emails to", :class => "control-label muted" %> <%= t('add') %>
<div class="controls"> </button>
<input type="checkbox" name="event_news_setting[email_to][]" value="admins" <%= @setting.email_to.include?("admins") ? "checked=checked" : "" %>> <%= t("admin") %> </div>
<input type="checkbox" name="event_news_setting[email_to][]" value="managers" <%= @setting.email_to.include?("managers") ? "checked=checked" : "" %>> <%= t("manager") %> </div>
<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> <% if EventNewsSetting.is_pro? %>
</div> <% if !sub_managers.blank? %>
<div class="hidden-approver-list"> <div class="control-group">
<% sub_managers.each do |sm| %> <%= f.label "Approver Setting", :class => "control-label muted" %>
<% if @setting.approvers.include?(sm.id.to_s) %> <div class="controls">
<input type="hidden" id="check_<%= sm.id.to_s %>" value="<%= sm.id.to_s %>" name="event_news_setting[approvers][]"> <a href="#approverModal" role="button" class="btn" data-toggle="modal"><%= t("event_news.approvers_list") %></a>
<% end %> <span class="badge badge-info"><%= @setting.approvers.count %></span>
<% end %> </div>
</div> </div>
<% end %> <% else %>
<div class="form-actions"> <div class="control-group">
<%= f.submit t('submit'), class: 'btn btn-primary' %> <a href="/admin/authorizations/event_news"><%= t("event_news.click_set_sub_manager") %></a>
</div> </div>
<% end %> <% end %>
</div> <div class="control-group">
<% if EventNewsSetting.is_pro? %> <%= f.label "Send emails to", :class => "control-label muted" %>
<div id="approverModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="approverModalLabel" aria-hidden="true"> <div class="controls">
<div class="modal-header"> <input type="checkbox" name="event_news_setting[email_to][]" value="admins" <%= @setting.email_to.include?("admins") ? "checked=checked" : "" %>> <%= t("admin") %>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <input type="checkbox" name="event_news_setting[email_to][]" value="managers" <%= @setting.email_to.include?("managers") ? "checked=checked" : "" %>> <%= t("manager") %>
<h3 id="approverModalLabel"><%= t("sub_manager") %></h3> <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 class="modal-body"> </div>
<ul id="approver-list"> </div>
<% sub_managers.each do |sm| %> <div class="hidden-approver-list">
<li> <% sub_managers.each do |sm| %>
<%= image_tag sm.member_profile.avatar.thumb, :class => "approver-avatar" %> <% if @setting.approvers.include?(sm.id.to_s) %>
<span class="approver-title"><%= sm.name %></span> <input type="hidden" id="check_<%= sm.id.to_s %>" value="<%= sm.id.to_s %>" name="event_news_setting[approvers][]">
<span class="pull-right approver-check"> <% end %>
<input id="checkbox_<%= sm.id %>" type="checkbox" value="<%= sm.id %>" <%= @setting.approvers.include?(sm.id.to_s) ? "checked=checked" : "" %>> <% end %>
<label for="checkbox_<%= sm.id %>"><%= t("event_news.approver") %></label> </div>
</span> <% end %>
</li> <div class="form-actions">
<% end %> <%= f.submit t('submit'), class: 'btn btn-primary' %>
</ul> </div>
</div> <% end %>
<div class="modal-footer"> </div>
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Ok</button> <% if EventNewsSetting.is_pro? %>
</div> <div id="approverModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="approverModalLabel" aria-hidden="true">
</div> <div class="modal-header">
<script type="text/javascript"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
$("#approverModal").on("hidden",function(){ <h3 id="approverModalLabel"><%= t("sub_manager") %></h3>
$("#notification").slideDown(); </div>
$(".badge-info").text($(".hidden-approver-list input").length); <div class="modal-body">
}) <ul id="approver-list">
</script> <% sub_managers.each do |sm| %>
<% end %> <li>
<%= fields_for :iframe do |f| %> <%= image_tag sm.member_profile.avatar.thumb, :class => "approver-avatar" %>
<div class="form-horizontal input-area"> <span class="approver-title"><%= sm.name %></span>
<fieldset id="iframe_settings"> <span class="pull-right approver-check">
<legend><%=t('event_news.event_news_setting_for_iframe')%></legend> <input id="checkbox_<%= sm.id %>" type="checkbox" value="<%= sm.id %>" <%= @setting.approvers.include?(sm.id.to_s) ? "checked=checked" : "" %>>
<div class="control-group"> <label for="checkbox_<%= sm.id %>"><%= t("event_news.approver") %></label>
<%= f.label :layout_type, t("event_news.layout_type"), :class => "control-label muted" %> </span>
<div class="controls"> </li>
<% @layout_types = get_layouts(@module_app.key) %> <% end %>
<% if @layout_types.first.kind_of?(Hash) %> </ul>
<select name="iframe[layout_type]" id="page_layout" class="select2"> </div>
<% @layout_types.each do |lt| %> <div class="modal-footer">
<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> <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Ok</button>
<% end %> </div>
</select> </div>
<script type="text/javascript"> <script type="text/javascript">
$("select.select2").select2({ $("#approverModal").on("hidden",function(){
formatResult: function(el){ $("#notification").slideDown();
var $element = $(el.element), $(".badge-info").text($(".hidden-approver-list input").length);
image = $element.data("image"); })
return "<img class='thumbnail' src='" + image + "'/><span class='thumbnail-text'>" + el.text + "</span>"; </script>
}, <% end %>
minimumResultsForSearch: -1, <%= fields_for :iframe do |f| %>
width : 250 <div class="form-horizontal input-area">
}); <fieldset id="iframe_settings">
</script> <legend><%=t('event_news.event_news_setting_for_iframe')%></legend>
<% else %> <div class="control-group">
<%= f.select(:layout, @layout_types) %> <%= f.label :layout_type, t("event_news.layout_type"), :class => "control-label muted" %>
<% end %> <div class="controls">
</div> <% @layout_types = get_layouts(@module_app.key) %>
</div> <% if @layout_types.first.kind_of?(Hash) %>
<div class="control-group"> <select name="iframe[layout_type]" id="page_layout" class="select2">
<%= f.label :tags, t(:tags), :class => "control-label muted" %> <% @layout_types.each do |lt| %>
<div class="controls"> <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>
<% @module_app.tags.each_with_index do |t,index| %> <% end %>
<label class="checkbox inline btn" for="<%="tags_#{index}"%>"> </select>
<input id="<%="tags_#{index}"%>" name="iframe[tags][]" type="checkbox" value="<%=t.id%>" style="opacity: 0;"> <script type="text/javascript">
<%=t.name%> $("select.select2").select2({
</label> formatResult: function(el){
<% end %> var $element = $(el.element),
</div> image = $element.data("image");
</div> return "<img class='thumbnail' src='" + image + "'/><span class='thumbnail-text'>" + el.text + "</span>";
<div class="control-group"> },
<label class="control-label muted" ><%=t(:categories)%></label> minimumResultsForSearch: -1,
<div class="controls"> width : 250
<% @module_app.categories.each_with_index do |c,index| %> });
<label class="checkbox inline btn" for="<%="categories_#{index}"%>"> </script>
<input id="<%="categories_#{index}"%>" name="iframe[categories][]" type="checkbox" value="<%=c.id%>" style="opacity: 0;"> <% else %>
<%=c.title%> <%= f.select(:layout, @layout_types) %>
</label> <% end %>
<% end %> </div>
</div> </div>
</div> <div class="control-group">
<div class="control-group"> <%= f.label :tags, t(:tags), :class => "control-label muted" %>
<%= f.label :authors, t('event_news.table.author'), :class => "control-label muted" %> <div class="controls">
<div class="controls"> <% @module_app.tags.each_with_index do |t,index| %>
<%= render partial: 'admin/members/generate_modal_select' , locals: { :@sorted_members => @sorted_members ,:member_form_id => "card-list-members",:member_field_name=>"iframe[member_ids][]" } %> <label class="checkbox inline btn" for="<%="tags_#{index}"%>">
</div> <input id="<%="tags_#{index}"%>" name="iframe[tags][]" type="checkbox" value="<%=t.id%>" style="opacity: 0;">
</div> <%=t.name%>
<div class="control-group"> </label>
<%= f.label :show_page, t('event_news.show_page'), :class => "control-label muted" %> <% end %>
<div class="controls"> </div>
<%=f.check_box :show_page ,{:checked=>'checked'},'true','false'%> </div>
</div> <div class="control-group">
</div> <label class="control-label muted" ><%=t(:categories)%></label>
<div class="control-group"> <div class="controls">
<%= f.label :data_count, t(:data_count), :class => "control-label muted" %> <% @module_app.categories.each_with_index do |c,index| %>
<div class="controls"> <label class="checkbox inline btn" for="<%="categories_#{index}"%>">
<%=f.number_field :data_count, {min: 0,:value=> 10} %> <input id="<%="categories_#{index}"%>" name="iframe[categories][]" type="checkbox" value="<%=c.id%>" style="opacity: 0;">
</div> <%=c.title%>
</div> </label>
<div class="control-group"> <% end %>
<div class="controls"> </div>
<a class="btn btn-primary" title="<%= t("event_news.url_generate") %>" id="url_generate"><%= t("event_news.url_generate") %></a> </div>
</div> <div class="control-group">
</div> <%= f.label :authors, t('event_news.table.author'), :class => "control-label muted" %>
</fieldset> <div class="controls">
</div> <%= render partial: 'admin/members/generate_modal_select' , locals: { :@sorted_members => @sorted_members ,:member_form_id => "card-list-members",:member_field_name=>"iframe[member_ids][]" } %>
<% end %> </div>
<script type="text/javascript"> </div>
function getparams(id){ <div class="control-group">
var params_array = $("#"+id).serializeArray(); <%= f.label :show_page, t('event_news.show_page'), :class => "control-label muted" %>
var params = {}; <div class="controls">
params_array.forEach(function(dict){ <%=f.check_box :show_page ,{:checked=>'checked'},'true','false'%>
if(params[dict.name] == undefined) </div>
if(dict.name.substr(dict.name.length-2,2) == "[]") </div>
params[dict.name] = [dict.value] <div class="control-group">
else <%= f.label :data_count, t(:data_count), :class => "control-label muted" %>
params[dict.name] = dict.value <div class="controls">
else <%=f.number_field :data_count, {min: 0,:value=> 10} %>
if(dict.name.substr(dict.name.length-2,2) == "[]") </div>
params[dict.name].push(dict.value) </div>
else <div class="control-group">
params[dict.name] = dict.value <div class="controls">
}) <a class="btn btn-primary" title="<%= t("event_news.url_generate") %>" id="url_generate"><%= t("event_news.url_generate") %></a>
return params; </div>
} </div>
$(document).ready(function(){ </fieldset>
$('label.checkbox input').click(function(){ </div>
if($(this).parent().hasClass('active')) <% end %>
$(this).parent().removeClass('active'); <script type="text/javascript">
else function getparams(id){
$(this).parent().addClass('active'); var params_array = $("#"+id).serializeArray();
}) var params = {};
$('#url_generate').off('click').on('click',function(){ params_array.forEach(function(dict){
var params = getparams('iframe_settings'); if(params[dict.name] == undefined)
$.post("<%=admin_event_news_generate_iframe_url_path%>",params).done(function(url){ if(dict.name.substr(dict.name.length-2,2) == "[]")
var real_url = '/annc_url?url='+window.location.href.split('/')[0]+"//"+window.location.host+url; params[dict.name] = [dict.value]
if($("#dialog-confirm").length == 0){ else
$("#url_generate").before("<div id='dialog-confirm' title='<%="iframe "+t('event_news.URL')%>'>"+ params[dict.name] = dict.value
"<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>"+ else
"</div>"); if(dict.name.substr(dict.name.length-2,2) == "[]")
} params[dict.name].push(dict.value)
$( "#dialog-confirm" ).dialog({ else
resizable: true, params[dict.name] = dict.value
minHeight: 100, })
maxHeight: 400, return params;
width: '80%', }
modal: true, $(document).ready(function(){
buttons: { $('label.checkbox input').click(function(){
"<%= t(:close) %>": function(){$( this ).dialog( "close" );} if($(this).parent().hasClass('active'))
} $(this).parent().removeClass('active');
}); else
$('.copy_text').off('click').on('click',function(){ $(this).parent().addClass('active');
var copyText = document.getElementById("iframe_url"); })
copyText.select(); $('#url_generate').off('click').on('click',function(){
copyText.setSelectionRange(0, 99999); var params = getparams('iframe_settings');
document.execCommand("copy"); $.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> </script>

View File

@ -1,3 +1,3 @@
<h3>Hello <%= @data["name"] %>,</h3> <h3>Hello <%= @data["name"] %>,</h3>
<p><%= @data["submitter"] %> <%= t("event_news.updated_annoucement") %> <p><%= @data["submitter"] %> <%= t("event_news.updated_annoucement") %>
<a href="<%= @data['url'] %>" ><%= t("event_news.click_here_to_see") %></a> <a href="<%= @data['url'] %>" ><%= t("event_news.click_here_to_see") %></a>

View File

@ -1,3 +1,3 @@
<h3>Hello <%= @data["name"] %>,</h3> <h3>Hello <%= @data["name"] %>,</h3>
<p><%= @data["rejector"] %> <%= t("event_news.rejected_event_news") %> : <%= @data["reason"].nil? || @data["reason"] == "" ? "" : "#{@data["reason"]}" %></p> <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> <a href="<%= @data['url'] %>" ><%= t("event_news.click_here_to_see") %></a>

View File

@ -1,19 +1,19 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head> </head>
<body bgcolor="#FFFFFF"> <body bgcolor="#FFFFFF">
<div style="text-ident:20px"></div> <div style="text-ident:20px"></div>
<%= t('event_news.mail_hi') %> <br /><br /> <%= t('event_news.mail_hi') %> <br /><br />
<%= t('event_news.mail_url_view') %> <br /><br /> <%= t('event_news.mail_url_view') %> <br /><br />
<a href="<%= @data["url"] %>" target="_blank"> <%= @data["title"] %> </a> <br /><br /> <a href="<%= @data["url"] %>" target="_blank"> <%= @data["title"] %> </a> <br /><br />
<span style="color:#555">--<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_source') %> <a href="http://<%= @data["host"] %>" target="_blank"> <%= Site.first.title %> </a><br />
<%= t('event_news.mail_time') %> <%= DateTime.now %> <%= t('event_news.mail_time') %> <%= DateTime.now %>
</span> </span>
</body> </body>
</html> </html>

View File

@ -1,85 +1,85 @@
<% params = OrbitHelper.params <% params = OrbitHelper.params
page = Page.where(url:params['url']).first page = Page.where(url:params['url']).first
enable_search_flag = false enable_search_flag = false
if page.methods.include? 'select_option_items'.to_sym if page.methods.include? 'select_option_items'.to_sym
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |modile_app| ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |modile_app|
@show_option_items = modile_app.show_option_items rescue nil @show_option_items = modile_app.show_option_items rescue nil
end end
page.select_option_items.each do |select_option_item| 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 if !(@show_option_items.nil?) && select_option_item.field_name == @show_option_items.keys[1].to_s
value = YAML.load(select_option_item.value) value = YAML.load(select_option_item.value)
if value[I18n.locale] == t('event_news.yes') if value[I18n.locale] == t('event_news.yes')
enable_search_flag = true enable_search_flag = true
end end
end end
end end
end end
%> %>
<% if enable_search_flag %> <% if enable_search_flag %>
<style type="text/css"> <style type="text/css">
#category_select_box{ #category_select_box{
margin: 0; margin: 0;
background: linear-gradient(0deg, #515fff, #ff3e3e); background: linear-gradient(0deg, #515fff, #ff3e3e);
color: white; color: white;
outline: 0; outline: 0;
border-radius: 0.9em; border-radius: 0.9em;
} }
#category_select_box>option{ #category_select_box>option{
background: #5640dd; background: #5640dd;
} }
input.search_box{ input.search_box{
margin: 0; margin: 0;
background: #a2c3df; background: #a2c3df;
font-weight: bold; font-weight: bold;
color: #00008b; color: #00008b;
border-radius: 0.7em; border-radius: 0.7em;
outline: 0; outline: 0;
} }
input.search_box[type='submit']:hover{ input.search_box[type='submit']:hover{
background: #9100ff; background: #9100ff;
color: white; color: white;
} }
input.search_box[type='submit']:active{ input.search_box[type='submit']:active{
background: #7201ff; background: #7201ff;
color: white; color: white;
} }
input.search_box::-webkit-input-placeholder { input.search_box::-webkit-input-placeholder {
color: #aa58e8; color: #aa58e8;
opacity: 1; opacity: 1;
} }
input.search_box:-moz-placeholder { input.search_box:-moz-placeholder {
color: #aa58e8; color: #aa58e8;
opacity: 1; opacity: 1;
} }
input.search_box::-moz-placeholder { input.search_box::-moz-placeholder {
color: #aa58e8; color: #aa58e8;
opacity: 1; opacity: 1;
} }
</style> </style>
<form> <form>
<% cats = Array(page.categories) <% cats = Array(page.categories)
if cats.include? 'all' if cats.include? 'all'
cats = ModuleApp.where(key: 'event_news').first.categories cats = ModuleApp.where(key: 'event_news').first.categories
else else
cats = cats.map{|v| Category.where(id: v).first}.compact cats = cats.map{|v| Category.where(id: v).first}.compact
end end
all_cat = [[t('event_news.all'),'all']] all_cat = [[t('event_news.all'),'all']]
%> %>
<div class="search_widget" style="display: flex;flex-wrap: wrap;font-size: 1.1em;"> <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')) %> <%= 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') %>"> <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 style="display: flex;flex-wrap: wrap;">
<div class="default_picker"> <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"> <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>
~ ~
<div class="default_picker"> <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"> <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>
</div> </div>
<input type="hidden" name="authenticity_token" value="<%= (0...46).map { ('a'..'z').to_a[rand(26)] }.join %>"> <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') %>"> <input class="search_box" type="submit" value="<%= t('event_news.search') %>">
</div> </div>
</form> </form>
<% end %> <% end %>
<%= render_view %> <%= render_view %>

View File

@ -1,237 +1,237 @@
<% <%
require 'event_news_helper' require 'event_news_helper'
data = action_data data = action_data
params = OrbitHelper.params params = OrbitHelper.params
page = Page.where(url:params['url']).first page = Page.where(url:params['url']).first
@ad_banner_location = 2 @ad_banner_location = 2
@show_back_and_next_flag = 0 @show_back_and_next_flag = 0
if page.methods.include? 'select_option_items'.to_sym if page.methods.include? 'select_option_items'.to_sym
ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |module_app| ModuleApp.all.select{|tmp| tmp.key.to_s=='event_news'}.each do |module_app|
@show_option_items = module_app.show_option_items rescue nil @show_option_items = module_app.show_option_items rescue nil
end end
page.select_option_items.each do |select_option_item| page.select_option_items.each do |select_option_item|
if !(@show_option_items.nil?) if !(@show_option_items.nil?)
if select_option_item.field_name == @show_option_items.keys.first.to_s if select_option_item.field_name == @show_option_items.keys.first.to_s
value = YAML.load(select_option_item.value) value = YAML.load(select_option_item.value)
tmp = value[:en] tmp = value[:en]
I18n.with_locale(:en) do I18n.with_locale(:en) do
if tmp == t('event_news.not_show') if tmp == t('event_news.not_show')
@show_back_and_next_flag = 0 @show_back_and_next_flag = 0
elsif tmp == t('event_news.show_top') elsif tmp == t('event_news.show_top')
@show_back_and_next_flag = 1 @show_back_and_next_flag = 1
elsif tmp == t('event_news.show_bottom') elsif tmp == t('event_news.show_bottom')
@show_back_and_next_flag = 2 @show_back_and_next_flag = 2
end end
end end
elsif select_option_item.field_name == @show_option_items.keys[2].to_s elsif select_option_item.field_name == @show_option_items.keys[2].to_s
value = YAML.load(select_option_item.value) value = YAML.load(select_option_item.value)
tmp = value[:en] tmp = value[:en]
I18n.with_locale(:en) do I18n.with_locale(:en) do
if tmp == t('event_news.show_top') if tmp == t('event_news.show_top')
@ad_banner_location = 1 @ad_banner_location = 1
elsif tmp == t('event_news.show_bottom') elsif tmp == t('event_news.show_bottom')
@ad_banner_location = 2 @ad_banner_location = 2
end end
end end
end end
end end
end end
end end
if @show_back_and_next_flag != 0 if @show_back_and_next_flag != 0
uid = params['uid'] uid = params['uid']
sorted,total_pages = get_sorted_annc(0) sorted,total_pages = get_sorted_annc(0)
now_index = sorted.to_enum.with_index.select{|v| v[0].uid==uid}[0][1] rescue nil now_index = sorted.to_enum.with_index.select{|v| v[0].uid==uid}[0][1] rescue nil
if !now_index.nil? if !now_index.nil?
if now_index != 0 if now_index != 0
prev_result = sorted[now_index-1] prev_result = sorted[now_index-1]
prev_url = params['url'] + '/' + prev_result.to_param 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>" 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 end
if now_index != sorted.length-1 if now_index != sorted.length-1
next_result = sorted[now_index+1] next_result = sorted[now_index+1]
next_url = params['url'] + '/' + next_result.to_param 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>" 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 end
content = "<div class='see_more_boxTitle'>#{prev_content}#{next_content}</div>".html_safe content = "<div class='see_more_boxTitle'>#{prev_content}#{next_content}</div>".html_safe
else else
content = '' content = ''
end end
end end
ad_banner_content = render_ad_banner(data['event_carousel_images'],data['data']) ad_banner_content = render_ad_banner(data['event_carousel_images'],data['data'])
%> %>
<style type="text/css"> <style type="text/css">
.carousel_images{ .carousel_images{
<%= data['data']['carousel_display_style'] %> <%= data['data']['carousel_display_style'] %>
} }
</style> </style>
<%= stylesheet_link_tag 'event_news_front.css' %> <%= stylesheet_link_tag 'event_news_front.css' %>
<% if @show_back_and_next_flag!=0 %> <% if @show_back_and_next_flag!=0 %>
<style type="text/css"> <style type="text/css">
.see_more_boxTitle{ .see_more_boxTitle{
display: flex; display: flex;
margin: 1em 0em; margin: 1em 0em;
padding: 1em; padding: 1em;
border: 0.2em solid; border: 0.2em solid;
} }
a.prev, a.next{ a.prev, a.next{
width: 50%; width: 50%;
border: 0.2em solid; border: 0.2em solid;
padding: 1em; padding: 1em;
flex: 1; flex: 1;
} }
a.next{ a.next{
margin-left: 1em; margin-left: 1em;
} }
a.prev{ a.prev{
margin-right: 1em; margin-right: 1em;
} }
</style> </style>
<% end %> <% end %>
<% if @show_back_and_next_flag==1 %> <% if @show_back_and_next_flag==1 %>
<%= content %> <%= content %>
<% end %> <% end %>
<% if @ad_banner_location==1 %> <% if @ad_banner_location==1 %>
<%= ad_banner_content %> <%= ad_banner_content %>
<% end %> <% end %>
<%= render_view %> <%= render_view %>
<% if @ad_banner_location==2 %> <% if @ad_banner_location==2 %>
<%= ad_banner_content %> <%= ad_banner_content %>
<% end %> <% end %>
<% if @show_back_and_next_flag==2 %> <% if @show_back_and_next_flag==2 %>
<%= content %> <%= content %>
<% end %> <% end %>
<script> <script>
(function($) { (function($) {
function hideEmptyEl(el, elParent) { function hideEmptyEl(el, elParent) {
if( el.length === 0) { if( el.length === 0) {
elParent.addClass('hide'); elParent.addClass('hide');
} }
} }
// Hiding parent element when children elements are not present // Hiding parent element when children elements are not present
// Tags // Tags
hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap')); hideEmptyEl($('.s-annc__tag'), $('.s-annc__tag-wrap'));
// Attachments // Attachments
hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file')); hideEmptyEl($('.s-annc__flie-title'), $('.s-annc__related-file'));
// Links // Links
hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link')); hideEmptyEl($('.s-annc__link-title'), $('.s-annc__related-link'));
$("img[src='']").remove(); $("img[src='']").remove();
$('.pause-slide').click(function(){ $('.pause-slide').click(function(){
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('pause'); $(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('pause');
$(this).addClass('active'); $(this).addClass('active');
$(this).parents('.carousel_images').find('.resume-slide').removeClass('active'); $(this).parents('.carousel_images').find('.resume-slide').removeClass('active');
}); });
$('.resume-slide').click(function(){ $('.resume-slide').click(function(){
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('resume'); $(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle('resume');
$(this).addClass('active'); $(this).addClass('active');
$(this).parents('.carousel_images').find('.pause-slide').removeClass('active'); $(this).parents('.carousel_images').find('.pause-slide').removeClass('active');
}); });
$('.next-button').off('click').on('click',function(){ $('.next-button').off('click').on('click',function(){
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("next"); $(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("next");
}) })
$('.prev-button').off('click').on('click',function(){ $('.prev-button').off('click').on('click',function(){
$(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("prev"); $(this).parent("ul").parent('.w-ba-banner').find(".cycle-slideshow").cycle("prev");
}) })
window.active_slide = 0; window.active_slide = 0;
$('.prev_img').off('click').on('click',function(){ $('.prev_img').off('click').on('click',function(){
var carousel_images_slide = $('.carousel_images_slide'); var carousel_images_slide = $('.carousel_images_slide');
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide); var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
if(carousel_images_slide_first_child.length > 0){ 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)); 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); content_size = Math.max(content_size,1);
if(carousel_images_slide.find(">li").length > content_size && active_slide > 0){ if(carousel_images_slide.find(">li").length > content_size && active_slide > 0){
active_slide -= content_size; active_slide -= content_size;
carousel_images_slide.find(">li").css("display","none"); carousel_images_slide.find(">li").css("display","none");
for(var i = active_slide; i < active_slide + content_size;i++){ for(var i = active_slide; i < active_slide + content_size;i++){
carousel_images_slide.find(">li").eq(i).css("display","block"); carousel_images_slide.find(">li").eq(i).css("display","block");
} }
} }
} }
}) })
$('.next_img').off('click').on('click',function(){ $('.next_img').off('click').on('click',function(){
var carousel_images_slide = $('.carousel_images_slide'); var carousel_images_slide = $('.carousel_images_slide');
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide); var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
if(carousel_images_slide_first_child.length > 0){ 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)); 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); content_size = Math.max(content_size,1);
var li_length = carousel_images_slide.find(">li").length; var li_length = carousel_images_slide.find(">li").length;
if(li_length > content_size){ if(li_length > content_size){
active_slide += content_size; active_slide += content_size;
active_slide = Math.min(active_slide,li_length - 1); active_slide = Math.min(active_slide,li_length - 1);
carousel_images_slide.find(">li").css("display","none"); carousel_images_slide.find(">li").css("display","none");
for(var i = active_slide; i < active_slide + content_size;i++){ for(var i = active_slide; i < active_slide + content_size;i++){
carousel_images_slide.find(">li").eq(i).css("display","block"); carousel_images_slide.find(">li").eq(i).css("display","block");
} }
} }
} }
}) })
$(".carousel_img_item img").off("click").on("click",function(){ $(".carousel_img_item img").off("click").on("click",function(){
$(".carousel_images .cycle-slideshow").cycle($(this).index(".carousel_img_item img")); $(".carousel_images .cycle-slideshow").cycle($(this).index(".carousel_img_item img"));
}) })
$(document).ready(function(){ $(document).ready(function(){
$(".carousel_images .cycle-slideshow").cycle('pause'); $(".carousel_images .cycle-slideshow").cycle('pause');
var carousel_image_block_width = $('.carousel_images').width(); var carousel_image_block_width = $('.carousel_images').width();
var heights = $(".event_carousel_slide").map(function(i,v){ var heights = $(".event_carousel_slide").map(function(i,v){
return $(v).height() * carousel_image_block_width / $(v).width(); return $(v).height() * carousel_image_block_width / $(v).width();
}) })
var max_height = Math.max.apply(null,heights); var max_height = Math.max.apply(null,heights);
$(".event_carousel_slide").each(function(i,v){ $(".event_carousel_slide").each(function(i,v){
$(v).height(max_height); $(v).height(max_height);
}) })
$(".carousel_images .cycle-slideshow").cycle('resume'); $(".carousel_images .cycle-slideshow").cycle('resume');
$('.carousel_images .resume-slide').addClass('active'); $('.carousel_images .resume-slide').addClass('active');
$('.cycle-slideshow').on('cycle-after',function(){ $('.cycle-slideshow').on('cycle-after',function(){
$(".active_slide").text($('.event_carousel_slide.cycle-slide-active').index()); $(".active_slide").text($('.event_carousel_slide.cycle-slide-active').index());
}) })
}) })
$(window).on("load",function(){ $(window).on("load",function(){
$(".carousel_images .cycle-slideshow").cycle('pause'); $(".carousel_images .cycle-slideshow").cycle('pause');
var carousel_image_block_width = $('.carousel_images').width(); var carousel_image_block_width = $('.carousel_images').width();
var heights = $(".event_carousel_slide").map(function(i,v){ var heights = $(".event_carousel_slide").map(function(i,v){
return $(v).height() * carousel_image_block_width / $(v).width(); return $(v).height() * carousel_image_block_width / $(v).width();
}) })
var max_height = Math.max.apply(null,heights); var max_height = Math.max.apply(null,heights);
$(".event_carousel_slide").each(function(i,v){ $(".event_carousel_slide").each(function(i,v){
$(v).height(max_height); $(v).height(max_height);
}) })
$(".carousel_images .cycle-slideshow").cycle('resume'); $(".carousel_images .cycle-slideshow").cycle('resume');
}) })
$(window).resize(function(){ $(window).resize(function(){
var carousel_images_slide = $('.carousel_images_slide'); var carousel_images_slide = $('.carousel_images_slide');
var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide); var carousel_images_slide_first_child = carousel_images_slide.find(">li").eq(active_slide);
if(carousel_images_slide_first_child.length > 0){ 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)); 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); content_size = Math.max(content_size,1);
carousel_images_slide.find(">li").css("display","none"); carousel_images_slide.find(">li").css("display","none");
var active_count = carousel_images_slide.find(">li").length - active_slide; var active_count = carousel_images_slide.find(">li").length - active_slide;
if(active_count < content_size){ if(active_count < content_size){
active_slide -= (content_size - active_count); active_slide -= (content_size - active_count);
} }
active_slide = Math.max(active_slide,0); active_slide = Math.max(active_slide,0);
console.log(content_size) console.log(content_size)
for(var i = active_slide; i < active_slide + content_size;i++){ for(var i = active_slide; i < active_slide + content_size;i++){
carousel_images_slide.find(">li").eq(i).css("display","block"); carousel_images_slide.find(">li").eq(i).css("display","block");
} }
} }
var carousel_image_block_width = $('.carousel_images').width(); var carousel_image_block_width = $('.carousel_images').width();
$(".event_carousel_slide").css("height",''); $(".event_carousel_slide").css("height",'');
var heights = $(".event_carousel_slide").map(function(i,v){ var heights = $(".event_carousel_slide").map(function(i,v){
return $(v).height() * carousel_image_block_width / $(v).width(); return $(v).height() * carousel_image_block_width / $(v).width();
}) })
var max_height = Math.max.apply(null,heights); var max_height = Math.max.apply(null,heights);
$(".event_carousel_slide").each(function(i,v){ $(".event_carousel_slide").each(function(i,v){
$(v).height(max_height); $(v).height(max_height);
}) })
}) })
}(jQuery)); }(jQuery));
</script> </script>

View File

@ -1,15 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title><%= render_site_title %></title> <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 "//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 "event_news/bootstrap/bootstrap.min.css"%>
<%= stylesheet_link_tag "template/template"%> <%= stylesheet_link_tag "template/template"%>
<%= javascript_include_tag "jquery.min"%> <%= javascript_include_tag "jquery.min"%>
<%= javascript_include_tag "bootstrap.min"%> <%= javascript_include_tag "bootstrap.min"%>
</head> </head>
<body> <body>
<% @target_action = "show_widget" %> <% @target_action = "show_widget" %>
<%=render_view_for_event_news((!params[:layout_type].blank? ? params[:layout_type] : 'event_news_index1'))%> <%=render_view_for_event_news((!params[:layout_type].blank? ? params[:layout_type] : 'event_news_index1'))%>
</body> </body>
</html> </html>

View File

@ -1,16 +1,16 @@
xml.instruct! :xml, :version => "1.0" xml.instruct! :xml, :version => "1.0"
xml.rss :version => "2.0" do xml.rss :version => "2.0" do
xml.channel do xml.channel do
xml.title @bf.title xml.title @bf.title
xml.link "/xhr/event_news/rssfeed/#{params[:uid]}.rss" xml.link "/xhr/event_news/rssfeed/#{params[:uid]}.rss"
for e in @event_news for e in @event_news
xml.item do xml.item do
xml.title e.title xml.title e.title
xml.description e.subtitle xml.description e.subtitle
xml.pubDate e.created_at.to_s(:rfc822) xml.pubDate e.created_at.to_s(:rfc822)
xml.link page_for_event_news(e) xml.link page_for_event_news(e)
end end
end end
end end
end end

View File

@ -1,18 +1,18 @@
#!/usr/bin/env ruby #!/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. # 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_ROOT = File.expand_path('../..', __FILE__)
ENGINE_PATH = File.expand_path('../../lib/announcement/engine', __FILE__) ENGINE_PATH = File.expand_path('../../lib/announcement/engine', __FILE__)
# Set up gems listed in the Gemfile. # Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
# require 'rails/all' # require 'rails/all'
# require 'rails/engine/commands' # require 'rails/engine/commands'
require "action_controller/railtie" require "action_controller/railtie"
require "action_mailer/railtie" require "action_mailer/railtie"
require "sprockets/railtie" require "sprockets/railtie"
require "rails/test_unit/railtie" require "rails/test_unit/railtie"
require 'rails/engine/commands' require 'rails/engine/commands'
require "mongoid/railtie" require "mongoid/railtie"

View File

@ -1,9 +1,9 @@
require 'rufus-scheduler' require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new scheduler = Rufus::Scheduler.new
#return if defined?(Rails::Console) || Rails.env.test? || File.split($0).last == 'rake' #return if defined?(Rails::Console) || Rails.env.test? || File.split($0).last == 'rake'
scheduler.cron '43 2 * * *' do scheduler.cron '43 2 * * *' do
system('bundle exec rake event_news:remove_preview_event_news') system('bundle exec rake event_news:remove_preview_event_news')
end end

View File

@ -1,178 +1,183 @@
en: en:
module_name: module_name:
event_news: Event News event_news: Event News
event_news: event_news:
title: Title event_date_setting: "Event date setting"
all_day: All Day event_date_use_default_setting: "Event date use default setting"
show_today_data_first: Show today data first including_day_of_the_week: "Including day of the week"
custom_fields_title: Custom Fields Title including_time: "Including time"
custom_carousel_image_width_hint: "If blank, width will be default value." hour_clock_24: "24 hour clock"
carousel_image_width: Carousel Image Width title: Title
default_carousel_image_width: Default Carousel Image Width all_day: All Day
place: Place show_today_data_first: Show today data first
cover_image_display_setting: Cover Image display setting custom_fields_title: Custom Fields Title
full_width: Full width custom_carousel_image_width_hint: "If blank, width will be default value."
up_left_corner: Up-left corner carousel_image_width: Carousel Image Width
up_right_corner: Up-right corner default_carousel_image_width: Default Carousel Image Width
all_tabs_setting: '"All" tab setting' place: Place
the_same_as_data_count: The same as data count cover_image_display_setting: Cover Image display setting
display_all_in_other_tabs: Display all contents in other tabs full_width: Full width
read_more_position_options: '"read more" button position' up_left_corner: Up-left corner
default: Default up_right_corner: Up-right corner
upper_left: Upper left all_tabs_setting: '"All" tab setting'
lower_left: Lower left the_same_as_data_count: The same as data count
upper_right: Upper right display_all_in_other_tabs: Display all contents in other tabs
lower_right: Lower right read_more_position_options: '"read more" button position'
tabs_options: Tabs options default: Default
not_enable_tabs: Not enable tabs upper_left: Upper left
enable_tabs_with_categories_include_all: Enable tabs with categories(include all) lower_left: Lower left
enable_tabs_with_categories: Enable tabs with categories upper_right: Upper right
notes: Notes lower_right: Lower right
speaker: Speaker tabs_options: Tabs options
host: Host not_enable_tabs: Not enable tabs
event_date: Event Date enable_tabs_with_categories_include_all: Enable tabs with categories(include all)
event_end_date: Event End Date enable_tabs_with_categories: Enable tabs with categories
start_date: Start date notes: Notes
end_date: End date speaker: Speaker
add_to_calendar: Add to calendar host: Host
blank_to_set: (blank to use event news setting) event_date: Event Date
stime: start time event_end_date: Event End Date
etime: end time start_date: Start date
select_prompt: --select category-- end_date: End date
all: All add_to_calendar: Add to calendar
keywords: Keywords blank_to_set: (blank to use event news setting)
enable_search: Enable search feature stime: start time
'yes': 'Yes' etime: end time
'no': 'No' select_prompt: --select category--
image: Cover Image all: All
carousel_image: Carousel Image keywords: Keywords
carousel_image_title: Carousel Image(display at the bottom of show page) enable_search: Enable search feature
picture_showing_size: Picture Showing Size 'yes': 'Yes'
orignal_size: Original Size 'no': 'No'
small_size: Small Size image: Cover Image
medium_size: Medium Size carousel_image: Carousel Image
showing_back_and_next: Show back and next carousel_image_title: Carousel Image(display at the bottom of show page)
not_show: Not show picture_showing_size: Picture Showing Size
show_top: Show at top orignal_size: Original Size
show_bottom: Show at bottom small_size: Small Size
prev: previous medium_size: Medium Size
next: next showing_back_and_next: Show back and next
table: not_show: Not show
title : Title show_top: Show at top
date : Date show_bottom: Show at bottom
status : Status prev: previous
sub_title: Sub Title next: next
category: Category table:
author: Author title : Title
link: Link date : Date
file: File status : Status
view_count: View Count sub_title: Sub Title
department: Department category: Category
add_new: Add New author: Author
export_to_excel: Export to Excel link: Link
export_all_anns: Export all Event News file: File
import_from_excel: Import from Excel view_count: View Count
download_example_sheet_here: Download example sheet here department: Department
please_create_tags_cats: Please create all the tags and categories before hand. Only excel file is allowed add_new: Add New
create_atleast_one_cat: Please create atleast one category before importing. export_to_excel: Export to Excel
import_from_wp_xml: Import from WordPress XML export_all_anns: Export all Event News
click_on_submit: Click on Submit to save the changes import_from_excel: Import from Excel
approvers_list: Approvers List download_example_sheet_here: Download example sheet here
click_set_sub_manager: Click here to set Sub Managers for this module please_create_tags_cats: Please create all the tags and categories before hand. Only excel file is allowed
approver: Approver create_atleast_one_cat: Please create atleast one category before importing.
top_limit: Top Limit import_from_wp_xml: Import from WordPress XML
for_unlimited: Put 0 for unlimited click_on_submit: Click on Submit to save the changes
feed_name: Feed Name approvers_list: Approvers List
rssfeed: RSS Feed Link click_set_sub_manager: Click here to set Sub Managers for this module
jsonfeed: JSON Feed Link approver: Approver
feed_list: Feed List top_limit: Top Limit
approve: Approve for_unlimited: Put 0 for unlimited
all_articles: All Articles feed_name: Feed Name
settings: Settings rssfeed: RSS Feed Link
import: Import / Export jsonfeed: JSON Feed Link
event_news_module: Event News feed_list: Feed List
approval_setting: Approval Setting approve: Approve
approve_event_news_fail: Approval Fail all_articles: All Articles
approve_event_news_success: Approve Successfully settings: Settings
approval_waiting: Approval import: Import / Export
submitted_new_event_news: "%{poster} submitted a new event news waiting for your approval." event_news_module: Event News
click_here_to_see: Please click the link below to view the event news. approval_setting: Approval Setting
rejected_annoucement: has rejected your event news, because approve_event_news_fail: Approval Fail
updated_annoucement: "%{poster} updated the rejected event news." approve_event_news_success: Approve Successfully
event_news_subject: New event news waiting for approval approval_waiting: Approval
approval_site: Site submitted_new_event_news: "%{poster} submitted a new event news waiting for your approval."
approval_mail_hi: Hello %{name}, click_here_to_see: Please click the link below to view the event news.
approval_event_news_title: Event News Title rejected_annoucement: has rejected your event news, because
event_news: Event News updated_annoucement: "%{poster} updated the rejected event news."
categories: Categories event_news_subject: New event news waiting for approval
create_event_news_success: Create Bulletin Successfully approval_site: Site
create_event_news_category_success: Create Category Successfully approval_mail_hi: Hello %{name},
date: Event News Date approval_event_news_title: Event News Title
default_widget: event_news: Event News
event_news_category_with_title: Bulletin Category with Title categories: Categories
postdate: Post Date create_event_news_success: Create Bulletin Successfully
subtitle: Subtitle create_event_news_category_success: Create Category Successfully
title: Title date: Event News Date
editing_event_news: Edit event news default_widget:
editing_event_news_category: Edit Category event_news_category_with_title: Bulletin Category with Title
file: Attachment postdate: Post Date
file_description: File Description subtitle: Subtitle
file_name: File Name title: Title
frontend: editing_event_news: Edit event news
event_news: Event News front-end editing_event_news_category: Edit Category
search_result: Search result file: Attachment
link_name: Link Name file_description: File Description
new_event_news_category: New Bulletin Category file_name: File Name
picture: Cover Picture frontend:
search: Search event_news: Event News front-end
selected_file: Select File search_result: Search result
update_event_news_category_success: Update Category Successfully link_name: Link Name
url: URL new_event_news_category: New Bulletin Category
widget: picture: Cover Picture
event_news_and_web_links: Differential Nav. search: Search
index: Index selected_file: Select File
search: Search update_event_news_category_success: Update Category Successfully
more_: "More " url: URL
more: More widget:
email_reminder: Email Reminder event_news_and_web_links: Differential Nav.
activate_email_reminder: Activate Email Reminder index: Index
email_sentdate: Email Time search: Search
email_to: Email To more_: "More "
mail_subject: this is an event news reminder from【%{site_title}】 more: More
view_count: View Counts email_reminder: Email Reminder
other_mailaddress: Other Email activate_email_reminder: Activate Email Reminder
other_mailaddress_note: Divide different email accounts with "," email_sentdate: Email Time
mail_hi: Hi email_to: Email To
mail_url_view: This email is the reminder of an event news, please click the link for the details mail_subject: this is an event news reminder from【%{site_title}】
mail_source: Source view_count: View Counts
mail_time: Time other_mailaddress: Other Email
image_upload_size_note: The following recommendations %{image_upload_size} upload size other_mailaddress_note: Divide different email accounts with ","
resend_mail: Re-send Email mail_hi: Hi
is_external_link: Enable External Link mail_url_view: This email is the reminder of an event news, please click the link for the details
external_link: External Link mail_source: Source
external_link_hint: "Make sure URL starts with http://" mail_time: Time
display_subtitle: Display Subtitle in Content Page image_upload_size_note: The following recommendations %{image_upload_size} upload size
display_img: Display Cover Image in Content Page resend_mail: Re-send Email
is_display_edit_only: Only display editable event news is_external_link: Enable External Link
only_manager_can_edit_status: Only manager can edit status of event news external_link: External Link
layout_type: Layout type external_link_hint: "Make sure URL starts with http://"
event_news_setting_for_iframe: Event News settings for iframe display_subtitle: Display Subtitle in Content Page
url_generate: Url Generate display_img: Display Cover Image in Content Page
show_page: Show pagination is_display_edit_only: Only display editable event news
URL: URL only_manager_can_edit_status: Only manager can edit status of event news
copy: Copy layout_type: Layout type
month_name: event_news_setting_for_iframe: Event News settings for iframe
'1': 'January' url_generate: Url Generate
'2': 'February' show_page: Show pagination
'3': 'March' URL: URL
'4': 'April' copy: Copy
'5': 'May' month_name:
'6': 'June' '1': 'January'
'7': 'July' '2': 'February'
'8': 'August' '3': 'March'
'9': 'September' '4': 'April'
'10': 'October' '5': 'May'
'11': 'November' '6': 'June'
'12': 'December' '7': 'July'
calendar_title: "%{month} %{year}" '8': 'August'
ad_banner_location: Ad Banner Location(Need to Upload in Edit Page) '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: module_name:
event_news: 活動公告 event_news: 活動公告
event_news: event_news:
event_date_setting: "事件日期設定"
event_date_use_default_setting: "使用預設的事件日期設定"
including_day_of_the_week: "包含星期幾"
including_time: "包含時間"
hour_clock_24: "24小時制"
title: 講題 title: 講題
all_day: 全天 all_day: 全天
show_today_data_first: 優先顯示當日資料 show_today_data_first: 優先顯示當日資料
@ -135,7 +140,7 @@ zh_tw:
event_news_and_web_links: 分眾頁籤 event_news_and_web_links: 分眾頁籤
index: 索引 index: 索引
search: 搜尋 search: 搜尋
more: 更多+ more: 更多
more_: 更多 more_: 更多
email_reminder: 寄送提醒 email_reminder: 寄送提醒
activate_email_reminder: 開啟寄送提醒 activate_email_reminder: 開啟寄送提醒

View File

@ -1,52 +1,52 @@
Rails.application.routes.draw do Rails.application.routes.draw do
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console') if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
Thread.new do Thread.new do
EventNewsFeedCache.regenerate_all EventNewsFeedCache.regenerate_all
end end
end end
locales = Site.first.in_use_locales rescue I18n.available_locales locales = Site.first.in_use_locales rescue I18n.available_locales
scope "(:locale)", locale: Regexp.new(locales.join("|")) do scope "(:locale)", locale: Regexp.new(locales.join("|")) do
namespace :admin do namespace :admin do
post 'event_news/preview', to: 'event_news#preview' post 'event_news/preview', to: 'event_news#preview'
post 'event_news/createfeed', to: 'event_news#createfeed' post 'event_news/createfeed', to: 'event_news#createfeed'
post 'event_news/importanns', to: 'event_news#importanns' post 'event_news/importanns', to: 'event_news#importanns'
post 'event_news/import_from_xml', to: 'event_news#import_from_xml' 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/excel_format', to: 'event_news#excel_format'
get 'event_news/export_excel', to: 'event_news#export_excel' get 'event_news/export_excel', to: 'event_news#export_excel'
patch 'event_news/updatefeed', to: 'event_news#updatefeed' patch 'event_news/updatefeed', to: 'event_news#updatefeed'
delete 'event_news/deletefeed', to: 'event_news#deletefeed' delete 'event_news/deletefeed', to: 'event_news#deletefeed'
get 'event_news/destroy_preview/:slug_title-:uid', to: 'event_news#destroy_preview' 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' post 'event_news/approve_event_news', to: 'event_news#approve_event_news'
get 'event_news/feed', to: 'event_news#feed' get 'event_news/feed', to: 'event_news#feed'
get 'event_news/feedform', to: 'event_news#feedform' get 'event_news/feedform', to: 'event_news#feedform'
get 'event_news/settings', to: 'event_news#settings' get 'event_news/settings', to: 'event_news#settings'
get 'event_news/import', to: 'event_news#import' get 'event_news/import', to: 'event_news#import'
post 'event_news/createsettings', to: 'event_news#createsettings' post 'event_news/createsettings', to: 'event_news#createsettings'
patch 'event_news/updatesettings', to: 'event_news#updatesettings' patch 'event_news/updatesettings', to: 'event_news#updatesettings'
post 'event_news/import_from_wp', to: 'event_news#import_from_wp' post 'event_news/import_from_wp', to: 'event_news#import_from_wp'
post 'event_news/generate_iframe_url' => 'event_news#generate_iframe_url' post 'event_news/generate_iframe_url' => 'event_news#generate_iframe_url'
resources :event_news do resources :event_news do
collection do collection do
get 'custom_fields_title' get 'custom_fields_title'
post 'update_custom_title' post 'update_custom_title'
end end
end end
end end
resources :event_news do resources :event_news do
collection do collection do
get ':slug_title-:uid', to: 'event_news#show', as: :display get ':slug_title-:uid', to: 'event_news#show', as: :display
end end
end end
get '/xhr/event_news/agenda' => 'event_news#agenda' get '/xhr/event_news/agenda' => 'event_news#agenda'
get "/xhr/event_news/feed/:uid" => "event_news_feeds#feed" get "/xhr/event_news/feed/:uid" => "event_news_feeds#feed"
get "/xhr/event_news/rssfeed/:uid" => "event_news_feeds#rssfeed" get "/xhr/event_news/rssfeed/:uid" => "event_news_feeds#rssfeed"
get "/xhr/event_news/feeds" => "event_news_feeds#feeds" 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/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/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 get '/xhr/event_news/file/:id/*f_name', to: 'event_news#get_file', format: false
end end
end end

View File

@ -1,103 +1,104 @@
# encoding: UTF-8 # encoding: UTF-8
$:.push File.expand_path("../lib", __FILE__) $:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version: # Maintain your gem's version:
require "event_news_mod/version" require "event_news_mod/version"
bundle_update_flag = ARGV[0]=='update' || ARGV[0]=='install' bundle_update_flag = ARGV[0]=='update' || ARGV[0]=='install'
if bundle_update_flag if bundle_update_flag
require File.expand_path("../update_event_news", __FILE__) require File.expand_path("../update_event_news", __FILE__)
env_pwd = ENV['PWD'] env_pwd = ENV['PWD']
app_path = File.expand_path(__dir__) app_path = File.expand_path(__dir__)
template_path = env_pwd + '/app/templates' template_path = env_pwd + '/app/templates'
all_template = Dir.glob(template_path+'/*/') 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 [] 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| all_template.each do |folder|
if !folder.include?('mobile') if !folder.include?('mobile')
info_json_file = "#{folder}modules/event_news/info.json" info_json_file = "#{folder}modules/event_news/info.json"
if File.exist?(info_json_file) 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/.")} Bundler.with_clean_env{system ('cp -f '+ app_path + '/modules/event_news/show.html.erb ' + "#{folder}modules/event_news/.")}
update_event_news_template(folder) update_event_news_template(folder)
begin begin
file_text = File.read(info_json_file) rescue "" file_text = File.read(info_json_file) rescue ""
encode_file_text = file_text.encode("UTF-8", "UTF-8", invalid: :replace, replace: "???") encode_file_text = file_text.encode("UTF-8", "UTF-8", invalid: :replace, replace: "???")
next if (encode_file_text.include?("???") rescue true) next if (encode_file_text.include?("???") rescue true)
info = JSON.parse(encode_file_text) rescue {} info = JSON.parse(encode_file_text) rescue {}
flag = (info.count != 0 rescue false) flag = (info.count != 0 rescue false)
if flag if flag
puts "Checking event_news widgets" puts "Checking event_news widgets"
widget_info = info["widgets"].sort_by{|h| h["filename"].to_i} rescue [] widget_info = info["widgets"].sort_by{|h| h["filename"].to_i} rescue []
update_flag = false 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 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? if !last_index.nil?
idx_regex = /^(\d+[\. \t]*)|[ \t]+$/ idx_regex = /^(\d+[\. \t]*)|[ \t]+$/
default_event_news_widget_info.each do |h| default_event_news_widget_info.each do |h|
name_without_index = h["name"]["zh_tw"].gsub(idx_regex,'') 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) 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 if widget_info_index == -1
update_flag = true update_flag = true
copy_h = h.dup copy_h = h.dup
h.delete("force_cover") h.delete("force_cover")
last_index = last_index + 1 last_index = last_index + 1
copy_h["filename"] = copy_h["filename"].sub(/\d+/){|ff| last_index.to_s} copy_h["filename"] = copy_h["filename"].sub(/\d+/){|ff| last_index.to_s}
copy_h["name"].keys.each do |locale| copy_h["name"].keys.each do |locale|
copy_h["name"][locale] = copy_h["name"][locale].sub(/\d+/){|ff| last_index.to_s} copy_h["name"][locale] = copy_h["name"][locale].sub(/\d+/){|ff| last_index.to_s}
end end
widget_info << copy_h 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]} 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" 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]} puts "fffffffffffffff"
end 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 end
info["widgets"] = widget_info if update_flag
puts "Writing json #{info["widgets"].count} in #{info_json_file}" info["widgets"] = widget_info
begin puts "Writing json #{info["widgets"].count} in #{info_json_file}"
info_json = JSON.pretty_generate(info).gsub(":[",":[\n").gsub(":{",":{\n") begin
rescue info_json = JSON.pretty_generate(info).gsub(":[",":[\n").gsub(":{",":{\n")
info_json = info.to_s.gsub("=>",": \n") rescue
end info_json = info.to_s.gsub("=>",": \n")
File.open(info_json_file,"w+"){|f| f.write(info_json)} end
end File.open(info_json_file,"w+"){|f| f.write(info_json)}
end end
end end
rescue => e end
puts e rescue => e
puts "There has some error when checking event_news widgets" puts e
end puts "There has some error when checking event_news widgets"
else end
if !Dir.exist?(File.dirname(info_json_file)) && Dir.exist?(File.dirname(File.dirname(info_json_file))) else
Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)} if !Dir.exist?(File.dirname(info_json_file)) && Dir.exist?(File.dirname(File.dirname(info_json_file)))
end Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
end end
end end
end end
end
# all_template.each do |folder|
# if !folder.include?('mobile') # all_template.each do |folder|
# moudle_path = "#{folder}modules/universal_table/" # if !folder.include?('mobile')
# begin # moudle_path = "#{folder}modules/universal_table/"
# if Dir.exist?(File.dirname(moudle_path)) # begin
# Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)} # if Dir.exist?(File.dirname(moudle_path))
# end # Bundler.with_clean_env{system ('cp -r '+ app_path + '/modules/ ' + folder)}
# rescue => e # end
# puts "There was some error when updating event_news widget." # rescue => e
# end # puts "There was some error when updating event_news widget."
# end # end
# end # end
end # end
# Describe your gem and declare its dependencies: end
Gem::Specification.new do |s| # Describe your gem and declare its dependencies:
s.name = "event_news_mod" Gem::Specification.new do |s|
s.version = EventNewsMod::VERSION s.name = "event_news_mod"
s.authors = ["RulingDigital"] s.version = EventNewsMod::VERSION
s.email = ["orbit@rulingcom.com"] s.authors = ["RulingDigital"]
s.homepage = "http://www.rulingcom.com" s.email = ["orbit@rulingcom.com"]
s.summary = "EventNews for Orbit" s.homepage = "http://www.rulingcom.com"
s.description = "EventNews for Orbit" s.summary = "EventNews for Orbit"
s.license = "MIT" 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.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 s.add_dependency "rufus-scheduler", "~> 3.6.0"
end

View File

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

View File

@ -1,172 +1,172 @@
require "yaml" require "yaml"
module EventNewsMod module EventNewsMod
class Engine < ::Rails::Engine class Engine < ::Rails::Engine
initializer "event_news" do initializer "event_news" do
begin begin
translate_data = Dir["#{EventNewsMod::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))} translate_data = Dir["#{EventNewsMod::Engine.root}/config/locales/*.yml"] .map{|yaml_file| YAML.load(File.read(yaml_file))}
data = {} data = {}
key1 = {} key1 = {}
key2 = {} key2 = {}
key3 = {} key3 = {}
key4 = {} key4 = {}
key5 = {} key5 = {}
key1_attr = [] key1_attr = []
key2_attr = [] key2_attr = []
key3_attr = [] key3_attr = []
key4_attr = [] key4_attr = []
data_item = {} data_item = {}
key_item1 = {} key_item1 = {}
key_item2 = {} key_item2 = {}
key_item3 = {} key_item3 = {}
value_item1 = {} value_item1 = {}
value_item2 = {} value_item2 = {}
value_item3 = {} value_item3 = {}
value2_item1 = {} value2_item1 = {}
value2_item2 = {} value2_item2 = {}
key1_options = ['small_size','medium_size','orignal_size'] key1_options = ['small_size','medium_size','orignal_size']
key2_options = ['not_enable_tabs','enable_tabs_with_categories_include_all','enable_tabs_with_categories'] 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'] key3_options = ['default','upper_left','lower_left','upper_right','lower_right']
key4_options = ['the_same_as_data_count','display_all_in_other_tabs'] key4_options = ['the_same_as_data_count','display_all_in_other_tabs']
#After fix I18n.load_path, translation can work there #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} 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_options.each_with_index do |k,i|
key1_attr[i] = {} key1_attr[i] = {}
end end
key2_options.each_with_index do |k,i| key2_options.each_with_index do |k,i|
key2_attr[i] = {} key2_attr[i] = {}
end end
key3_options.each_with_index do |k,i| key3_options.each_with_index do |k,i|
key3_attr[i] = {} key3_attr[i] = {}
end end
key4_options.each_with_index do |k,i| key4_options.each_with_index do |k,i|
key4_attr[i] = {} key4_attr[i] = {}
end end
translate_data.each do |t_data| translate_data.each do |t_data|
v = t_data.values v = t_data.values
k = t_data.keys[0] k = t_data.keys[0]
key1[k] = v[0]['event_news']['picture_showing_size'] key1[k] = v[0]['event_news']['picture_showing_size']
key2[k] = v[0]['event_news']['tabs_options'] key2[k] = v[0]['event_news']['tabs_options']
key3[k] = v[0]['event_news']['read_more_position_options'] key3[k] = v[0]['event_news']['read_more_position_options']
key4[k] = v[0]['event_news']['all_tabs_setting'] key4[k] = v[0]['event_news']['all_tabs_setting']
key5[k] = v[0]['event_news']['show_today_data_first'] key5[k] = v[0]['event_news']['show_today_data_first']
key1_options.each_with_index do |kk,i| key1_options.each_with_index do |kk,i|
key1_attr[i][k] = v[0]['event_news'][kk] key1_attr[i][k] = v[0]['event_news'][kk]
end end
key2_options.each_with_index do |kk,i| key2_options.each_with_index do |kk,i|
key2_attr[i][k] = v[0]['event_news'][kk] key2_attr[i][k] = v[0]['event_news'][kk]
end end
key3_options.each_with_index do |kk,i| key3_options.each_with_index do |kk,i|
key3_attr[i][k] = v[0]['event_news'][kk] key3_attr[i][k] = v[0]['event_news'][kk]
end end
key4_options.each_with_index do |kk,i| key4_options.each_with_index do |kk,i|
key4_attr[i][k] = v[0]['event_news'][kk] key4_attr[i][k] = v[0]['event_news'][kk]
end end
key_item1[k] = v[0]['event_news']['showing_back_and_next'] key_item1[k] = v[0]['event_news']['showing_back_and_next']
key_item2[k] = v[0]['event_news']['enable_search'] key_item2[k] = v[0]['event_news']['enable_search']
key_item3[k] = v[0]['event_news']['ad_banner_location'] key_item3[k] = v[0]['event_news']['ad_banner_location']
value_item1[k] = v[0]['event_news']['not_show'] value_item1[k] = v[0]['event_news']['not_show']
value_item2[k] = v[0]['event_news']['show_bottom'] value_item2[k] = v[0]['event_news']['show_bottom']
value_item3[k] = v[0]['event_news']['show_top'] value_item3[k] = v[0]['event_news']['show_top']
value2_item1[k] = v[0]['event_news']['no'] value2_item1[k] = v[0]['event_news']['no']
value2_item2[k] = v[0]['event_news']['yes'] value2_item2[k] = v[0]['event_news']['yes']
end end
data[key1] = key1_attr data[key1] = key1_attr
data[key2] = key2_attr data[key2] = key2_attr
data[key3] = key3_attr data[key3] = key3_attr
data[key4] = key4_attr data[key4] = key4_attr
data[key5] = key5_attr data[key5] = key5_attr
data_item[key_item1] = [value_item1,value_item2,value_item3] data_item[key_item1] = [value_item1,value_item2,value_item3]
data_item[key_item2] = [value2_item1,value2_item2] data_item[key_item2] = [value2_item1,value2_item2]
data_item[key_item3] = [value_item2,value_item3] data_item[key_item3] = [value_item2,value_item3]
if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console') if ENV['worker_num']=='0' && File.basename($0) != 'rake' && !Rails.const_defined?('Console')
require File.expand_path('../../../app/models/event_news_cache', __FILE__) require File.expand_path('../../../app/models/event_news_cache', __FILE__)
if defined?(EventNewsCache) if defined?(EventNewsCache)
EventNewsCache.destroy_all EventNewsCache.destroy_all
end end
require File.expand_path('../../../app/models/event_news_custom_title', __FILE__) require File.expand_path('../../../app/models/event_news_custom_title', __FILE__)
if defined? EventNewsCustomTitle if defined? EventNewsCustomTitle
EventNewsCustomTitle.get_map EventNewsCustomTitle.get_map
end end
end end
rescue => e rescue => e
puts ['error in event_news',e,e.backtrace] puts ['error in event_news',e,e.backtrace]
end end
OrbitApp.registration "event_news", :type => "ModuleApp" do OrbitApp.registration "event_news", :type => "ModuleApp" do
module_label "event_news.event_news" module_label "event_news.event_news"
base_url File.expand_path File.dirname(__FILE__) base_url File.expand_path File.dirname(__FILE__)
widget_methods ["widget","random_event_news_widget", "tag_cloud"] widget_methods ["widget","random_event_news_widget", "tag_cloud"]
widget_settings [{"data_count"=>30}] widget_settings [{"data_count"=>30}]
taggable "EventNews" taggable "EventNews"
categorizable categorizable
authorizable authorizable
frontend_enabled frontend_enabled
feeds_url "/xhr/event_news/feeds" feeds_url "/xhr/event_news/feeds"
data_count 1..30 data_count 1..30
begin begin
show_options data show_options data
show_option_items data_item show_option_items data_item
rescue => e rescue => e
puts ['there_was_no_show_option_method',e] puts ['there_was_no_show_option_method',e]
end end
side_bar do side_bar do
head_label_i18n 'event_news.event_news', icon_class: "icons-megaphone" head_label_i18n 'event_news.event_news', icon_class: "icons-megaphone"
available_for "users" available_for "users"
active_for_controllers (['admin/event_news']) active_for_controllers (['admin/event_news'])
head_link_path "admin_event_news_index_path" head_link_path "admin_event_news_index_path"
context_link 'event_news.all_articles', context_link 'event_news.all_articles',
:link_path=>"admin_event_news_index_path" , :link_path=>"admin_event_news_index_path" ,
:priority=>1, :priority=>1,
:active_for_action=>{'admin/event_news'=>'index'}, :active_for_action=>{'admin/event_news'=>'index'},
:available_for => 'users' :available_for => 'users'
context_link 'new_', context_link 'new_',
:link_path=>"new_admin_event_news_path" , :link_path=>"new_admin_event_news_path" ,
:priority=>2, :priority=>2,
:active_for_action=>{'admin/event_news'=>'new'}, :active_for_action=>{'admin/event_news'=>'new'},
:available_for => 'sub_managers' :available_for => 'sub_managers'
context_link 'categories', context_link 'categories',
:link_path=>"admin_module_app_categories_path" , :link_path=>"admin_module_app_categories_path" ,
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}", :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
:priority=>3, :priority=>3,
:active_for_action=>{'admin/event_news'=>'categories'}, :active_for_action=>{'admin/event_news'=>'categories'},
:active_for_category => 'EventNewsModule', :active_for_category => 'EventNewsModule',
:available_for => 'managers' :available_for => 'managers'
context_link 'tags', context_link 'tags',
:link_path=>"admin_module_app_tags_path" , :link_path=>"admin_module_app_tags_path" ,
:link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}", :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'event_news').id}",
:priority=>4, :priority=>4,
:active_for_action=>{'admin/event_news'=>'tags'}, :active_for_action=>{'admin/event_news'=>'tags'},
:active_for_tag => 'EventNewsModule', :active_for_tag => 'EventNewsModule',
:available_for => 'managers' :available_for => 'managers'
context_link 'event_news.custom_fields_title', context_link 'event_news.custom_fields_title',
:link_path=>"custom_fields_title_admin_event_news_index_path" , :link_path=>"custom_fields_title_admin_event_news_index_path" ,
:priority=>5, :priority=>5,
:active_for_action=>{'admin/event_news'=>'custom_fields_title'}, :active_for_action=>{'admin/event_news'=>'custom_fields_title'},
:available_for => 'managers' :available_for => 'managers'
context_link 'event_news.feed_list', context_link 'event_news.feed_list',
:link_path=>"admin_event_news_feed_path" , :link_path=>"admin_event_news_feed_path" ,
:priority=>6, :priority=>6,
:active_for_action=>{'admin/event_news'=>'feed'}, :active_for_action=>{'admin/event_news'=>'feed'},
:available_for => 'managers' :available_for => 'managers'
context_link 'event_news.import', context_link 'event_news.import',
:link_path=>"admin_event_news_import_path" , :link_path=>"admin_event_news_import_path" ,
:priority=>7, :priority=>7,
:active_for_action=>{'admin/event_news'=>'import'}, :active_for_action=>{'admin/event_news'=>'import'},
:available_for => 'managers' :available_for => 'managers'
context_link 'event_news.settings', context_link 'event_news.settings',
:link_path=>"admin_event_news_settings_path" , :link_path=>"admin_event_news_settings_path" ,
:priority=>8, :priority=>8,
:active_for_action=>{'admin/event_news'=>'settings'}, :active_for_action=>{'admin/event_news'=>'settings'},
:available_for => 'managers' :available_for => 'managers'
end end
end end
# temp = YAML.load_file(File.join(Rails.root,"config","mongoid.yml")) # temp = YAML.load_file(File.join(Rails.root,"config","mongoid.yml"))
# dbsettings = temp["production"]["sessions"]["default"] # dbsettings = temp["production"]["sessions"]["default"]
# s = Moped::Session.new(dbsettings["hosts"]) # s = Moped::Session.new(dbsettings["hosts"])
# s.use dbsettings["database"] # s.use dbsettings["database"]
# s[:bulletins].indexes.create({expirable_created_at: 1},{ expireAfterSeconds: 180 }) # s[:bulletins].indexes.create({expirable_created_at: 1},{ expireAfterSeconds: 180 })
end end
end end
end end

View File

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

View File

@ -1,24 +1,24 @@
module EventNewsModel module EventNewsModel
module Cache module Cache
require 'active_support/concern' require 'active_support/concern'
extend ActiveSupport::Concern extend ActiveSupport::Concern
included do included do
before_save :do_before_save before_save :do_before_save
end end
def do_before_save def do_before_save
if self.class == SubPart if self.class == SubPart
EventNewsCache.where(parent_id:self.id).destroy EventNewsCache.where(parent_id:self.id).destroy
elsif self.class == EventNews || (self.class == Page && self.module == "event_news") elsif self.class == EventNews || (self.class == Page && self.module == "event_news")
if self.class == EventNews if self.class == EventNews
tmp_tag_ids = (Array(self.tag_ids) + Array(self.org_tag_ids)).uniq tmp_tag_ids = (Array(self.tag_ids) + Array(self.org_tag_ids)).uniq
Thread.new do 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| EventNewsCache.where(:uid.in => EventNewsFeed.where(:tag_ids.in => tmp_tag_ids.collect{|v| v.to_s}).pluck(:uid)).each do |cache|
cache.regenerate cache.regenerate
end end
end end
end end
EventNewsCache.all.destroy EventNewsCache.all.destroy
end end
end end
end end
end end

View File

@ -1,8 +1,8 @@
desc 'Remove duplicated EventNews created by preview' desc 'Remove duplicated EventNews created by preview'
namespace :event_news do namespace :event_news do
task :remove_preview_event_news => [:environment] do task :remove_preview_event_news => [:environment] do
event_news = EventNews.where(is_preview: true) event_news = EventNews.where(is_preview: true)
event_news.destroy_all event_news.destroy_all
end end
end end

View File

@ -1,34 +1,34 @@
<div class="w-annc widget-announcement-1"> <div class="w-annc widget-announcement-1">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item"> <li class="w-annc__item">
<div class="w-annc__img-wrap bullseye"> <div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"> <img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div> </div>
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<div class="w-annc__subtitle">{{subtitle}}</div> <div class="w-annc__subtitle">{{subtitle}}</div>
<div class="w-annc__speaker" style="{{speaker-css}}">【{{speaker-head}}】 {{speaker}}</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> <div class="w-annc__host" style="{{host-css}}">【{{host-head}}】 {{host}}</div>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,22 +1,22 @@
<div class="w-annc widget-announcement-10"> <div class="w-annc widget-announcement-10">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<h4 class="w-annc__entry-title col-sm-9"> <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-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,22 +1,22 @@
<div class="w-annc widget-announcement-11"> <div class="w-annc widget-announcement-11">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<h4 class="w-annc__entry-title col-sm-9"> <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-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,27 +1,27 @@
<div class="w-annc widget-announcement-12"> <div class="w-annc widget-announcement-12">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<table class="w-annc__table table"> <table class="w-annc__table table">
<thead> <thead>
<tr> <tr>
<th class="w-annc__th w-annc__th--title">{{title-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> <th class="w-annc__th w-annc__th--date">{{date-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,27 +1,27 @@
<div class="w-annc widget-announcement-13"> <div class="w-annc widget-announcement-13">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<table class="w-annc__table table"> <table class="w-annc__table table">
<thead> <thead>
<tr> <tr>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th> <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--title">{{title-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,29 +1,29 @@
<div class="w-annc widget-announcement-14"> <div class="w-annc widget-announcement-14">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<div class="w-annc__inner row"> <div class="w-annc__inner row">
<div class="w-annc__img-wrap col-xs-4 bullseye"> <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}}"> <img class="w-annc__img" src="{{main_picture}}" alt="{{main_picture_description}}" title="{{main_picture_description}}">
</div> </div>
<ul class="w-annc__list col-xs-8" data-level="0" data-list="event_news"> <ul class="w-annc__list col-xs-8" data-level="0" data-list="event_news">
<li class="w-annc__item"> <li class="w-annc__item">
<div class="w-annc__content row"> <div class="w-annc__content row">
<h4 class="w-annc__entry-title col-xs-9"> <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-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span> <span class="w-annc__status label {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="w-annc__postdate-wrap col-xs-3" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap col-xs-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<div class="w-annc__more-wrap clearfix"> <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> <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> </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 widget-announcement-4 w-annc widget-announcement-15" style="position:relative;">
<div class="w-annc__more-wrap clearfix"> <div class="w-annc__more-wrap clearfix">
<h2 class="w-annc__widget-title"> <h2 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h2> </h2>
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a> <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 style="position: absolute;top: 50%;bottom: 50%;width:100%;"> <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-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> <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> </div>
<ul class="w-annc__list row" data-level="0" data-list="event_news"> <ul class="w-annc__list row" data-level="0" data-list="event_news">
<li class="w-annc__item col-md-4"> <li class="w-annc__item col-md-4">
<div class="w-annc__img-wrap bullseye"> <div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"> <img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div> </div>
<div class="w-annc__content-wrap"> <div class="w-annc__content-wrap">
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span> <span class="w-annc__status label {{status-class}}">{{status}}</span>
</span> </span>
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<p class="w-annc__subtitle">{{subtitle}}</p> <p class="w-annc__subtitle">{{subtitle}}</p>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script> <script>
function combineul_{{subpart-id}}(){ function combineul_{{subpart-id}}(){
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent(); var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
parents.each(function(i,v){ parents.each(function(i,v){
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++) 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()); $(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; var ullength = $(v).find('ul.w-annc__list').length;
for(var i = 1;i < ullength;i++) for(var i = 1;i < ullength;i++)
$(v).find('ul.w-annc__list').eq(-1).remove(); $(v).find('ul.w-annc__list').eq(-1).remove();
}) })
}; };
var num; var num;
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length; var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
function reorganize_{{subpart-id}}(num){ function reorganize_{{subpart-id}}(num){
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').toArray(); var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').toArray();
var currentul = uls.findIndex(function(v){ var currentul = uls.findIndex(function(v){
return $(v).hasClass("active") && !$(v).hasClass("hidden_item"); return $(v).hasClass("active") && !$(v).hasClass("hidden_item");
}) })
if(currentul == -1) if(currentul == -1)
currentul = 0; currentul = 0;
var li_active_idx = 0; var li_active_idx = 0;
if(currentul != 0) if(currentul != 0)
li_active_idx = $(uls[currentul]).find("li.w-annc__item").eq(0).index("li.w-annc__item"); li_active_idx = $(uls[currentul]).find("li.w-annc__item").eq(0).index("li.w-annc__item");
combineul_{{subpart-id}}(); combineul_{{subpart-id}}();
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent(); var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
parents.each(function(i,v){ parents.each(function(i,v){
var lilength = $(v).find('li.w-annc__item').length; var lilength = $(v).find('li.w-annc__item').length;
var ul_length = Math.ceil(lilength/num); var ul_length = Math.ceil(lilength/num);
for(var ii=1;ii< ul_length;ii++){ for(var ii=1;ii< ul_length;ii++){
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone(); var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
clone_ul.empty(); clone_ul.empty();
clone_ul.removeClass("active"); clone_ul.removeClass("active");
clone_ul.css("display",""); clone_ul.css("display","");
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML")); $(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
var lihtml=""; var lihtml="";
if(ii != (ul_length-1)){ if(ii != (ul_length-1)){
for(var j=0;j<num;j++){ for(var j=0;j<num;j++){
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML"); lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
}; };
}else{ }else{
for(var j=0;j< lilength - num *(ul_length-1) ;j++){ for(var j=0;j< lilength - num *(ul_length-1) ;j++){
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML"); lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
}; };
}; };
$(v).find('ul.w-annc__list').eq(-1).html(lihtml); $(v).find('ul.w-annc__list').eq(-1).html(lihtml);
} }
if(ul_length != 1 ) if(ul_length != 1 )
for(var i=0;i< lilength -num ; i++) for(var i=0;i< lilength -num ; i++)
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove(); $(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("display","none");
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('padding','0 1.125em'); $('[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}}\"] 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('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left'); $('[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"); 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.addClass("active");
active_ul.removeClass("hidden_item"); active_ul.removeClass("hidden_item");
active_ul.css("display",""); active_ul.css("display","");
}; };
$(window).resize(function(){ $(window).resize(function(){
if($(window).width()>1024){ if($(window).width()>1024){
reorganize_{{subpart-id}}(3); reorganize_{{subpart-id}}(3);
num=3; num=3;
}else if($(window).width()>576){ }else if($(window).width()>576){
reorganize_{{subpart-id}}(2); reorganize_{{subpart-id}}(2);
num=2; num=2;
}else{ }else{
reorganize_{{subpart-id}}(1); reorganize_{{subpart-id}}(1);
num=1; num=1;
} }
}) })
$(document).ready(function(){ $(document).ready(function(){
if($(window).width()>1024){ if($(window).width()>1024){
reorganize_{{subpart-id}}(3); reorganize_{{subpart-id}}(3);
num=3; num=3;
}else if($(window).width()>576){ }else if($(window).width()>576){
reorganize_{{subpart-id}}(2); reorganize_{{subpart-id}}(2);
num=2; num=2;
}else{ }else{
reorganize_{{subpart-id}}(1); reorganize_{{subpart-id}}(1);
num=1; num=1;
} }
var flag=false; var flag=false;
$('.btn-left').click(function(){ $('.btn-left').click(function(){
if(!flag){ if(!flag){
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray(); var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
var ul_length = uls.length; var ul_length = uls.length;
var currentul = uls.findIndex(function(v){ var currentul = uls.findIndex(function(v){
return $(v).hasClass("active"); return $(v).hasClass("active");
}) })
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none'); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
if(currentul - 1 < 0) if(currentul - 1 < 0)
currentul += ul_length; currentul += ul_length;
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active"); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
var active_item = $(uls[currentul-1]); var active_item = $(uls[currentul-1]);
active_item.addClass("active"); active_item.addClass("active");
active_item.find("li").css("display","block"); active_item.find("li").css("display","block");
flag=true; 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;}); $('[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(){ $('.btn-right').click(function(){
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length; var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
if(!flag){ if(!flag){
var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray(); var uls = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').toArray();
var ul_length = uls.length; var ul_length = uls.length;
var currentul = uls.findIndex(function(v){ var currentul = uls.findIndex(function(v){
return $(v).hasClass("active"); return $(v).hasClass("active");
}) })
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none'); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').css('display','none');
if(currentul + 1 > ul_length - 1) if(currentul + 1 > ul_length - 1)
currentul -= ul_length; currentul -= ul_length;
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active"); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list:not(.hidden_item)').removeClass("active");
var active_item = $(uls[currentul+1]); var active_item = $(uls[currentul+1]);
active_item.addClass("active"); active_item.addClass("active");
active_item.find("li").css("display","block"); active_item.find("li").css("display","block");
flag=true; 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;}); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list.active').eq(0).effect("slide", { direction: "left", mode: 'show', duration: 500},function(){flag=false;});
}; };
}); });
}); });
</script> </script>

View File

@ -1,32 +1,32 @@
<div class="w-annc widget-announcement-13"> <div class="w-annc widget-announcement-13">
<table class="w-annc__table table"> <table class="w-annc__table table">
<thead> <thead>
<tr> <tr>
<th class="w-annc__th w-annc__th--date">{{event_date-head}}</th> <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--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">{{title-head}}</th>
<th class="w-annc__th w-annc__th--title">{{subtitle-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">{{host-head}}</th>
<th class="w-annc__th w-annc__th--title">{{notes-head}}</th> <th class="w-annc__th w-annc__th--title">{{notes-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="w-annc__speaker">{{speaker}}</td> <td class="w-annc__speaker">{{speaker}}</td>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="w-annc_subtitle">{{subtitle}}</td> <td class="w-annc_subtitle">{{subtitle}}</td>
<td class="w-annc__host">{{host}}</td> <td class="w-annc__host">{{host}}</td>
<td class="w-annc__notes">{{notes}}</td> <td class="w-annc__notes">{{notes}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -3,30 +3,22 @@
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<table class="w-annc__table table"> <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"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate">{{postdate}}</td>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">【{{title-head}}】{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title-head}}{{title}}</a>
</td> </td>
<td class="w-annc__speaker">【{{speaker-head}}】{{speaker}}</td> <td style="{{speaker-css}}" class="w-annc__speaker">{{speaker-head}}{{speaker}}</td>
<td class="w-annc__host">{{host}}</td> <td style="{{host-css}}" class="w-annc__host">{{host-head}}{{host}}</td>
<td class="w-annc__subtitle">{{subtitle}}</td> <td style="{{place-css}}" class="w-annc__host">{{place-head}}{{place}}</td>
<td class="w-annc__notes">【{{notes-head}}】{{notes}}</td> <td style="{{event-time-css}}" class="w-annc__host">{{event_date-head}}{{event-time-formated}}</td>
</tr> <td class="w-annc__subtitle">{{subtitle}}</td>
<td style="{{notes-css}}" class="w-annc__notes">{{notes-head}}{{notes}}</td>
</tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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 widget-calendar-2 widget-event-news-calendar-2" data-module="event_news">
<div class="w-calendar-title {{widget_title_class}}"> <div class="w-calendar-title {{widget_title_class}}">
<span>{{calendar_title}}</span> <span>{{calendar_title}}</span>
<span>{{widget_title}}</span> <span>{{widget_title}}</span>
</div> </div>
<div class='month_template'> <div class='month_template'>
<h4 class="widget-title "> <h4 class="widget-title ">
<span class="text"><span style="display: none;">placeholder</span></span> <span class="text"><span style="display: none;">placeholder</span></span>
<i class="fa fa-circle-o-notch fa-spin fa-fw loading hide"></i> <i class="fa fa-circle-o-notch fa-spin fa-fw loading hide"></i>
</h4> </h4>
<div class="w-calendar-nav"> <div class="w-calendar-nav">
<a href="#" class="w-calendar-nav-prev"> <a href="#" class="w-calendar-nav-prev">
<i class="fa fa-chevron-left"></i> <i class="fa fa-chevron-left"></i>
<span class="w-calendar-nav-prev-text hide">Prev</span> <span class="w-calendar-nav-prev-text hide">Prev</span>
</a> </a>
<a href="#" class="w-calendar-nav-next"> <a href="#" class="w-calendar-nav-next">
<i class="fa fa-chevron-right"></i> <i class="fa fa-chevron-right"></i>
<span class="w-calendar-nav-next-text hide">Next</span> <span class="w-calendar-nav-next-text hide">Next</span>
</a> </a>
</div> </div>
<table class="table table-condensed w-calendar-table"> <table class="table table-condensed w-calendar-table">
<thead> <thead>
<tr> <tr>
<th>Sun</th> <th>Sun</th>
<th>Mon</th> <th>Mon</th>
<th>Tue</th> <th>Tue</th>
<th>Wed</th> <th>Wed</th>
<th>Thu</th> <th>Thu</th>
<th>Fri</th> <th>Fri</th>
<th>Sat</th> <th>Sat</th>
</tr> </tr>
</thead> </thead>
<tbody></tbody> <tbody></tbody>
</table> </table>
</div> </div>
<div class="calendar-events" style="display: none;"> <div class="calendar-events" style="display: none;">
<div class="event"> <div class="event">
<div class="event-header"> <div class="event-header">
<div class="date"> <div class="date">
<div class="day"></div> <div class="day"></div>
<div class="month"></div> <div class="month"></div>
</div> </div>
<div class="event-title"> <div class="event-title">
<div class="event-inner-title"></div> <div class="event-inner-title"></div>
<div class="duration"></div> <div class="duration"></div>
</div> </div>
</div> </div>
<div class="event-wraper"> <div class="event-wraper">
<div class="event-containers"> <div class="event-containers">
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<%= stylesheet_link_tag "event_news_calendar_widget2" %> <%= stylesheet_link_tag "event_news_calendar_widget2" %>
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
if(document.getElementById("event-news-calendar-widget_module2") == null){ if(document.getElementById("event-news-calendar-widget_module2") == null){
var tag = document.createElement('script'); var tag = document.createElement('script');
tag.setAttribute("id", "event-news-calendar-widget_module2"); tag.setAttribute("id", "event-news-calendar-widget_module2");
tag.src = "<%= asset_path('event_news_calendar_widget2.js') %>"; tag.src = "<%= asset_path('event_news_calendar_widget2.js') %>";
tag.onload = function(){ tag.onload = function(){
$("div.widget-calendar-2[data-module=event_news]").each(function(index){ $("div.widget-calendar-2[data-module=event_news]").each(function(index){
var calendar = $(this), var calendar = $(this),
cmi = new EventCalendarModuleMonth2(new Date(), calendar,calendar.data("subpart-id"),"{{more_url}}",false); cmi = new EventCalendarModuleMonth2(new Date(), calendar,calendar.data("subpart-id"),"{{more_url}}",false);
cmi.currentMonth(); cmi.currentMonth();
calendar.find("div.w-calendar-nav a").on("click",function(){ calendar.find("div.w-calendar-nav a").on("click",function(){
var el = $(this); var el = $(this);
if(el.hasClass("w-calendar-nav-prev")){ if(el.hasClass("w-calendar-nav-prev")){
cmi.prevMonth(); cmi.prevMonth();
}else if(el.hasClass("w-calendar-nav-next")){ }else if(el.hasClass("w-calendar-nav-next")){
cmi.nextMonth(); cmi.nextMonth();
} }
return false; return false;
}) })
}) })
} }
var head = document.getElementsByTagName("head"); var head = document.getElementsByTagName("head");
head[0].appendChild(tag); head[0].appendChild(tag);
} }
}) })
</script> </script>

View File

@ -1,34 +1,34 @@
<div class="w-annc widget-announcement-2"> <div class="w-annc widget-announcement-2">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<div class="w-annc__img-wrap col-sm-4 bullseye"> <div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"> <img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div> </div>
<div class="w-annc__content-wrap col-sm-8"> <div class="w-annc__content-wrap col-sm-8">
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<p class="w-annc__subtitle">{{subtitle}}</p> <p class="w-annc__subtitle">{{subtitle}}</p>
</div> </div>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,34 +1,34 @@
<div class="w-annc widget-announcement-3"> <div class="w-annc widget-announcement-3">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<div class="w-annc__content-wrap col-sm-8"> <div class="w-annc__content-wrap col-sm-8">
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<p class="w-annc__subtitle">{{subtitle}}</p> <p class="w-annc__subtitle">{{subtitle}}</p>
</div> </div>
<div class="w-annc__img-wrap col-sm-4 bullseye"> <div class="w-annc__img-wrap col-sm-4 bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"> <img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div> </div>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,108 +1,108 @@
<div class="w-annc widget-announcement-4"> <div class="w-annc widget-announcement-4">
<div class="w-annc__more-wrap clearfix"> <div class="w-annc__more-wrap clearfix">
<h2 class="w-annc__widget-title"> <h2 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h2> </h2>
<a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a> <a class="w-annc__more btn btn-primary pull-right" href="{{more_url}}"><%= (I18n.locale.to_s =="zh_tw") ? "更多最新消息" : "More NEWS" %></a>
</div> </div>
<ul class="w-annc__list row" data-level="0" data-list="event_news"> <ul class="w-annc__list row" data-level="0" data-list="event_news">
<li class="w-annc__item col-md-4"> <li class="w-annc__item col-md-4">
<div class="w-annc__img-wrap bullseye"> <div class="w-annc__img-wrap bullseye">
<img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}"> <img class="w-annc__img" src="{{img_src}}" alt="{{img_description}}" title="{{img_description}}">
</div> </div>
<div class="w-annc__content-wrap"> <div class="w-annc__content-wrap">
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label {{status-class}}">{{status}}</span> <span class="w-annc__status label {{status-class}}">{{status}}</span>
</span> </span>
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<p class="w-annc__subtitle">{{subtitle}}</p> <p class="w-annc__subtitle">{{subtitle}}</p>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<style type="text/css"> <style type="text/css">
[data-subpart-id="{{subpart-id}}"] .bullseye{ [data-subpart-id="{{subpart-id}}"] .bullseye{
overflow: hidden; overflow: hidden;
} }
</style> </style>
<script> <script>
function combineul_{{subpart-id}}(){ function combineul_{{subpart-id}}(){
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent(); var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
parents.each(function(i,v){ parents.each(function(i,v){
for(var i=1;i<$(v).find('ul.w-annc__list').length;i++) 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()); $(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; var ullength = $(v).find('ul.w-annc__list').length;
for(var i = 1;i < ullength;i++) for(var i = 1;i < ullength;i++)
$(v).find('ul.w-annc__list').eq(-1).remove(); $(v).find('ul.w-annc__list').eq(-1).remove();
}) })
}; };
var num; var num;
var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length; var lilength = $('[data-subpart-id=\"{{subpart-id}}\"] li.w-annc__item').length;
function reorganize_{{subpart-id}}(num){ function reorganize_{{subpart-id}}(num){
combineul_{{subpart-id}}(); combineul_{{subpart-id}}();
var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent(); var parents = $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list').parent();
parents.each(function(i,v){ parents.each(function(i,v){
var lilength = $(v).find('li.w-annc__item').length; var lilength = $(v).find('li.w-annc__item').length;
var ul_length = Math.ceil(lilength/num); var ul_length = Math.ceil(lilength/num);
for(var ii=1;ii< ul_length;ii++){ for(var ii=1;ii< ul_length;ii++){
var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone(); var clone_ul = $(v).find('ul.w-annc__list').eq(-1).clone();
clone_ul.empty(); clone_ul.empty();
clone_ul.removeClass("active"); clone_ul.removeClass("active");
clone_ul.css("display",""); clone_ul.css("display","");
$(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML")); $(v).find('ul.w-annc__list').eq(-1).after(clone_ul.prop("outerHTML"));
var lihtml=""; var lihtml="";
if(ii != (ul_length-1)){ if(ii != (ul_length-1)){
for(var j=0;j<num;j++){ for(var j=0;j<num;j++){
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML"); lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
}; };
}else{ }else{
for(var j=0;j< lilength - num *(ul_length-1) ;j++){ for(var j=0;j< lilength - num *(ul_length-1) ;j++){
lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML"); lihtml += $(v).find('li.w-annc__item').eq(ii*num+j).prop("outerHTML");
}; };
}; };
$(v).find('ul.w-annc__list').eq(-1).html(lihtml); $(v).find('ul.w-annc__list').eq(-1).html(lihtml);
} }
if(ul_length != 1 ) if(ul_length != 1 )
for(var i=0;i< lilength -num ; i++) for(var i=0;i< lilength -num ; i++)
$(v).find('ul.w-annc__list').eq(0).find("li.w-annc__item").eq(num).remove(); $(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('width','calc('+100/num+'% - '+20/16+'em)'); //20px=>li的margin
$('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left'); $('[data-subpart-id=\"{{subpart-id}}\"] ul.w-annc__list >li').css('float','left');
}; };
$(window).resize(function(){ $(window).resize(function(){
if($(window).width()>1024){ if($(window).width()>1024){
reorganize_{{subpart-id}}(3); reorganize_{{subpart-id}}(3);
num=3; num=3;
}else if($(window).width()>576){ }else if($(window).width()>576){
reorganize_{{subpart-id}}(2); reorganize_{{subpart-id}}(2);
num=2; num=2;
}else{ }else{
reorganize_{{subpart-id}}(1); reorganize_{{subpart-id}}(1);
num=1; num=1;
} }
}) })
$(document).ready(function(){ $(document).ready(function(){
if($(window).width()>1024){ if($(window).width()>1024){
reorganize_{{subpart-id}}(3); reorganize_{{subpart-id}}(3);
num=3; num=3;
}else if($(window).width()>576){ }else if($(window).width()>576){
reorganize_{{subpart-id}}(2); reorganize_{{subpart-id}}(2);
num=2; num=2;
}else{ }else{
reorganize_{{subpart-id}}(1); reorganize_{{subpart-id}}(1);
num=1; num=1;
} }
}) })
</script> </script>

View File

@ -1,31 +1,31 @@
<div class="w-annc widget-announcement-5"> <div class="w-annc widget-announcement-5">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list row" data-level="0" data-list="event_news"> <ul class="w-annc__list row" data-level="0" data-list="event_news">
<li class="w-annc__item"> <li class="w-annc__item">
<div class="w-annc__content-wrap"> <div class="w-annc__content-wrap">
<div class="w-annc__meta"> <div class="w-annc__meta">
<span class="w-annc__postdate-wrap" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<span class="w-annc__category-wrap"> <span class="w-annc__category-wrap">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
</div> </div>
<h4 class="w-annc__entry-title"> <h4 class="w-annc__entry-title">
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<p class="w-annc__subtitle">{{subtitle}}</p> <p class="w-annc__subtitle">{{subtitle}}</p>
</div> </div>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,26 +1,26 @@
<div class="w-annc widget-announcement-6"> <div class="w-annc widget-announcement-6">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<span class="w-annc__category-wrap col-sm-2"> <span class="w-annc__category-wrap col-sm-2">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
<h4 class="w-annc__entry-title col-sm-8"> <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-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,26 +1,26 @@
<div class="w-annc widget-announcement-7"> <div class="w-annc widget-announcement-7">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<ul class="w-annc__list" data-level="0" data-list="event_news"> <ul class="w-annc__list" data-level="0" data-list="event_news">
<li class="w-annc__item row"> <li class="w-annc__item row">
<span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d"> <span class="w-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="w-annc__postdate">{{postdate}}</span> <span class="w-annc__postdate">{{postdate}}</span>
</span> </span>
<h4 class="w-annc__entry-title col-sm-8"> <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-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="w-annc__category-wrap col-sm-2"> <span class="w-annc__category-wrap col-sm-2">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="w-annc__category">{{category}}</span> <span class="w-annc__category">{{category}}</span>
</span> </span>
</li> </li>
</ul> </ul>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,29 +1,29 @@
<div class="w-annc widget-announcement-8"> <div class="w-annc widget-announcement-8">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<table class="w-annc__table table"> <table class="w-annc__table table">
<thead> <thead>
<tr> <tr>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th> <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--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th> <th class="w-annc__th w-annc__th--date">{{date-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc__category">{{category}}</td> <td class="w-annc__category">{{category}}</td>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,29 +1,29 @@
<div class="w-annc widget-announcement-9"> <div class="w-annc widget-announcement-9">
<h3 class="w-annc__widget-title"> <h3 class="w-annc__widget-title">
<span>{{widget-title}}</span> <span>{{widget-title}}</span>
</h3> </h3>
<table class="w-annc__table table"> <table class="w-annc__table table">
<thead> <thead>
<tr> <tr>
<th class="w-annc__th w-annc__th--date">{{date-head}}</th> <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--title">{{title-head}}</th>
<th class="w-annc__th w-annc__th--category">{{category-head}}</th> <th class="w-annc__th w-annc__th--category">{{category-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="w-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="w-annc_content"> <td class="w-annc_content">
<span class="w-annc__status-wrap" data-list="statuses" data-level="1"> <span class="w-annc__status-wrap" data-list="statuses" data-level="1">
<span class="w-annc__status label status {{status-class}}">{{status}}</span> <span class="w-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="w-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="w-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="w-annc__category">{{category}}</td> <td class="w-annc__category">{{category}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="w-annc__more-wrap clearfix"> <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> <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> </div>

View File

@ -1,25 +1,25 @@
<div class="i-annc index-announcement-1 {{display}}"> <div class="i-annc index-announcement-1 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--category">{{category-head}}</th> <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--title">{{title-head}}</th>
<th class="i-annc__th i-annc__th--date">{{date-head}}</th> <th class="i-annc__th i-annc__th--date">{{date-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__category">{{category}}</td> <td class="i-annc__category">{{category}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td> <td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,22 +1,22 @@
<div class="i-annc index-announcement-10"> <div class="i-annc index-announcement-10">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<ul class="i-annc__list" data-level="0" data-list="event_news"> <ul class="i-annc__list" data-level="0" data-list="event_news">
<li class="i-annc__item row"> <li class="i-annc__item row">
<span class="i-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d"> <span class="i-annc__postdate-wrap col-sm-2" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="i-annc__postdate">{{postdate}}</span> <span class="i-annc__postdate">{{postdate}}</span>
</span> </span>
<h4 class="i-annc__entry-title col-sm-8"> <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-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="i-annc__category-wrap col-sm-2"> <span class="i-annc__category-wrap col-sm-2">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<span class="i-annc__category">{{category}}</span> <span class="i-annc__category">{{category}}</span>
</span> </span>
</li> </li>
</ul>> </ul>>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,18 +1,18 @@
<div class="i-annc index-announcement-11"> <div class="i-annc index-announcement-11">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<ul class="i-annc__list" data-level="0" data-list="event_news"> <ul class="i-annc__list" data-level="0" data-list="event_news">
<li class="i-annc__item row"> <li class="i-annc__item row">
<h4 class="i-annc__entry-title col-sm-9"> <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-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d"> <span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="i-annc__postdate">{{postdate}}</span> <span class="i-annc__postdate">{{postdate}}</span>
</span> </span>
</li> </li>
</ul> </ul>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,18 +1,18 @@
<div class="i-annc index-announcement-12"> <div class="i-annc index-announcement-12">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<ul class="i-annc__list" data-level="0" data-list="event_news"> <ul class="i-annc__list" data-level="0" data-list="event_news">
<li class="i-annc__item row"> <li class="i-annc__item row">
<span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d"> <span class="i-annc__postdate-wrap col-sm-3" date-format="%Y-%m-%d">
<i class="fa fa-calendar-o"></i> <i class="fa fa-calendar-o"></i>
<span class="i-annc__postdate">{{postdate}}</span> <span class="i-annc__postdate">{{postdate}}</span>
</span> </span>
<h4 class="i-annc__entry-title col-sm-9"> <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-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</h4> </h4>
</li> </li>
</ul> </ul>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,23 +1,23 @@
<div class="i-annc index-announcement-13 {{display}}"> <div class="i-annc index-announcement-13 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--title">{{title-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--date">{{date-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,23 +1,23 @@
<div class="i-annc index-announcement-14 {{display}}"> <div class="i-annc index-announcement-14 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--date">{{date-head}}</th> <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">{{title-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,25 +1,25 @@
<div class="i-annc index-announcement-15 {{display}}"> <div class="i-annc index-announcement-15 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--date">{{date-head}}</th> <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">{{title-head}}</th>
<th class="i-annc__th i-annc__th--category">{{view-count-head}}</th> <th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__view-count">{{view_count}}</td> <td class="i-annc__view-count">{{view_count}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,39 +1,39 @@
<div class="i-annc index-announcement-16 {{display}}"> <div class="i-annc index-announcement-16 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--date">{{date-head}}</th> <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">{{title-head}}</th>
<th class="i-annc__th i-annc__th--title">{{link-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> <th class="i-annc__th i-annc__th--title">{{file-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td> <td class="i-annc__postdate" date-format="%Y-%m-%d">{{postdate}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__links"> <td class="i-annc__links">
<ul data-list="event_news_links" data-level="1"> <ul data-list="event_news_links" data-level="1">
<li> <li>
<a class="i-annc__title" href="{{link_url}}">{{link_title}}</a> <a class="i-annc__title" href="{{link_url}}">{{link_title}}</a>
</li> </li>
</ul> </ul>
</td> </td>
<td class="i-annc__files"> <td class="i-annc__files">
<ul data-list="event_news_files" data-level="1"> <ul data-list="event_news_files" data-level="1">
<li> <li>
<a class="i-annc__title" href="{{file_url}}">{{file_title}}</a> <a class="i-annc__title" href="{{file_url}}">{{file_title}}</a>
</li> </li>
</ul> </ul>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,27 +1,27 @@
<div class="i-annc index-announcement-1 {{display}}"> <div class="i-annc index-announcement-1 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--category">{{category-head}}</th> <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--title">{{title-head}}</th>
<th class="i-annc__th i-annc__th--date">{{date-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> <th class="i-annc__th i-annc__th--department">{{department-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__category">{{category}}</td> <td class="i-annc__category">{{category}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></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> <td class="i-annc__department"><span class="i-annc__department-content">{{department}}</span></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,29 +1,29 @@
<div class="i-annc index-announcement-1 {{display}}"> <div class="i-annc index-announcement-1 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--event_date">{{event_date-head}}</th> <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--speaker">{{speaker-head}}</th>
<th class="i-annc__th i-annc__th--title">{{title-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--host">{{host-head}}</th>
<th class="i-annc__th i-annc__th--notes">{{notes-head}}</th> <th class="i-annc__th i-annc__th--notes">{{notes-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></td> <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__speaker">{{speaker}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__host">{{host}}</td> <td class="i-annc__host">{{host}}</td>
<td class="i-annc__notes">{{notes}}</td> <td class="i-annc__notes">{{notes}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,27 +1,27 @@
<div class="i-annc index-announcement-2 {{display}}"> <div class="i-annc index-announcement-2 {{display}}">
<h1 class="i-annc__page-title">{{page-title}}</h1> <h1 class="i-annc__page-title">{{page-title}}</h1>
<table class="i-annc__table table table-striped"> <table class="i-annc__table table table-striped">
<thead> <thead>
<tr> <tr>
<th class="i-annc__th i-annc__th--category">{{category-head}}</th> <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--title">{{title-head}}</th>
<th class="i-annc__th i-annc__th--date">{{date-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> <th class="i-annc__th i-annc__th--category">{{view-count-head}}</th>
</tr> </tr>
</thead> </thead>
<tbody data-level="0" data-list="event_news"> <tbody data-level="0" data-list="event_news">
<tr> <tr>
<td class="i-annc__category">{{category}}</td> <td class="i-annc__category">{{category}}</td>
<td class="i-annc__content"> <td class="i-annc__content">
<span class="i-annc__status-wrap" data-list="statuses" data-level="1"> <span class="i-annc__status-wrap" data-list="statuses" data-level="1">
<span class="i-annc__status label status {{status-class}}">{{status}}</span> <span class="i-annc__status label status {{status-class}}">{{status}}</span>
</span> </span>
<a class="i-annc__title" href="{{link_to_show}}">{{title}}</a> <a class="i-annc__title" href="{{link_to_show}}">{{title}}</a>
</td> </td>
<td class="i-annc__postdate"><span class="i-annc__postdate-content" date-format="%Y-%m-%d">{{postdate}}</span></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> <td class="i-annc__view-count">{{view_count}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

Some files were not shown because too many files have changed in this diff Show More