commit d82005a7f4d016d2271ec8b943f40215b6b1ce5e Author: nccu Date: Fri Nov 7 16:44:11 2014 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de5d954 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.bundle/ +log/*.log +pkg/ +test/dummy/db/*.sqlite3 +test/dummy/db/*.sqlite3-journal +test/dummy/log/*.log +test/dummy/tmp/ +test/dummy/.sass-cache diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..d15019e --- /dev/null +++ b/Gemfile @@ -0,0 +1,14 @@ +source "https://rubygems.org" + +# Declare your gem's dependencies in bulletin.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +# To use debugger +# gem 'debugger' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..41f03f3 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,106 @@ +PATH + remote: . + specs: + news (0.0.1) + mongoid (= 4.0.0.beta1) + rails (~> 4.1.0.rc2) + +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.1.0.rc2) + actionpack (= 4.1.0.rc2) + actionview (= 4.1.0.rc2) + mail (~> 2.5.4) + actionpack (4.1.0.rc2) + actionview (= 4.1.0.rc2) + activesupport (= 4.1.0.rc2) + rack (~> 1.5.2) + rack-test (~> 0.6.2) + actionview (4.1.0.rc2) + activesupport (= 4.1.0.rc2) + builder (~> 3.1) + erubis (~> 2.7.0) + activemodel (4.1.0.rc2) + activesupport (= 4.1.0.rc2) + builder (~> 3.1) + activerecord (4.1.0.rc2) + activemodel (= 4.1.0.rc2) + activesupport (= 4.1.0.rc2) + arel (~> 5.0.0) + activesupport (4.1.0.rc2) + i18n (~> 0.6, >= 0.6.9) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.1) + tzinfo (~> 1.1) + arel (5.0.0) + atomic (1.1.16) + bson (2.2.1) + builder (3.2.2) + connection_pool (2.0.0) + erubis (2.7.0) + hike (1.2.3) + i18n (0.6.9) + json (1.8.1) + mail (2.5.4) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.25.1) + minitest (5.3.1) + mongoid (4.0.0.beta1) + activemodel (>= 4.0.0) + moped (~> 2.0.beta6) + origin (~> 2.1) + tzinfo (>= 0.3.37) + moped (2.0.0.rc1) + bson (~> 2.2) + connection_pool (~> 2.0) + optionable (~> 0.2.0) + multi_json (1.9.2) + optionable (0.2.0) + origin (2.1.1) + polyglot (0.3.4) + rack (1.5.2) + rack-test (0.6.2) + rack (>= 1.0) + rails (4.1.0.rc2) + actionmailer (= 4.1.0.rc2) + actionpack (= 4.1.0.rc2) + actionview (= 4.1.0.rc2) + activemodel (= 4.1.0.rc2) + activerecord (= 4.1.0.rc2) + activesupport (= 4.1.0.rc2) + bundler (>= 1.3.0, < 2.0) + railties (= 4.1.0.rc2) + sprockets-rails (~> 2.0.0) + railties (4.1.0.rc2) + actionpack (= 4.1.0.rc2) + activesupport (= 4.1.0.rc2) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (10.2.2) + sprockets (2.12.0) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.0.1) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (~> 2.8) + thor (0.19.1) + thread_safe (0.3.1) + atomic (>= 1.1.7, < 2) + tilt (1.4.1) + treetop (1.4.15) + polyglot + polyglot (>= 0.3.1) + tzinfo (1.1.0) + thread_safe (~> 0.1) + +PLATFORMS + ruby + +DEPENDENCIES + news! diff --git a/MIT-LICENSE b/MIT-LICENSE new file mode 100644 index 0000000..ea966ec --- /dev/null +++ b/MIT-LICENSE @@ -0,0 +1,20 @@ +Copyright 2014 YOURNAME + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.rdoc b/README.rdoc new file mode 100644 index 0000000..b237aa4 --- /dev/null +++ b/README.rdoc @@ -0,0 +1,3 @@ += Bulletin + +This project rocks and uses MIT-LICENSE. \ No newline at end of file diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..dccbbb4 --- /dev/null +++ b/Rakefile @@ -0,0 +1,32 @@ +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end + +require 'rdoc/task' + +RDoc::Task.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'News' + rdoc.options << '--line-numbers' + rdoc.rdoc_files.include('README.rdoc') + rdoc.rdoc_files.include('lib/**/*.rb') +end + + + + +Bundler::GemHelper.install_tasks + +require 'rake/testtask' + +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' + t.libs << 'test' + t.pattern = 'test/**/*_test.rb' + t.verbose = false +end + + +task default: :test diff --git a/app/assets/images/news_alt.jpg b/app/assets/images/news_alt.jpg new file mode 100644 index 0000000..a7b1fb3 Binary files /dev/null and b/app/assets/images/news_alt.jpg differ diff --git a/app/assets/images/news_bulletin/.keep b/app/assets/images/news_bulletin/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/javascripts/admin/news.js b/app/assets/javascripts/admin/news.js new file mode 100644 index 0000000..dee720f --- /dev/null +++ b/app/assets/javascripts/admin/news.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/javascripts/news_bulletin/.keep b/app/assets/javascripts/news_bulletin/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/stylesheets/admin/news.css b/app/assets/stylesheets/admin/news.css new file mode 100644 index 0000000..2c22c38 --- /dev/null +++ b/app/assets/stylesheets/admin/news.css @@ -0,0 +1,7 @@ +/* + Place all the styles related to the matching controller here. + They will automatically be included in application.css. +*/ +.table .expired{ + color: #BE2E2E; +} \ No newline at end of file diff --git a/app/assets/stylesheets/news_bulletin/.keep b/app/assets/stylesheets/news_bulletin/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/controllers/.keep b/app/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/controllers/admin/news_admins_controller.rb b/app/controllers/admin/news_admins_controller.rb new file mode 100644 index 0000000..165eab6 --- /dev/null +++ b/app/controllers/admin/news_admins_controller.rb @@ -0,0 +1,56 @@ +# encoding: utf-8 +class Admin::NewsAdminsController < OrbitAdminController + def initialize + super + @app_title = 'news_admin' + end + + def index + @unit_table_fields = ['news.unit','news.department'] + @unit = Unit.new + @units = Unit.order_by(sort) + end + + def create + unit = Unit.new(unit_params) + unit.save + redirect_to admin_news_admins_path + end + + def edit + @unit = Unit.find(params[:id]) + @unit_table_fields = ['news.unit','news.department'] + @units = Unit.order_by(sort) + + @url = admin_news_admin_path(@unit) + end + + def update + @unit = Unit.find(params[:id]) + @unit.update_attributes(unit_params) + + redirect_to admin_news_admins_path + end + + def destroy + unit = Unit.find(params[:id]) + unit.destroy + redirect_to admin_news_admins_path + end + + def unit_params + params.require(:unit).permit! + end + + def get_departments + unit = Unit.find(Sanitize.clean(params[:unit])) + departments = unit.departments.collect do |d| + { + "name" => d.name, + "id" => d.id.to_s + } + end + render :json => {"departments" => departments}.to_json + end + +end diff --git a/app/controllers/admin/news_controller.rb b/app/controllers/admin/news_controller.rb new file mode 100644 index 0000000..075516e --- /dev/null +++ b/app/controllers/admin/news_controller.rb @@ -0,0 +1,225 @@ +# encoding: utf-8 +class Admin::NewsController < OrbitAdminController + include Admin::NewsHelper + before_action ->(module_app = @app_title) { set_variables module_app } + before_action :set_news_bulletin, only: [:edit, :destroy] + before_action :load_access_level + + def initialize + super + @app_title = "news" + end + + def index + @tags = @module_app.tags + @categories = @module_app.categories.enabled + @filter_fields = filter_fields(@categories, @tags) + @table_fields = [:status, :category, :title, :start_date, :end_date, :image, "news.unit", :view_count] + + @news_bulletin = NewsBulletin.where(:is_preview.in=>[false,nil]) + .order_by(sort) + .with_categories(filters("category")) + .with_tags(filters("tag")) + .with_status(filters("status")) + + @news_bulletin = search_data(@news_bulletin,[:title]).page(params[:page]).per(10) + + if request.xhr? + render :partial => "index" + end + end + + def new + @tags = @module_app.tags + @statuses = [] + @news_bulletin = NewsBulletin.new + @news_bulletin.email_sentdate = Time.now + @unit = Unit.all + end + + def create + if !news_bulletin_params['news_bulletin_links_attributes'].nil? + news_bulletin_params['news_bulletin_links_attributes'].each do |idx,link| + news_bulletin_params['news_bulletin_links_attributes'].delete(idx.to_s) if link['url'].blank? + end + end + news_bulletin = NewsBulletin.new(news_bulletin_params) + news_bulletin.create_user_id = current_user.id + news_bulletin.update_user_id = current_user.id + if user_can_approve? + news_bulletin.approved = true + end + news_bulletin.save + build_email(news_bulletin) + redirect_to params['referer_url'] + end + + def approve_news_bulletin + id = params[:id] + news_bulletin = NewsBulletin.find(id) + news_bulletin.approved = true + news_bulletin.save + redirect_to admin_news_path + end + + def edit + if can_edit_or_delete?(@news_bulletin) + @unit = Unit.all + @department = Department.where(:unit_id => @news_bulletin.unit_id) + @tags = @module_app.tags + @categories = @module_app.categories.enabled + @statuses = [] + @news_bulletin.email_sentdate = Time.now if @news_bulletin.email_sent == false + @selected = nil + else + render_401 + end + end + + def update + uid = params[:id].split('-').last + news_bulletin = NewsBulletin.find_by(:uid=>uid) + news_bulletin_params[:tags] = news_bulletin_params[:tags].blank? ? [] : news_bulletin_params[:tags] + news_bulletin_params[:email_member_ids] = news_bulletin_params[:email_member_ids].blank? ? [] : news_bulletin_params[:email_member_ids] + + if !news_bulletin_params['news_bulletin_links_attributes'].nil? + news_bulletin_params['news_bulletin_links_attributes'].each do |idx,link| + news_bulletin_params['news_bulletin_links_attributes'].delete(idx.to_s) if link['url'].blank? + end + end + + news_bulletin.update_attributes(news_bulletin_params) + news_bulletin.save + build_email(news_bulletin) + redirect_to params['referer_url'] + end + + def destroy + @news_bulletin.destroy + redirect_to "/admin/news" + end + + def delete + if params[:ids] + NewsBulletin.any_in(:uid => params[:ids]).destroy_all + end + redirect_to "/admin/news" + end + + def preview + if params['preview_type'].eql?('edit') + news_bulletin_data = news_bulletin_params + org_news_bulletin = NewsBulletin.find(params['news_bulletin_id']) + news_bulletin = org_news_bulletin.clone + news_bulletin.generate_uid + news_bulletin.news_bulletin_files = [] + news_bulletin.news_bulletin_links = [] + if news_bulletin_data['image'].blank? + news_bulletin.image = org_news_bulletin.image + end + + if !news_bulletin_data['news_bulletin_files_attributes'].blank? + news_bulletin_data['news_bulletin_files_attributes'].each do |key, news_bulletin_file| + next if !news_bulletin_file['_destroy'].blank? + file = nil + if news_bulletin_file['id'].blank? + file = NewsBulletinFile.new(news_bulletin_file) + file.news_bulletin_id = news_bulletin.id + file.save + else + org_file = NewsBulletinFile.find(news_bulletin_file['id']) + file = org_file.clone + file.news_bulletin_id = news_bulletin.id + file.file = org_file.file + news_bulletin_file.delete('id') + news_bulletin_file.delete('_destroy') + file.update_attributes(news_bulletin_file) + end + + file.save + news_bulletin.news_bulletin_files << file + end + end + + if !news_bulletin_data['news_bulletin_links_attributes'].blank? + news_bulletin_data['news_bulletin_links_attributes'].each do |key, news_bulletin_link| + next if !news_bulletin_link['_destroy'].blank? + + if news_bulletin_link['id'].blank? + link = NewsBulletinLink.new(news_bulletin_link) + link.news_bulletin_id = news_bulletin.id + else + link = NewsBulletinLink.find(news_bulletin_link['id']).clone + link.news_bulletin_id = news_bulletin.id + news_bulletin_link.delete('id') + news_bulletin_link.delete('_destroy') + link.update_attributes(news_bulletin_link) + end + + link.save + news_bulletin.news_bulletin_links << link + end + end + + news_bulletin_data.delete('news_bulletin_files_attributes') + news_bulletin_data.delete('news_bulletin_links_attributes') + news_bulletin.update_attributes(news_bulletin_data) + else + news_bulletin = NewsBulletin.new(news_bulletin_params) + end + + news_bulletin.is_preview = true + news_bulletin.save + render :text=>page_for_news_bulletin(news_bulletin) + end + + def destroy_preview + news_bulletin = NewsBulletin.find_by(:uid=>params['uid']) + if news_bulletin.is_preview + news_bulletin.destroy + end + render :json=>{'destroy'=>news_bulletin.id.to_s} + end + + def build_email(news_bulletin) + if news_bulletin.email_sent and !news_bulletin.email_addresses.blank? + if news_bulletin.email.nil? + email = Email.new + email.save + news_bulletin.email_id = email.id + news_bulletin.save + end + + is_sent = news_bulletin.email.is_sent + is_sent = !params[:resend_mail].eql?("true") if !params[:resend_mail].blank? + + news_bulletin.email.update_attributes( + :create_user=>current_user, + :mail_sentdate=>news_bulletin.email_sentdate, + :module_app=>@module_app, + :mail_to=>news_bulletin.email_addresses, + :mail_subject=>news_bulletin.title, + :template=>'news/email', + :template_data=>{ + "host" => request.host_with_port, + "title" => news_bulletin.title, + "url" => page_for_news_bulletin(news_bulletin) + }, + :is_sent=>is_sent + ) + else + news_bulletin.email.destroy if !news_bulletin.email.nil? + end + end + + private + + def set_news_bulletin + @news_bulletin = NewsBulletin.find(params[:id]) + end + + def news_bulletin_params + params[:news_bulletin][:email_sent] = params[:news_bulletin][:email_sent].nil? ? 0 : params[:news_bulletin][:email_sent] + params.require(:news_bulletin).permit! + end +end diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb new file mode 100644 index 0000000..fdde9ee --- /dev/null +++ b/app/controllers/news_controller.rb @@ -0,0 +1,169 @@ +class NewsController < ApplicationController + + def index + params = OrbitHelper.params + news = nil + + if params[:keywords] + news = NewsBulletin.where(:title.ne => "").any_of(:title => /#{params[:keywords].to_s}/i).is_approved.order_by(:created_at=>'desc').filter_by_categories(["all"]).per(15) if !params[:keywords].nil? + news_count = news.count + keyword = params[:keywords] + elsif params["department"] + dept = Department.find_by(:uid => params["department"].split("-").last) rescue nil + news = NewsBulletin.where(:title.ne => "" ,:department => dept).is_approved.order_by(:created_at=>'desc').filter_by_categories(["all"]) if !dept.nil? + news_count = news.count + keyword = params[:department] + elsif params["unit"] + unit = Unit.find_by(:uid => params["unit"].split("-").last) rescue nil + news = NewsBulletin.where(:title.ne => "" ,:unit => unit).is_approved.order_by(:created_at=>'desc').filter_by_categories(["all"]) if !unit.nil? + news_count = news.count + keyword = params[:unit] + elsif params["category"] + category = Category.find_by(:uid => params["category"].split("-").last) rescue nil + news = NewsBulletin.all.where(:title.ne => "").is_approved.order_by(:created_at=>'desc').filter_by_categories([category.id.to_s]) if !category.nil? + news_count = news.count + keyword = params[:category] + end + news = NewsBulletin.where(:title.ne => "" ,:is_preview.in=>[false,nil]).is_approved.order_by(:created_at=>'desc').filter_by_categories.filter_by_tags(OrbitHelper.params['tags']) if news.nil? + page = Page.where(:module => "news").first rescue nil + ma = ModuleApp.find_by_key("news") rescue nil + categories = ma.categories.enabled.collect do |cat| + { + "category-name" => cat.title, + "category-link" => "/#{I18n.locale.to_s + page.url}/?category=#{cat.to_param}" + } + end + anns = news.collect do |a| + statuses = a.statuses_with_classname.collect do |status| + { + "status" => status["name"], + "status-class" => "status-#{status['classname']}" + } + end + { + "title" => a.title, + "subtitle" => a.subtitle, + "statuses" => statuses, + "category" => a.category.title, + "postdate" => a.postdate.strftime('%Y-%m-%d'), + "link_to_show" => OrbitHelper.url_to_show(a.to_param), + "img_src" => a.image.thumb.url || "http://placehold.it/100x100", + "more" => t(:more_plus) + } + end + { + "news" => anns, + "categories" => categories, + "extras" => { + "categories-title" => t("news.categories"), + "widget-title" =>t('news.news'), + "title-head" => t('news.table.title'), + "date-head" => t('news.table.date'), + "status-head" => t('news.table.status'), + "subtitle-head" => t('news.table.sub_title'), + "category-head" => t('news.table.category'), + "news_count" => news_count, + "keyword" => keyword + }, + "total_pages" => news.total_pages + } + + end + + def widget + news = NewsBulletin.where(:title.ne => "",:is_preview.in=>[false,nil]).is_approved.order_by(:created_at=>'desc').filter_by_widget_categories.filter_by_tags(OrbitHelper.widget_tags) + page = Page.where(:module => "news").first rescue nil + ma = ModuleApp.find_by_key("news") rescue nil + categories = ma.categories.enabled.collect do |cat| + { + "name" => cat.title, + "category-link" => "/#{I18n.locale.to_s + page.url}/?category=#{cat.to_param}" + } + end + + categories.unshift({"name" => t("news.all"), "category-link" => "/#{I18n.locale.to_s + page.url}/"}) + + anns = news.collect do |a| + statuses = a.statuses_with_classname.collect do |status| + { + "status" => status["name"], + "status-class" => "status-#{status['classname']}" + } + end + { + "title" => a.title, + "subtitle" => a.subtitle, + "statuses" => statuses, + "category" => a.category.title, + "postdate" => a.postdate, + "link_to_show" => OrbitHelper.widget_item_url(a.to_param), + "img_src" => a.image.thumb.url || "http://placehold.it/100x100", + } + end + { + "news" => anns, + "categories" => categories, + "extras" => { + "more_url"=>OrbitHelper.widget_more_url, + "title-head" => t('news.table.title'), + "date-head" => t('news.table.date'), + "status-head" => t('news.table.status'), + "subtitle-head" => t('news.table.sub_title'), + "category-head" => t('news.table.category') + } + } + end + + def show + params = OrbitHelper.params + news = NewsBulletin.find_by(:uid=>params[:uid]) + url_to_edit = OrbitHelper.user_can_edit?(news) ? "/admin/news/#{news.id.to_s}/edit" : "" + + access_level = OrbitHelper.user_access_level? + page = Page.where(:module => "news").first rescue nil + + if !news.approved && (access_level != "manager" && access_level != "admin") + return {} + end + ma = ModuleApp.find_by_key("news") rescue nil + categories = ma.categories.enabled.collect do |cat| + { + "category-name" => cat.title, + "category-link" => "/#{I18n.locale.to_s + page.url}/?category=#{cat.to_param}" + } + end + + tags = news.tags.map{|tag| { + "tag" => tag.name , + "url" => OrbitHelper.page_for_tag(tag) + } } rescue [] + files = news.news_bulletin_files.collect{|file| { "file_url" => file.file.url, "file_title" => (file.title.blank? ? File.basename(file.file.path) : file.title) } } rescue [] + links = news.news_bulletin_links.collect{|link| { "link_url" => link.url, "link_title" => (link.title.blank? ? link.url : link.title) } } rescue [] + update_user = news.update_user.member_profile.name rescue "" + department = news.department rescue "" + { + "tags" => tags, + "news_bulletin_files" => files, + "news_bulletin_links" => links, + "categories" => categories, + "data" => { + "categories-title" => t("news.categories"), + "title" => news.title, + "category" => news.category.title, + "category-link" => "/#{I18n.locale.to_s + page.url}/?category=#{news.category.to_param}", + "unit" => news.unit.name, + "unit-link" => "/#{I18n.locale.to_s + page.url}/?unit=#{news.unit.to_param}", + "department" => (department.name rescue ""), + "department-link" => "/#{I18n.locale.to_s + page.url}/?department=#{(department.to_param rescue "")}", + "update_user" => update_user, + "updated_at" => news.updated_at.strftime('%Y-%m-%d %H:%M'), + "body" =>news.text, + "image" => news.image.url, + "view_count" =>news.view_count + }, + "impressionist" => (news.is_preview ? nil : news), + "url_to_edit"=>url_to_edit + } + end + +end diff --git a/app/helpers/.keep b/app/helpers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/helpers/admin/news_helper.rb b/app/helpers/admin/news_helper.rb new file mode 100644 index 0000000..df8da0f --- /dev/null +++ b/app/helpers/admin/news_helper.rb @@ -0,0 +1,47 @@ +module Admin::NewsHelper + def page_for_news_bulletin(news_bulletin) + ann_page = nil + pages = Page.where(:module=>'news') + + pages.each do |page| + if page.categories.count ==1 + if page.categories.include?(news_bulletin.category.id.to_s) + ann_page = page + end + end + break if !ann_page.nil? + end + + if ann_page.nil? + pages.each do |page| + if page.categories.include?(news_bulletin.category.id.to_s) + ann_page = page + end + break if !ann_page.nil? + end + end + + ann_page = pages.first if ann_page.nil? + request.protocol+(request.host_with_port+ann_page.url+'/'+news_bulletin.to_param).gsub('//','/') rescue "/" + end + + def load_access_level + if current_user.is_admin? + @access_level = "admin" + elsif current_user.is_manager?(@module_app) + @access_level = "manager" + end + end + + def user_can_approve? + case @access_level + when "admin" + return true + when "manager" + return true + else + return false + end + end + +end diff --git a/app/mailers/.keep b/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/models/.keep b/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/models/department.rb b/app/models/department.rb new file mode 100644 index 0000000..c4bc905 --- /dev/null +++ b/app/models/department.rb @@ -0,0 +1,14 @@ +# encoding: utf-8 +class Department + + include Mongoid::Document + include Mongoid::Timestamps + include Slug + + field :name, as: :slug_title, :localize => true + field :sort_number, :type => Integer + field :should_destroy, :type => Boolean + + belongs_to :unit + +end \ No newline at end of file diff --git a/app/models/news_bulletin.rb b/app/models/news_bulletin.rb new file mode 100644 index 0000000..120235c --- /dev/null +++ b/app/models/news_bulletin.rb @@ -0,0 +1,79 @@ +class NewsBulletin + include Mongoid::Document + include Mongoid::Timestamps + + include OrbitModel::Status + include OrbitModel::Impression + # encoding: utf-8 + include OrbitTag::Taggable + include OrbitCategory::Categorizable + include Slug + + field :title, as: :slug_title, type: String, localize: true + field :subtitle, localize: true + field :text, localize: true + + field :create_user_id + field :update_user_id + + field :public, :type => Boolean, :default => true + field :postdate , :type => DateTime, :default => Time.now + field :deadline , :type => DateTime + field :rss2_sn + field :approved, :type => Boolean, :default => false + field :is_preview, :type => Boolean, :default => false + + field :email_id + field :email_sent, :type => Boolean, :default => false + field :email_sentdate , :type => DateTime + field :email_member_ids + field :other_mailaddress + + mount_uploader :image, ImageUploader + + belongs_to :unit + belongs_to :department + + has_many :news_bulletin_links, :autosave => true, :dependent => :destroy + has_many :news_bulletin_files, :autosave => true, :dependent => :destroy + + accepts_nested_attributes_for :news_bulletin_files, :allow_destroy => true + accepts_nested_attributes_for :news_bulletin_links, :allow_destroy => true + + before_destroy :destroy_email + + scope :can_display, ->{where(:is_hidden=>false).any_of({:postdate.lt=>Time.now, :deadline.gt=>Time.now},{:postdate.lt=>Time.now, :deadline=>nil}).order_by([:is_top, :desc])} + scope :is_approved, ->{where(:approved => true)} + + def update_user + User.find(update_user_id) rescue nil + end + + def update_user=(user) + self.update_user_id = user.id + end + + def email_members + MemberProfile.find(self.email_member_ids) rescue [] + end + + def email_addresses + addresses = self.email_members.collect{|member| member.email} rescue [] + addresses = addresses +[self.other_mailaddress] if !self.other_mailaddress.blank? + addresses.flatten + end + + def email + mail = Email.find(self.email_id) rescue nil + end + + def expired? + (self.deadline < Time.now) rescue false + end + + def destroy_email + mail = Email.find(self.email_id) rescue nil + mail.destroy if !mail.nil? + end + +end diff --git a/app/models/news_bulletin_file.rb b/app/models/news_bulletin_file.rb new file mode 100644 index 0000000..65e3c4e --- /dev/null +++ b/app/models/news_bulletin_file.rb @@ -0,0 +1,14 @@ +# encoding: utf-8 +class NewsBulletinFile + + include Mongoid::Document + include Mongoid::Timestamps + + mount_uploader :file, AssetUploader + + field :description, localize: true + field :title, localize: true + + belongs_to :news_bulletin + +end diff --git a/app/models/news_bulletin_link.rb b/app/models/news_bulletin_link.rb new file mode 100644 index 0000000..3685fd2 --- /dev/null +++ b/app/models/news_bulletin_link.rb @@ -0,0 +1,25 @@ +# encoding: utf-8 +require 'uri' + +class NewsBulletinLink + include Mongoid::Document + include Mongoid::Timestamps + + field :url + field :title, localize: true + + belongs_to :news_bulletin + + before_validation :add_http + + validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i + + protected + + def add_http + unless self.url[/^http:\/\//] || self.url[/^https:\/\//] + self.url = 'http://' + self.url + end + end + +end \ No newline at end of file diff --git a/app/models/unit.rb b/app/models/unit.rb new file mode 100644 index 0000000..6393c06 --- /dev/null +++ b/app/models/unit.rb @@ -0,0 +1,24 @@ +# encoding: utf-8 +class Unit + include Mongoid::Document + include Mongoid::Timestamps + include Slug + + field :name, as: :slug_title, :localize => true + field :sort_number, type: Integer + + has_many :departments, :autosave => true, :dependent => :destroy + + accepts_nested_attributes_for :departments, :allow_destroy => true + + after_save :save_departments + + def save_departments + self.departments.each do |t| + if t.should_destroy + t.destroy + end + end + end + +end \ No newline at end of file diff --git a/app/views/.keep b/app/views/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/views/admin/news/_form.html.erb b/app/views/admin/news/_form.html.erb new file mode 100644 index 0000000..f400c19 --- /dev/null +++ b/app/views/admin/news/_form.html.erb @@ -0,0 +1,483 @@ + + +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> +<% end %> + + +
+ + + + + + +
+ + +
+ + +
+ +
+ <% if request.params["action"] == "edit" %> + <%= f.select :unit_id, @unit.collect{|t| [ t.name, t.id ]} %> + <%= f.select :department_id, @department.collect{|t| [ t.name, t.id ]} %> + <% elsif request.params["action"]== "new" %> + <%= + select_tag "news_bulletin[unit_id]", + options_from_collection_for_select(@unit, "id", "name"), + :'data-remote' => 'true', + :'url' => "/admin/news/getdata", + :'prompt' => t("news_bulletin.ut_prompt"), + :'data-type' => 'json' + %> + <%= + select_tag "news_bulletin[department_id]" + %> + <% end %> +
+
+ + +
+ +
+ <%= select_category(f, @module_app) %> +
+
+ + +
+ +
+ <%= f.datetime_picker :postdate, :no_label => true %> +
+
+ +
+ +
+ <%= f.datetime_picker :deadline, :no_label => true %> +
+
+ +
+ + +
+ + +
+ +
+ + + +
+
+ +
+ <%# end %> + + +
+ + +
+ +
+
+
+ <% if @news_bulletin.image.file %> + <%= image_tag @news_bulletin.image %> + <% else %> + + <% end %> +
+
+ + <%= t(:select_image) %> + <%= t(:change) %> + <%= f.file_field :image %> + + <%= t(:cancel) %> +
+ +
+
+
+ +
+
+ ※<%= t("ad.widget_info_for_ad_image_size", :best_size=> "290px x 150px") %> +
+ ※<%= t("news.image_size_limit")%> +
+ ※<%= t("news.image_note")%> +
+ ※如何裁剪新聞刊頭圖片 +
+
+
+ + +
+
+ +
+ +
+ + + + + + +
+ + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
"> + + +
+ +
+ <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t(:title), value: (@news_bulletin.title_translations[locale] rescue nil) %> + <% end %> +
+
+ + +
+ +
+
+ <%= f.fields_for :subtitle_translations do |f| %> + <%= f.text_area locale, rows: 2, class: "input-block-level", value: (@news_bulletin.subtitle_translations[locale] rescue nil) %> + <% end %> +
+
+
+ + +
+ +
+
+ ※內文裡單一圖片大小為1MB以下。 +
+ ※內文裡單一圖片尺寸的最大寬度600px(滿版),如圖片要縮小,請依比例調整。 +
+ ※如何剪裁新聞圖片。 +
+
+ <%= f.fields_for :text_translations do |f| %> + <%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@news_bulletin.text_translations[locale] rescue nil) %> + <% end %> +
+
+
+ +
+ + <% end %> + + +
+ +
+ + + <% if @news_bulletin && !@news_bulletin.news_bulletin_links.blank? %> +
+ <% @news_bulletin.news_bulletin_links.each_with_index do |news_bulletin_link, i| %> + <%= f.fields_for :news_bulletin_links, news_bulletin_link do |f| %> + <%= render :partial => 'form_link', :object => news_bulletin_link, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> +
+
+ <% end %> + + +
+
+

+ <%= hidden_field_tag 'news_bulletin_link_field_count', @news_bulletin.news_bulletin_links.count %> + <%= t(:add) %> +

+ +
+
+ + +
+ +
+ + + <% if @news_bulletin && !@news_bulletin.news_bulletin_files.blank? %> +
+ <% @news_bulletin.news_bulletin_files.each_with_index do |news_bulletin_file, i| %> + <%= f.fields_for :news_bulletin_files, news_bulletin_file do |f| %> + <%= render :partial => 'form_file', :object => news_bulletin_file, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> +
+
+ <% end %> + + +
+
+

+ <%= hidden_field_tag 'news_bulletin_file_field_count', @news_bulletin.news_bulletin_files.count %> + <%= t(:add) %> +

+ +
+
+ +
+ +
+ + +
+ <%= get_referer_url[:action] rescue "" %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + + <%= button_tag t("preview"), id: "button_for_preview", name: "commit", class: 'btn', type: :button %> + <%= link_to t('cancel'), admin_news_index_path, :class=>"btn" %> +
+ + + + + +<% content_for :page_specific_javascript do %> + +<% end %> \ No newline at end of file diff --git a/app/views/admin/news/_form_file.html.erb b/app/views/admin/news/_form_file.html.erb new file mode 100644 index 0000000..8628623 --- /dev/null +++ b/app/views/admin/news/_form_file.html.erb @@ -0,0 +1,55 @@ +<% if form_file.new_record? %> +
+<% else %> +
+ <% if form_file.file.blank? %> + <%= t(:no_file) %> + <% else %> + <%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %> + <% end %> +<% end %> +
+ + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :description_translations do |f| %> + <%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + <% if form_file.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
+
\ No newline at end of file diff --git a/app/views/admin/news/_form_link.html.erb b/app/views/admin/news/_form_link.html.erb new file mode 100644 index 0000000..461a3fc --- /dev/null +++ b/app/views/admin/news/_form_link.html.erb @@ -0,0 +1,26 @@ +
+ + <%= f.text_field :url, class: "input-large", placeholder: t(:url) %> + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + <% if form_link.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
diff --git a/app/views/admin/news/_index.html.erb b/app/views/admin/news/_index.html.erb new file mode 100644 index 0000000..b14e829 --- /dev/null +++ b/app/views/admin/news/_index.html.erb @@ -0,0 +1,136 @@ + + + + + + <% @table_fields.each do |f| %> + <%= thead(f) %> + <% end %> + + + + <% @news_bulletin.each do |b| %> + + + + + + + + + + + + + + <% end %> + +
+ <%= b.status_for_table %> + <%= b.category.title %> + <% if b.expired? %> + <%= b.title %> <%= t(:expired) %> + <% elsif !b.approved? %> + <%= b.title %> <%= t(:pending) %> + <% else %> + <%= b.title %> + <% end %> +
+ +
+
<%= format_value b.postdate %>"><%= format_value b.deadline %> + <%= content_tag(:div, image_tag(b.image.file.blank? ? "/assets/news_alt.jpg" : b.image.url), {:class => "img-peview", :rel=>"popover", "data-content"=>"#{image_tag(b.image.file.blank? ? "/assets/news_alt.jpg" : b.image.url)}", "data-trigger"=>"hover", "data-placement"=>"left"}) %> + + <% Unit.where({:id => b.unit_id}).each do |u| %> + <%= u.name %> + <% end %> + <% Department.where({:id => b.department}).each do |d| %> + -<%= d.name %> + <% end %> + <%= b.view_count %>
+
" class="footable-row-detail-inner" style="display: none;"> +
+ <%= t(:tags) %> : + <% b.tags.each do |tag| %> + <%= tag.name %> + <% end %> +
+
+ <%= t("news.email_to") %> : + <% b.email_members.each do |member| %> + <%= member.name %> + <% end %> + <% unless b.other_mailaddress.nil? %> + <% b.other_mailaddress.split(',').each do |mailaddress| %> + <%= mailaddress %> + <% end %> + <% end %> +
+
+
+ +<%= + content_tag :div, class: "bottomnav clearfix" do + content_tag :div, paginate(@news_bulletin), class: "pagination pagination-centered" + end +%> + +<% content_for :page_specific_css do %> + +<% end %> +<% content_for :page_specific_javascript do %> + +<% end %> \ No newline at end of file diff --git a/app/views/admin/news/edit.html.erb b/app/views/admin/news/edit.html.erb new file mode 100644 index 0000000..1d57feb --- /dev/null +++ b/app/views/admin/news/edit.html.erb @@ -0,0 +1,5 @@ +<%= form_for @news_bulletin, url: admin_news_path(@news_bulletin), html: {class: "form-horizontal main-forms previewable"} do |f| %> +
+ <%= render :partial => 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/news/index.html.erb b/app/views/admin/news/index.html.erb new file mode 100644 index 0000000..1ad9a26 --- /dev/null +++ b/app/views/admin/news/index.html.erb @@ -0,0 +1,6 @@ +<%= render_filter @filter_fields, "index_table" %> + + <%= render 'index'%> + + +<%= render 'layouts/delete_modal', delete_options: @delete_options %> \ No newline at end of file diff --git a/app/views/admin/news/new.html.erb b/app/views/admin/news/new.html.erb new file mode 100644 index 0000000..24180f8 --- /dev/null +++ b/app/views/admin/news/new.html.erb @@ -0,0 +1,5 @@ +<%= form_for @news_bulletin, url: admin_news_index_path, html: {class: "form-horizontal main-forms previewable"} do |f| %> +
+ <%= render :partial => 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/news_admins/_form_dept.html.erb b/app/views/admin/news_admins/_form_dept.html.erb new file mode 100644 index 0000000..e625f52 --- /dev/null +++ b/app/views/admin/news_admins/_form_dept.html.erb @@ -0,0 +1,32 @@ +
+
+ '> + + <% @site_in_use_locales.each_with_index do |locale, i| %> + + <%= locale %>"> + <%= f.fields_for :name_translations do |f| %> + <%= f.text_field locale, :class => "input-medium", placeholder: t('news.department'), :value => (form_dept.name_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + + + <%= f.text_field :sort_number , :class => "input-mini" %> + + + <% if form_dept.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
+
diff --git a/app/views/admin/news_admins/edit.html.erb b/app/views/admin/news_admins/edit.html.erb new file mode 100644 index 0000000..7a15cdc --- /dev/null +++ b/app/views/admin/news_admins/edit.html.erb @@ -0,0 +1,145 @@ + +<%= render 'layouts/delete_modal', delete_options: @delete_options %> + + + + <% @unit_table_fields.each do |f| %> + <%= thead(f) %> + <% end %> + + + + <% @units.each do |a| %> + + + + + <% end %> + +
+ <%= a.name %> +
+ +
+
+ <% Department.where({:unit_id => a.id}).each do |d| %> + <%= d.name %>
+ <% end %> +
+<%= form_for @unit, :url => @url, html: {class: "form-horizontal main-forms previewable"} do |f| %> +
+
+ <% # encoding: utf-8 %> + <% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/main-list" %> + <% end %> + <% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/module-area" %> + <% end %> + +

<%= @unit.new_record? ? t(:add) : t(:edit) %>

+ + + + + + +
+ + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
"> + + +
+ +
+ <%= f.fields_for :name_translations do |f| %> + <%= f.text_field locale, class: "input-xxlarge", placeholder: t(:name), value: (@unit.name_translations[locale] rescue nil) %> + <% end %> +
+
+ +
+ + <% end %> + + +
+ +
+ + + <% if @unit && !@unit.departments.blank? %> +
+ <% @unit.departments.each_with_index do |department, i| %> + <%= f.fields_for :departments, department do |f| %> + <%= render :partial => 'form_dept', :object => department, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> +
+
+ <% end %> + + +
+
+

+ <%= hidden_field_tag 'department_field_count', @unit.departments.count %> + <%= t(:add) %> +

+
+
+
+
+ +
+ <%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + +
+ + <% content_for :page_specific_javascript do %> + + <% end %> + +
+<% end %> + diff --git a/app/views/admin/news_admins/index.html.erb b/app/views/admin/news_admins/index.html.erb new file mode 100644 index 0000000..a5a2abd --- /dev/null +++ b/app/views/admin/news_admins/index.html.erb @@ -0,0 +1,144 @@ +<%= render 'layouts/delete_modal', delete_options: @delete_options %> + + + + <% @unit_table_fields.each do |f| %> + <%= thead(f) %> + <% end %> + + + + <% @units.each do |a| %> + + + + + <% end %> + +
+ <%= a.name %> +
+ +
+
+ <% Department.where({:unit_id => a.id}).each do |d| %> + <%= d.name %>
+ <% end %> +
+<%= form_for @unit, :url => admin_news_admins_path, html: {class: "form-horizontal main-forms previewable"} do |f| %> +
+
+ <% # encoding: utf-8 %> + <% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/main-list" %> + <% end %> + <% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/module-area" %> + <% end %> + +

<%= @unit.new_record? ? t(:add) : t(:edit) %>

+ + + + + + +
+ + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
"> + + +
+ +
+ <%= f.fields_for :name_translations do |f| %> + <%= f.text_field locale, class: "input-xxlarge", placeholder: t('news.unit'), value: (@unit.name_translations[locale] rescue nil) %> + <% end %> +
+
+ +
+ + <% end %> + + +
+ +
+ + + <% if @unit && !@unit.departments.blank? %> +
+ <% @unit.departments.each_with_index do |department, i| %> + <%= f.fields_for :departments, department do |f| %> + <%= render :partial => 'form_dept', :object => department, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> +
+
+ <% end %> + + +
+
+

+ <%= hidden_field_tag 'department_field_count', @unit.departments.count %> + <%= t(:add) %> +

+
+
+
+
+ + + +
+ <%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> +
+ + <% content_for :page_specific_javascript do %> + + <% end %> +
+<% end %> + diff --git a/app/views/news/email.html.erb b/app/views/news/email.html.erb new file mode 100644 index 0000000..5ceab4b --- /dev/null +++ b/app/views/news/email.html.erb @@ -0,0 +1,19 @@ + + + + + + +
+ + <%= t('news.mail_hi') %>

+ <%= t('news.mail_url_view') %>

+ " target="_blank"> <%= @data["title"] %>

+ + --
+ <%= t('news.mail_source') %> :" target="_blank"> <%= Site.first.title %>
+ <%= t('news.mail_time') %> <%= DateTime.now %> +
+ + + \ No newline at end of file diff --git a/app/views/news/index.html.erb b/app/views/news/index.html.erb new file mode 100644 index 0000000..648b75c --- /dev/null +++ b/app/views/news/index.html.erb @@ -0,0 +1 @@ +<%= render_view %> \ No newline at end of file diff --git a/app/views/news/show.html.erb b/app/views/news/show.html.erb new file mode 100644 index 0000000..648b75c --- /dev/null +++ b/app/views/news/show.html.erb @@ -0,0 +1 @@ +<%= render_view %> \ No newline at end of file diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000..08ba0ad --- /dev/null +++ b/bin/rails @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application. + +ENGINE_ROOT = File.expand_path('../..', __FILE__) +ENGINE_PATH = File.expand_path('../../lib/announcement/engine', __FILE__) + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) + +# require 'rails/all' +# require 'rails/engine/commands' +require "action_controller/railtie" +require "action_mailer/railtie" +require "sprockets/railtie" +require "rails/test_unit/railtie" +require 'rails/engine/commands' +require "mongoid/railtie" diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..48692d9 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,62 @@ +en: + + news: + admins: Unit Setting + unit: Unit + department: Department + all: All + table: + title : Title + date : Date + status : Status + sub_title: Sub Title + category: Category + add_new: Add New + approve: Approve + all_articles: All Articles + news: News + approval_setting: Approval Setting + approve_bulletin_fail: Approval Fail + approve_bulletin_success: Approve Successfully + bulletins: Bulletins + categories: Categories + create_bulletin_success: Create Bulletin Successfully + create_bulletin_category_success: Create Category Successfully + date: News Date + default_widget: + bulletin_category_with_title: Bulletin Category with Title + postdate: Post Date + subtitle: Subtitle + title: Title + editing_announcement: Edit News + editing_announcement_category: Edit Category + file: Attachment + file_description: File Description + file_name: File Name + frontend: + bulletins: News front-end + search_result: Search result + link_name: Link Name + new_bulletin_category: New Bulletin Category + picture: Cover Picture + search: Search + selected_file: Select File + update_bulletin_category_success: Update Category Successfully + url: URL + widget: + bulletins_and_web_links: Differential Nav. + index: Index + search: Search + email_reminder: Email Reminder + activate_email_reminder: Activate Email Reminder + email_sentdate: Email Time + email_to: Email To + mail_subject: this is an news reminder from【%{site_title}】 + 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 news, please click the link for the details + mail_source: Source + mail_time: Time + image_upload_size_note: The following recommendations %{image_upload_size} upload size + resend_mail: Re-send Email \ No newline at end of file diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml new file mode 100644 index 0000000..afe80ff --- /dev/null +++ b/config/locales/zh_tw.yml @@ -0,0 +1,90 @@ +zh_tw: + + module_name: + news: 新聞 + + news_bulletin: + user_default_image: 或使用預設圖片 + all_category: 全部類別 + campus_news: 校園新聞 + category: 分類 + create_news_bulletin_category_success: 新聞類別已成功建立 + create_news_bulletin_success: 新聞已成功建立 + department: 單位 + editing_news: 編輯新聞 + editing_news_category: 編輯類別 + error: + no_avilb_cate_for_posting: 新聞必需有一個類別才能發送,請與管理員聯絡 + hot: 頭版 + news_bulletins: 新聞 + new_news_category: 新增新聞類別 + search: 搜尋新聞 + update_news_bulletin_category_success: 新聞類別已成功建立 + update_news_bulletin_success: 新聞已成功更新 + ut_prompt: 請選擇單位 + news: + unit: 單位 + department: 系所 + add_new: 新建 + all_articles: 文章列表 + all: 全部類別 + news: 新聞 + admins: 單位設定 + append_note: 以下之附加連結與檔案,為使前台顯示名稱,建議您輸入註解。 + approval_setting: 審核設定 + approve_news_bulletin_fail: 審核失敗 + approve_news_bulletin_success: 審核成功 + news_bulletins: 新聞 + categories: 類別 + create_news_bulletin_success: 建立新聞成功 + create_news_bulletin_category_success: 建立類別成功 + date: 起迄日期 + default_widget: + news_bulletin_category_with_title: 類別 + postdate: 張貼日期 + subtitle: 副標題 + title: 標題 + news_bulletin_create_dept: 單位 + editing_news: 編輯類別 + editing_news_category: 編輯類別 + error: + no_avilb_cate_for_posting: 沒有可以張貼的類別 + file: 附加檔案 + file_description: 檔案描述 + file_name: 檔案名稱 + file_size: 檔案大小 + file_size_limit: 檔案大小上限 + file_size_exceed_limitation: 超過上限 + frontend: + news_bulletins: 新聞前台 + search_result: 搜尋結果頁 + index_by_unit: index_by_unit + image: 封面圖片 + image_note: 此處上傳的圖片不會在公告內文出現 + image_size_limit: 圖片大小為1MB以下 + link_name: 連結名稱 + new_news_bulletin_category: 新增新聞類別 + picture: 刊頭圖片 + search: 搜尋 + selected_file: 選擇檔案 + update_news_bulletin_category_success: 更新類別成功 + url: 連結位置 + widget: + news_bulletins_side_bar: News bulletins side bar + home_banner: Home banner + news_bulletins_and_web_links: 分眾頁籤 + index: 索引 + search: 搜尋 + more: 更多+ + email_reminder: 寄送提醒 + activate_email_reminder: 開啟寄送提醒 + email_sentdate: 寄送時間 + email_to: 寄送對象 + other_mailaddress: 其他Mail + other_mailaddress_note: 輸入多組mail時,請用","逗號隔開 + mail_subject: 來自【%{site_title}】的新聞事件提醒 + mail_hi: 您好 + mail_url_view: 此封信件為新聞事件提醒,請點選以下連結詳細觀看 + mail_source: 來源 + mail_time: 時間 + image_upload_size_note: 建議檔案小於%{image_upload_size} diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..99fbf19 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,23 @@ +Rails.application.routes.draw do + + locales = Site.first.in_use_locales rescue I18n.available_locales + + scope "(:locale)", locale: Regexp.new(locales.join("|")) do + namespace :admin do + post 'news/preview', to: 'news#preview' + get 'news/destroy_preview/:slug_title-:uid', to: 'news#destroy_preview' + get 'news/approve_bulletin', to: 'news#approve_bulletin' + get 'news_admins/get_departments' => "news_admins#get_departments" + resources :news + resources :news_admins + end + + + resources :news do + collection do + get ':slug_title-:uid', to: 'news#show', as: :display + end + end + end + +end diff --git a/lib/news.rb b/lib/news.rb new file mode 100644 index 0000000..faf412b --- /dev/null +++ b/lib/news.rb @@ -0,0 +1,4 @@ +require "news/engine" + +module News +end diff --git a/lib/news/engine.rb b/lib/news/engine.rb new file mode 100644 index 0000000..834b852 --- /dev/null +++ b/lib/news/engine.rb @@ -0,0 +1,55 @@ +module News + class Engine < ::Rails::Engine + initializer "news" do + OrbitApp.registration "News", :type => "ModuleApp" do + module_label "news.news" + base_url File.expand_path File.dirname(__FILE__) + widget_methods ["widget"] + widget_settings [{"data_count"=>10}] + # taggable "NewsBulletin" + categorizable + authorizable + frontend_enabled + data_count 1..10 + + side_bar do + head_label_i18n 'news.news', icon_class: "icons-book-2" + available_for "users" + active_for_controllers (['admin/news']) + head_link_path "admin_news_index_path" + + context_link 'news.all_articles', + :link_path=>"admin_news_index_path" , + :priority=>1, + :active_for_action=>{'admin/news'=>'index'}, + :available_for => 'users' + context_link 'new_', + :link_path=>"new_admin_news_path" , + :priority=>2, + :active_for_action=>{'admin/news'=>'news'}, + :available_for => 'sub_managers' + context_link 'news.admins', + :link_path=>"admin_news_admins_path" , + :priority=>4, + :active_for_action=>{'admin/news'=>'admins'}, + :available_for => 'managers' + context_link 'categories', + :link_path=>"admin_module_app_categories_path" , + :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'news').id}", + :priority=>3, + :active_for_action=>{'admin/news'=>'categories'}, + :active_for_category => 'News', + :available_for => 'managers' + context_link 'tags', + :link_path=>"admin_module_app_tags_path" , + :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'news').id}", + :priority=>4, + :active_for_action=>{'admin/news'=>'tags'}, + :active_for_tag => 'News', + :available_for => 'managers' + end + + end + end + end +end \ No newline at end of file diff --git a/lib/news/version.rb b/lib/news/version.rb new file mode 100644 index 0000000..6cc85fe --- /dev/null +++ b/lib/news/version.rb @@ -0,0 +1,3 @@ +module News + VERSION = "0.0.1" +end diff --git a/lib/tasks/news_bulletin_tasks.rake b/lib/tasks/news_bulletin_tasks.rake new file mode 100644 index 0000000..cfe4f33 --- /dev/null +++ b/lib/tasks/news_bulletin_tasks.rake @@ -0,0 +1,4 @@ +# desc "Explaining what the task does" +# task :bulletin do +# # Task goes here +# end diff --git a/news.gemspec b/news.gemspec new file mode 100644 index 0000000..bc66dd0 --- /dev/null +++ b/news.gemspec @@ -0,0 +1,19 @@ +$:.push File.expand_path("../lib", __FILE__) + +# Maintain your gem's version: +require "news/version" + +# Describe your gem and declare its dependencies: +Gem::Specification.new do |s| + s.name = "news" + s.version = News::VERSION + s.authors = ["RulingDigital"] + s.email = ["orbit@rulingcom.com"] + s.homepage = "http://www.rulingcom.com" + s.summary = "News for Orbit" + s.description = "News for Orbit" + s.license = "MIT" + + s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] + s.test_files = Dir["test/**/*"] +end diff --git a/test/bulletin_test.rb b/test/bulletin_test.rb new file mode 100644 index 0000000..10cd840 --- /dev/null +++ b/test/bulletin_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class BulletinTest < ActiveSupport::TestCase + test "truth" do + assert_kind_of Module, Bulletin + end +end diff --git a/test/controllers/admin/announcements_controller_test.rb b/test/controllers/admin/announcements_controller_test.rb new file mode 100644 index 0000000..1bacec2 --- /dev/null +++ b/test/controllers/admin/announcements_controller_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class Admin::AnnouncementsControllerTest < ActionController::TestCase + test "should get new" do + get :new + assert_response :success + end + + test "should get create" do + get :create + assert_response :success + end + +end diff --git a/test/dummy/README.rdoc b/test/dummy/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/test/dummy/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/test/dummy/Rakefile b/test/dummy/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/test/dummy/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/test/dummy/app/assets/images/.keep b/test/dummy/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/assets/javascripts/application.js b/test/dummy/app/assets/javascripts/application.js new file mode 100644 index 0000000..5bc2e1c --- /dev/null +++ b/test/dummy/app/assets/javascripts/application.js @@ -0,0 +1,13 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require_tree . diff --git a/test/dummy/app/assets/stylesheets/application.css b/test/dummy/app/assets/stylesheets/application.css new file mode 100644 index 0000000..a443db3 --- /dev/null +++ b/test/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/test/dummy/app/controllers/application_controller.rb b/test/dummy/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/test/dummy/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/test/dummy/app/controllers/concerns/.keep b/test/dummy/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/helpers/application_helper.rb b/test/dummy/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/test/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/test/dummy/app/mailers/.keep b/test/dummy/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/models/.keep b/test/dummy/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/models/concerns/.keep b/test/dummy/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/views/layouts/application.html.erb b/test/dummy/app/views/layouts/application.html.erb new file mode 100644 index 0000000..593a778 --- /dev/null +++ b/test/dummy/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Dummy + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/test/dummy/bin/bundle b/test/dummy/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/test/dummy/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/test/dummy/bin/rails b/test/dummy/bin/rails new file mode 100755 index 0000000..728cd85 --- /dev/null +++ b/test/dummy/bin/rails @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/test/dummy/bin/rake b/test/dummy/bin/rake new file mode 100755 index 0000000..1724048 --- /dev/null +++ b/test/dummy/bin/rake @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/test/dummy/config.ru b/test/dummy/config.ru new file mode 100644 index 0000000..5bc2a61 --- /dev/null +++ b/test/dummy/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb new file mode 100644 index 0000000..091c8f5 --- /dev/null +++ b/test/dummy/config/application.rb @@ -0,0 +1,29 @@ +require File.expand_path('../boot', __FILE__) + +# Pick the frameworks you want: +# require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_view/railtie" +require "sprockets/railtie" +require "rails/test_unit/railtie" + +Bundler.require(*Rails.groups) +require "bulletin" + +module Dummy + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + end +end + diff --git a/test/dummy/config/boot.rb b/test/dummy/config/boot.rb new file mode 100644 index 0000000..6266cfc --- /dev/null +++ b/test/dummy/config/boot.rb @@ -0,0 +1,5 @@ +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) +$LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) diff --git a/test/dummy/config/environment.rb b/test/dummy/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/test/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/test/dummy/config/environments/development.rb b/test/dummy/config/environments/development.rb new file mode 100644 index 0000000..a384d95 --- /dev/null +++ b/test/dummy/config/environments/development.rb @@ -0,0 +1,34 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/test/dummy/config/environments/production.rb b/test/dummy/config/environments/production.rb new file mode 100644 index 0000000..4f67ce3 --- /dev/null +++ b/test/dummy/config/environments/production.rb @@ -0,0 +1,80 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable Rails's static asset server (Apache or nginx will already do this). + config.serve_static_assets = false + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Generate digests for assets URLs. + config.assets.digest = true + + # Version of your assets, change this if you want to expire all your assets. + config.assets.version = '1.0' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Set to :debug to see everything in the log. + config.log_level = :info + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets. + # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. + # config.assets.precompile += %w( search.js ) + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Disable automatic flushing of the log to improve performance. + # config.autoflush_log = false + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new +end diff --git a/test/dummy/config/environments/test.rb b/test/dummy/config/environments/test.rb new file mode 100644 index 0000000..053f5b6 --- /dev/null +++ b/test/dummy/config/environments/test.rb @@ -0,0 +1,39 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static asset server for tests with Cache-Control for performance. + config.serve_static_assets = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/test/dummy/config/initializers/backtrace_silencers.rb b/test/dummy/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/test/dummy/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/test/dummy/config/initializers/cookies_serializer.rb b/test/dummy/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7a06a89 --- /dev/null +++ b/test/dummy/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json \ No newline at end of file diff --git a/test/dummy/config/initializers/filter_parameter_logging.rb b/test/dummy/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/test/dummy/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/test/dummy/config/initializers/inflections.rb b/test/dummy/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/test/dummy/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/test/dummy/config/initializers/mime_types.rb b/test/dummy/config/initializers/mime_types.rb new file mode 100644 index 0000000..72aca7e --- /dev/null +++ b/test/dummy/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/test/dummy/config/initializers/session_store.rb b/test/dummy/config/initializers/session_store.rb new file mode 100644 index 0000000..e766b67 --- /dev/null +++ b/test/dummy/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_dummy_session' diff --git a/test/dummy/config/initializers/wrap_parameters.rb b/test/dummy/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..b81ea74 --- /dev/null +++ b/test/dummy/config/initializers/wrap_parameters.rb @@ -0,0 +1,9 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end diff --git a/test/dummy/config/locales/en.yml b/test/dummy/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/test/dummy/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/test/dummy/config/routes.rb b/test/dummy/config/routes.rb new file mode 100644 index 0000000..3f66539 --- /dev/null +++ b/test/dummy/config/routes.rb @@ -0,0 +1,56 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/test/dummy/config/secrets.yml b/test/dummy/config/secrets.yml new file mode 100644 index 0000000..e9213c0 --- /dev/null +++ b/test/dummy/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 51f457918fc204bef2280de08080b24d6289997cc1af905e47aead42b5e027b6bc27cd6cbd1cb11a34d8df4163d63db2a0ff973acfa11b239a5dd15d6bfb5bfd + +test: + secret_key_base: 1a2d31f4fb35a33e52a69eac67e125b9b1ba5b302e8d3468e60282061a8e74d1a8d977fb88f2eb001aecb99c9c3fbde29e0c7c5ac5d548e1458772ee50ed48e9 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/test/dummy/lib/assets/.keep b/test/dummy/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/log/.keep b/test/dummy/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/public/404.html b/test/dummy/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/test/dummy/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/test/dummy/public/422.html b/test/dummy/public/422.html new file mode 100644 index 0000000..a21f82b --- /dev/null +++ b/test/dummy/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/test/dummy/public/500.html b/test/dummy/public/500.html new file mode 100644 index 0000000..061abc5 --- /dev/null +++ b/test/dummy/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/test/dummy/public/favicon.ico b/test/dummy/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/test/helpers/admin/announcements_helper_test.rb b/test/helpers/admin/announcements_helper_test.rb new file mode 100644 index 0000000..a867b12 --- /dev/null +++ b/test/helpers/admin/announcements_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class Admin::AnnouncementsHelperTest < ActionView::TestCase +end diff --git a/test/integration/navigation_test.rb b/test/integration/navigation_test.rb new file mode 100644 index 0000000..eec8c0e --- /dev/null +++ b/test/integration/navigation_test.rb @@ -0,0 +1,9 @@ +require 'test_helper' + +class NavigationTest < ActionDispatch::IntegrationTest + + # test "the truth" do + # assert true + # end +end + diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000..1e26a31 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,15 @@ +# Configure Rails Environment +ENV["RAILS_ENV"] = "test" + +require File.expand_path("../dummy/config/environment.rb", __FILE__) +require "rails/test_help" + +Rails.backtrace_cleaner.remove_silencers! + +# Load support files +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } + +# Load fixtures from the engine +if ActiveSupport::TestCase.method_defined?(:fixture_path=) + ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) +end