Compare commits
123
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4de72cd26b | ||
|
|
048f67c6da | ||
|
|
9849b5c7dd | ||
|
|
3999308bb4 | ||
|
|
ee2adf2121 | ||
|
|
363ea53861 | ||
|
|
b7ea756789 | ||
|
|
839743779b | ||
|
|
f8c7e8f17a | ||
|
|
9f779f1f71 | ||
|
|
95310619c0 | ||
|
|
55207da76a | ||
|
|
795d881626 | ||
|
|
4cd455441f | ||
|
|
fea0540ec3 | ||
|
|
44f5a98a69 | ||
|
|
746bcbed96 | ||
|
|
ec6ef5a871 | ||
|
|
8aa1e2dae0 | ||
|
|
dd0d2368c8 | ||
|
|
9c41282fdb | ||
|
|
fac578f251 | ||
|
|
3b4e4e1098 | ||
|
|
8c68c54a57 | ||
|
|
2d8754f0aa | ||
|
|
19633a05d8 | ||
|
|
051adbf167 | ||
|
|
d386307745 | ||
|
|
5c0d16c22e | ||
|
|
93424e1972 | ||
|
|
3c49a6eeae | ||
|
|
f76ead6ea5 | ||
|
|
e8a8e92f5c | ||
|
|
5b60e389ec | ||
|
|
faabedad55 | ||
|
|
d95b050e57 | ||
|
|
afe6972dfa | ||
|
|
ce3842d3ad | ||
|
|
9fbf9e940e | ||
|
|
0f2c13e7ac | ||
|
|
f42d25c46b | ||
|
|
dda603c27c | ||
|
|
ecc3581106 | ||
|
|
e56e91cc93 | ||
|
|
4b7703f4af | ||
|
|
2ec3d77600 | ||
|
|
5e1d6663a1 | ||
|
|
19801eb10f | ||
|
|
4abe4f5c16 | ||
|
|
52356d3316 | ||
|
|
6d4d3ccfd4 | ||
|
|
663bb7776b | ||
|
|
dfcb383e0f | ||
|
|
c4ca7f450a | ||
|
|
e851395f79 | ||
|
|
f72697ae76 | ||
|
|
2040081679 | ||
|
|
03189092d3 | ||
|
|
2d714dfa4b | ||
|
|
64d07a0c95 | ||
|
|
b970103e90 | ||
|
|
141b708392 | ||
|
|
842f072e1a | ||
|
|
9da9284a7f | ||
|
|
88861985c6 | ||
|
|
1a9a4d0112 | ||
|
|
d5dc3ef793 | ||
|
|
b3366b48a1 | ||
|
|
36e7e3d3e8 | ||
|
|
06c2240d34 | ||
|
|
c4e8ed96a9 | ||
|
|
8ad015af7f | ||
|
|
1857ad428c | ||
|
|
134b639465 | ||
|
|
45136f915d | ||
|
|
2c3924d92c | ||
|
|
41b562d3f7 | ||
|
|
4074ac677d | ||
|
|
e1c57c6843 | ||
|
|
915ea066d6 | ||
|
|
e7aa7ea1fa | ||
|
|
1ccfd6e48c | ||
|
|
23516277f3 | ||
|
|
87bc2852b3 | ||
|
|
27b86b078a | ||
|
|
8f393e1079 | ||
|
|
353039dcd0 | ||
|
|
d8dd68b4df | ||
|
|
aa8523c8cf | ||
|
|
69ef8fa747 | ||
|
|
473baa9b95 | ||
|
|
1592aaff89 | ||
|
|
030d994180 | ||
|
|
a88ad35641 | ||
|
|
a63193dc65 | ||
|
|
452bddb587 | ||
|
|
371485e420 | ||
|
|
69b3625861 | ||
|
|
72d1427854 | ||
|
|
079b9145c3 | ||
|
|
3102a46219 | ||
|
|
653a098ab6 | ||
|
|
426edea485 | ||
|
|
2e5b2555c6 | ||
|
|
2593707d8c | ||
|
|
b20955579e | ||
|
|
1ebda22f0e | ||
|
|
c511aeb8de | ||
|
|
26d3a89d30 | ||
|
|
91f80a0952 | ||
|
|
f333fe9e21 | ||
|
|
33f256bd16 | ||
|
|
fde9fd7ffe | ||
|
|
d977b83d06 | ||
|
|
a1eae7543e | ||
|
|
8d9bf62909 | ||
|
|
2f480c31bf | ||
|
|
19d33f78bd | ||
|
|
37c91664d3 | ||
|
|
eb853f773d | ||
|
|
d701d9d6ad | ||
|
|
75eeec737c | ||
|
|
36c3635bbb |
No files matched your search
+3
-1
@@ -14,7 +14,9 @@ public/uploads/**/*
|
||||
solr/data
|
||||
tmp/**/*
|
||||
uploads/**/*
|
||||
|
||||
config/*.god
|
||||
log/*.gz
|
||||
tmp/restart.txt
|
||||
*.swp
|
||||
*.pid
|
||||
*.lck
|
||||
|
||||
@@ -16,7 +16,11 @@ gem 'execjs'
|
||||
gem 'jquery-rails', '2.1.4'
|
||||
gem 'jquery-ui-rails'
|
||||
gem "select2-rails", '3.3.1'
|
||||
gem 'kaminari', :git => 'git://github.com/amatsuda/kaminari.git'
|
||||
gem 'kaminari'
|
||||
gem "acts_as_unvlogable"
|
||||
gem 'youtube_it'
|
||||
gem 'gotcha'
|
||||
|
||||
|
||||
# gem "memcached", "~> 1.4.3"
|
||||
# gem "memcache-client"
|
||||
@@ -37,7 +41,7 @@ gem 'resque-scheduler' # job scheduling
|
||||
gem 'resque-restriction'
|
||||
#gem 'rb-readline'
|
||||
# gem 'ruby-debug19'
|
||||
gem 'rubyzip'
|
||||
gem 'rubyzip','0.9.9'
|
||||
|
||||
gem 'sunspot_mongo'
|
||||
gem 'sunspot_solr'
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -15,6 +15,11 @@ function load_tinymce() {
|
||||
theme_advanced_statusbar_location : "bottom",
|
||||
theme_advanced_resizing : true,
|
||||
|
||||
// Domain Absolute URLs
|
||||
relative_urls : false,
|
||||
remove_script_host : false,
|
||||
document_base_url: window.location.protocol + '//' + window.location.host,
|
||||
|
||||
// Skin options
|
||||
skin : "o2k7",
|
||||
skin_variant : "silver",
|
||||
|
||||
@@ -5,3 +5,4 @@
|
||||
*= require_self
|
||||
*= require social-share-button
|
||||
*/
|
||||
|
||||
+11
-11
@@ -101,8 +101,8 @@ div[data-role="page"] {
|
||||
border: none;
|
||||
z-index: 50;
|
||||
/*background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#545b60), to(#191a1c));*/
|
||||
background-image: -webkit-linear-gradient(top, #5282A6, #133757);
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.8), inset 0 1px 0 rgba(127, 149, 165, 1), 0 -1px 0 rgba(31, 32, 36, 1) inset;
|
||||
background-image: -webkit-linear-gradient(top, #6D35AF, #391C69);
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.8), inset 0 1px 0 #AE73F5, 0 -1px 0 rgba(31, 32, 36, 1) inset;
|
||||
}
|
||||
.header h1.ui-title {
|
||||
margin: 8px 30%;
|
||||
@@ -116,9 +116,9 @@ div[data-role="page"] {
|
||||
margin-left: -15px;
|
||||
font-size: 20px;
|
||||
/*color: #727272;*/
|
||||
color: #7CA6C5;
|
||||
color: #C5A7D3;
|
||||
/*background-color: #252525;*/
|
||||
background-color: #144366;
|
||||
background-color: #38177F;
|
||||
border-radius: 0 0 5px 5px;
|
||||
height: 15px;
|
||||
line-height: 16px;
|
||||
@@ -135,14 +135,14 @@ div[data-role="page"] {
|
||||
background-image: none;
|
||||
}
|
||||
.header .ui-btn-up-a {
|
||||
border: 1px solid #133547;
|
||||
background-color: #0C4C64;
|
||||
border: 1px solid #7220A0;
|
||||
background-color: #9B2DCF;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from( #0D6691 ), to( #0E3A4B ));
|
||||
background-image: -webkit-linear-gradient( #0D6691 , #0E3A4B );
|
||||
background-image: -moz-linear-gradient( #0D6691 , #0E3A4B );
|
||||
background-image: -ms-linear-gradient( #0D6691 , #0E3A4B );
|
||||
background-image: -o-linear-gradient( #0D6691 , #0E3A4B );
|
||||
background-image: linear-gradient( #0D6691 , #0E3A4B );
|
||||
background-image: -webkit-linear-gradient(#9B1DF0, #5F2879);
|
||||
background-image: -moz-linear-gradient(#9B1DF0, #5F2879);
|
||||
background-image: -ms-linear-gradient(#9B1DF0, #5F2879);
|
||||
background-image: -o-linear-gradient(#9B1DF0, #5F2879);
|
||||
background-image: linear-gradient(#9B1DF0, #5F2879);
|
||||
}
|
||||
.header h1 img {
|
||||
height: 30px;
|
||||
@@ -11,23 +11,21 @@ class DefaultWidgetController< OrbitWidgetController
|
||||
end
|
||||
|
||||
def query_for_default_widget
|
||||
|
||||
@ori_class_name = @default_widget["query"].split('.')[0]
|
||||
@ori_query = @default_widget["query"]
|
||||
result = nil
|
||||
result_objects = nil
|
||||
@result = eval(@default_widget["query"])
|
||||
if !params["tag_id"].blank?
|
||||
if params["category_id"].blank? #has tag no cate
|
||||
result = eval("#{@ori_query}.where(:tagged_ids.in => params['tag_id'])")
|
||||
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
|
||||
else #has tag and cate
|
||||
result = eval("#{@ori_query}.where(:#{get_category_field_name}.in=>params['category_id'], :tagged_ids.in => params['tag_id'])")
|
||||
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
|
||||
@result.selector[:tagged_ids] = { "$in" => params['tag_id'] }
|
||||
end
|
||||
elsif params["category_id"].blank? #no tag no cate
|
||||
result = eval(@ori_query)
|
||||
else #no tag has cate
|
||||
result = eval("#{@ori_query}.where(:#{get_category_field_name}.in=>params['category_id'])")
|
||||
|
||||
@result.selector[get_category_field_name] = { "$in" => params['category_id'].collect{|t| BSON::ObjectId(t)}}
|
||||
end
|
||||
result.available_for_lang(I18n.locale).can_display
|
||||
eval("@result.#{@default_widget[:sorting_query]}")
|
||||
end
|
||||
|
||||
def search_result
|
||||
@@ -95,9 +93,9 @@ class DefaultWidgetController< OrbitWidgetController
|
||||
end
|
||||
|
||||
def get_category_field_name
|
||||
@ori_class_name = @ori_class_name.constantize
|
||||
@ori_class_name = @ori_class_name.constantize unless @ori_class_name.is_a? Class
|
||||
@ori_class_name.fields.each_key do |key|
|
||||
return key if key.include?('category_id')
|
||||
return key.to_s if key.include?('category_id')
|
||||
end
|
||||
nil
|
||||
end
|
||||
|
||||
@@ -73,7 +73,7 @@ class FrontController < ApplicationController
|
||||
res << " active" if (current_page.id.eql?(page.id) || current_page.descendant_of?(page))
|
||||
res << "'>"
|
||||
root = "/"
|
||||
res << "<a href='#{(page.class.to_s.eql?('Page') ? root + page.path : page.url)}'><span>#{page.title}</span></a>"
|
||||
res << "<a href='#{(page.class.to_s.eql?('Page') ? root + page.path : page.url)}' target=#{(page.class.to_s.eql?('Page') ? '_self' : '_blank')} ><span>#{page.title}</span></a>"
|
||||
if page.visible_children.size > 0 && current < menu.levels
|
||||
res << "<span class='dot'></span>"
|
||||
res << menu_level(page, current_page, current + 1, menu)
|
||||
|
||||
@@ -9,8 +9,7 @@ module ApplicationHelper
|
||||
|
||||
def delayed_impressionist(item)
|
||||
user_id = current_user.nil? ? nil : current_user.id
|
||||
request = DelayImpressionistRequest.new(request)
|
||||
Resque.enqueue(DelayedImpressionist,:request=>request,:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||
Resque.enqueue(DelayedImpressionist,:request=>DelayImpressionistRequest.new(request),:obj=>item,:class=>item.class.to_s,:controller_name=>controller_name,:action_name=>action_name,:user=>user_id)
|
||||
end
|
||||
|
||||
def check_user_role_enable(attribute_fields)
|
||||
@@ -221,7 +220,7 @@ module ApplicationHelper
|
||||
javascripts << "<script type='text/javascript' src='/assets/orbit-bar-search.js'></script>\n"
|
||||
end
|
||||
javascripts << "<script type='text/javascript' src='/assets/lib/jquery.preload-min.js'></script>\n"
|
||||
javascripts << "<script type='text/javascript' src='/static/jquery.cycle.all.latest.js'></script>\n"
|
||||
# javascripts << "<script type='text/javascript' src='/static/jquery.cycle.all.latest.js'></script>\n"
|
||||
javascripts << "<script type='text/javascript' src='/static/kernel.js'></script>\n"
|
||||
# javascripts << "<script type='text/javascript' src='/assets/social-share-button.js'></script>\n"
|
||||
javascripts << "<script type='text/javascript' src='/assets/lib/social-share-button.js'></script>\n"
|
||||
|
||||
@@ -2,16 +2,24 @@ class BackupServer
|
||||
@queue = :high
|
||||
|
||||
def self.perform()
|
||||
#CronMail.time_check("Going to backup Orbit").deliver
|
||||
dbhost = Mongoid.config.database.connection.primary.join ':'
|
||||
dbname = Mongoid.config.database.name
|
||||
archive_db_list_path = OrbitSystemPreference::ArchiveDbListPath
|
||||
dbdirectory = "#{Rails.root}/tmp/#{dbname}-"+Time.now.strftime("%Y-%m-%d-%H-%M")
|
||||
%x[mongodump -h #{dbhost} -d #{dbname} -o #{dbdirectory} ]
|
||||
|
||||
%x[rm #{archive_db_list_path}]
|
||||
%x[ls #{Rails.root}/tmp/#{dbname}* | du -h --max-depth=1 --block-size=1M |sort -h >> #{archive_db_list_path}]
|
||||
Dir.foreach('tmp') do |item|
|
||||
date_str = item.to_s.gsub("#{dbname}-",'')
|
||||
next if not date_str.match(/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}/)
|
||||
if Date.parse(date_str).to_time < Site.first.backup_keep_for_days.days.ago
|
||||
OrbitLogger.info "Deleting #{date_str}"
|
||||
%x[rm -rf tmp/#{item}]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%x[rm -f #{archive_db_list_path}]
|
||||
%x[cd tmp ; ls -l |grep #{dbname} | awk '{print $8}'|xargs du -h --block-size=1M --max-depth=0 |sort -h >> #{archive_db_list_path}]
|
||||
OrbitLogger.info "DB backup done Path:#{dbdirectory}"
|
||||
|
||||
end
|
||||
end
|
||||
@@ -17,10 +17,16 @@ class DelayedImpressionist
|
||||
arg = args[0]
|
||||
@request= DelayImpressionistRequest.new
|
||||
@request.restore(arg["request"])
|
||||
request = @request
|
||||
obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'")
|
||||
# imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj)
|
||||
new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer)
|
||||
@try = 1
|
||||
loop do
|
||||
result = new_impression.save rescue false
|
||||
break if (result || @try >= 10)
|
||||
@try = @try + 1
|
||||
puts "trying:#{@try}"
|
||||
end
|
||||
new_impression.save
|
||||
obj.update_attribute(:view_count,obj.impression_count)
|
||||
end
|
||||
|
||||
+2
-1
@@ -29,10 +29,11 @@ class Site
|
||||
mount_uploader :default_image, ImageUploader
|
||||
|
||||
field :search,:type => Hash
|
||||
|
||||
field :resque_namespace,:type => String, :default=>APP_CONFIG['orbit']
|
||||
field :title, localize: true
|
||||
field :footer, localize: true
|
||||
field :sub_menu, localize: true
|
||||
field :backup_keep_for_days,:type=>Integer,:default=> APP_CONFIG['backup_keep_for_days']
|
||||
|
||||
field :mobile_on, :type => Boolean, :default => false
|
||||
|
||||
|
||||
+5
-10
@@ -7,7 +7,7 @@ class User
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
|
||||
field :admin, :type => Boolean, :default => true
|
||||
field :admin, :type => Boolean, :default => false
|
||||
field :active_role
|
||||
field :user_id
|
||||
field :sid
|
||||
@@ -42,7 +42,6 @@ class User
|
||||
|
||||
before_create :initialize_desktop
|
||||
before_save :rebuild_status_record
|
||||
before_save :save_roles
|
||||
scope :remote_account, where(:nccu_id.ne => nil)
|
||||
scope :not_guest_user, all_of(:name.ne => "guest")
|
||||
|
||||
@@ -89,9 +88,9 @@ class User
|
||||
var[:id].each do |id,val|
|
||||
# binding.pry if id == '5052c5b22b5c49ab02000004'
|
||||
if (val=="true")
|
||||
self.roles = self.roles.reject{|t| t.id.to_s==id}
|
||||
self.role_ids.reject!{|t| t.to_s == id}
|
||||
elsif(val=="false")
|
||||
self.roles << Role.find(id)
|
||||
self.role_ids += Array(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -106,9 +105,9 @@ class User
|
||||
# binding.pry if id == '5052c5b22b5c49ab02000004'
|
||||
|
||||
if ( self.roles.include?(@roid) == false or val=="true")
|
||||
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id}
|
||||
self.sub_role_ids.reject!{|t| t.to_s == id}
|
||||
elsif(val=="false")
|
||||
self.sub_roles << SubRole.find(id)
|
||||
self.sub_role_ids += Array(id)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -273,10 +272,6 @@ class User
|
||||
end
|
||||
|
||||
protected
|
||||
def save_roles
|
||||
# self.roles = self.sub_roles.collect{|t| t.role}.uniq
|
||||
self.roles = self.roles.uniq
|
||||
end
|
||||
|
||||
def rebuild_status_record
|
||||
self.status_record = {}
|
||||
|
||||
@@ -1,19 +1,3 @@
|
||||
<script type='text/javascript' src='/static/jquery.cycle.all.latest.js'></script>
|
||||
<script type='text/javascript'>
|
||||
jQuery(function( $ ){
|
||||
|
||||
$('#slideshow-<%= @ad_banner.title.dehumanize %>').cycle({
|
||||
delay: -1000,
|
||||
fx: "<%= @ad_banner.ad_fx.nil? ? 'fade': @ad_banner.ad_fx %>",
|
||||
timeoutFn: getTimeout,
|
||||
pager: '.banner_nav-<%= @ad_banner.title.dehumanize %>',
|
||||
pagerAnchorBuilder: function(idx, slide) {
|
||||
return "<li><a href='#'></a></li>";
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<div style='position:relative'>
|
||||
<ul id='banner_nav' class='clear banner_nav-<%= @ad_banner.title.dehumanize %>'></ul>
|
||||
<div id='slideshow-<%= @ad_banner.title.dehumanize %>' class='slideshow'>
|
||||
@@ -23,4 +7,15 @@
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type='text/javascript'>
|
||||
var banner = {"banner_name":"#slideshow-<%= @ad_banner.title.dehumanize %>",
|
||||
"banner_fx":"<%= @ad_banner.ad_fx.nil? ? 'fade': @ad_banner.ad_fx %>",
|
||||
"banner_pager":".banner_nav-<%= @ad_banner.title.dehumanize %>",
|
||||
"image_loaded":0,
|
||||
"time_to_next":<%= @ad_banner.transition_msec %>,
|
||||
"current":0,
|
||||
"best_size": "<%= @ad_banner.best_size %>"
|
||||
};
|
||||
banners.push(banner);
|
||||
</script>
|
||||
@@ -4,7 +4,7 @@
|
||||
<ul class='list'>
|
||||
<% @menu_page.visible_children.each do |child| %>
|
||||
<li class="<%= @page_id.eql?(child.id) ? 'active' : nil %>">
|
||||
<a href="<%= (child.class.to_s.eql?('Page') ? '/' + child.path : child.url) %>"><%= child.title %></a>
|
||||
<a href="<%= (child.class.to_s.eql?('Page') ? '/' + child.path : child.url) %>" <%= "target=_blank" if child.class.to_s.eql?('Page').blank? %> ><%= child.title %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
@@ -3,9 +3,5 @@
|
||||
<% end %>
|
||||
|
||||
<ul>
|
||||
<li>總機電話:<a href="tel:+886229393091">02-29393091</a></li>
|
||||
<li>傳真:02-29379611</li>
|
||||
<li>緊急重大事件通聯窗口:校內分機 66119、66110</li>
|
||||
<li>總值日室:<a href="tel:+88229387132">02-29387132</a></li>
|
||||
<li>駐警衛室:<a href="tel:+88229387129">02-29387129</a></li>
|
||||
<li>電話:<a href="tel:+886227321104">+886-2-2732-1104</a> <a href="tel:+886266396688">+886-2-6639-6688</a></li>
|
||||
</ul>
|
||||
@@ -5,6 +5,6 @@
|
||||
<div id='map_canvas'></div>
|
||||
|
||||
<script type='text/javascript'>
|
||||
var $map_center = "24.987449, 121.576117"
|
||||
var $map_center = "25.024562,121.544611"
|
||||
var $map_zoom = 17
|
||||
</script>
|
||||
@@ -3,6 +3,7 @@ defaults: &defaults
|
||||
store_ip: 'redmine.rulingcom.com:3001'
|
||||
orbit: 'Orbit'
|
||||
ruling_digital: 'RulingDigital'
|
||||
backup_keep_for_days: 30
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
|
||||
@@ -3,7 +3,7 @@ require 'resque_scheduler/server'
|
||||
# require 'yaml'
|
||||
|
||||
Resque.redis = 'localhost:6379'
|
||||
Resque.redis.namespace = "resque"
|
||||
Resque.redis.namespace = Site.first.resque_namespace rescue APP_CONFIG['orbit']
|
||||
|
||||
# If you want to be able to dynamically change the schedule,
|
||||
# uncomment this line. A dynamic schedule can be updated via the
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ defaults: &defaults
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
database: demo_site_development
|
||||
database: test_site
|
||||
test:
|
||||
<<: *defaults
|
||||
database: test_site
|
||||
@@ -21,4 +21,4 @@ production:
|
||||
# password: <%= ENV['MONGOID_PASSWORD'] %>
|
||||
# database: <%= ENV['MONGOID_DATABASE'] %>
|
||||
<<: *defaults
|
||||
database: demo_site_production
|
||||
database: test_site
|
||||
@@ -4,6 +4,12 @@ dashboard_counter_cache:
|
||||
args:
|
||||
description: DashboardCounterCache
|
||||
|
||||
backup_server:
|
||||
cron: 0 0 2 * * *
|
||||
class: BackupServer
|
||||
args:
|
||||
description: BackupServer and remove old backups
|
||||
|
||||
update_tag_cloud:
|
||||
cron: 0 0 [0,12] * * *
|
||||
class: UpdateTagCloud
|
||||
|
||||
@@ -4,24 +4,33 @@ module OrbitApp
|
||||
Version = "0.1"
|
||||
|
||||
def display_visitors(options={})
|
||||
impressions = Impression.where(options).and(:referrer.ne => nil).distinct(:session_hash).count
|
||||
map = "function(){ emit( this.referrer,{session_hash: this.session_hash,created_at: this.created_at}); };"
|
||||
reduce = "function(key, values){ var sum = 0; values.forEach(function(doc){sum += doc.amount; }); return {amount: sum};};"
|
||||
if options.blank?
|
||||
impressions = Impression.collection.map_reduce(map, reduce,read: :primary, out: "vr")
|
||||
else
|
||||
query = Impression.where(options).selector
|
||||
impressions = Impression.where(options).collection.map_reduce(map, reduce,read: :primary, out: "vr",:query=>query)
|
||||
end
|
||||
impressions.count
|
||||
end
|
||||
|
||||
def display_visitors_today
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day, '$lte' => Date.today.end_of_day})
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day , '$lte' => DateTime.now})
|
||||
end
|
||||
|
||||
def display_visitors_this_week
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_week, '$lte' => Date.today.end_of_week})
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 7.days, '$lte' => DateTime.now})
|
||||
end
|
||||
|
||||
def display_visitors_this_month
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_month, '$lte' => Date.today.end_of_month})
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 1.month, '$lte' => DateTime.now})
|
||||
end
|
||||
|
||||
def display_visitors_this_year
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_year, '$lte' => Date.today.end_of_year})
|
||||
display_visitors(created_at: {'$gte' => Date.today.beginning_of_day - 1.year, '$lte' =>DateTime.now})
|
||||
end
|
||||
end # end of VisitorCounterEval
|
||||
end # of Module
|
||||
end # of OrbitApp
|
||||
|
||||
@@ -102,12 +102,17 @@ module OrbitApp
|
||||
def initialize(&block)
|
||||
@query = nil
|
||||
@image = nil
|
||||
@sorting_query = 'desc(:created_at)'
|
||||
@more_link = {}
|
||||
@fields = []
|
||||
@enabled_styles = STYLE
|
||||
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
|
||||
end
|
||||
|
||||
def sorting(query)
|
||||
@sorting_query = query
|
||||
end
|
||||
|
||||
def enable(args)
|
||||
@enabled_styles = args
|
||||
end
|
||||
@@ -122,7 +127,7 @@ module OrbitApp
|
||||
end
|
||||
|
||||
def to_module_app_format
|
||||
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles} rescue nil
|
||||
{"query"=>@query,"image"=>@image,"more_link"=>@more_link,"enabled_styles"=>@enabled_styles,:sorting_query=>@sorting_query} rescue nil
|
||||
end
|
||||
|
||||
def link_field(field_name,setting)
|
||||
|
||||
@@ -32,13 +32,7 @@ module ParserFrontEnd
|
||||
ret = ''
|
||||
part = PagePart.find(front['part_id']) if front['part_id']
|
||||
ret << eval("\"#{front['path']}\"") rescue ''
|
||||
args.each do |index,arg|
|
||||
if index=="tag_id" || index=="category_id"
|
||||
ret << (ret.include?("?") ? "&#{index}[]=#{arg}": "?#{index}[]=#{arg}" )
|
||||
else
|
||||
ret << (ret.include?("?") ? "&#{index}=#{arg}": "?#{index}=#{arg}" )
|
||||
end
|
||||
end if args
|
||||
ret << (ret.include?("?") ? "&#{args.to_param}" : "?#{args.to_param}") if args
|
||||
fragment = Nokogiri::HTML::DocumentFragment.new(body, "<div class='dymanic_load widget' path='#{ret}'></div>")
|
||||
end
|
||||
front.swap(fragment)
|
||||
|
||||
@@ -326,4 +326,44 @@ namespace :migrate do
|
||||
`mongo #{Mongoid.config.database.name} --eval "db.tags.remove({_type: {$ne: 'Tag'}})"`
|
||||
end
|
||||
|
||||
task :add_missing_user_link => :environment do
|
||||
User.all.each do |user|
|
||||
user.role_ids.uniq!
|
||||
user.sub_role_ids.uniq!
|
||||
user.save
|
||||
user.roles.each do |role|
|
||||
unless role.user_ids.include?(user.id)
|
||||
role.user_ids << user.id
|
||||
role.save
|
||||
end
|
||||
end
|
||||
user.sub_roles.each do |sub_role|
|
||||
unless sub_role.user_ids.include?(user.id)
|
||||
sub_role.user_ids << user.id
|
||||
sub_role.save
|
||||
end
|
||||
end
|
||||
end
|
||||
Role.all.each do |role|
|
||||
role.user_ids.uniq!
|
||||
role.save
|
||||
role.users.each do |user|
|
||||
unless user.role_ids.include?(role.id)
|
||||
user.role_ids << role.id
|
||||
user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
SubRole.all.each do |sub_role|
|
||||
sub_role.user_ids.uniq!
|
||||
sub_role.save
|
||||
sub_role.users.each do |user|
|
||||
unless user.sub_role_ids.include?(sub_role.id)
|
||||
user.sub_role_ids << sub_role.id
|
||||
user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
+82
-4
@@ -1,4 +1,5 @@
|
||||
# encoding: utf-8
|
||||
require 'erb'
|
||||
|
||||
namespace :site do
|
||||
|
||||
@@ -9,21 +10,26 @@ namespace :site do
|
||||
Site.create( :school => 'RulingDigital University', :department => 'Computer Science', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ])
|
||||
User.create!(:email=>'chris@rulingcom.com',:admin=>true,:user_id=>'chris',:password=>'password')
|
||||
`mongo #{Mongoid.config.database.name} --eval "db.fs.chunks.ensureIndex({files_id: 1, n: 1})"`
|
||||
|
||||
puts "Congres you can now login within url"
|
||||
puts 'Please upload design package (/admin/designs/upload_package ) and run rake site:necessary_data'
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'en', :en => 'English', :zh_tw => '英文' )
|
||||
I18nVariable.create!( :document_class => 'language', :key => 'zh_tw', :en => 'Chinese', :zh_tw => '中文' )
|
||||
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
|
||||
Info.create!(key: "profile", built_in: true, disabled: false, title: {"zh_tw"=>"基本欄位", "en"=>"Basic Info"}, to_search: false)
|
||||
end
|
||||
|
||||
task :create_logrotate => :environment do #Can remove after all products update
|
||||
create_rulingcom_logrotate
|
||||
end
|
||||
|
||||
task :necessary_data => :environment do
|
||||
auto_setting
|
||||
site = Site.first
|
||||
site.title = 'RulingOrbit Demo Site'
|
||||
site.save
|
||||
site.update_attribute(:title,'RulingOrbit Demo Site')
|
||||
site.update_attribute(:resque_namespace,@resque_namespace)
|
||||
|
||||
# home_trans = I18nVariable.create!( :document_class => 'Home', :key => 'home', :en => 'Homepage', :zh_tw => '首頁')
|
||||
design = Design.first
|
||||
site = Site.first
|
||||
site.design = design
|
||||
site.save
|
||||
theme = design.themes.first
|
||||
@@ -31,6 +37,78 @@ namespace :site do
|
||||
|
||||
home.title_translations = {"zh_tw"=>"首頁", "en"=>"Home"}
|
||||
home.save
|
||||
|
||||
puts "Rember to restart server after you setup all sites for starting God"
|
||||
end
|
||||
|
||||
task :start_auto_setting => :environment do
|
||||
auto_setting
|
||||
end
|
||||
|
||||
def auto_setting
|
||||
puts "Enter your resque namespace[Orbit]:......"
|
||||
@resque_namespace = STDIN.gets.gsub("\n",'')
|
||||
@resque_namespace = APP_CONFIG['orbit'] if @resque_namespace.empty?
|
||||
|
||||
|
||||
puts "Is this the only site [ Entry site? ] on this mechine?[Default No]:......"
|
||||
site_is_alone = false
|
||||
site_is_alone = STDIN.gets.gsub("\n",'')
|
||||
site_is_alone = true if site_is_alone.downcase == 'yes'
|
||||
|
||||
puts "Is this a primary site?[Default No]:......"
|
||||
site_is_primary = false
|
||||
site_is_primary = STDIN.gets.gsub("\n",'')
|
||||
site_is_primary = true if site_is_primary.downcase == 'yes'
|
||||
|
||||
puts "Traffic heavy?[Default No]:......"
|
||||
traffic_heavy = false
|
||||
traffic_heavy = STDIN.gets.gsub("\n",'')
|
||||
traffic_heavy = true if traffic_heavy.downcase == 'yes'
|
||||
|
||||
@traffic_rate = traffic_heavy ? 2 : 1
|
||||
|
||||
if site_is_alone
|
||||
@resque_workers = 5 * @traffic_rate #Entry Site
|
||||
else
|
||||
if site_is_primary
|
||||
@resque_workers = 2 * @traffic_rate #Primary Site
|
||||
else
|
||||
@resque_workers = 1 * @traffic_rate #Secondary Site
|
||||
end
|
||||
end
|
||||
|
||||
resque_setting = ERB.new(File.new("lib/template/setting/resque.god.erb").read)
|
||||
File.open("config/resque.god", 'w') { |file| file.write(resque_setting.result) }
|
||||
|
||||
resque_schedule_setting = ERB.new(File.new("lib/template/setting/resque_schedule.god.erb").read)
|
||||
File.open("config/resque_schedule.god", 'w') { |file| file.write(resque_schedule_setting.result) }
|
||||
|
||||
if site_is_primary
|
||||
solr_setting = ERB.new(File.new("lib/template/setting/solr.god.erb").read)
|
||||
File.open("config/solr.god", 'w') { |file| file.write(solr_setting.result) }
|
||||
create_rulingcom_logrotate
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def create_rulingcom_logrotate
|
||||
`sudo mkdir -p /var/log/rulingcom` unless File.directory? "/var/log/rulingcom"
|
||||
@project_folder = ENV["PWD"]
|
||||
puts "Is your Orbit folder: #{@project_folder} (If YES => Press enter,or enter your path)"
|
||||
user_enter_project_folder = STDIN.gets.gsub("\n",'')
|
||||
@project_folder = user_enter_project_folder unless user_enter_project_folder.empty?
|
||||
|
||||
@user_home_folder = ENV["HOME"]
|
||||
puts "Is your Home folder: #{@user_home_folder} (If YES => Press enter,or enter your path)"
|
||||
user_enter_home_folder = STDIN.gets.gsub("\n",'')
|
||||
@user_home_folder = user_enter_home_folder unless user_enter_home_folder.empty?
|
||||
|
||||
logrotate_setting = ERB.new(File.new("lib/template/setting/rulingcom_log.erb").read)
|
||||
File.open("#{@project_loc}/tmp/logrotate_setting", 'w') { |file| file.write(logrotate_setting.result) }
|
||||
|
||||
`sudo cp #{@project_loc}/tmp/logrotate_setting /etc/logrotate.d/rulingcom`
|
||||
`logrotate -v -f /etc/logrotate.conf`
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
# encoding: utf-8
|
||||
namespace :system_check do
|
||||
task :god_can_start => :environment do
|
||||
unless File.directory? "/var/log/rulingcom"
|
||||
puts "Creating Rulingcom log folder"
|
||||
`sudo mkdir -p /var/log/rulingcom`
|
||||
end
|
||||
end
|
||||
task :set_resque_namespace,[:namespace] => :environment do |t,args|
|
||||
site = Site.first
|
||||
site.resque_namespace = args[:namespace]
|
||||
site.save
|
||||
end
|
||||
end
|
||||
@@ -4,33 +4,32 @@ user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
|
||||
development_uid = ''
|
||||
development_gid = ''
|
||||
|
||||
num_workers = rails_env == 'production' ? 5 : 2
|
||||
num_workers = rails_env == 'production' ? <%= @resque_workers %> : 1
|
||||
|
||||
num_workers.times do |num|
|
||||
God.watch do |w|
|
||||
|
||||
w.dir = rails_root
|
||||
w.name = "worker-#{num}"
|
||||
w.group = 'resque'
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-worker-#{num}"
|
||||
w.group = 'rulingcom'
|
||||
|
||||
w.interval = 30.seconds
|
||||
|
||||
queue = case num
|
||||
when 0
|
||||
'critical'
|
||||
when 1..2
|
||||
when 0..2
|
||||
'high,low'
|
||||
when 3..num_workers
|
||||
'low'
|
||||
end
|
||||
|
||||
w.env = {"QUEUE"=>queue, "RAILS_ENV"=>rails_env}
|
||||
w.start = "HOME=#{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:work"
|
||||
|
||||
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
|
||||
w.env = {"RAILS_ENV"=>rails_env,"PIDFILE" => w.pid_file ,"HOME"=>user_home, "QUEUE"=>queue, "RAILS_ENV"=>rails_env }
|
||||
w.start = "rake -f #{rails_root}/Rakefile resque:work"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
@@ -0,0 +1,59 @@
|
||||
rails_env = ENV['RAILS_ENV'] || "production"
|
||||
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/..'
|
||||
user_home = ENV['HOME'] || File.dirname(__FILE__) + '/../..'
|
||||
development_uid = ''
|
||||
development_gid = ''
|
||||
|
||||
God.watch do |w|
|
||||
w.dir = rails_root
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>resque-scheduler"
|
||||
w.group = 'rulingcom'
|
||||
w.interval = 10.seconds
|
||||
w.pid_file = "#{rails_root}/tmp/#{w.name}.pid"
|
||||
|
||||
w.env = {"QUEUE"=>"*", "RAILS_ENV"=>rails_env,"HOME"=>user_home, "RAILS_ENV"=>rails_env}
|
||||
w.start = "rake -f #{rails_root}/Rakefile resque:scheduler"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
on.condition(:memory_usage) do |c|
|
||||
c.above = 350.megabytes
|
||||
c.times = 2
|
||||
end
|
||||
end
|
||||
|
||||
# determine the state on startup
|
||||
w.transition(:init, { true => :up, false => :start }) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = true
|
||||
end
|
||||
end
|
||||
|
||||
# determine when process has finished starting
|
||||
w.transition([:start, :restart], :up) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = true
|
||||
c.interval = 5.seconds
|
||||
end
|
||||
|
||||
# failsafe
|
||||
on.condition(:tries) do |c|
|
||||
c.times = 5
|
||||
c.transition = :start
|
||||
c.interval = 5.seconds
|
||||
end
|
||||
end
|
||||
|
||||
# start if process is not running
|
||||
w.transition(:up, :start) do |on|
|
||||
on.condition(:process_running) do |c|
|
||||
c.running = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/var/log/rulingcom/*.log {
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#Resque
|
||||
<%= "#{@project_folder}/nginx/logs/access.log" %>{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#DB log
|
||||
/var/log/mongodb{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
|
||||
#Orbit
|
||||
<%= "#{@project_folder}/log/*production.log" %>{
|
||||
daily
|
||||
dateext
|
||||
compress
|
||||
rotate 30
|
||||
}
|
||||
# end of Orbit,EXTEND IF NEEDED
|
||||
|
||||
#Remember to save this file as /etc/logrotate.d/rulingcom
|
||||
@@ -6,16 +6,19 @@ development_gid = ''
|
||||
|
||||
God.watch do |w|
|
||||
w.dir = rails_root
|
||||
w.name = "scheduler"
|
||||
w.group = 'resque'
|
||||
w.name = "<%= @resque_namespace.nil? ? "" : "#{@resque_namespace}-" %>sunspot-solr"
|
||||
w.group = 'rulingcom'
|
||||
w.pid_file = "#{rails_root}/solr/pids/production/sunspot-solr-production.pid"
|
||||
w.interval = 30.seconds
|
||||
w.env = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env}
|
||||
w.start = "HOME= #{user_home} QUEUE=* RAILS_ENV=#{rails_env} rake -f #{rails_root}/Rakefile resque:scheduler"
|
||||
w.env = {"RAILS_ENV"=>rails_env,"HOME"=>user_home ,"RAILS_ENV"=>rails_env}
|
||||
w.start = "rake -f #{rails_root}/Rakefile sunspot:solr:start"
|
||||
w.stop = "sudo kill -KILL $(cat #{w.pid_file})"
|
||||
w.keepalive
|
||||
|
||||
w.uid = (rails_env == 'production' )? "root" : development_uid
|
||||
w.gid = (rails_env == 'production' )? "root" : development_gid
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev_resque-#{w.name}.log"
|
||||
|
||||
w.log = (rails_env == 'production' )? "/var/log/#{w.group}/#{w.name}.log":"#{rails_root}/log/dev-#{w.name}.log"
|
||||
|
||||
# restart if memory gets too high
|
||||
w.transition(:up, :restart) do |on|
|
||||
+66
-39
@@ -1,45 +1,72 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
$.each($(".dymanic_load"),function(){
|
||||
if($(this).attr("path")==''){$(this).html("App setting Failed");}
|
||||
|
||||
if($(this).attr("path")!=''){
|
||||
ajax_load_proc($(this),$(this).attr("path"));
|
||||
}
|
||||
}
|
||||
);
|
||||
$("#main_content").addClass("module");
|
||||
});
|
||||
var banners = [];
|
||||
var banner_index = 0;
|
||||
$q = jQuery;
|
||||
$q.getScript('/static/jquery.cycle.all.latest.js');
|
||||
|
||||
function ajax_load_proc(wapper,url){
|
||||
$.get(encodeURI(url), {}, function(respText,textSta,XML){
|
||||
if (textSta == 'success') {
|
||||
wapper.html(respText);
|
||||
};
|
||||
if(textSta == 'error')
|
||||
wapper.html("Loading Failed<br/> <a href='"+$(this).attr('path')+"'>Go See</a>");
|
||||
});
|
||||
$(document).ready(function() {
|
||||
$.each($(".dymanic_load"),function(){
|
||||
if($(this).attr("path")==''){$(this).html("App setting Failed");}
|
||||
if($(this).attr("path")!=''){
|
||||
if($(this).attr("path").indexOf("show_banner")>0){
|
||||
ajax_load_proc($(this),$(this).attr("path"),"true");
|
||||
}else{
|
||||
ajax_load_proc($(this),$(this).attr("path"),$(this).attr("path"));
|
||||
}
|
||||
}});
|
||||
$("#main_content").addClass("module");
|
||||
});
|
||||
|
||||
function ajax_load_proc(wapper,url,isBanner){
|
||||
$.get(encodeURI(url), {}, function(respText,textSta,XML){
|
||||
if (textSta == 'success') {
|
||||
if(isBanner=="true"){
|
||||
wapper.html(respText);
|
||||
var banner = banners[banner_index];
|
||||
if($(banner.banner_name+" img").length>1){
|
||||
$(banner.banner_name+" > img").each(function(){
|
||||
$(this).load(function(){ banner.image_loaded++; });
|
||||
});
|
||||
BannerCycle(banner_index);
|
||||
}
|
||||
banner_index++;
|
||||
}else{
|
||||
wapper.html(respText);
|
||||
}
|
||||
};
|
||||
if(textSta == 'error')
|
||||
wapper.html("Loading Failed<br/> <a href='"+$(this).attr('path')+"'>Go See</a>");
|
||||
});
|
||||
}
|
||||
|
||||
// Ad Banner FX code [start]
|
||||
function getTimeout() {
|
||||
return $(this).attr('time_to_next');
|
||||
}
|
||||
function BannerCycle(banner_index){
|
||||
var banner = banners[banner_index];
|
||||
if (banner.image_loaded==$(banner.banner_name+" img").length){
|
||||
$q(banner.banner_name).cycle({
|
||||
delay: -1000,
|
||||
fx: banner.banner_fx,
|
||||
timeout: banner.time_to_next,
|
||||
pager: banner.banner_pager,
|
||||
pagerAnchorBuilder: function(idx, slide) { return "<li><a href='#'></a></li>"; }
|
||||
});
|
||||
}else{
|
||||
setTimeout("BannerCycle("+banner_index+")",500);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$(document).on('click', '.slideshow img', function()
|
||||
{
|
||||
if($(this).attr('link_url')!='')
|
||||
{
|
||||
if($(this).attr('link_open')=='new_window')
|
||||
{
|
||||
window.open($(this).attr('link_url'));
|
||||
}
|
||||
else
|
||||
{
|
||||
document.location.href=$(this).attr('link_url')
|
||||
}
|
||||
}
|
||||
})
|
||||
$(document).on('click', '.slideshow img', function()
|
||||
{
|
||||
if($(this).attr('link_url')!='')
|
||||
{
|
||||
if($(this).attr('link_open')=='new_window')
|
||||
{
|
||||
window.open($(this).attr('link_url'));
|
||||
}
|
||||
else
|
||||
{
|
||||
document.location.href=$(this).attr('link_url')
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
// Ad Banner FX code [end]
|
||||
// Ad Banner FX code [end]
|
||||
File renamed without changes.
vendor/built_in_modules/announcement/app/assets/stylesheets/announcement/bulletins_and_web_links.css
Vendored
+78
@@ -0,0 +1,78 @@
|
||||
|
||||
.mega_tab_block {
|
||||
clear: both;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mega_tab_block h3 {
|
||||
font: 22px/100% 'arial',sans-serif;
|
||||
margin: 0 0 10px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mega_tab_block .pagination {
|
||||
float: left;
|
||||
height: auto;
|
||||
margin: 10px 0 0;
|
||||
width: auto;
|
||||
}
|
||||
.mega_tab_block .pagination a {
|
||||
background: none repeat scroll 0 0 #EEEEEE;
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 0 5px 0 0;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
.tag_block {
|
||||
clear: both;
|
||||
margin: 0 0 20px;
|
||||
position: relative;
|
||||
}
|
||||
.mega_tab_block .tag_list {
|
||||
background: none repeat scroll 0 0 #EEEEEE;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
.mega_tab_block .tag_list li {
|
||||
float: left;
|
||||
list-style: none outside none;
|
||||
}
|
||||
.mega_tab_block .tag_list li a {
|
||||
background: none repeat scroll 0 0 #DDDDDD;
|
||||
float: left;
|
||||
margin: 0 5px 0 0;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.news_block {
|
||||
clear: both;
|
||||
margin: 0 0 20px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.mega_tab_block .news_list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.mega_tab_block .news_list li {
|
||||
list-style: none outside none;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
|
||||
.links_block {
|
||||
clear: both;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.mega_tab_block .links_list {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.mega_tab_block .links_list li {
|
||||
list-style: none outside none;
|
||||
padding: 5px 0;
|
||||
}
|
||||
+22
-3
@@ -9,12 +9,12 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendCo
|
||||
# @module_app = ModuleApp.where(:title=>'Announcement').first
|
||||
# end
|
||||
# =======
|
||||
before_filter :for_app_manager,:except => [:index,:get_categorys_json,:get_bulletins_json]
|
||||
before_filter :for_app_manager,:except => [:index,:get_categorys_json,:get_bulletins_json, :get_bulletin_categories]
|
||||
|
||||
|
||||
before_filter :force_order_for_visitor,:only=>[:index,:get_categorys_json,:get_bulletins_json]
|
||||
before_filter :force_order_for_user,:except => [:index,:get_categorys_json,:get_bulletins_json]
|
||||
before_filter :for_app_sub_manager,:except => [:index,:get_categorys_json,:get_bulletins_json]
|
||||
before_filter :force_order_for_user,:except => [:index,:get_categorys_json,:get_bulletins_json, :get_bulletin_categories]
|
||||
before_filter :for_app_sub_manager,:except => [:index,:get_categorys_json,:get_bulletins_json, :get_bulletin_categories]
|
||||
|
||||
def index
|
||||
@bulletin_categorys = get_categories_for_index("BulletinCategory")
|
||||
@@ -53,6 +53,25 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendCo
|
||||
render :json => JSON.pretty_generate(data)
|
||||
end
|
||||
|
||||
def get_bulletin_categories
|
||||
I18n.locale = params[:locale] || :zh_tw
|
||||
@categories = BulletinCategory.all.order_by(:title, :asc)
|
||||
respond_to do |format|
|
||||
format.json {
|
||||
custom_categories = @categories.inject([]) do |data, category|
|
||||
data << {
|
||||
title: category.title,
|
||||
link_html: "#{request.protocol}#{request.host_with_port}#{panel_announcement_front_end_bulletins_path(category_id: category.id, locale: I18n.locale)}",
|
||||
link_json: "#{request.protocol}#{request.host_with_port}#{get_bulletins_panel_announcement_back_end_bulletins_path(category_id: category.id, locale: I18n.locale, format: 'json')}",
|
||||
link_rss: "#{request.protocol}#{request.host_with_port}#{get_bulletins_panel_announcement_back_end_bulletins_path(category_id: category.id, locale: I18n.locale, format: 'rss')}"
|
||||
}
|
||||
end
|
||||
render json: JSON.pretty_generate(custom_categories)
|
||||
}
|
||||
format.rss {}
|
||||
end
|
||||
end
|
||||
|
||||
def get_bulletins_json
|
||||
bulletin = BulletinCategory.find(params[:bulletin_category_id]).bulletins
|
||||
p bulletin
|
||||
|
||||
+63
-12
@@ -7,8 +7,8 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
# before_filter :for_admin_only,:only => [:]
|
||||
# before_filter :for_app_manager,:only => [:index,:show,]
|
||||
before_filter :force_order_for_visitor,:only=>[:index,:show,:get_sorted_and_filtered_bulletins]
|
||||
before_filter :force_order_for_user,:except => [:index,:show,:get_sorted_and_filtered_bulletins]
|
||||
before_filter :for_app_sub_manager,:except => [:index,:show,:get_sorted_and_filtered_bulletins]
|
||||
before_filter :force_order_for_user,:except => [:index,:show,:get_sorted_and_filtered_bulletins, :get_bulletins]
|
||||
before_filter :for_app_sub_manager,:except => [:index,:show,:get_sorted_and_filtered_bulletins, :get_bulletins]
|
||||
|
||||
before_filter :only => [ :new,:create,:edit,:update,:create] do |controller|
|
||||
controller.get_categorys('BulletinCategory')
|
||||
@@ -23,6 +23,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
|
||||
|
||||
def index
|
||||
|
||||
email_group_data
|
||||
|
||||
# @bulletins = Bulletin.all
|
||||
# @bulletins = Bulletin.desc("postdate desc")
|
||||
get_categorys('BulletinCategory',params[:bulletin_category_id])
|
||||
@@ -116,6 +119,9 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
# POST /bulletins
|
||||
# POST /bulletins.xml
|
||||
def create
|
||||
|
||||
email_group_data
|
||||
|
||||
@tags = get_tags
|
||||
if params[:bulletin_link]
|
||||
|
||||
@@ -153,12 +159,12 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
respond_to do |format|
|
||||
if @bulletin.save
|
||||
|
||||
# if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
|
||||
# send_email_data(@bulletin)
|
||||
if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
|
||||
send_email_data(@bulletin)
|
||||
|
||||
# @bulletin.email_sent = false
|
||||
# @bulletin.save
|
||||
# end
|
||||
@bulletin.email_sent = false
|
||||
@bulletin.save
|
||||
end
|
||||
|
||||
format.html { redirect_to(panel_announcement_back_end_bulletins_url, :notice => t('announcement.create_bulletin_success')) }
|
||||
format.xml { render :xml => @bulletin, :status => :created, :location => @bulletin }
|
||||
@@ -221,6 +227,8 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
|
||||
def update
|
||||
|
||||
email_group_data
|
||||
|
||||
@bulletin = Bulletin.find(params[:id])
|
||||
|
||||
# @bulletin.image.clear if params[:bulletin][:image_del] == '1'
|
||||
@@ -241,12 +249,12 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
@bulletin.de_pending!
|
||||
end
|
||||
|
||||
# if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
|
||||
# send_email_data(@bulletin)
|
||||
if @bulletin.email_sent == true && @bulletin.is_checked == true && !@bulletin.is_rejected
|
||||
send_email_data(@bulletin)
|
||||
|
||||
# @bulletin.email_sent = false
|
||||
# @bulletin.save
|
||||
# end
|
||||
@bulletin.email_sent = false
|
||||
@bulletin.save
|
||||
end
|
||||
|
||||
# if (params[:bulletin][:is_checked] == "false")
|
||||
# @bulletin.is_rejected = true
|
||||
@@ -312,6 +320,48 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
redirect_to panel_announcement_back_end_bulletins_url(:filter => params[:filter], :direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
|
||||
end
|
||||
|
||||
# ================================================================
|
||||
# language:
|
||||
# - default: zh_tw
|
||||
# - specify language: locale=[string]
|
||||
# category:
|
||||
# - default: no category
|
||||
# - specify: category_id=[ID]
|
||||
# pagination:
|
||||
# - default: 10
|
||||
# - specify the number of results: per=[number]
|
||||
# - specify the page: page=[number]
|
||||
# ================================================================
|
||||
def get_bulletins
|
||||
I18n.locale = params[:locale] || :zh_tw
|
||||
bulletins = params[:category_id] ? Bulletin.where(bulletin_category_id: params[:category_id]).order_by(:created_at, :desc) : Bulletin.all.order_by(:created_at, :desc)
|
||||
bulletins = bulletins.reject{|b| b.title_translations[I18n.locale.to_s].blank?}
|
||||
@bulletins = Kaminari.paginate_array(bulletins).page(params[:page]).per(params[:per] || 10)
|
||||
|
||||
respond_to do |format|
|
||||
format.json {
|
||||
custom_bulletins = @bulletins.inject([]) do |data, bulletin|
|
||||
deadline = bulletin.deadline.nil? ? t(:no_deadline) : display_date_time(bulletin.deadline)
|
||||
image_url = "#{'/' unless bulletin.image.url.start_with?('/')}#{bulletin.image.url}"
|
||||
data << {
|
||||
title: bulletin.title,
|
||||
link: "#{request.protocol}#{request.host_with_port}#{panel_announcement_front_end_bulletin_path(bulletin, category_id: bulletin.bulletin_category.id, locale: I18n.locale)}",
|
||||
image: "#{request.protocol}#{request.host_with_port}#{image_url}",
|
||||
category: bulletin.bulletin_category.title,
|
||||
description: bulletin.subtitle,
|
||||
postdate: display_date_time(bulletin.postdate),
|
||||
deadline: deadline,
|
||||
tag: bulletin.sorted_tags.map{|tag| tag.name}
|
||||
}
|
||||
end
|
||||
render json: JSON.pretty_generate(custom_bulletins)
|
||||
}
|
||||
format.rss {
|
||||
@category = BulletinCategory.find(params[:category_id]) rescue nil
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
protected
|
||||
|
||||
@@ -353,6 +403,7 @@ class Panel::Announcement::BackEnd::BulletinsController < OrbitBackendController
|
||||
:mail_from_app => 'announcement',
|
||||
:mail_from => @user.email,
|
||||
:mail_reply_to => @user.email,
|
||||
:mail_subject => "#{t("announcement.mail_subject")}:",
|
||||
:mail_subject => "#{t("announcement.mail_subject",:site_title => @site.title)}:#{bulletin.title}",
|
||||
:mail_to => @group_mail.join(','),
|
||||
:mail_content => @mail_content ,
|
||||
|
||||
+65
-4
@@ -66,14 +66,75 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
|
||||
|
||||
end
|
||||
|
||||
def bulletins_and_web_links
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
@title = @part.title_translations[I18n.locale.to_s]
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
if !params[:tag_id].blank?
|
||||
@tags = Tag.any_in(:_id => params[:tag_id]).asc(:created_at)
|
||||
elsif params[:tag_id].blank? and !@part.tag.blank?
|
||||
@tags = Tag.any_in(:_id => @part.tag).asc(:created_at)
|
||||
else
|
||||
@ModuleApp_b = ModuleApp.first(:conditions => {:key=>'announcement'})
|
||||
@tags = Tag.where(:module_tag_id => @ModuleApp_b.id).asc(:created_at)
|
||||
end
|
||||
|
||||
@selected_tag = Tag.find(params[:id]).first rescue @tags[0]
|
||||
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
|
||||
|
||||
if @part.widget_style == 'bulletins_and_web_links'
|
||||
@ModuleApp_w = ModuleApp.first(:conditions => {:key=>'web_resource'})
|
||||
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp_w.id})
|
||||
@web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def reload_bulletins
|
||||
@selected_tag = Tag.find(params[:tag_id])
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => params[:tag_id]).where(:is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, sort).page(params[:page]).per(5) rescue nil
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
@title = @part.title_translations[I18n.locale.to_s]
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
@selected_tag = Tag.find(params[:tag_id]).first
|
||||
@bulletins = Bulletin.available_for_lang(I18n.locale).can_display.where(:tagged_ids => @selected_tag.id.to_s, :is_hidden => false).any_of( {deadline: nil,:postdate.lte => date_now} , {:deadline.gte => date_now,:postdate.lte => date_now} ).desc(:is_top, :postdate).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
def reload_web_links
|
||||
@selected_tag = Tag.find(params[:tag_id])
|
||||
@web_links = WebLink.where(:name => @selected_tag.name).where(:is_hidden => false).desc(:is_top, sort).available_for_lang(I18n.locale).page(params[:page]).per(5) rescue nil
|
||||
|
||||
@part = PagePart.find(params[:part_id]) if !params[:part_id].blank?
|
||||
|
||||
if !@part.blank? and @part.widget_data_count
|
||||
@page_num = @part.widget_data_count
|
||||
else
|
||||
@page_num = 5
|
||||
end
|
||||
|
||||
date_now = Time.now
|
||||
|
||||
@selected_tag = Tag.find(params[:tag_id]).first
|
||||
@ModuleApp = ModuleApp.first(:conditions => {:key=>'web_resource'})
|
||||
@link_selected_tag = Tag.first(:conditions => {:name => @selected_tag.name, :module_tag_id => @ModuleApp.id})
|
||||
@web_links = WebLink.where(:tagged_ids => @link_selected_tag.id.to_s, :is_hidden => false).desc(:is_top,:created_at).available_for_lang(I18n.locale).page(params[:page]).per(@page_num) rescue nil
|
||||
end
|
||||
|
||||
def bulletins_side_bar
|
||||
|
||||
@@ -89,6 +89,10 @@ class Bulletin
|
||||
def bulletin_category_with_title
|
||||
self.bulletin_category.title
|
||||
end
|
||||
|
||||
def bulletin_create_dept
|
||||
User.get_member_list_attribute_value(self.create_user_id,"staff","Unit").get_value_by_locale(I18n.locale)
|
||||
end
|
||||
|
||||
def share_item
|
||||
Item.first(conditions:{name: 'announcement'})
|
||||
|
||||
@@ -11,4 +11,14 @@ class BulletinFile
|
||||
|
||||
belongs_to :bulletin
|
||||
|
||||
validate :check_file_title
|
||||
|
||||
private
|
||||
|
||||
def check_file_title
|
||||
if self.title.blank?
|
||||
errors.add( :file, I18n.t("announcement.file_name_not_null"))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
xml.instruct! :xml, :version => "1.0"
|
||||
xml.rss :version => "2.0" do
|
||||
xml.channel do
|
||||
xml.title t('announcement.announcement') + ' ' + t('announcement.categories')
|
||||
xml.link "#{request.protocol}#{request.host_with_port}#{get_bulletin_categories_panel_announcement_back_end_bulletin_categorys_path(format: 'rss')}"
|
||||
|
||||
@categories.each do |category|
|
||||
xml.item do
|
||||
xml.title category.title
|
||||
xml.pubDate category.created_at.to_s(:rfc822)
|
||||
xml.link "#{request.protocol}#{request.host_with_port}#{get_bulletins_panel_announcement_back_end_bulletins_path(category_id: category.id, locale: I18n.locale, format: 'rss')}"
|
||||
xml.guid "#{request.protocol}#{request.host_with_port}#{panel_announcement_front_end_bulletins_path(category_id: category.id)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Vendored
+21
-20
@@ -22,7 +22,11 @@
|
||||
<img class="pull-left upload-picture" src="/assets/default-img.png" />
|
||||
<% end %>
|
||||
</div>
|
||||
<span class="alert widgetInfo"><%= t("ad.widget_info_for_ad_image_size", :best_size=> "290px x 150px") %></span>
|
||||
<span class="alert widgetInfo">
|
||||
<%= t("ad.widget_info_for_ad_image_size", :best_size=> "290px(w) x 230px(h)") %>
|
||||
<br />
|
||||
<%= t("announcement.image_upload_size_note", :image_upload_size =>'900kb') %>
|
||||
</span>
|
||||
<div class="controls file-upload input-prepend">
|
||||
<%= t(:browse) %>
|
||||
<%= f.file_field :image, :id => "input-upload", :class => '', :onchange => "document.getElementById('fu').innerHTML = this.form.fu.value = this.value;" %>
|
||||
@@ -278,32 +282,29 @@
|
||||
<div id="content-box">
|
||||
<hr />
|
||||
|
||||
<%#= f.datetime_picker :email_sentdate, :picker_type => 'separated', :label => t("announcement.email_sentdate") %>
|
||||
|
||||
<br />
|
||||
|
||||
<br />
|
||||
|
||||
<%= f.label :email_group ,t("announcement.email_group")%>
|
||||
<div class="form-inline">
|
||||
<ul class="nav nav-pills">
|
||||
<% @email_group_data.collect do |k,v| %>
|
||||
<li class="pull-left">
|
||||
<%= check_box_tag 'bulletin[email_group][]', k, (@bulletin.email_group.nil? ? false : @bulletin.email_group.include?(k)), :id => "field-#{k}" %>
|
||||
<label for="field-<%= k %>"><%= v["name"] %></label>
|
||||
<%= hidden_field_tag 'bulletin[email_group][]', '' %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<%= f.label :email_group ,t("announcement.email_group")%>
|
||||
<div class="form-inline">
|
||||
<ul class="nav nav-pills">
|
||||
<% @email_group_data.collect do |k,v| %>
|
||||
<li class="pull-left">
|
||||
<%= check_box_tag 'bulletin[email_group][]', k, (@bulletin.email_group.nil? ? false : @bulletin.email_group.include?(k)), :id => "field-#{k}" %>
|
||||
<label for="field-<%= k %>"><%= v["name"] %></label>
|
||||
<%= hidden_field_tag 'bulletin[email_group][]', '' %>
|
||||
</li>
|
||||
<% end if !@email_group_data.blank? %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<%= f.label :other_mailaddress ,"#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%>
|
||||
<%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %>
|
||||
<%= f.label :other_mailaddress ,"#{t("announcement.other_mailaddress")}(#{t("announcement.other_mailaddress_note")})"%>
|
||||
<%= f.text_area :other_mailaddress, :class=>"span12", :cols=>"25", :rows=>"10" %>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
@@ -1,5 +1,7 @@
|
||||
<% # encoding: utf-8 %>
|
||||
|
||||
<%= f.error_messages %>
|
||||
|
||||
<tr id="<%= "bulletin_file_#{form_bulletin_file.id}" if !form_bulletin_file.new_record? %>" class='list_item'>
|
||||
<td>
|
||||
<div class="control-group">
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
xml.instruct! :xml, :version => "1.0"
|
||||
xml.rss :version => "2.0" do
|
||||
xml.channel do
|
||||
if @category
|
||||
xml.title @category.title
|
||||
else
|
||||
xml.title t('announcement.announcement')
|
||||
end
|
||||
xml.link "#{request.protocol}#{request.host_with_port}#{get_bulletins_panel_announcement_back_end_bulletins_path(bulletin_category_id: @category.try(:id), format: 'rss')}"
|
||||
|
||||
@bulletins.each do |bulletin|
|
||||
xml.item do
|
||||
xml.title bulletin.title
|
||||
xml.pubDate bulletin.postdate.to_s(:rfc822)
|
||||
xml.description bulletin.subtitle
|
||||
xml.link "#{request.protocol}#{request.host_with_port}#{panel_announcement_front_end_bulletin_path(bulletin, category_id: bulletin.bulletin_category.id, locale: I18n.locale)}"
|
||||
xml.guid "#{request.protocol}#{request.host_with_port}#{panel_announcement_front_end_bulletin_path(bulletin)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Vendored
+2
-2
@@ -4,8 +4,8 @@
|
||||
<div class="info1">
|
||||
<span class="pull-right"><%= dislpay_view_count(@bulletin) %></span>
|
||||
<span class="date"><%= display_date_time(@bulletin.postdate) %></span>
|
||||
<% unit = @bulletin.cache_dept[I18n.locale.to_s] rescue nil %>
|
||||
<span><%= link_to unit,panel_announcement_front_end_index_bulletins_by_unit_path(:name=>unit) unless unit.blank? %></span>
|
||||
<% unit = User.get_member_list_attribute_value(@bulletin.create_user_id,"staff","Unit").get_value_by_locale(I18n.locale) rescue nil %>
|
||||
<span><%= t('announcement.default_widget.bulletin_create_dept') + ": " + unit unless unit.blank? %></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="news_image">
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
<% @bulletins.each do |bulletin| %>
|
||||
<li>
|
||||
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :tag_id => @selected_tag.id ) %>
|
||||
<%= link_to bulletin.title, panel_announcement_front_end_bulletin_path(bulletin, :category_id => bulletin.bulletin_category_id , :part_id => params[:part_id], :tag_id => [@selected_tag.id] ) %>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<div class='pagination'>
|
||||
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
<%= link_to_previous_page @bulletins, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @bulletins, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_bulletins', :part_id => params[:part_id], :tag_id => [@selected_tag.id]}, :remote => true, :class => 'next' %>
|
||||
</div>
|
||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
||||
<li>
|
||||
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:id => tag.id), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
|
||||
<%= link_to tag.name, panel_announcement_widget_bulletins_and_web_links_path(:inner=>true, :id => [tag.id], :part_id=>params[:part_id]), :remote => true, :class => ('active' if tag.eql?(@selected_tag)) %>
|
||||
</li>
|
||||
+2
-2
@@ -5,6 +5,6 @@
|
||||
<% end %>
|
||||
|
||||
<div class='pagination'>
|
||||
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
<%= link_to_previous_page @web_links, 'Previous Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'previous' %>
|
||||
<%= link_to_next_page @web_links, 'Next Page', :params => {:controller => 'widget/bulletins', :action => 'reload_web_links', :part_id => params[:part_id], :tag_id => @selected_tag.id}, :remote => true, :class => 'next' %>
|
||||
</div>
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
<div class="mega_tab_block">
|
||||
|
||||
<div class="tag_block">
|
||||
<ul id='bulletins_web_links_tags' class="tag_list">
|
||||
<%= render :partial => 'tag', :collection => @tags %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="news_block">
|
||||
<h3 class="news_title2">
|
||||
<%#= link_to t("announcement.bulletins"), panel_announcement_front_end_bulletins_path, :class => 'more' %>
|
||||
<%= link_to @title, panel_announcement_front_end_bulletins_path, :class => 'more' %>
|
||||
</h3>
|
||||
<ul id='bulletins_web_links_bulletins' class="news_list">
|
||||
<%= render 'bulletins' if @bulletins %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<% if @part.widget_style == 'bulletins_and_web_links' %>
|
||||
|
||||
<div class="links_block">
|
||||
<h3 class="links_title"><%= t(:related_links) %></h3>
|
||||
<ul id='bulletins_web_links_web_links' class="links_list">
|
||||
<%= render 'web_links' if @web_links %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
|
||||
<% content_for :page_specific_javascript do %>
|
||||
<%= javascript_include_tag "news_link" %>
|
||||
<% end %>
|
||||
|
||||
<%= stylesheet_link_tag "announcement/bulletins_and_web_links" %>
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
$('#bulletins_web_links_tags').html("<%= j render :partial => 'tag', :collection => @tags %>")
|
||||
$('#bulletins_web_links_bulletins').html("<%= j render 'bulletins' if @bulletins %>")
|
||||
$('#bulletins_web_links_web_links').html("<%= j render 'web_links' if @web_links %>")
|
||||
@@ -17,6 +17,7 @@ en:
|
||||
postdate: Post Date
|
||||
title: Title
|
||||
subtitle: SubTitle
|
||||
bulletin_create_dept: Unit
|
||||
editing_announcement: Edit Announcement
|
||||
editing_announcement_category: Edit Category
|
||||
error:
|
||||
@@ -24,6 +25,7 @@ en:
|
||||
file: Attachment
|
||||
file_description: File Description
|
||||
file_name: File Name
|
||||
file_name_not_null: Name cannot be null
|
||||
frontend:
|
||||
bulletins: Announcement front-end
|
||||
search_result: Search result
|
||||
@@ -35,7 +37,7 @@ en:
|
||||
update_bulletin_category_success: Update Category Successfully
|
||||
url: URL
|
||||
widget:
|
||||
bulletins_and_web_links: Bulletins and Web Resources
|
||||
bulletins_and_web_links: Differential Nav.
|
||||
index: Index
|
||||
search: Search
|
||||
email_eminder: Email Reminder
|
||||
@@ -47,11 +49,13 @@ en:
|
||||
email_group_data_2: Postgraduates
|
||||
email_group_data_3: Continuing Ed. Postgraduates
|
||||
email_group_data_4: Other
|
||||
mail_subject: this is an announcement reminder from【%{site_title}】
|
||||
# mail_subject: this is an announcement reminder from【%{site_title}】
|
||||
mail_subject: 【北教大公告提醒】
|
||||
other_mailaddress: Other Email
|
||||
other_mailaddress_note: Divide different email accounts with ","
|
||||
mail_hi: Hi
|
||||
mail_url_view: This email is the reminder of an announcement, please click the link for the details
|
||||
mail_source: Source
|
||||
mail_time: Time
|
||||
image_upload_size_note: The following recommendations %{image_upload_size} upload size
|
||||
|
||||
@@ -17,6 +17,7 @@ zh_tw:
|
||||
postdate: 張貼日期
|
||||
title: 標題
|
||||
subtitle: 副標題
|
||||
bulletin_create_dept: 單位
|
||||
editing_announcement: 編輯類別
|
||||
editing_announcement_category: 編輯類別
|
||||
error:
|
||||
@@ -24,6 +25,7 @@ zh_tw:
|
||||
file: 附加檔案
|
||||
file_description: 檔案描述
|
||||
file_name: 檔案名稱
|
||||
file_name_not_null: 名稱不得為空值
|
||||
frontend:
|
||||
bulletins: 公告前台
|
||||
search_result: 搜尋結果頁
|
||||
@@ -35,7 +37,7 @@ zh_tw:
|
||||
update_bulletin_category_success: 更新類別成功
|
||||
url: 連結位置
|
||||
widget:
|
||||
bulletins_and_web_links: 索引
|
||||
bulletins_and_web_links: 分眾頁籤
|
||||
index: 索引
|
||||
search: 搜尋
|
||||
email_eminder: 寄送提醒
|
||||
@@ -49,10 +51,12 @@ zh_tw:
|
||||
email_group_data_2: 日間部研究生
|
||||
email_group_data_3: 進修部研究生
|
||||
email_group_data_4: 其他
|
||||
mail_subject: 來自【%{site_title}】的公告事件提醒
|
||||
# mail_subject: 來自【%{site_title}】的公告事件提醒
|
||||
mail_subject: 【北教大公告提醒】
|
||||
mail_hi: 您好
|
||||
mail_url_view: 此封信件為公告事件提醒,請點選以下連結詳細觀看
|
||||
mail_source: 來源
|
||||
mail_time: 時間
|
||||
image_upload_size_note: 建議檔案小於%{image_upload_size}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ Rails.application.routes.draw do
|
||||
get 'load_quick_edit'
|
||||
end
|
||||
collection do
|
||||
get "get_bulletins"
|
||||
post "preview"
|
||||
put "preview"
|
||||
get 'delete'
|
||||
@@ -27,6 +28,7 @@ Rails.application.routes.draw do
|
||||
|
||||
resources :bulletin_categorys do
|
||||
collection do
|
||||
get "get_bulletin_categories"
|
||||
get 'get_categorys_json'
|
||||
end
|
||||
# if want to use json
|
||||
|
||||
+9
-2
@@ -29,13 +29,15 @@ module Announcement
|
||||
|
||||
widgets do
|
||||
default_widget do
|
||||
query 'Bulletin.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
|
||||
sorting 'desc(:postdate)'
|
||||
query 'Bulletin.can_display.available_for_lang(I18n.locale).any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now,:postdate.lte => Time.now} )'
|
||||
enable ["typeA","typeB_style3","typeC"]
|
||||
image :image
|
||||
field :postdate
|
||||
link_field :title,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self,:preview=>true}
|
||||
link_field :bulletin_category_with_title,{:method => 'panel_announcement_front_end_bulletins_path',:args=>{:category_id => [:bulletin_category,:id]}}
|
||||
field :subtitle
|
||||
link_field :subtitle,{:method => 'panel_announcement_front_end_bulletin_path',:args=>:self,:preview=>true}
|
||||
field :bulletin_create_dept
|
||||
link_to_more 'panel_announcement_front_end_bulletins_path',:title_i18n=> 'more_plus'
|
||||
end
|
||||
|
||||
@@ -51,6 +53,11 @@ module Announcement
|
||||
widget_i18n "announcement.widget.search"
|
||||
end
|
||||
|
||||
customize_widget "bulletins_and_web_links" do
|
||||
widget_i18n "announcement.widget.bulletins_and_web_links"
|
||||
style ["bulletins_and_links","bulletins_only"]
|
||||
end
|
||||
|
||||
# item "index","announcement.widget.index",:default_template=>true,:fields=>["title","category","postdate"]
|
||||
# item "bulletins_and_web_links","announcement.widget.bulletins_and_web_links"
|
||||
end
|
||||
|
||||
Vendored
-28
@@ -1,28 +0,0 @@
|
||||
class Panel::Ask::FrontEnd::AskQuestionsController < OrbitWidgetController
|
||||
|
||||
layout false
|
||||
|
||||
def initialize
|
||||
super
|
||||
@app_title = 'ask'
|
||||
end
|
||||
|
||||
def index
|
||||
@ask_question = AskQuestion.new
|
||||
end
|
||||
|
||||
def create
|
||||
@ask_question = AskQuestion.new(params[:ask_question])
|
||||
if verify_recaptcha model: @ask_question, private_key: '6Lfl7OESAAAAAD4rl5S16-zjt5yiKNYJ6jsqdwmL'
|
||||
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowlegement.new
|
||||
@ask_question.save
|
||||
AskAdmin.all.each do |ask_admin|
|
||||
Resque.enqueue(SendAskNoticeMail, ask_admin.id, @ask_question.id)
|
||||
end
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
<% if @ask_question.errors.empty? %>
|
||||
$('html,body').scrollTop(0);
|
||||
$('#acknowledgement')
|
||||
.html('<%= j simple_format(@ask_acknowledgement.content) %>')
|
||||
.fadeIn(600)
|
||||
.delay(3000)
|
||||
.fadeOut(600);
|
||||
<% else %>
|
||||
alert('<%= @ask_question.errors.full_messages.join('\n') %>');
|
||||
Recaptcha.reload()
|
||||
<% end %>
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
class Panel::Ask::FrontEnd::AskQuestionsController < OrbitWidgetController
|
||||
|
||||
layout false
|
||||
|
||||
def initialize
|
||||
super
|
||||
@app_title = 'ask'
|
||||
end
|
||||
|
||||
def index
|
||||
@ask_question = AskQuestion.new
|
||||
end
|
||||
|
||||
def create
|
||||
@ask_question = AskQuestion.new(params[:ask_question])
|
||||
if gotcha_valid? && @ask_question.save
|
||||
@acknowledgement = AskAcknowledgement.last
|
||||
@ask_acknowledgement = AskAcknowledgement.first || AskAcknowlegement.new
|
||||
#@ask_question.save
|
||||
redirect_to root_path
|
||||
AskAdmin.all.each do |ask_admin|
|
||||
AskMailer.notice(ask_admin, @ask_question).deliver
|
||||
Resque.enqueue(SendAskNoticeMail, ask_admin.id, @ask_question.id)
|
||||
end
|
||||
# redirect_to panel_ask_front_end_thank_you_path
|
||||
respond_to do |format|
|
||||
format.js
|
||||
# format.js { render :thank_you, notice: 'Your question has been successfully sent.' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def thank_you
|
||||
@acknowledgement = AskAcknowledgement.last
|
||||
@item = Page.find(params[:page_id]) rescue nil
|
||||
if @item
|
||||
if @item.frontend_data_count
|
||||
@page_num = @item.frontend_data_count
|
||||
else
|
||||
@page_num = 15
|
||||
end
|
||||
@frontend_style = @item.frontend_style
|
||||
end
|
||||
@item = Page.find(params[:page_id]) rescue nil
|
||||
end
|
||||
end
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
class AskMailer < ActionMailer::Base
|
||||
default from: 'orbit_test@rulingcom.com'
|
||||
|
||||
|
||||
def reply(ask_question)
|
||||
@ask_question = ask_question
|
||||
mail(:to => @ask_question.email, :subject => "#{t('ask.reply')}:#{@ask_question.title}")
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
+5
@@ -1,4 +1,8 @@
|
||||
class AskQuestion
|
||||
include ActiveModel::Validations
|
||||
include ActiveModel::Conversion
|
||||
extend ActiveModel::Naming
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include OrbitCoreLib::ObjectDisable
|
||||
@@ -15,4 +19,5 @@ class AskQuestion
|
||||
|
||||
belongs_to :ask_category
|
||||
has_one :ask_reply, dependent: :destroy
|
||||
|
||||
end
|
||||
File renamed without changes.
File renamed without changes.
+1
-1
@@ -5,7 +5,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<%= @ask_question.ask_reply.content %>
|
||||
<%= @ask_question.content %>
|
||||
</p>
|
||||
<p>此為系統自動發信,請勿直接回覆</p>
|
||||
</body>
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
-1
@@ -18,6 +18,5 @@
|
||||
|
||||
<div class="form-actions form-fixed pagination-right">
|
||||
<div id="ask_questions_pagination" class="paginationFixed">
|
||||
<%= paginate @ask_questions %>
|
||||
</div>
|
||||
</div>
|
||||
File renamed without changes.
+1
@@ -0,0 +1 @@
|
||||
window.location.href= "<%= panel_ask_front_end_thank_you_path %>"
|
||||
Loaded 100 of 257 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user