faq app
This commit is contained in:
		
							parent
							
								
									9e02011956
								
							
						
					
					
						commit
						a8f7422c25
					
				|  | @ -0,0 +1,7 @@ | |||
| .bundle/ | ||||
| log/*.log | ||||
| pkg/ | ||||
| test/dummy/db/*.sqlite3 | ||||
| test/dummy/log/*.log | ||||
| test/dummy/tmp/ | ||||
| test/dummy/.sass-cache | ||||
|  | @ -0,0 +1,17 @@ | |||
| source "http://rubygems.org" | ||||
| 
 | ||||
| # Declare your gem's dependencies in faq.gemspec. | ||||
| # Bundler will treat runtime dependencies like base dependencies, and | ||||
| # development dependencies will be added by default to the :development group. | ||||
| gemspec | ||||
| 
 | ||||
| # jquery-rails is used by the dummy application | ||||
| gem "jquery-rails" | ||||
| 
 | ||||
| # 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' | ||||
|  | @ -0,0 +1,20 @@ | |||
| Copyright 2013 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. | ||||
|  | @ -0,0 +1,3 @@ | |||
| = Faq | ||||
| 
 | ||||
| This project rocks and uses MIT-LICENSE. | ||||
|  | @ -0,0 +1,40 @@ | |||
| #!/usr/bin/env rake | ||||
| begin | ||||
|   require 'bundler/setup' | ||||
| rescue LoadError | ||||
|   puts 'You must `gem install bundler` and `bundle install` to run rake tasks' | ||||
| end | ||||
| begin | ||||
|   require 'rdoc/task' | ||||
| rescue LoadError | ||||
|   require 'rdoc/rdoc' | ||||
|   require 'rake/rdoctask' | ||||
|   RDoc::Task = Rake::RDocTask | ||||
| end | ||||
| 
 | ||||
| RDoc::Task.new(:rdoc) do |rdoc| | ||||
|   rdoc.rdoc_dir = 'rdoc' | ||||
|   rdoc.title    = 'Faq' | ||||
|   rdoc.options << '--line-numbers' | ||||
|   rdoc.rdoc_files.include('README.rdoc') | ||||
|   rdoc.rdoc_files.include('lib/**/*.rb') | ||||
| end | ||||
| 
 | ||||
| APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__) | ||||
| load 'rails/tasks/engine.rake' | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 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 | ||||
|  | @ -0,0 +1,28 @@ | |||
| <%#= encoding: utf-8 %> | ||||
| $(document).ready(function(){ | ||||
| //alert("Anc Loaded"); | ||||
| $('.qa_links_block a.delete').live('click', function(){ | ||||
|   $(this).parents('.list_item').remove(); | ||||
| }); | ||||
| 
 | ||||
| $('.qa_files_block a.delete').live('click', function(){ | ||||
|   $(this).parents('.list_item').remove(); | ||||
| }); | ||||
| 
 | ||||
| $(document).on('click', '.action a.remove_existing_record', function(){ | ||||
|   if(confirm("<%= I18n.t(:sure?)%>")){ | ||||
|     $(this).next('.should_destroy').attr('value', 1); | ||||
|     $("tr#" + $(this).prev().attr('value')).hide(); | ||||
|   } | ||||
| }); | ||||
| 
 | ||||
| $(document).on('click', '.quick_edit_cancel', function(){ | ||||
|   tr = $(this).attr('rel'); | ||||
|   $('#' + tr).hide(); | ||||
|   $("tr#qa_file_" + $(this).prev().attr('value')).hide(); | ||||
|   $("tr#qa_link_" + $(this).prev().attr('value')).hide(); | ||||
| }); | ||||
| $('.reject_info').tooltip({ | ||||
|   placement : 'bottom' | ||||
| }); | ||||
| }); | ||||
|  | @ -0,0 +1,23 @@ | |||
| class ApplicationController < ActionController::Base | ||||
|   protect_from_forgery | ||||
|   before_filter :set_locale | ||||
|    | ||||
|   # Set I18n.locale | ||||
|   def set_locale | ||||
|     # update session if passed | ||||
|     session[:locale] = params[:locale] if params[:locale] | ||||
| 
 | ||||
|     # set locale based on session or default | ||||
|     begin | ||||
|       # check if locale is valid for non site pages | ||||
|       if !VALID_LOCALES.include?(session[:locale]) | ||||
|         I18n.locale = I18n.default_locale | ||||
|       else | ||||
|         I18n.locale = session[:locale] | ||||
|       end | ||||
|      rescue | ||||
|        I18n.locale = I18n.default_locale | ||||
|      end     | ||||
|   end | ||||
|    | ||||
| end | ||||
							
								
								
									
										104
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/qa_categorys_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										104
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/qa_categorys_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,104 @@ | |||
| class Panel::Faq::BackEnd::QaCategorysController < OrbitBackendController | ||||
|     before_filter :for_app_manager,:except => [:index]  | ||||
|     include OrbitControllerLib::DivisionForDisable | ||||
| 
 | ||||
|   def index | ||||
|     @qa_categorys =  get_categories_for_index("QaCategory") | ||||
|     @qa_category = QaCategory.new(:display => 'List') | ||||
| 	 | ||||
| 	@url = panel_faq_back_end_qa_categorys_path | ||||
| 	 | ||||
|     respond_to do |format| | ||||
|       format.html # index.html.erb | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # GET /qas/1 | ||||
|   # GET /qas/1.xml | ||||
|   def show | ||||
|     @qa_category = QaCategory.find(params[:id]) | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html # show.html.erb | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # GET /qas/new | ||||
|   # GET /qas/new.xml | ||||
|   def new | ||||
|     @qa_category = QaCategory.new(:display => 'List') | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html # new.html.erb | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   # GET /qas/1/edit | ||||
|   def edit | ||||
|     @qa_category = QaCategory.find(params[:id]) | ||||
| 	 | ||||
| 	@url = panel_faq_back_end_qa_category_path(@qa_category) | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # POST /qas | ||||
|   # POST /qas.xml | ||||
|   def create | ||||
|     @qa_category = QaCategory.new(params[:qa_category]) | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       if @qa_category.save | ||||
|         format.html { redirect_to(panel_faq_back_end_qa_categorys_url, :notice => t('qa.create_qa_category_success')) } | ||||
|         format.js | ||||
|       else | ||||
|         format.html { render :action => "new" } | ||||
|         format.js { render action: "new" } | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # PUT /qas/1 | ||||
|   # PUT /qas/1.xml | ||||
|   def update | ||||
|     @qa_category = QaCategory.find(params[:id]) | ||||
| 	 | ||||
| 	@url = panel_faq_back_end_qa_category_path(@qa_category) | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       if @qa_category.update_attributes(params[:qa_category]) | ||||
|         format.html { redirect_to(panel_faq_back_end_qa_categorys_url, :notice => t('qa.update_qa_category_success')) } | ||||
|         # format.xml  { head :ok } | ||||
|         format.js | ||||
|       else | ||||
|         format.html { render :action => "edit" } | ||||
|         format.js { render :action => "edit" } | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # DELETE /qas/1 | ||||
|   # DELETE /qas/1.xml | ||||
|   def destroy | ||||
|     @qa_category = QaCategory.find(params[:id]) | ||||
|     @qa_category.disable = @qa_category.disable ? false : true | ||||
| 
 | ||||
|     if @qa_category.save! | ||||
|       respond_to do |format| | ||||
|         format.html { redirect_to(panel_faq_back_end_qa_categorys_url) } | ||||
|         # format.xml  { head :ok } | ||||
|         format.js | ||||
|       end       | ||||
|     else | ||||
|       flash[:error] = t("update.fail") | ||||
|       format.html { render :action => "index" } | ||||
|     end | ||||
| 
 | ||||
|   end | ||||
| end | ||||
							
								
								
									
										144
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/qas_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										144
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/qas_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,144 @@ | |||
| class Panel::Faq::BackEnd::QasController < OrbitBackendController | ||||
|   # before_filter :for_app_manager,:except => [:index,:show]  | ||||
|   include AdminHelper | ||||
|   include OrbitControllerLib::DivisionForDisable | ||||
| 
 | ||||
|   before_filter :force_order_for_visitor,:only=>[:index] | ||||
|   before_filter :force_order_for_user,:except => [:index] | ||||
| 
 | ||||
|   before_filter :for_app_sub_manager,:except => [:index] | ||||
|   before_filter :only => [ :new,:edit,:update,:create] do |controller| | ||||
|     controller.get_categorys('QaCategory') | ||||
|   end | ||||
| 
 | ||||
|   def index | ||||
| 
 | ||||
|   get_categorys("QaCategory",params[:qa_category_id]) | ||||
|   @filter = params[:filter] | ||||
|   new_filter = params[:new_filter] | ||||
| 
 | ||||
|   if @filter && params[:clear] | ||||
|     @filter.delete(params[:type]) | ||||
|   elsif @filter && new_filter | ||||
|     if @filter.has_key?(new_filter[:type]) && @filter[new_filter[:type]].include?(new_filter[:id].to_s) | ||||
|       @filter[new_filter[:type]].delete(new_filter[:id].to_s) | ||||
|     elsif @filter.has_key?(new_filter[:type]) | ||||
|       @filter[new_filter[:type]] << new_filter[:id].to_s | ||||
|     else | ||||
|       @filter.merge!({new_filter[:type] => [new_filter[:id].to_s]}) | ||||
|     end | ||||
|   elsif new_filter | ||||
|     @filter = {new_filter[:type] => [new_filter[:id].to_s]} | ||||
|   end | ||||
|   @qa_categories =  get_categories_for_index("QaCategory") | ||||
|   @qa_category_ids = @qa_categories.collect{|t| t.id.to_s} + [nil] | ||||
| 
 | ||||
| 	# @qas = Qa.search(params[:category_id]) | ||||
| 	#@qas = (params[:sort] || @filter) ? get_sorted_and_filtered_qas : Qa.all.page(params[:page]).per(10) | ||||
|   @qas = (params[:sort] || @filter) ? get_sorted_and_filtered("qa",:qa_category_id.in => @qa_category_ids) : get_viewable("qa",:qa_category_id.in => @qa_category_ids) | ||||
| 
 | ||||
|   get_tags | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html # index.html.erb | ||||
|       format.xml  { render :xml => @qas } | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # GET /qas/1 | ||||
|   # GET /qas/1.xml | ||||
|   def show | ||||
|     @qa = Qa.find(params[:id]) | ||||
|     respond_to do |format| | ||||
|       format.html # show.html.erb | ||||
|       format.xml  { render :xml => @qa } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # GET /qas/new | ||||
|   # GET /qas/new.xml | ||||
|   def new | ||||
|     @qa = Qa.new | ||||
|     get_tags | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html # new.html.erb | ||||
|       format.xml  { render :xml => @qa } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # GET /qas/1/edit | ||||
|   def edit | ||||
|     @qa = Qa.find(params[:id]) | ||||
| 	get_tags | ||||
|   end | ||||
| 
 | ||||
|   # POST /qas | ||||
|   # POST /qas.xml | ||||
|   def create | ||||
|     @qa = Qa.new(params[:qa]) | ||||
| 	get_tags | ||||
|     @qa.create_user_id = current_user.id | ||||
|     @qa.update_user_id = current_user.id | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       if @qa.save | ||||
|         format.html { redirect_to(panel_faq_back_end_qas_url) } | ||||
|         format.xml  { render :xml => @qa, :status => :created, :location => @qa } | ||||
|       else | ||||
|         format.html { render :action => "new" } | ||||
|         format.xml  { render :xml => @qa.errors, :status => :unprocessable_entity } | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # PUT /qas/1 | ||||
|   # PUT /qas/1.xml | ||||
|   def update | ||||
|     @qa = Qa.find(params[:id]) | ||||
| 	 | ||||
|     @qa.update_user_id = current_user.id | ||||
| 	 | ||||
| 	params[:qa][:tag_ids] ||=[] | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       if @qa.update_attributes(params[:qa]) | ||||
|         format.html { redirect_to(panel_faq_back_end_qas_url(:page => params[:page])) } | ||||
| 		format.js  { render 'toggle_enable' } | ||||
|         format.xml  { head :ok } | ||||
|       else | ||||
|         format.html { render :action => "edit" } | ||||
|         format.xml  { render :xml => @qa.errors, :status => :unprocessable_entity } | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   # DELETE /qas/1 | ||||
|   # DELETE /qas/1.xml | ||||
|   def destroy | ||||
|     @qa = Qa.find(params[:id]) | ||||
|     @qa.destroy | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.html { redirect_to(panel_faq_back_end_qas_url) } | ||||
|       # format.xml  { head :ok } | ||||
|       format.js | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def delete | ||||
|     if params[:ids] | ||||
|       qas = Qa.any_in(:_id => params[:ids]).destroy_all | ||||
|     end | ||||
|     redirect_to panel_faq_back_end_qas_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) | ||||
|   end | ||||
|    | ||||
|   protected | ||||
|    | ||||
|   def get_tags | ||||
|   	module_app = ModuleApp.first(:conditions => {:key => 'faq'}) | ||||
|   	@tags = Tag.all(:conditions => {:module_app_id => module_app.id}) rescue [] | ||||
|   end | ||||
|    | ||||
| end | ||||
							
								
								
									
										8
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/tags_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										8
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/back_end/tags_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,8 @@ | |||
| class Panel::Faq::BackEnd::TagsController < Admin::TagsController | ||||
|    | ||||
|   def initialize | ||||
|     super | ||||
|     @app_title = 'faq' | ||||
|   end | ||||
|    | ||||
| end | ||||
							
								
								
									
										51
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/front_end/qas_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										51
									
								
								vendor/built_in_modules/faq/app/controllers/panel/faq/front_end/qas_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,51 @@ | |||
| class Panel::Faq::FrontEnd::QasController < OrbitWidgetController | ||||
|    | ||||
|   def initialize | ||||
|     super | ||||
|     @app_title = 'faq' | ||||
|   end | ||||
|    | ||||
|   # GET /qas | ||||
|   # GET /qas.xml | ||||
|    | ||||
|   def index | ||||
|      | ||||
|     @item = Page.find(params[:page_id]) | ||||
|    | ||||
|     @title = @item.title | ||||
|    | ||||
|     if @item.frontend_data_count | ||||
|       @page_num = @item.frontend_data_count | ||||
|     else | ||||
|       @page_num = 0 | ||||
|     end | ||||
|    | ||||
|     date_now = Time.now | ||||
|      | ||||
|     if params[:category_id] !="[]" && !params[:category_id].blank? | ||||
|       @qas = Qa.all.can_display.any_in(:qa_category_id => params[:category_id]).merge(QaCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num) | ||||
|       @qa_categorys = QaCategory.any_in(:_id => @item.category).excludes('disable' => true) rescue nil | ||||
|     elsif params[:tag_id] !="[]" && !params[:tag_id].blank? | ||||
|       @tag = FaqTag.find(params[:tag_id]) rescue nil | ||||
|       @tag = FaqTag.where(key: params[:tag_id])[0] unless @tag | ||||
|       @qas = @tag.archive_files.can_display.desc( :is_top ).page( params[:page_main] ).per(@page_num) | ||||
|       get_categorys | ||||
|     else | ||||
|       @qas = Qa.all.can_display.merge(QaCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num) | ||||
|       get_categorys | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   def show | ||||
|     @qa = Qa.find(params[:id]) | ||||
| 	  get_categorys | ||||
|   end | ||||
|    | ||||
|    | ||||
|   protected | ||||
|    | ||||
|   def get_categorys | ||||
|     @qa_categorys = QaCategory.excludes('disable' => true) | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,10 @@ | |||
| class FaqTag < Tag | ||||
|    | ||||
|   has_and_belongs_to_many :qas | ||||
|    | ||||
|    | ||||
|   def get_visible_links(sort = :title) | ||||
| 	  self.qas.where(:is_hidden => false).desc(:is_top, sort) | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -0,0 +1,90 @@ | |||
| # encoding: utf-8 | ||||
| 
 | ||||
| class Qa | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|   include Mongoid::MultiParameterAttributes | ||||
|    | ||||
|   scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) } | ||||
| 
 | ||||
|   field :question, localize: true | ||||
|   field :answer, localize: true | ||||
|    | ||||
|   has_and_belongs_to_many :tags, :class_name => "FaqTag" | ||||
|    | ||||
| 
 | ||||
|   field :create_user_id | ||||
|   field :update_user_id | ||||
|    | ||||
|   field :is_top, :type => Boolean, :default => false  | ||||
|   field :is_hot, :type => Boolean, :default => false  | ||||
|   field :is_hidden, :type => Boolean, :default => false  | ||||
| 
 | ||||
|   scope :can_display,where(is_hidden: false) | ||||
| 
 | ||||
|   has_many :qa_links, :autosave => true, :dependent => :destroy | ||||
|   has_many :qa_files, :autosave => true, :dependent => :destroy | ||||
|    | ||||
|   accepts_nested_attributes_for :qa_files, :allow_destroy => true | ||||
|   accepts_nested_attributes_for :qa_links, :allow_destroy => true | ||||
|    | ||||
|   belongs_to :qa_category | ||||
|    | ||||
|   before_save :update_avliable_language, :clean_values | ||||
| 
 | ||||
|   validates :question, :at_least_one => true | ||||
| 
 | ||||
| 
 | ||||
|   def self.search( category_id = nil ) | ||||
|    | ||||
| 	if category_id.to_s.size > 0 | ||||
| 	 | ||||
| 	  find(:all, :conditions => {qa_category_id: category_id}).desc( :is_top, :title ) | ||||
| 
 | ||||
| 	else | ||||
| 	   | ||||
| 	  find(:all).desc( :is_top, :title) | ||||
| 	   | ||||
| 	end | ||||
| 	 | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|   def self.widget_datas | ||||
|    | ||||
| 	where( :is_hidden => false ).desc(:is_top, :created_at) | ||||
| 
 | ||||
|   end | ||||
| 
 | ||||
|   def is_top? | ||||
|     self.is_top | ||||
|   end  | ||||
| 
 | ||||
|   def sorted_tags | ||||
|     tags.order_by(I18n.locale, :asc) | ||||
|   end | ||||
|    | ||||
|   def update_avliable_language | ||||
|     VALID_LOCALES.each  do |locale| | ||||
|       if (question_translations[locale].blank? rescue true) | ||||
|         self["available_for_#{locale}".to_sym] = false  | ||||
|       else | ||||
|         self["available_for_#{locale}".to_sym] = true | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   protected | ||||
| 
 | ||||
|   def qa_category_with_title | ||||
|     self.qa_category.title | ||||
|   end | ||||
| 
 | ||||
|   def clean_values | ||||
|     self.qa_links.each do |link| | ||||
|       link.delete if link.url.blank? && link.title.blank? | ||||
|     end | ||||
|     self.tag_ids.delete('') | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,27 @@ | |||
| # encoding: utf-8 | ||||
| 
 | ||||
| class QaCategory | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|   include OrbitCoreLib::ObjectAuthable | ||||
|   include OrbitCoreLib::ObjectDisable | ||||
|   # include Mongoid::MultiParameterAttributes | ||||
|   AfterObjectAuthUrl = '/panel/page_content/back_end/page_contexts' | ||||
|   APP_NAME = 'faq' | ||||
|   ObjectAuthTitlesOptions = %W{edit} | ||||
| 
 | ||||
|   field :key | ||||
|    | ||||
|   field :title, localize: true | ||||
|    | ||||
|   has_many :qas | ||||
|    | ||||
|   def pp_object | ||||
|     title | ||||
|   end | ||||
| 
 | ||||
|   def self.from_id(id) | ||||
|     QaCategory.find(id) rescue nil | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -0,0 +1,14 @@ | |||
| class QaFile | ||||
| 
 | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
| 
 | ||||
|   mount_uploader :file, AssetUploader | ||||
| 
 | ||||
|   field :description, localize: true | ||||
|   field :should_destroy, :type => Boolean   | ||||
|   field :title, localize: true | ||||
|    | ||||
|   belongs_to :qa | ||||
| 
 | ||||
| end | ||||
|  | @ -0,0 +1,24 @@ | |||
| class QaLink | ||||
| 
 | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   field :url | ||||
|   field :title, localize: true | ||||
|    | ||||
|   field :should_destroy, :type => Boolean | ||||
|    | ||||
|   belongs_to :qa | ||||
| 
 | ||||
|   before_validation :add_http | ||||
|   validates :url, :presence => true, :format => /^(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})?(\/.*)?/i | ||||
| 
 | ||||
|   protected | ||||
| 
 | ||||
| 	def add_http | ||||
| 	  unless self.url[/^http:\/\//] || self.url[/^https:\/\//] | ||||
| 	    self.url = 'http://' + self.url | ||||
| 	  end | ||||
| 	end | ||||
| 
 | ||||
| end | ||||
							
								
								
									
										30
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/_form.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										30
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/_form.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,30 @@ | |||
| <% # encoding: utf-8 %> | ||||
| 
 | ||||
| <%= form_for(@qa_category, :remote => true, :url => @url) do |f| %> | ||||
| 
 | ||||
| 	<h2><%= (@qa_category.new_record? ? t(:add) : t(:edit)) %></h2> | ||||
| 
 | ||||
| 	<div id="widget-title"> | ||||
| 		<%= f.label :key, t(:key) %> | ||||
| 		<%= f.text_field :key %> | ||||
| 	</div> | ||||
| 	 | ||||
| 	<div id="widget-title"> | ||||
| 		<%= f.fields_for :title_translations do |f| %> | ||||
| 		  <% @site_valid_locales.each do |locale| %> | ||||
| 				<div class="control-group"> | ||||
| 					<%= label_tag "name-#{locale}", "#{t(:name)}-#{I18nVariable.from_locale(locale)}", :class => 'control-label' %> | ||||
| 					<div class="controls"> | ||||
| 						<%= f.text_field locale, :class => 'input-xxlarge', :value => (@qa_category.title_translations[locale] rescue nil) %> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 		  <% end %> | ||||
| 		<% end %> | ||||
| 	</div> | ||||
|    | ||||
|   <div class="form-actions"> | ||||
|     <%= f.submit t(:submit), :class=>'btn btn-primary' %> | ||||
|   </div> | ||||
|    | ||||
| <% end %> | ||||
|   | ||||
							
								
								
									
										19
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/_qa_category.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										19
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/_qa_category.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,19 @@ | |||
| 
 | ||||
| 
 | ||||
| 	<tr id="<%= dom_id qa_category %>" class="with_action"> | ||||
| 		<td> | ||||
| 			<%= qa_category.key %> | ||||
| 			<%if at_least_module_manager %> | ||||
| 				<div class="quick-edit"> | ||||
| 					<ul class="nav nav-pills hide"> | ||||
| 						<li><%= link_to t(:edit), edit_panel_faq_back_end_qa_category_path(qa_category), :remote => true %></li> | ||||
| 						<li><%= link_to   show_toggle_archive_btn(qa_category), panel_faq_back_end_qa_category_path(qa_category), :confirm => t(:sure?), :method => :delete, :remote => true ,:class=> "archive_toggle"%></li> | ||||
| 						<li><%#= show_qa_permission_link qa_category %></li> | ||||
| 					</ul> | ||||
| 				</div> | ||||
| 			<% end -%> | ||||
| 		</td> | ||||
| 		<% @site_valid_locales.each do |locale| %> | ||||
| 		<td><%= qa_category.title_translations[locale] rescue nil %></td> | ||||
| 		<% end %> | ||||
| 	</tr> | ||||
							
								
								
									
										2
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/create.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										2
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/create.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,2 @@ | |||
| $('<%= j render :partial => 'qa_category', :collection => [@qa_category] %>').appendTo('#qa_categorys').hide().fadeIn(); | ||||
| $("#new_qa_category")[0].reset(); | ||||
							
								
								
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/destroy.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/destroy.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1 @@ | |||
| $("#<%= dom_id @qa_category %>").find(".archive_toggle").text("<%= show_toggle_archive_btn(@qa_category) %>  "); | ||||
							
								
								
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/edit.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/edit.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1 @@ | |||
| $("#form > form").replaceWith("<%= j render "form" %>"); | ||||
							
								
								
									
										39
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/index.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										39
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/index.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,39 @@ | |||
| 
 | ||||
| 
 | ||||
| <%= flash_messages %> | ||||
| <div id="filter" class="subnav"> | ||||
| 	<div class="filters"> | ||||
| 		<div id="sort_headers" class="table-label"> | ||||
| 			<table class="table main-list"> | ||||
| 				<thead> | ||||
| 					<tr> | ||||
| 						<th class="span1-2"><%= t(:key) %></th> | ||||
| 						<% @site_valid_locales.each do |locale| %> | ||||
| 						<th class="span1-2"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></th> | ||||
| 						<% end %> | ||||
| 					</tr> | ||||
| 				</thead> | ||||
| 			</table> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
| 
 | ||||
| <table id="qa_categorys" class="table main-list"> | ||||
| 	<thead> | ||||
| 		<tr> | ||||
| 			<th class="span1-2"></th> | ||||
| 			<% @site_valid_locales.each do |locale| %> | ||||
| 			<th class="span1-2"></th> | ||||
| 			<% end %> | ||||
| 		</tr> | ||||
| 	</thead> | ||||
| 	<tbody class="sort-holder"> | ||||
| 
 | ||||
| 	<%= render :partial => 'qa_category', :collection => @qa_categorys %> | ||||
| 	 | ||||
| 	</tbody> | ||||
| </table> | ||||
| 
 | ||||
| <div id="form"><%= render :partial => "form"  if at_least_module_manager%></div> | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/new.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										1
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/new.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1 @@ | |||
| $("#form > form").replaceWith("<%= j render "form" %>"); | ||||
							
								
								
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/quick_edit.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/quick_edit.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,3 @@ | |||
| $.each($(".quick_edit"),function(obj){ $(this).remove(); }); | ||||
| $("#<%= dom_id @qa_category %>").append("<div class='quick_edit'><%= j render "form" %></div>"); | ||||
| //$("#form > form").replaceWith("<%= j render "form" %>"); | ||||
							
								
								
									
										4
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/update.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										4
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qa_categorys/update.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,4 @@ | |||
| $("#<%= dom_id @qa_category %>").replaceWith("<%= j render :partial => 'qa_category', :collection => [@qa_category] %>"); | ||||
| <% @qa_category = QaCategory.new(:display => 'List') # reset for new form %> | ||||
| $(".edit_qa_category").replaceWith("<%= j render "form" %>") | ||||
| $(".new_qa_category")[0].reset(); | ||||
							
								
								
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_clear_filters.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_clear_filters.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,3 @@ | |||
| <div class="filter-clear"> | ||||
| 	<%= link_to content_tag(:i, nil, :class => 'icons-cycle') + t(:clear), panel_faq_back_end_qas_path(:filter => @filter, :sort => params[:sort], :direction => params[:direction], :clear => true, :type => type), :class => "btn btn-small js_history" %> | ||||
| </div> | ||||
							
								
								
									
										37
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										37
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,37 @@ | |||
| <div id='filter' class="subnav"> | ||||
| 	<ul class="nav nav-pills filter"> | ||||
| 		<li class="accordion-group"> | ||||
| 			<div class="accordion-heading"> | ||||
| 				<a href="#collapse-status" data-toggle="collapse" data-parent="#filter" class="accordion-toggle"><%= t(:status) %> <b class="web-symbol"></b></a> | ||||
| 			</div> | ||||
| 		</li> | ||||
| 		<li class="accordion-group"> | ||||
| 			<div class="accordion-heading"> | ||||
| 				<a href="#collapse-category" data-toggle="collapse" data-parent="#filter" class="accordion-toggle"><%= t(:categories) %> <b class="web-symbol"></b></a> | ||||
| 			</div> | ||||
| 		</li> | ||||
| 		<li class="accordion-group"> | ||||
| 			<div class="accordion-heading"> | ||||
| 				<a href="#collapse-tags" data-toggle="collapse" data-parent="#filter" class="accordion-toggle"><%= t(:tags) %> <b class="web-symbol"></b></a> | ||||
| 			</div> | ||||
| 		</li> | ||||
| 	</ul> | ||||
| 	<div class="filters accordion-group"> | ||||
| 		<div class="accordion-body collapse" id="collapse-status"> | ||||
| 			<%= render 'filter_status' %> | ||||
| 		</div> | ||||
| 		<div class="accordion-body collapse" id="collapse-category"> | ||||
| 			<%= render 'filter_categories' %> | ||||
| 		</div> | ||||
| 		<div class="accordion-body collapse" id="collapse-tags"> | ||||
| 			<%= render 'filter_tags' %> | ||||
| 		</div> | ||||
| 		<div id="sort_headers" class="table-label"> | ||||
| 			<%= render 'sort_headers' %>  | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
| 
 | ||||
| <% content_for :page_specific_javascript do %> | ||||
| 	<%= javascript_include_tag "sort_header" %> | ||||
| <% end %> | ||||
							
								
								
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_categories.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_categories.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,6 @@ | |||
| <div class="accordion-inner" data-toggle="buttons-checkbox"> | ||||
| 	<% @qa_categories.each do |category| -%> | ||||
| 		<%= link_to category.title, panel_faq_back_end_qas_path(:filter => @filter, :new_filter => {:type => 'categories', :id => category.id}, :sort => params[:sort], :direction => params[:direction], :sort_options => params[:sort_options]), :class => "btn btn-small js_history#{is_filter_active?('categories', category.id)}" %> | ||||
| 	<% end -%>  | ||||
| </div> | ||||
| <%= render :partial => 'clear_filters', :locals => {:type => 'categories'} %> | ||||
							
								
								
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_status.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_status.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,6 @@ | |||
| <div class="accordion-inner" data-toggle="buttons-checkbox"> | ||||
| 	<%= link_to t(:top), panel_faq_back_end_qas_path(:filter => @filter, :new_filter => {:type => 'status', :id => 'is_top'}, :sort => params[:sort], :direction => params[:direction], :sort_options => params[:sort_options]), :class => "btn btn-small js_history#{is_filter_active?('status', 'is_top')}" %> | ||||
| 	<%= link_to t(:hot), panel_faq_back_end_qas_path(:filter => @filter, :new_filter => {:type => 'status', :id => 'is_hot'}, :sort => params[:sort], :direction => params[:direction], :sort_options => params[:sort_options]), :class => "btn btn-small js_history#{is_filter_active?('status', 'is_hot')}" %> | ||||
| 	<%= link_to t(:hidden), panel_faq_back_end_qas_path(:filter => @filter, :new_filter => {:type => 'status', :id => 'is_hidden'}, :sort => params[:sort], :direction => params[:direction], :sort_options => params[:sort_options]), :class => "btn btn-small js_history#{is_filter_active?('status', 'is_hidden')}" unless(is_guest?)%> | ||||
| </div> | ||||
| <%= render :partial => 'clear_filters', :locals => {:type => 'status'} %> | ||||
							
								
								
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_tags.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										6
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_filter_tags.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,6 @@ | |||
| <div class="accordion-inner" data-toggle="buttons-checkbox"> | ||||
| 	<% @tags.each do |tag| -%> | ||||
| 		<%= link_to tag[I18n.locale], panel_faq_back_end_qas_path(:filter => @filter, :new_filter => {:type => 'tags', :id => tag.id}, :sort => params[:sort], :direction => params[:direction], :sort_options => params[:sort_options]), :class => "btn btn-small js_history#{is_filter_active?('tags', tag.id)}" %> | ||||
| 	<% end -%>  | ||||
| </div> | ||||
| <%= render :partial => 'clear_filters', :locals => {:type => 'tags'} %> | ||||
							
								
								
									
										228
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										228
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,228 @@ | |||
| <div id= "poststuff"> | ||||
| <% # encoding: utf-8 %> | ||||
| 
 | ||||
|   <%= f.error_messages %> | ||||
| 
 | ||||
| 	<!--Widget start--> | ||||
| 	 | ||||
| 	<div id="sub-wiget"> | ||||
| 		   | ||||
| 		<div id="widget-status" class="widget-box widget-size-300"> | ||||
| 			<div class="widget-action clear tip" title="Setting the announcement state"> | ||||
| 				<a class="action"><i class="icon-exclamation-sign icon-white"></i></a> | ||||
| 			</div> | ||||
| 			<h3 class="widget-title"><i class="icons-star"></i><%= t(:status) %></h3> | ||||
| 			<div class="widget-content clear"> | ||||
| 				<div class="controls"> | ||||
| 					<%= content_tag :label,:class => "checkbox inline" do -%> | ||||
| 						<%= f.check_box :is_top %> | ||||
| 						<%= t('top') %> | ||||
| 					<% end -%> | ||||
| 					<%= content_tag :label,:class => "checkbox inline" do -%> | ||||
| 						<%= f.check_box :is_hot %> | ||||
| 						<%= t('hot') %> | ||||
| 					<% end -%> | ||||
| 					<%= content_tag :label,:class => "checkbox inline" do -%> | ||||
| 						<%= f.check_box :is_hidden %> | ||||
| 						<%= t('hide') %> | ||||
| 					<% end -%> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<div id="widget-tags" class="widget-box widget-size-300"> | ||||
| 			<div class="widget-action clear tip" title="Setting"> | ||||
| 				<a class="action"><i class="icon-cog icon-white"></i></a> | ||||
| 			</div> | ||||
| 			<h3 class="widget-title"><i class="icons-tag"></i><%= t('nccu.tags') %></h3> | ||||
| 			<div class="widget-content clear form-horizontal"> | ||||
| 				<% @tags.each do |tag| %> | ||||
| 					<%= content_tag :label,:class => "checkbox inline" do -%> | ||||
| 						<%= check_box_tag 'qa[tag_ids][]', tag.id, @qa.tag_ids.include?(tag.id)%> | ||||
| 						<%= tag[I18n.locale] %> | ||||
|             <%= hidden_field_tag 'qa[tag_ids][]', '' %> | ||||
| 					<% end %> | ||||
| 				<% end %> | ||||
| 			</div> | ||||
| 		</div>   | ||||
|    | ||||
| 	</div> | ||||
|    | ||||
|    | ||||
| <!--Wiget End--> | ||||
| <!--Post Start--> | ||||
| 
 | ||||
| 	<div id="post-body"> | ||||
| 		<div id="post-body-content" class="clear"> | ||||
| 		 | ||||
| 			<%= f.label :category ,t(:category)%> | ||||
| 			<%= f.select :qa_category_id, @qa_categorys.collect {|t| [ t.title, t.id ]} %> | ||||
| 			 | ||||
| 			<ul class="nav nav-tabs"> | ||||
| 				<% @site_valid_locales.each_with_index do |locale, i| %> | ||||
| 			    <li <%= ( i == 0 ) ? "class=active" : '' %>><a data-toggle="tab" href=".<%= locale %>"><%= I18nVariable.from_locale(locale) %></a></li> | ||||
| 				<% end %> | ||||
| 			</ul> | ||||
| 			 | ||||
| 			<div class="tab-content"> | ||||
| 			 | ||||
| 				<% @site_valid_locales.each_with_index do |locale, i| %> | ||||
| 				 | ||||
| 				<div class="<%= locale %> fade tab-pane <%= ( i == 0 ) ? "in active" : '' %>"> | ||||
| 					<div class="title"> | ||||
| 						<%= f.label :question , t('faq.question') %> | ||||
| 						<%= f.fields_for :question_translations do |f| %> | ||||
| 							<%= I18nVariable.from_locale(locale) %> | ||||
| 							<%= f.text_field locale, :class=>'post-title', :value => (@qa.question_translations[locale] rescue nil) %> | ||||
| 						<% end %> | ||||
| 					</div> | ||||
| 					 | ||||
| 					<div class="editor"> | ||||
| 						<%= f.label :answer ,t('faq.answer') %> | ||||
| 						<%= f.fields_for :answer_translations do |f| %> | ||||
| 							<%= I18nVariable.from_locale(locale) %> | ||||
| 							<%= f.text_area locale, :style=>"width:100%", :class => 'tinymce_textarea', :value => (@qa.answer_translations[locale] rescue nil) %> | ||||
| 						<% end %>				 | ||||
| 					</div> | ||||
| 					 | ||||
| 				</div> | ||||
| 
 | ||||
| 				<% end %> | ||||
| 				 | ||||
| 			</div> | ||||
| 			 | ||||
| 			 | ||||
| 			<div class="main-wiget"> | ||||
| 				<div id="widget-link" class="widget-box"> | ||||
| 					<div class="widget-action clear tip" title="Add a reference link"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white"></i></a> | ||||
| 					</div> | ||||
| 					<h3 class="widget-title"><i class="icons-link"></i><%= t(:link) %></h3> | ||||
| 					<div class="widget-content"> | ||||
| 					 | ||||
| 					<div id='qa_links' class="qa_links_block"> | ||||
| 					 | ||||
| 					<table class="table table-condensed"> | ||||
| 						<thead> | ||||
| 							<tr> | ||||
| 								<th><%= t('nccu.url') %></th> | ||||
| 								<th><%= t('nccu.link_name') %></th> | ||||
| 								<th class="span1"></th> | ||||
| 							</tr> | ||||
| 						</thead> | ||||
| 						<tfoot> | ||||
| 							<tr> | ||||
| 								<td style="text-align:center" colspan="4"> | ||||
| 									<div id='add_qa_link' class="info_input qa_links_block"> | ||||
| 										<%= hidden_field_tag 'qa_link_field_count', @qa.qa_links.count %> | ||||
| 										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i><%= t(:add) %></span></a> | ||||
| 									</div> | ||||
| 								</td> | ||||
| 							</tr> | ||||
| 						</tfoot> | ||||
| 						<tbody> | ||||
| 						 | ||||
| 							<% @qa.qa_links.each_with_index do |qa_link, i| %> | ||||
| 								<%= f.fields_for :qa_links, qa_link do |f| %> | ||||
| 									<%= render :partial => 'form_qa_link', :object => qa_link, :locals => {:f => f, :i => i} %> | ||||
| 								<% end %> | ||||
| 							<% end %>	 | ||||
| 							 | ||||
| 						</tbody> | ||||
| 					</table> | ||||
| 					 | ||||
| 								 | ||||
| 					</div> | ||||
| 							 | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div id="widget-file" class="widget-box"> | ||||
| 					<div class="widget-action clear tip" title="Added to the file"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white"></i></a> | ||||
| 					</div> | ||||
| 					<h3 class="widget-title"><i class="icons-paperclip"></i><%= t('nccu.file') %></h3> | ||||
| 					<div class="widget-content"> | ||||
| 						 | ||||
| 					<div id='qa_files' class="qa_files_block"> | ||||
| 							 | ||||
| 					<table class="table table-condensed"> | ||||
| 						<thead> | ||||
| 							<tr> | ||||
| 								<th><%= t('nccu.selected_file') %></th> | ||||
| 								<th><%= t('nccu.file_name') %></th> | ||||
| 								<th><%= t('nccu.file_description') %></th> | ||||
| 								<th class="span1"></th> | ||||
| 							</tr> | ||||
| 						</thead> | ||||
| 						<tfoot> | ||||
| 							<tr> | ||||
| 								<td style="text-align:center" colspan="4"> | ||||
| 									<div id='add_qa_file' class="info_input qa_files_block"> | ||||
| 										<%= hidden_field_tag 'qa_file_field_count', @qa.qa_files.count %> | ||||
| 										<a class="add"><span class="btn btn-primary btn-small"><i class="icon-plus icon-white"></i><%= t(:add) %></span></a> | ||||
| 										<p><%= t("sys.limit_of_upload_file_size",:best_size => '3MB') %></p> | ||||
| 										<p><%= t("sys.preview_only_for_img") %></p> | ||||
| 									</div> | ||||
| 								</td> | ||||
| 							</tr> | ||||
| 						</tfoot> | ||||
| 						<tbody> | ||||
| 								<% @qa.qa_files.each_with_index do |qa_file, i| %> | ||||
| 									<%= f.fields_for :qa_files, qa_file do |f| %> | ||||
| 										<%= render :partial => 'form_qa_file', :object => qa_file, :locals => {:f => f, :i => i} %> | ||||
| 									<% end %> | ||||
| 								<% end %>	 | ||||
| 							 | ||||
| 						</tbody> | ||||
| 					</table> | ||||
| 								 | ||||
| 					</div> | ||||
| 					 | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 
 | ||||
| 			 | ||||
| 		</div> | ||||
| 	 | ||||
| <!--Post End--> | ||||
| 	</div> | ||||
| 
 | ||||
|    | ||||
| 	<div class="form-actions"> | ||||
|     <%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %> | ||||
| 	<%= f.submit t('submit'), :class=>'btn btn-primary' %> | ||||
| 	<%= link_to t('cancel'), get_go_back, :class=>"btn" %>  | ||||
| 	</div>  | ||||
| </div>  | ||||
|    | ||||
|    | ||||
| 
 | ||||
| <% content_for :page_specific_javascript do %> | ||||
| 	<%= javascript_include_tag "faq/qa_form" %> | ||||
| 	<%= javascript_include_tag "inc/jquery.imagesloaded.js" %> | ||||
| 	<script> | ||||
| 	$(document).ready(function() { | ||||
| 
 | ||||
| 		$('#add_qa_link a.add').live('click', function(){ | ||||
| 			var new_id = $(this).prev().attr('value'); | ||||
| 			var old_id = new RegExp("new_qa_links", "g"); | ||||
| 			$(this).prev().attr('value', parseInt(new_id) + 1); | ||||
| 			$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_qa_link', f, :qa_links) %>").replace(old_id, new_id)); | ||||
| 		}); | ||||
| 		$('#add_qa_file a.add').live('click', function(){ | ||||
| 			var new_id = $(this).prev().attr('value'); | ||||
| 			var old_id = new RegExp("new_qa_files", "g"); | ||||
| 			$(this).prev().attr('value', parseInt(new_id) + 1); | ||||
| 			$(this).parents('table').append(("<%= escape_javascript(add_attribute 'form_qa_file', f, :qa_files) %>").replace(old_id, new_id)); | ||||
| 		}); | ||||
| 		$('.for_preview').popover({ html : true }); | ||||
| 	}); | ||||
| 	</script> | ||||
| <% end %> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										74
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form_qa_file.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										74
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form_qa_file.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,74 @@ | |||
| <% # encoding: utf-8 %> | ||||
| 
 | ||||
| <tr id="<%= "qa_file_#{form_qa_file.id}" if !form_qa_file.new_record? %>" class='list_item'> | ||||
|   <td> | ||||
|     <div class="control-group"> | ||||
|       <div class="controls"> | ||||
|         <%= f.file_field :file %> | ||||
|         <%= form_qa_file.file.file ? ( link_to t(:view), form_qa_file.file.url, {:class => 'btn', :target => '_blank', :title => t(:view)} ) : '' %> | ||||
|       </div> | ||||
|     </div> | ||||
|   </td>  | ||||
|   <td>  | ||||
| 
 | ||||
|     <div class="tab-content"> | ||||
| 
 | ||||
|       <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
| 
 | ||||
|         <div class="<%= locale %> fade tab-pane <%= ( i == 0 ) ? "in active" : '' %>"> | ||||
| 
 | ||||
|           <%= f.fields_for :title_translations do |f| %> | ||||
|             <div class="control-group"> | ||||
|               <label for="link-<%= locale %>" class="control-label"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></label> | ||||
|               <div class="controls"> | ||||
|                 <%= f.text_field locale, :id => "link-#{locale}", :value => (form_qa_file.title_translations[locale] rescue nil) %> | ||||
|               </div> | ||||
|             </div> | ||||
|           <% end %> | ||||
| 
 | ||||
|         </div> | ||||
| 
 | ||||
|       <% end %> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|   </td> | ||||
|   <td>  | ||||
| 
 | ||||
|     <div class="tab-content"> | ||||
| 
 | ||||
|       <% @site_valid_locales.each_with_index do |locale, i| %> | ||||
| 
 | ||||
|         <div class="<%= locale %> fade tab-pane <%= ( i == 0 ) ? "in active" : '' %>"> | ||||
| 
 | ||||
|           <%= f.fields_for :description_translations do |f| %> | ||||
|             <div class="control-group"> | ||||
|               <label for="link-<%= locale %>" class="control-label"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></label> | ||||
|               <div class="controls"> | ||||
|                 <%= f.text_field locale, :id => "link-#{locale}", :value => (form_qa_file.description_translations[locale] rescue nil) %> | ||||
|               </div> | ||||
|             </div> | ||||
|           <% end %> | ||||
| 
 | ||||
|         </div> | ||||
| 
 | ||||
|       <% end %> | ||||
| 
 | ||||
|     </div> | ||||
| 
 | ||||
|   </td>  | ||||
|   <td> | ||||
|     <span class="action"> | ||||
|       <% if form_qa_file.new_record? %> | ||||
|         <a class="delete"><i class="icon-remove"></i></a> | ||||
|       <% else %>  | ||||
|         <%= f.hidden_field :id %> | ||||
|         <%= hidden_field_tag :tr, (dom_id form_qa_file) %> | ||||
|         <a class="remove_existing_record"><i class="icon-remove"></i></a> | ||||
|         <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> | ||||
|       <% end %> | ||||
|     </span> | ||||
| 
 | ||||
|   </td> | ||||
| </tr> | ||||
| 
 | ||||
							
								
								
									
										48
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form_qa_link.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										48
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_form_qa_link.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,48 @@ | |||
| 
 | ||||
| 		<tr id="<%= "qa_link_#{form_qa_link.id}" if !form_qa_link.new_record? %>" class='list_item'> | ||||
| 			 | ||||
| 			<td> | ||||
| 				<div class="control-group"> | ||||
| 					<div class="controls"> | ||||
| 					<%= f.text_field :url %> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</td>	 | ||||
| 			<td> | ||||
| 	 | ||||
| 			 | ||||
| 				<div class="tab-content"> | ||||
| 				 | ||||
| 					<% @site_valid_locales.each_with_index do |locale, i| %> | ||||
| 					 | ||||
| 					<div class="<%= locale %> fade tab-pane <%= ( i == 0 ) ? "in active" : '' %>"> | ||||
| 						 | ||||
| 						<%= f.fields_for :title_translations do |f| %> | ||||
| 							<div class="control-group"> | ||||
| 								<label for="link-<%= locale %>" class="control-label"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></label> | ||||
| 								<div class="controls"> | ||||
| 								<%= f.text_field locale, :id => "link-#{locale}", :class => "input-xlarge", :value => (form_qa_link.title_translations[locale] rescue nil) %> | ||||
| 								</div> | ||||
| 							</div> | ||||
| 						<% end %> | ||||
| 						 | ||||
| 					</div> | ||||
| 
 | ||||
| 					<% end %> | ||||
| 					 | ||||
| 				</div> | ||||
| 				 | ||||
| 			</td> | ||||
| 			<td> | ||||
| 			<span class="action"> | ||||
| 			<% if form_qa_link.new_record? %> | ||||
| 			  <a class="delete"><i class="icon-remove"></i></a> | ||||
| 			<% else %>	 | ||||
| 			  <%= f.hidden_field :id %> | ||||
| 			  <%= hidden_field_tag :tr, (dom_id form_qa_link) %> | ||||
| 			  <a class="remove_existing_record"><i class="icon-remove"></i></a> | ||||
| 			  <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> | ||||
| 			<% end %> | ||||
| 			</span> | ||||
| 			</td> | ||||
| 		</tr> | ||||
|  | @ -0,0 +1,44 @@ | |||
| <tr id="<%= dom_id qa %>" class="with_action"> | ||||
| 	<td> | ||||
| 		<% if (qa.create_user_id ==  current_or_guest_user.id) || is_manager? %> | ||||
| 			<%= check_box_tag 'to_delete[]', qa.id, false, :class => "checkbox_in_list" %> | ||||
| 		<% end -%> | ||||
| 	</td> | ||||
| 	<td> | ||||
| 		<div class="label-group"> | ||||
| 			<div class="label-td"> | ||||
| 				<% if qa.is_top? %> | ||||
| 					<span class="label label-success"><%= t(:top) %></span> | ||||
| 				<% end %> | ||||
| 				<% if qa.is_hot? %> | ||||
| 					<span class="label label-important"><%= t(:hot) %></span> | ||||
| 				<% end %> | ||||
| 				<% if qa.is_hidden? %> | ||||
| 					<span class="label"><%= t(:hidden) %></span> | ||||
| 				<% end %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</td> | ||||
| 	<td><%= qa.qa_category.title rescue nil %></td> | ||||
| 	<td> | ||||
| 	<%= link_to qa.question, panel_faq_front_end_qa_path(qa) %> | ||||
| 	<div class="quick-edit"> | ||||
| 		<ul class="nav nav-pills hide"> | ||||
| 			<%if at_least_module_manager || qa.qa_category.cur_user_is_sub_manager_of(:edit)%> | ||||
| 			<li><%= link_to t('edit'), edit_panel_faq_back_end_qa_path(qa, :page => params[:page]) %></li> | ||||
| 			<li><%= link_to t(:delete_), panel_faq_back_end_qa_path(qa), :confirm => t('sure?'), :method => :delete, :remote => true %></li> | ||||
| 			<% end -%> | ||||
| 		</ul> | ||||
| 	</div> | ||||
| 	</td> | ||||
| 	<td> | ||||
| 		<div class="label-group"> | ||||
| 			<div class="label-td"> | ||||
| 				<% qa.sorted_tags.each do |tag| %> | ||||
| 					<span class="label label-tags"><%= tag[I18n.locale] %></span> | ||||
| 				<% end %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</td> | ||||
| </tr> | ||||
| 
 | ||||
							
								
								
									
										5
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_sort_headers.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										5
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/_sort_headers.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,5 @@ | |||
| <%= render_sort_bar(true, delete_panel_faq_back_end_qas_path(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]), | ||||
| 	['status', ['is_top', 'is_hot', 'is_hidden'], 'span1', :status], | ||||
| 	['category', 'qa_category', 'span2', :category], | ||||
| 	['question', 'question','span3', :question], | ||||
| 	['tags', 'tags', 'span2', :tags]).html_safe %> | ||||
|  | @ -0,0 +1 @@ | |||
| $("#<%= dom_id @qa %>").remove(); | ||||
|  | @ -0,0 +1,5 @@ | |||
| <h1><%= t('qa.editing_faq') %></h1> | ||||
| 
 | ||||
| <%= form_for @qa, :url => panel_faq_back_end_qa_path(@qa), :html => {:class => 'clear'} do |f| %> | ||||
| 	<%= render :partial => 'form', :locals => {:f => f} %> | ||||
| <% end %> | ||||
|  | @ -0,0 +1,22 @@ | |||
| <%= render 'filter' %> | ||||
| <table class="table main-list"> | ||||
| 	<thead> | ||||
| 		<tr> | ||||
| 			<th class="span1"></th> | ||||
| 			<th class="span1"></th> | ||||
| 			<th class="span2"></th> | ||||
| 			<th class="span3"></th> | ||||
| 			<th class="span2"></th> | ||||
| 		</tr> | ||||
| 	</thead> | ||||
| 	<tbody id="tbody_qas" class="sort-holder"> | ||||
| 		<%= render :partial => 'qa', :collection => @qas %> | ||||
| 	</tbody> | ||||
| </table> | ||||
| 
 | ||||
| <div class="form-actions form-fixed pagination-right"> | ||||
| 	<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_panel_faq_back_end_qa_path, :class => 'btn btn-primary pull-right' if (is_manager? rescue nil) %> | ||||
| 	<div id="qa_pagination" class="paginationFixed"> | ||||
| 	<%= paginate @qas, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %> | ||||
| 	</div> | ||||
| </div> | ||||
|  | @ -0,0 +1,7 @@ | |||
| $("#collapse-status").html("<%= j render 'filter_status' %>"); | ||||
| $("#collapse-category").html("<%= j render 'filter_categories' %>"); | ||||
| $("#collapse-tags").html("<%= j render 'filter_tags' %>"); | ||||
| $("#delete_all").attr("action", "<%= delete_panel_faq_back_end_qas_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]) %>"); | ||||
| $("#sort_headers").html("<%= j render 'sort_headers' %>"); | ||||
| $("#tbody_qas").html("<%= j render :partial => 'qa', :collection => @qas %>"); | ||||
| $("#qa_pagination").html("<%= j paginate @qas, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil} %>"); | ||||
|  | @ -0,0 +1,10 @@ | |||
| 
 | ||||
| <%= flash_messages %> | ||||
| <div id="poststuff"> | ||||
| <h1><%= t('qa.new_faq') %></h1> | ||||
| <%= form_for @qa, :url => panel_faq_back_end_qas_path, :html => {:class => 'clear'} do |f| %> | ||||
| 	<%= render :partial => 'form', :locals => {:f => f} %> | ||||
| <% end %> | ||||
| </div> | ||||
| <%#= link_back %> | ||||
| 
 | ||||
|  | @ -0,0 +1,28 @@ | |||
| <ul> | ||||
| 	<li> | ||||
|   <b><%= t(:category) %></b> | ||||
|   <%= @qa.qa_category.title rescue nil %> | ||||
| 	</li> | ||||
| 	<li> | ||||
|   <b><%= t("faq.question") %></b> | ||||
|   <%= @qa.question %> | ||||
| 	</li> | ||||
| 	<li> | ||||
|   <b><%= t("faq.answer") %></b> | ||||
|   <%= @qa.answer.html_safe rescue '' %> | ||||
| 	</li> | ||||
| 	<li> | ||||
| 	<b><%= t(:link) if !@qa.qa_links.blank? %></b> | ||||
| 	<% @qa.qa_links.each do | blink | %> | ||||
|     <%= link_to blink.title, blink.url, :target => '_blank' %> | ||||
| 	<% end %> | ||||
| 	</li> | ||||
| 	<li> | ||||
| 	<b><%= t("faq.file") if !@qa.qa_files.blank? %></b> | ||||
| 	<% @qa.qa_files.each do | bfile | %> | ||||
| 	<%= link_to bfile.title, bfile.file.url, {:target => '_blank', :title => bfile.description} if bfile.file.file %> | ||||
| 	<% end %> | ||||
| 	</li> | ||||
| </ul> | ||||
| 
 | ||||
| <%= link_back %> | ||||
							
								
								
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/toggle_enable.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										3
									
								
								vendor/built_in_modules/faq/app/views/panel/faq/back_end/qas/toggle_enable.js.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,3 @@ | |||
| $("#enable_<%= @bulletin.id %>").toggle(); | ||||
| $("#disable_<%= @bulletin.id %>").toggle(); | ||||
| $("#bulletin_<%= @bulletin.id %>").toggleClass('disable'); | ||||
|  | @ -0,0 +1,28 @@ | |||
| <ul> | ||||
| 	<li> | ||||
|   <b><%= t(:category) %></b> | ||||
|   <%= @qa.qa_category.title rescue nil %> | ||||
| 	</li> | ||||
| 	<li> | ||||
|   <b><%= t("faq.question") %></b> | ||||
|   <%= @qa.question %> | ||||
| 	</li> | ||||
| 	<li> | ||||
|   <b><%= t("faq.answer") %></b> | ||||
|   <%= @qa.answer.html_safe rescue '' %> | ||||
| 	</li> | ||||
| 	<li> | ||||
| 	<b><%= t(:link) if !@qa.qa_links.blank? %></b> | ||||
| 	<% @qa.qa_links.each do | blink | %> | ||||
|     <%= link_to blink.title, blink.url, :target => '_blank' %> | ||||
| 	<% end %> | ||||
| 	</li> | ||||
| 	<li> | ||||
| 	<b><%= t("faq.file") if !@qa.qa_files.blank? %></b> | ||||
| 	<% @qa.qa_files.each do | bfile | %> | ||||
| 	<%= link_to bfile.title, bfile.file.url, {:target => '_blank', :title => bfile.description} if bfile.file.file %> | ||||
| 	<% end %> | ||||
| 	</li> | ||||
| </ul> | ||||
| 
 | ||||
| <%= link_back %> | ||||
|  | @ -0,0 +1,23 @@ | |||
| en: | ||||
| 
 | ||||
|   faq: | ||||
|     default_widget: | ||||
|       question: Question | ||||
|       answer: Answer | ||||
|       to_more: Read More | ||||
|       qa_category_with_title: Category | ||||
|     faq: FAQ | ||||
|     widget: | ||||
|       index: FAQ Widget | ||||
|     frontend: | ||||
|       faq: FAQ Frontend | ||||
|     read_more: Read More | ||||
|     question: Question | ||||
|     answer: Answer | ||||
| 
 | ||||
|   qa: | ||||
|     create_qa_category_success: FAQ category was successfully created | ||||
|     editing_web_resource: Editing FAQ | ||||
|     list_of_web_resource: FAQ list | ||||
|     new_web_resource: New FAQ | ||||
|     update_qa_category_success:  FAQ was successfully updated | ||||
|  | @ -0,0 +1,23 @@ | |||
| zh_tw: | ||||
| 
 | ||||
|   faq: | ||||
|     default_widget: | ||||
|       question: 問題 | ||||
|       answer: 回答 | ||||
|       to_more: 閱讀更多 | ||||
|       qa_category_with_title: 類別 | ||||
|     faq: 問與答 | ||||
|     widget: | ||||
|       index: 問與答Widget | ||||
|     frontend: | ||||
|       faq: 問與答前台 | ||||
|     read_more: 閱讀更多 | ||||
|     question: 問題 | ||||
|     answer: 回答 | ||||
| 
 | ||||
|   qa: | ||||
|     create_qa_category_success: 問與答類別已成功建立 | ||||
|     editing_web_resource: 編輯問與答 | ||||
|     list_of_web_resource: 問與答列表 | ||||
|     new_web_resource: 新增問與答 | ||||
|     update_qa_category_success:  問與答已成功更新 | ||||
|  | @ -0,0 +1,23 @@ | |||
| Rails.application.routes.draw do | ||||
|    | ||||
|   namespace :panel do | ||||
|     namespace :faq do | ||||
|       namespace :back_end do | ||||
|         resources :qas do | ||||
|           collection do | ||||
|             get 'delete' | ||||
|           end | ||||
|         end | ||||
| 		    resources :qa_categorys | ||||
|         resources :tags | ||||
|       end | ||||
|       namespace :front_end do | ||||
|         resources :qas | ||||
|       end | ||||
|       namespace :widget do | ||||
|         match "index" => "qas#index" | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  match "/appfront/*path" => redirect("/panel/*path") | ||||
| end | ||||
|  | @ -0,0 +1,23 @@ | |||
| $:.push File.expand_path("../lib", __FILE__) | ||||
| 
 | ||||
| # Maintain your gem's version: | ||||
| require "faq/version" | ||||
| 
 | ||||
| # Describe your gem and declare its dependencies: | ||||
| Gem::Specification.new do |s| | ||||
|   s.name        = "faq" | ||||
|   s.version     = Faq::VERSION | ||||
|   s.authors     = ["TODO: Your name"] | ||||
|   s.email       = ["TODO: Your email"] | ||||
|   s.homepage    = "TODO" | ||||
|   s.summary     = "TODO: Summary of Faq." | ||||
|   s.description = "TODO: Description of Faq." | ||||
| 
 | ||||
|   s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"] | ||||
|   s.test_files = Dir["test/**/*"] | ||||
| 
 | ||||
|   s.add_dependency "rails", "~> 3.2.12" | ||||
|   # s.add_dependency "jquery-rails" | ||||
| 
 | ||||
|   s.add_development_dependency "sqlite3" | ||||
| end | ||||
|  | @ -0,0 +1,12 @@ | |||
| { | ||||
| 	"title": "faq", | ||||
|   "version": "0.1", | ||||
|   "organization": "Rulingcom", | ||||
|   "author": "RD dep", | ||||
|   "intro": "A simple blog……", | ||||
|   "update_info": "Some info", | ||||
|   "create_date": "03-19-2013", | ||||
| 	"widgets": ["index"], | ||||
| 	"category": ["QaCategory"], | ||||
| 	"enable_frontend": true | ||||
| } | ||||
|  | @ -0,0 +1,73 @@ | |||
| module Faq | ||||
|   OrbitApp.registration "Faq",:type=> 'ModuleApp' do | ||||
|     module_label 'faq.faq' | ||||
|     base_url File.expand_path File.dirname(__FILE__)     | ||||
|     # personal_plugin :enable => true,:path=>"panel/faq/plugin/profile",:i18n=>'admin.faq' | ||||
|      | ||||
|     version "0.1" | ||||
|     organization "Rulingcom" | ||||
|     author "RD dep" | ||||
|     intro "I am intro" | ||||
|     update_info 'some update_info' | ||||
| 
 | ||||
|     front_end do | ||||
|       app_page 'qas'  do  | ||||
|         frontend_i18n "faq.frontend.faq" | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     category ["QaCategory"] | ||||
|     data_count 1..20 | ||||
| 
 | ||||
|     widgets do | ||||
|       default_widget do | ||||
|         query 'Qa.all' | ||||
|         enable ['typeA'] | ||||
|         link_field :qa_category_with_title,{:method => 'panel_faq_front_end_qas_path',:args=>{:category_id => [:qa_category,:id]}} | ||||
|         link_field :question,{:method => 'panel_faq_front_end_qa_path',:args=>:self} | ||||
|         link_to_more 'panel_faq_front_end_qas_path',:title_i18n=> 'faq.default_widget.to_more' | ||||
|       end | ||||
| 
 | ||||
|       categories_query 'QaCategory.all' | ||||
|       tags_query 'FaqTag.all' | ||||
| 
 | ||||
|       # customize_widget "index" do  | ||||
|       #   widget_i18n "faq.widget.index" | ||||
|       #   style ["1"] | ||||
|       # end | ||||
|     end | ||||
|      | ||||
|     side_bar do | ||||
|       head_label_i18n  'faq.faq',:icon_class=>"icons-help" | ||||
|       available_for [:admin,:guest,:manager,:sub_manager] | ||||
|       active_for_controllers ({:private=>['qas', 'qa_categorys']}) | ||||
|       active_for_object_auth ['QaCategory']  | ||||
| 
 | ||||
|       head_link_path "panel_faq_back_end_qas_path" | ||||
| 
 | ||||
|       context_link 'list_', | ||||
|                             :link_path=>"panel_faq_back_end_qas_path" , | ||||
|                             :priority=>1, | ||||
|                             :active_for_action=>{:qas=>:index}, | ||||
|                             :available_for => [:all] | ||||
| 
 | ||||
|       context_link 'add',  | ||||
|                             :link_path=>"new_panel_faq_back_end_qa_path" , | ||||
|                             :priority=>2, | ||||
|                             :active_for_action=>{:qas=>:new}, | ||||
|                             :available_for => [:sub_manager] | ||||
|        | ||||
|       context_link 'categories', | ||||
|                             :link_path=>"panel_faq_back_end_qa_categorys_path" , | ||||
|                             :priority=>3, | ||||
|                             :active_for_action=>{:qa_categorys=>:index}, | ||||
|                             :available_for => [:manager] | ||||
| 
 | ||||
|       context_link 'tags', | ||||
|                             :link_path=>"panel_faq_back_end_tags_path" , | ||||
|                             :priority=>4, | ||||
|                             # :active_for_action=>{:bulletin_categorys=>:index}, | ||||
|                             :available_for => [:manager] | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | @ -0,0 +1,4 @@ | |||
| require "faq/engine" | ||||
| 
 | ||||
| module Faq | ||||
| end | ||||
|  | @ -0,0 +1,4 @@ | |||
| module Faq | ||||
|   class Engine < ::Rails::Engine | ||||
|   end | ||||
| end | ||||
|  | @ -0,0 +1,3 @@ | |||
| module Faq | ||||
|   VERSION = "0.0.1" | ||||
| end | ||||
|  | @ -0,0 +1,4 @@ | |||
| # desc "Explaining what the task does" | ||||
| # task :faq do | ||||
| #   # Task goes here | ||||
| # end | ||||
|  | @ -0,0 +1,8 @@ | |||
| #!/usr/bin/env ruby | ||||
| # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. | ||||
| 
 | ||||
| ENGINE_ROOT = File.expand_path('../..', __FILE__) | ||||
| ENGINE_PATH = File.expand_path('../../lib/faq/engine', __FILE__) | ||||
| 
 | ||||
| require 'rails/all' | ||||
| require 'rails/engine/commands' | ||||
|  | @ -0,0 +1,261 @@ | |||
| == Welcome to Rails | ||||
| 
 | ||||
| Rails is a web-application framework that includes everything needed to create | ||||
| database-backed web applications according to the Model-View-Control pattern. | ||||
| 
 | ||||
| This pattern splits the view (also called the presentation) into "dumb" | ||||
| templates that are primarily responsible for inserting pre-built data in between | ||||
| HTML tags. The model contains the "smart" domain objects (such as Account, | ||||
| Product, Person, Post) that holds all the business logic and knows how to | ||||
| persist themselves to a database. The controller handles the incoming requests | ||||
| (such as Save New Account, Update Product, Show Post) by manipulating the model | ||||
| and directing data to the view. | ||||
| 
 | ||||
| In Rails, the model is handled by what's called an object-relational mapping | ||||
| layer entitled Active Record. This layer allows you to present the data from | ||||
| database rows as objects and embellish these data objects with business logic | ||||
| methods. You can read more about Active Record in | ||||
| link:files/vendor/rails/activerecord/README.html. | ||||
| 
 | ||||
| The controller and view are handled by the Action Pack, which handles both | ||||
| layers by its two parts: Action View and Action Controller. These two layers | ||||
| are bundled in a single package due to their heavy interdependence. This is | ||||
| unlike the relationship between the Active Record and Action Pack that is much | ||||
| more separate. Each of these packages can be used independently outside of | ||||
| Rails. You can read more about Action Pack in | ||||
| link:files/vendor/rails/actionpack/README.html. | ||||
| 
 | ||||
| 
 | ||||
| == Getting Started | ||||
| 
 | ||||
| 1. At the command prompt, create a new Rails application: | ||||
|        <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name) | ||||
| 
 | ||||
| 2. Change directory to <tt>myapp</tt> and start the web server: | ||||
|        <tt>cd myapp; rails server</tt> (run with --help for options) | ||||
| 
 | ||||
| 3. Go to http://localhost:3000/ and you'll see: | ||||
|        "Welcome aboard: You're riding Ruby on Rails!" | ||||
| 
 | ||||
| 4. Follow the guidelines to start developing your application. You can find | ||||
| the following resources handy: | ||||
| 
 | ||||
| * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html | ||||
| * Ruby on Rails Tutorial Book: http://www.railstutorial.org/ | ||||
| 
 | ||||
| 
 | ||||
| == Debugging Rails | ||||
| 
 | ||||
| Sometimes your application goes wrong. Fortunately there are a lot of tools that | ||||
| will help you debug it and get it back on the rails. | ||||
| 
 | ||||
| First area to check is the application log files. Have "tail -f" commands | ||||
| running on the server.log and development.log. Rails will automatically display | ||||
| debugging and runtime information to these files. Debugging info will also be | ||||
| shown in the browser on requests from 127.0.0.1. | ||||
| 
 | ||||
| You can also log your own messages directly into the log file from your code | ||||
| using the Ruby logger class from inside your controllers. Example: | ||||
| 
 | ||||
|   class WeblogController < ActionController::Base | ||||
|     def destroy | ||||
|       @weblog = Weblog.find(params[:id]) | ||||
|       @weblog.destroy | ||||
|       logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| The result will be a message in your log file along the lines of: | ||||
| 
 | ||||
|   Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! | ||||
| 
 | ||||
| More information on how to use the logger is at http://www.ruby-doc.org/core/ | ||||
| 
 | ||||
| Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are | ||||
| several books available online as well: | ||||
| 
 | ||||
| * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) | ||||
| * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) | ||||
| 
 | ||||
| These two books will bring you up to speed on the Ruby language and also on | ||||
| programming in general. | ||||
| 
 | ||||
| 
 | ||||
| == Debugger | ||||
| 
 | ||||
| Debugger support is available through the debugger command when you start your | ||||
| Mongrel or WEBrick server with --debugger. This means that you can break out of | ||||
| execution at any point in the code, investigate and change the model, and then, | ||||
| resume execution! You need to install ruby-debug to run the server in debugging | ||||
| mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example: | ||||
| 
 | ||||
|   class WeblogController < ActionController::Base | ||||
|     def index | ||||
|       @posts = Post.all | ||||
|       debugger | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| So the controller will accept the action, run the first line, then present you | ||||
| with a IRB prompt in the server window. Here you can do things like: | ||||
| 
 | ||||
|   >> @posts.inspect | ||||
|   => "[#<Post:0x14a6be8 | ||||
|           @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>, | ||||
|        #<Post:0x14a6620 | ||||
|           @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]" | ||||
|   >> @posts.first.title = "hello from a debugger" | ||||
|   => "hello from a debugger" | ||||
| 
 | ||||
| ...and even better, you can examine how your runtime objects actually work: | ||||
| 
 | ||||
|   >> f = @posts.first | ||||
|   => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}> | ||||
|   >> f. | ||||
|   Display all 152 possibilities? (y or n) | ||||
| 
 | ||||
| Finally, when you're ready to resume execution, you can enter "cont". | ||||
| 
 | ||||
| 
 | ||||
| == Console | ||||
| 
 | ||||
| The console is a Ruby shell, which allows you to interact with your | ||||
| application's domain model. Here you'll have all parts of the application | ||||
| configured, just like it is when the application is running. You can inspect | ||||
| domain models, change values, and save to the database. Starting the script | ||||
| without arguments will launch it in the development environment. | ||||
| 
 | ||||
| To start the console, run <tt>rails console</tt> from the application | ||||
| directory. | ||||
| 
 | ||||
| Options: | ||||
| 
 | ||||
| * Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications | ||||
|   made to the database. | ||||
| * Passing an environment name as an argument will load the corresponding | ||||
|   environment. Example: <tt>rails console production</tt>. | ||||
| 
 | ||||
| To reload your controllers and models after launching the console run | ||||
| <tt>reload!</tt> | ||||
| 
 | ||||
| More information about irb can be found at: | ||||
| link:http://www.rubycentral.org/pickaxe/irb.html | ||||
| 
 | ||||
| 
 | ||||
| == dbconsole | ||||
| 
 | ||||
| You can go to the command line of your database directly through <tt>rails | ||||
| dbconsole</tt>. You would be connected to the database with the credentials | ||||
| defined in database.yml. Starting the script without arguments will connect you | ||||
| to the development database. Passing an argument will connect you to a different | ||||
| database, like <tt>rails dbconsole production</tt>. Currently works for MySQL, | ||||
| PostgreSQL and SQLite 3. | ||||
| 
 | ||||
| == Description of Contents | ||||
| 
 | ||||
| The default directory structure of a generated Ruby on Rails application: | ||||
| 
 | ||||
|   |-- app | ||||
|   |   |-- assets | ||||
|   |       |-- images | ||||
|   |       |-- javascripts | ||||
|   |       `-- stylesheets | ||||
|   |   |-- controllers | ||||
|   |   |-- helpers | ||||
|   |   |-- mailers | ||||
|   |   |-- models | ||||
|   |   `-- views | ||||
|   |       `-- layouts | ||||
|   |-- config | ||||
|   |   |-- environments | ||||
|   |   |-- initializers | ||||
|   |   `-- locales | ||||
|   |-- db | ||||
|   |-- doc | ||||
|   |-- lib | ||||
|   |   `-- tasks | ||||
|   |-- log | ||||
|   |-- public | ||||
|   |-- script | ||||
|   |-- test | ||||
|   |   |-- fixtures | ||||
|   |   |-- functional | ||||
|   |   |-- integration | ||||
|   |   |-- performance | ||||
|   |   `-- unit | ||||
|   |-- tmp | ||||
|   |   |-- cache | ||||
|   |   |-- pids | ||||
|   |   |-- sessions | ||||
|   |   `-- sockets | ||||
|   `-- vendor | ||||
|       |-- assets | ||||
|           `-- stylesheets | ||||
|       `-- plugins | ||||
| 
 | ||||
| app | ||||
|   Holds all the code that's specific to this particular application. | ||||
| 
 | ||||
| app/assets | ||||
|   Contains subdirectories for images, stylesheets, and JavaScript files. | ||||
| 
 | ||||
| app/controllers | ||||
|   Holds controllers that should be named like weblogs_controller.rb for | ||||
|   automated URL mapping. All controllers should descend from | ||||
|   ApplicationController which itself descends from ActionController::Base. | ||||
| 
 | ||||
| app/models | ||||
|   Holds models that should be named like post.rb. Models descend from | ||||
|   ActiveRecord::Base by default. | ||||
| 
 | ||||
| app/views | ||||
|   Holds the template files for the view that should be named like | ||||
|   weblogs/index.html.erb for the WeblogsController#index action. All views use | ||||
|   eRuby syntax by default. | ||||
| 
 | ||||
| app/views/layouts | ||||
|   Holds the template files for layouts to be used with views. This models the | ||||
|   common header/footer method of wrapping views. In your views, define a layout | ||||
|   using the <tt>layout :default</tt> and create a file named default.html.erb. | ||||
|   Inside default.html.erb, call <% yield %> to render the view using this | ||||
|   layout. | ||||
| 
 | ||||
| app/helpers | ||||
|   Holds view helpers that should be named like weblogs_helper.rb. These are | ||||
|   generated for you automatically when using generators for controllers. | ||||
|   Helpers can be used to wrap functionality for your views into methods. | ||||
| 
 | ||||
| config | ||||
|   Configuration files for the Rails environment, the routing map, the database, | ||||
|   and other dependencies. | ||||
| 
 | ||||
| db | ||||
|   Contains the database schema in schema.rb. db/migrate contains all the | ||||
|   sequence of Migrations for your schema. | ||||
| 
 | ||||
| doc | ||||
|   This directory is where your application documentation will be stored when | ||||
|   generated using <tt>rake doc:app</tt> | ||||
| 
 | ||||
| lib | ||||
|   Application specific libraries. Basically, any kind of custom code that | ||||
|   doesn't belong under controllers, models, or helpers. This directory is in | ||||
|   the load path. | ||||
| 
 | ||||
| public | ||||
|   The directory available for the web server. Also contains the dispatchers and the | ||||
|   default HTML files. This should be set as the DOCUMENT_ROOT of your web | ||||
|   server. | ||||
| 
 | ||||
| script | ||||
|   Helper scripts for automation and generation. | ||||
| 
 | ||||
| test | ||||
|   Unit and functional tests along with fixtures. When using the rails generate | ||||
|   command, template test files will be generated for you and placed in this | ||||
|   directory. | ||||
| 
 | ||||
| vendor | ||||
|   External libraries that the application depends on. Also includes the plugins | ||||
|   subdirectory. If the app has frozen rails, those gems also go here, under | ||||
|   vendor/rails/. This directory is in the load path. | ||||
|  | @ -0,0 +1,7 @@ | |||
| #!/usr/bin/env rake | ||||
| # 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__) | ||||
| 
 | ||||
| Dummy::Application.load_tasks | ||||
							
								
								
									
										15
									
								
								vendor/built_in_modules/faq/test/dummy/app/assets/javascripts/application.js
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										15
									
								
								vendor/built_in_modules/faq/test/dummy/app/assets/javascripts/application.js
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,15 @@ | |||
| // 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
 | ||||
| // the compiled file.
 | ||||
| //
 | ||||
| // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
 | ||||
| // GO AFTER THE REQUIRES BELOW.
 | ||||
| //
 | ||||
| //= require jquery
 | ||||
| //= require jquery_ujs
 | ||||
| //= require_tree .
 | ||||
							
								
								
									
										13
									
								
								vendor/built_in_modules/faq/test/dummy/app/assets/stylesheets/application.css
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										13
									
								
								vendor/built_in_modules/faq/test/dummy/app/assets/stylesheets/application.css
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,13 @@ | |||
| /* | ||||
|  * 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 top of the | ||||
|  * compiled file, but it's generally better to create a new file per style scope. | ||||
|  * | ||||
|  *= require_self | ||||
|  *= require_tree . | ||||
|  */ | ||||
							
								
								
									
										3
									
								
								vendor/built_in_modules/faq/test/dummy/app/controllers/application_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										3
									
								
								vendor/built_in_modules/faq/test/dummy/app/controllers/application_controller.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,3 @@ | |||
| class ApplicationController < ActionController::Base | ||||
|   protect_from_forgery | ||||
| end | ||||
|  | @ -0,0 +1,2 @@ | |||
| module ApplicationHelper | ||||
| end | ||||
							
								
								
									
										14
									
								
								vendor/built_in_modules/faq/test/dummy/app/views/layouts/application.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										14
									
								
								vendor/built_in_modules/faq/test/dummy/app/views/layouts/application.html.erb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,14 @@ | |||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Dummy</title> | ||||
|   <%= stylesheet_link_tag    "application", :media => "all" %> | ||||
|   <%= javascript_include_tag "application" %> | ||||
|   <%= csrf_meta_tags %> | ||||
| </head> | ||||
| <body> | ||||
| 
 | ||||
| <%= yield %> | ||||
| 
 | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,4 @@ | |||
| # This file is used by Rack-based servers to start the application. | ||||
| 
 | ||||
| require ::File.expand_path('../config/environment',  __FILE__) | ||||
| run Dummy::Application | ||||
|  | @ -0,0 +1,59 @@ | |||
| require File.expand_path('../boot', __FILE__) | ||||
| 
 | ||||
| require 'rails/all' | ||||
| 
 | ||||
| Bundler.require | ||||
| require "faq" | ||||
| 
 | ||||
| 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. | ||||
| 
 | ||||
|     # Custom directories with classes and modules you want to be autoloadable. | ||||
|     # config.autoload_paths += %W(#{config.root}/extras) | ||||
| 
 | ||||
|     # Only load the plugins named here, in the order given (default is alphabetical). | ||||
|     # :all can be used as a placeholder for all plugins not explicitly named. | ||||
|     # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | ||||
| 
 | ||||
|     # Activate observers that should always be running. | ||||
|     # config.active_record.observers = :cacher, :garbage_collector, :forum_observer | ||||
| 
 | ||||
|     # 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 | ||||
| 
 | ||||
|     # Configure the default encoding used in templates for Ruby 1.9. | ||||
|     config.encoding = "utf-8" | ||||
| 
 | ||||
|     # Configure sensitive parameters which will be filtered from the log file. | ||||
|     config.filter_parameters += [:password] | ||||
| 
 | ||||
|     # Enable escaping HTML in JSON. | ||||
|     config.active_support.escape_html_entities_in_json = true | ||||
| 
 | ||||
|     # Use SQL instead of Active Record's schema dumper when creating the database. | ||||
|     # This is necessary if your schema can't be completely dumped by the schema dumper, | ||||
|     # like if you have constraints or database-specific column types | ||||
|     # config.active_record.schema_format = :sql | ||||
| 
 | ||||
|     # Enforce whitelist mode for mass assignment. | ||||
|     # This will create an empty whitelist of attributes available for mass-assignment for all models | ||||
|     # in your app. As such, your models will need to explicitly whitelist or blacklist accessible | ||||
|     # parameters by using an attr_accessible or attr_protected declaration. | ||||
|     config.active_record.whitelist_attributes = true | ||||
| 
 | ||||
|     # Enable the asset pipeline | ||||
|     config.assets.enabled = true | ||||
| 
 | ||||
|     # Version of your assets, change this if you want to expire all your assets | ||||
|     config.assets.version = '1.0' | ||||
|   end | ||||
| end | ||||
| 
 | ||||
|  | @ -0,0 +1,10 @@ | |||
| require 'rubygems' | ||||
| gemfile = File.expand_path('../../../../Gemfile', __FILE__) | ||||
| 
 | ||||
| if File.exist?(gemfile) | ||||
|   ENV['BUNDLE_GEMFILE'] = gemfile | ||||
|   require 'bundler' | ||||
|   Bundler.setup | ||||
| end | ||||
| 
 | ||||
| $:.unshift File.expand_path('../../../../lib', __FILE__) | ||||
|  | @ -0,0 +1,25 @@ | |||
| # SQLite version 3.x | ||||
| #   gem install sqlite3 | ||||
| # | ||||
| #   Ensure the SQLite 3 gem is defined in your Gemfile | ||||
| #   gem 'sqlite3' | ||||
| development: | ||||
|   adapter: sqlite3 | ||||
|   database: db/development.sqlite3 | ||||
|   pool: 5 | ||||
|   timeout: 5000 | ||||
| 
 | ||||
| # Warning: The database defined as "test" will be erased and | ||||
| # re-generated from your development database when you run "rake". | ||||
| # Do not set this db to the same as development or production. | ||||
| test: | ||||
|   adapter: sqlite3 | ||||
|   database: db/test.sqlite3 | ||||
|   pool: 5 | ||||
|   timeout: 5000 | ||||
| 
 | ||||
| production: | ||||
|   adapter: sqlite3 | ||||
|   database: db/production.sqlite3 | ||||
|   pool: 5 | ||||
|   timeout: 5000 | ||||
|  | @ -0,0 +1,5 @@ | |||
| # Load the rails application | ||||
| require File.expand_path('../application', __FILE__) | ||||
| 
 | ||||
| # Initialize the rails application | ||||
| Dummy::Application.initialize! | ||||
|  | @ -0,0 +1,37 @@ | |||
| Dummy::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 | ||||
| 
 | ||||
|   # Log error messages when you accidentally call methods on nil. | ||||
|   config.whiny_nils = true | ||||
| 
 | ||||
|   # 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 | ||||
| 
 | ||||
|   # Only use best-standards-support built into browsers | ||||
|   config.action_dispatch.best_standards_support = :builtin | ||||
| 
 | ||||
|   # Raise exception on mass assignment protection for Active Record models | ||||
|   config.active_record.mass_assignment_sanitizer = :strict | ||||
| 
 | ||||
|   # Log the query plan for queries taking more than this (works | ||||
|   # with SQLite, MySQL, and PostgreSQL) | ||||
|   config.active_record.auto_explain_threshold_in_seconds = 0.5 | ||||
| 
 | ||||
|   # Do not compress assets | ||||
|   config.assets.compress = false | ||||
| 
 | ||||
|   # Expands the lines which load the assets | ||||
|   config.assets.debug = true | ||||
| end | ||||
|  | @ -0,0 +1,67 @@ | |||
| Dummy::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 | ||||
| 
 | ||||
|   # Full error reports are disabled and caching is turned on | ||||
|   config.consider_all_requests_local       = false | ||||
|   config.action_controller.perform_caching = 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.compress = true | ||||
| 
 | ||||
|   # Don't fallback to assets pipeline if a precompiled asset is missed | ||||
|   config.assets.compile = false | ||||
| 
 | ||||
|   # Generate digests for assets URLs | ||||
|   config.assets.digest = true | ||||
| 
 | ||||
|   # Defaults to nil and saved in location specified by config.assets.prefix | ||||
|   # config.assets.manifest = YOUR_PATH | ||||
| 
 | ||||
|   # 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 | ||||
| 
 | ||||
|   # See everything in the log (default is :info) | ||||
|   # config.log_level = :debug | ||||
| 
 | ||||
|   # 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 are already added) | ||||
|   # config.assets.precompile += %w( search.js ) | ||||
| 
 | ||||
|   # Disable delivery errors, bad email addresses will be ignored | ||||
|   # config.action_mailer.raise_delivery_errors = false | ||||
| 
 | ||||
|   # Enable threaded mode | ||||
|   # config.threadsafe! | ||||
| 
 | ||||
|   # Enable locale fallbacks for I18n (makes lookups for any locale fall back to | ||||
|   # the I18n.default_locale when a translation can not be found) | ||||
|   config.i18n.fallbacks = true | ||||
| 
 | ||||
|   # Send deprecation notices to registered listeners | ||||
|   config.active_support.deprecation = :notify | ||||
| 
 | ||||
|   # Log the query plan for queries taking more than this (works | ||||
|   # with SQLite, MySQL, and PostgreSQL) | ||||
|   # config.active_record.auto_explain_threshold_in_seconds = 0.5 | ||||
| end | ||||
|  | @ -0,0 +1,37 @@ | |||
| Dummy::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 | ||||
| 
 | ||||
|   # Configure static asset server for tests with Cache-Control for performance | ||||
|   config.serve_static_assets = true | ||||
|   config.static_cache_control = "public, max-age=3600" | ||||
| 
 | ||||
|   # Log error messages when you accidentally call methods on nil | ||||
|   config.whiny_nils = true | ||||
| 
 | ||||
|   # 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 | ||||
| 
 | ||||
|   # Raise exception on mass assignment protection for Active Record models | ||||
|   config.active_record.mass_assignment_sanitizer = :strict | ||||
| 
 | ||||
|   # Print deprecation notices to the stderr | ||||
|   config.active_support.deprecation = :stderr | ||||
| end | ||||
							
								
								
									
										7
									
								
								vendor/built_in_modules/faq/test/dummy/config/initializers/backtrace_silencers.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										7
									
								
								vendor/built_in_modules/faq/test/dummy/config/initializers/backtrace_silencers.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -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! | ||||
|  | @ -0,0 +1,15 @@ | |||
| # Be sure to restart your server when you modify this file. | ||||
| 
 | ||||
| # Add new inflection rules using the following format | ||||
| # (all these examples are active by default): | ||||
| # ActiveSupport::Inflector.inflections 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 do |inflect| | ||||
| #   inflect.acronym 'RESTful' | ||||
| # end | ||||
|  | @ -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 | ||||
|  | @ -0,0 +1,7 @@ | |||
| # Be sure to restart your server when you modify this file. | ||||
| 
 | ||||
| # Your secret key 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. | ||||
| Dummy::Application.config.secret_token = '952c6d72a8f6b07c06e64505287a675a0528f43620143ba79b080afa16d8696bfa9ae6187146e05a10d0e1e08b729be269951e1acd52653a1d95cb294271566e' | ||||
|  | @ -0,0 +1,8 @@ | |||
| # Be sure to restart your server when you modify this file. | ||||
| 
 | ||||
| Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' | ||||
| 
 | ||||
| # Use the database for sessions instead of the cookie-based default, | ||||
| # which shouldn't be used to store highly confidential information | ||||
| # (create the session table with "rails generate session_migration") | ||||
| # Dummy::Application.config.session_store :active_record_store | ||||
							
								
								
									
										14
									
								
								vendor/built_in_modules/faq/test/dummy/config/initializers/wrap_parameters.rb
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										14
									
								
								vendor/built_in_modules/faq/test/dummy/config/initializers/wrap_parameters.rb
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,14 @@ | |||
| # 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] | ||||
| end | ||||
| 
 | ||||
| # Disable root element in JSON by default. | ||||
| ActiveSupport.on_load(:active_record) do | ||||
|   self.include_root_in_json = false | ||||
| end | ||||
|  | @ -0,0 +1,5 @@ | |||
| # Sample localization file for English. Add more files in this directory for other locales. | ||||
| # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. | ||||
| 
 | ||||
| en: | ||||
|   hello: "Hello world" | ||||
|  | @ -0,0 +1,58 @@ | |||
| Dummy::Application.routes.draw do | ||||
|   # The priority is based upon order of creation: | ||||
|   # first created -> highest priority. | ||||
| 
 | ||||
|   # Sample of regular route: | ||||
|   #   match 'products/:id' => 'catalog#view' | ||||
|   # Keep in mind you can assign values other than :controller and :action | ||||
| 
 | ||||
|   # Sample of named route: | ||||
|   #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase | ||||
|   # This route can be invoked with purchase_url(:id => product.id) | ||||
| 
 | ||||
|   # Sample resource route (maps HTTP verbs to controller actions automatically): | ||||
|   #   resources :products | ||||
| 
 | ||||
|   # Sample resource route with options: | ||||
|   #   resources :products do | ||||
|   #     member do | ||||
|   #       get 'short' | ||||
|   #       post 'toggle' | ||||
|   #     end | ||||
|   # | ||||
|   #     collection do | ||||
|   #       get 'sold' | ||||
|   #     end | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route with sub-resources: | ||||
|   #   resources :products do | ||||
|   #     resources :comments, :sales | ||||
|   #     resource :seller | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route with more complex sub-resources | ||||
|   #   resources :products do | ||||
|   #     resources :comments | ||||
|   #     resources :sales do | ||||
|   #       get 'recent', :on => :collection | ||||
|   #     end | ||||
|   #   end | ||||
| 
 | ||||
|   # Sample resource route within a namespace: | ||||
|   #   namespace :admin do | ||||
|   #     # Directs /admin/products/* to Admin::ProductsController | ||||
|   #     # (app/controllers/admin/products_controller.rb) | ||||
|   #     resources :products | ||||
|   #   end | ||||
| 
 | ||||
|   # You can have the root of your site routed with "root" | ||||
|   # just remember to delete public/index.html. | ||||
|   # root :to => 'welcome#index' | ||||
| 
 | ||||
|   # See how all your routes lay out with "rake routes" | ||||
| 
 | ||||
|   # This is a legacy wild controller route that's not recommended for RESTful applications. | ||||
|   # Note: This route will make all actions in every controller accessible via GET requests. | ||||
|   # match ':controller(/:action(/:id))(.:format)' | ||||
| end | ||||
|  | @ -0,0 +1,26 @@ | |||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <title>The page you were looking for doesn't exist (404)</title> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|   <!-- This file lives in public/404.html --> | ||||
|   <div class="dialog"> | ||||
|     <h1>The page you were looking for doesn't exist.</h1> | ||||
|     <p>You may have mistyped the address or the page may have moved.</p> | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,26 @@ | |||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <title>The change you wanted was rejected (422)</title> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|   <!-- This file lives in public/422.html --> | ||||
|   <div class="dialog"> | ||||
|     <h1>The change you wanted was rejected.</h1> | ||||
|     <p>Maybe you tried to change something you didn't have access to.</p> | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,25 @@ | |||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
|   <title>We're sorry, but something went wrong (500)</title> | ||||
|   <style type="text/css"> | ||||
|     body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; } | ||||
|     div.dialog { | ||||
|       width: 25em; | ||||
|       padding: 0 4em; | ||||
|       margin: 4em auto 0 auto; | ||||
|       border: 1px solid #ccc; | ||||
|       border-right-color: #999; | ||||
|       border-bottom-color: #999; | ||||
|     } | ||||
|     h1 { font-size: 100%; color: #f00; line-height: 1.5em; } | ||||
|   </style> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|   <!-- This file lives in public/500.html --> | ||||
|   <div class="dialog"> | ||||
|     <h1>We're sorry, but something went wrong.</h1> | ||||
|   </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,6 @@ | |||
| #!/usr/bin/env ruby | ||||
| # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. | ||||
| 
 | ||||
| APP_PATH = File.expand_path('../../config/application',  __FILE__) | ||||
| require File.expand_path('../../config/boot',  __FILE__) | ||||
| require 'rails/commands' | ||||
|  | @ -0,0 +1,7 @@ | |||
| require 'test_helper' | ||||
| 
 | ||||
| class FaqTest < ActiveSupport::TestCase | ||||
|   test "truth" do | ||||
|     assert_kind_of Module, Faq | ||||
|   end | ||||
| end | ||||
|  | @ -0,0 +1,10 @@ | |||
| require 'test_helper' | ||||
| 
 | ||||
| class NavigationTest < ActionDispatch::IntegrationTest | ||||
|   fixtures :all | ||||
| 
 | ||||
|   # test "the truth" do | ||||
|   #   assert true | ||||
|   # end | ||||
| end | ||||
| 
 | ||||
|  | @ -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 | ||||
		Loading…
	
		Reference in New Issue