first commit for course plugin
This commit is contained in:
		
						commit
						124cfd54cf
					
				| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					.bundle/
 | 
				
			||||||
 | 
					log/*.log
 | 
				
			||||||
 | 
					pkg/
 | 
				
			||||||
 | 
					test/dummy/db/*.sqlite3
 | 
				
			||||||
 | 
					test/dummy/db/*.sqlite3-journal
 | 
				
			||||||
 | 
					test/dummy/log/*.log
 | 
				
			||||||
 | 
					test/dummy/tmp/
 | 
				
			||||||
 | 
					test/dummy/.sass-cache
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					source "https://rubygems.org"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Declare your gem's dependencies in personal_course.gemspec.
 | 
				
			||||||
 | 
					# Bundler will treat runtime dependencies like base dependencies, and
 | 
				
			||||||
 | 
					# development dependencies will be added by default to the :development group.
 | 
				
			||||||
 | 
					gemspec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Declare any dependencies that are still in development here instead of in
 | 
				
			||||||
 | 
					# your gemspec. These might include edge Rails or gems from your path or
 | 
				
			||||||
 | 
					# Git. Remember to move these dependencies to your gemspec before releasing
 | 
				
			||||||
 | 
					# your gem to rubygems.org.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To use debugger
 | 
				
			||||||
 | 
					# gem 'debugger'
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					Copyright 2015 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 @@
 | 
				
			||||||
 | 
					= PersonalCourse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This project rocks and uses MIT-LICENSE.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					  require 'bundler/setup'
 | 
				
			||||||
 | 
					rescue LoadError
 | 
				
			||||||
 | 
					  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'rdoc/task'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RDoc::Task.new(:rdoc) do |rdoc|
 | 
				
			||||||
 | 
					  rdoc.rdoc_dir = 'rdoc'
 | 
				
			||||||
 | 
					  rdoc.title    = 'PersonalCourse'
 | 
				
			||||||
 | 
					  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,13 @@
 | 
				
			||||||
 | 
					// This is a manifest file that'll be compiled into application.js, which will include all the files
 | 
				
			||||||
 | 
					// listed below.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
 | 
				
			||||||
 | 
					// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
 | 
				
			||||||
 | 
					// compiled file.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
 | 
				
			||||||
 | 
					// about supported directives.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//= require_tree .
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This is a manifest file that'll be compiled into application.css, which will include all the files
 | 
				
			||||||
 | 
					 * listed below.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 | 
				
			||||||
 | 
					 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
 | 
				
			||||||
 | 
					 * compiled file so the styles you add here take precedence over styles defined in any styles
 | 
				
			||||||
 | 
					 * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
 | 
				
			||||||
 | 
					 * file per style scope.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *= require_tree .
 | 
				
			||||||
 | 
					 *= require_self
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					class Admin::CourseCategoriesController < OrbitMemberController
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def index
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def new
 | 
				
			||||||
 | 
							@course_category = CourseCategory.new
 | 
				
			||||||
 | 
							@url = admin_course_categories_path
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def edit
 | 
				
			||||||
 | 
							@course_category = CourseCategory.find(params[:id])
 | 
				
			||||||
 | 
							@url = admin_course_category_path(@course_category)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def create
 | 
				
			||||||
 | 
							course_category = CourseCategory.create(course_category_params)
 | 
				
			||||||
 | 
							@course_categories = CourseCategory.all.order_by(:sort_position => "asc")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def update
 | 
				
			||||||
 | 
							course_category = CourseCategory.find(params[:id]) rescue nil
 | 
				
			||||||
 | 
							course_category.update_attributes(course_category_params) if !course_category.nil?
 | 
				
			||||||
 | 
							@course_categories = CourseCategory.all.order_by(:sort_position => "asc")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def destroy
 | 
				
			||||||
 | 
							course_category = CourseCategory.find(params[:id]) rescue nil
 | 
				
			||||||
 | 
							course_category.destroy if !course_category.nil?
 | 
				
			||||||
 | 
							@course_categories = CourseCategory.all.order_by(:sort_position => "asc")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def update_order
 | 
				
			||||||
 | 
							orders = params["order"]
 | 
				
			||||||
 | 
						    CourseCategory.each do |cc|
 | 
				
			||||||
 | 
						      cc.sort_position = orders["#{cc.id}"]
 | 
				
			||||||
 | 
						      cc.save
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
						    render :json => {"success" => true}.to_json
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def course_category_params
 | 
				
			||||||
 | 
							params.require(:course_category).permit!
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					class Admin::CourseSemestersController < OrbitMemberController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def index
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def new
 | 
				
			||||||
 | 
							@course_semester = CourseSemester.new
 | 
				
			||||||
 | 
							@url = admin_course_semesters_path
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def edit
 | 
				
			||||||
 | 
							@course_semester = CourseSemester.find(params[:id])
 | 
				
			||||||
 | 
							@url = admin_course_semester_path(@course_semester)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def create
 | 
				
			||||||
 | 
							course_semester = CourseSemester.create(course_semester_params)
 | 
				
			||||||
 | 
							@course_semesters = CourseSemester.all
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def update
 | 
				
			||||||
 | 
							course_semester = CourseSemester.find(params[:id]) rescue nil
 | 
				
			||||||
 | 
							if !course_semester.nil?
 | 
				
			||||||
 | 
								course_semester.update_attributes(course_semester_params)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							@course_semesters = CourseSemester.all
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def destroy
 | 
				
			||||||
 | 
							course_semester = CourseSemester.find(params[:id]) rescue nil
 | 
				
			||||||
 | 
							if !course_semester.nil?
 | 
				
			||||||
 | 
								course_semester.destroy
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							@course_semesters = CourseSemester.all
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def course_semester_params
 | 
				
			||||||
 | 
							params.require(:course_semester).permit!
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					class Admin::CoursesController < OrbitMemberController
 | 
				
			||||||
 | 
					  	include Admin::CoursesHelper
 | 
				
			||||||
 | 
						layout "member_plugin"
 | 
				
			||||||
 | 
						  before_action :set_course, only: [:show, :edit , :update, :destroy]
 | 
				
			||||||
 | 
						  before_action :set_plugin
 | 
				
			||||||
 | 
						  before_action :get_settings,:only => [:new, :edit, :setting]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  before_action :need_access_right
 | 
				
			||||||
 | 
						  before_action :allow_admin_only, :only => [:index, :setting]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def index
 | 
				
			||||||
 | 
					    	@courses = Course.order_by(:created_at=>'desc').page(params[:page]).per(10)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def new
 | 
				
			||||||
 | 
							@member = MemberProfile.find_by(:uid=>params['uid']) rescue nil
 | 
				
			||||||
 | 
					    	@course = Course.new
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def create
 | 
				
			||||||
 | 
							course = Course.create(course_params)
 | 
				
			||||||
 | 
							redirect_to admin_courses_path
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def show
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def edit
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def destroy
 | 
				
			||||||
 | 
							@course.destroy
 | 
				
			||||||
 | 
							redirect_to admin_courses_path(:page => params[:page])
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def update
 | 
				
			||||||
 | 
							@course.update_attributes(course_params)
 | 
				
			||||||
 | 
							@course.save
 | 
				
			||||||
 | 
							redirect_to params[:referer_url]
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def setting
 | 
				
			||||||
 | 
					  	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	def frontend_setting
 | 
				
			||||||
 | 
					    	@member = MemberProfile.find_by(:uid=>params['uid']) rescue nil
 | 
				
			||||||
 | 
					    	@intro = CourseIntro.find_by(:member_profile_id=>@member.id) rescue nil
 | 
				
			||||||
 | 
					    	@intro = @intro.nil? ? CourseIntro.new({:member_profile_id=>@member.id}) : @intro
 | 
				
			||||||
 | 
					  	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	def update_frontend_setting
 | 
				
			||||||
 | 
						    @member = MemberProfile.find(intro_params['member_profile_id']) rescue nil
 | 
				
			||||||
 | 
						    @intro = CourseIntro.find_by(:member_profile_id=>@member.id) rescue nil
 | 
				
			||||||
 | 
						    @intro = @intro.nil? ? CourseIntro.new({:member_profile_id=>@member.id}) : @intro
 | 
				
			||||||
 | 
						    @intro.update_attributes(intro_params)
 | 
				
			||||||
 | 
						    @intro.save
 | 
				
			||||||
 | 
						    redirect_to URI.encode('/admin/members/'+@member.to_param+'/Course')
 | 
				
			||||||
 | 
					  	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	def toggle_hide
 | 
				
			||||||
 | 
					  		if params[:ids]
 | 
				
			||||||
 | 
						      @projects = Course.any_in(_id: params[:ids])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						      @projects.each do |project|
 | 
				
			||||||
 | 
						        project.is_hidden = params[:disable]
 | 
				
			||||||
 | 
						        project.save
 | 
				
			||||||
 | 
						      end
 | 
				
			||||||
 | 
					    	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   		render json: {"success"=>true}
 | 
				
			||||||
 | 
					  	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def course_params
 | 
				
			||||||
 | 
							params.require(:course).permit!
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def intro_params
 | 
				
			||||||
 | 
					    	params.require(:course_intro).permit! rescue nil
 | 
				
			||||||
 | 
					  	end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def get_settings
 | 
				
			||||||
 | 
						    @course_semesters = CourseSemester.all
 | 
				
			||||||
 | 
						    @course_categories = CourseCategory.all.order_by(:sort_position => "asc")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def set_plugin
 | 
				
			||||||
 | 
						    @plugin = OrbitApp::Plugin::Registration.all.select{|plugin| plugin.app_name.eql? 'Course'}.first
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def set_course
 | 
				
			||||||
 | 
						    path = request.path.split('/')
 | 
				
			||||||
 | 
						    if path.last.include? '-'
 | 
				
			||||||
 | 
						      uid = path[-1].split("-").last
 | 
				
			||||||
 | 
						      uid = uid.split("?").first
 | 
				
			||||||
 | 
						    else
 | 
				
			||||||
 | 
						      uid = path[-2].split("-").last
 | 
				
			||||||
 | 
						      uid = uid.split("?").first
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
						     @course = Course.find_by(:uid => uid) rescue Course.find(params[:id])
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,48 @@
 | 
				
			||||||
 | 
					class PersonalCoursesController < ApplicationController
 | 
				
			||||||
 | 
						def index
 | 
				
			||||||
 | 
						    courses = Course.where(:is_hidden=>false).order_by(:year=>'desc').page(OrbitHelper.params[:page_no]).per(OrbitHelper.page_data_count)
 | 
				
			||||||
 | 
						    courses_list = courses.collect do |course|
 | 
				
			||||||
 | 
						      {
 | 
				
			||||||
 | 
						        "year" => course.year,
 | 
				
			||||||
 | 
						        "title" => course.title,
 | 
				
			||||||
 | 
						        "category" => course.course_category.title,
 | 
				
			||||||
 | 
						        "semester" => course.course_semester.title,
 | 
				
			||||||
 | 
						        "authors" => (course.member_profile.name rescue ""),
 | 
				
			||||||
 | 
						        "link_to_show" => OrbitHelper.url_to_show(course.to_param)
 | 
				
			||||||
 | 
						      }
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      "courses" => courses_list,
 | 
				
			||||||
 | 
						      "extras" => {
 | 
				
			||||||
 | 
						        "widget-title" => t("module_name.personal_course"),
 | 
				
			||||||
 | 
						        "th_year" => t('personal_course.year'),
 | 
				
			||||||
 | 
						        "th_course_title" => t("personal_course.title"),
 | 
				
			||||||
 | 
						        "th_course_category" => t("personal_course.course_category"),
 | 
				
			||||||
 | 
						        "th_course_semester" => t("personal_course.course_semester"),
 | 
				
			||||||
 | 
						        "th_authors" => t('users.name')
 | 
				
			||||||
 | 
						      },
 | 
				
			||||||
 | 
						      "total_pages" => courses.total_pages
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def show
 | 
				
			||||||
 | 
							params = OrbitHelper.params
 | 
				
			||||||
 | 
					    	plugin = Course.where(:is_hidden=>false).find_by(uid: params[:uid])
 | 
				
			||||||
 | 
					    	fields_to_show = [
 | 
				
			||||||
 | 
							    "year",
 | 
				
			||||||
 | 
							    "course_category",
 | 
				
			||||||
 | 
							    "title",
 | 
				
			||||||
 | 
							    "objective",
 | 
				
			||||||
 | 
							    "course_semester",
 | 
				
			||||||
 | 
							    "course_syllabus_file",
 | 
				
			||||||
 | 
								"course_progress_file",
 | 
				
			||||||
 | 
								"course_activity_file",
 | 
				
			||||||
 | 
								"course_multimedia_file",
 | 
				
			||||||
 | 
								"course_material_file",
 | 
				
			||||||
 | 
								"course_supplement_file",
 | 
				
			||||||
 | 
								"course_evaluation_file"
 | 
				
			||||||
 | 
						    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   	 {"plugin_datas"=>plugin.get_plugin_data(fields_to_show)}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					module Admin::CoursesHelper
 | 
				
			||||||
 | 
					  def page_for_course(course_object)
 | 
				
			||||||
 | 
					  	page = nil
 | 
				
			||||||
 | 
					    pages = Page.where(:module=>"course")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    page = pages.first if page.nil?
 | 
				
			||||||
 | 
					    request.protocol+(request.host_with_port+page.url+'/'+course_object.to_param).gsub('//','/') rescue "/"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,115 @@
 | 
				
			||||||
 | 
					class Course
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
						include OrbitModel::Status
 | 
				
			||||||
 | 
					  	include MemberHelper
 | 
				
			||||||
 | 
					  	include Slug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, as: :slug_title, type: String, localize: true
 | 
				
			||||||
 | 
						field :objective, localize: true
 | 
				
			||||||
 | 
						field :year, type: Integer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						has_many :course_syllabus_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_progress_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_activity_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_multimedia_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_material_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_supplement_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
						has_many :course_evaluation_files, :dependent => :destroy, :autosave => true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course_semester
 | 
				
			||||||
 | 
						belongs_to :course_category
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :member_profile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_syllabus_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_progress_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_activity_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_multimedia_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_material_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_supplement_files, :allow_destroy => true
 | 
				
			||||||
 | 
						accepts_nested_attributes_for :course_evaluation_files, :allow_destroy => true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	scope :sort_for_frontend, ->{ where(:is_hidden=>false).order_by(:year=>'desc') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	def self.get_plugin_datas_to_member(datas)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    fields_to_show = [
 | 
				
			||||||
 | 
						      "course_category",
 | 
				
			||||||
 | 
						      "title",
 | 
				
			||||||
 | 
						      "year",
 | 
				
			||||||
 | 
						    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    pd_title = fields_to_show.collect do |t|
 | 
				
			||||||
 | 
						      {
 | 
				
			||||||
 | 
						        "plugin_data_title" => I18n.t("personal_course.#{t}")
 | 
				
			||||||
 | 
						      }
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    plugin_datas = datas.sort_for_frontend.collect.with_index do |p,index|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						      pd_data = []
 | 
				
			||||||
 | 
						      fields_to_show.collect do |t|
 | 
				
			||||||
 | 
						        if t == "title"
 | 
				
			||||||
 | 
						          pd_data << { "data_title" => "<a href='#{OrbitHelper.url_to_plugin_show(p.to_param,'personal_course')}' target='_blank'>#{p.send(t)}" }
 | 
				
			||||||
 | 
						        elsif t == "course_category"
 | 
				
			||||||
 | 
						          pd_data << {"data_title" => (p.course_category.title rescue "")}
 | 
				
			||||||
 | 
						        else
 | 
				
			||||||
 | 
						          pd_data << { "data_title" => p.send(t) }
 | 
				
			||||||
 | 
						        end
 | 
				
			||||||
 | 
						      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						      {
 | 
				
			||||||
 | 
						        "pd_datas" => pd_data,
 | 
				
			||||||
 | 
						        "type-sort" => (p.course_category.sort_position.to_i rescue 1000),
 | 
				
			||||||
 | 
						        "sort-index" => index
 | 
				
			||||||
 | 
						      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
						    plugin_datas = plugin_datas.sort_by{|pd| [pd["type-sort"], pd["sort-index"]]}
 | 
				
			||||||
 | 
						    return [pd_title,plugin_datas]
 | 
				
			||||||
 | 
						    
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def get_plugin_data(fields_to_show)
 | 
				
			||||||
 | 
						    plugin_datas = []
 | 
				
			||||||
 | 
						    fields_to_show.each do |field|
 | 
				
			||||||
 | 
						      plugin_data = self.get_plugin_field_data(field) rescue nil
 | 
				
			||||||
 | 
						      next if plugin_data.blank? or plugin_data['value'].blank?
 | 
				
			||||||
 | 
						      plugin_datas << plugin_data
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
						    plugin_datas
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def get_plugin_field_data(field)
 | 
				
			||||||
 | 
					    case field
 | 
				
			||||||
 | 
					    when "course_category"
 | 
				
			||||||
 | 
					      value = self.course_category.title rescue ""
 | 
				
			||||||
 | 
					    when "course_semester"
 | 
				
			||||||
 | 
					      value = self.course_semester.title rescue ""
 | 
				
			||||||
 | 
					    when "course_syllabus_file", "course_progress_file", "course_activity_file", "course_multimedia_file", "course_material_file", "course_supplement_file", "course_evaluation_file"
 | 
				
			||||||
 | 
					      files = []
 | 
				
			||||||
 | 
					      self.send(field.pluralize).each do |file| 
 | 
				
			||||||
 | 
					      	if !file.new_record? 
 | 
				
			||||||
 | 
						        url = file.file.url
 | 
				
			||||||
 | 
						        title = (file.title.blank? ? File.basename(file.file.path) : file.title)
 | 
				
			||||||
 | 
						        files << "<li><a href='#{url}'' target='_blank'>#{title}</li>"
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      value = files.join("")
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      value = self.send(field) rescue ""
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    value = (value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "<a href='#{value}' target='blank'>#{value}</a>" : value
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "key"=>field,
 | 
				
			||||||
 | 
					      "title_class"=>"course-#{field.gsub('_','-')}-field",
 | 
				
			||||||
 | 
					      "value_class"=>"course-#{field.gsub('_','-')}-value",
 | 
				
			||||||
 | 
					      "title"=>I18n.t('personal_course.'+field),
 | 
				
			||||||
 | 
					      "value"=>value
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseActivityFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					class CourseCategory
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :sort_position, type: Integer, default: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						has_many :courses 
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseEvaluationFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					class CourseIntro < PersonalPluginIntro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseMaterialFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseMultimediaFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseProgressFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					class CourseSemester
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						has_many :courses
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseSupplementFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					class CourseSyllabusFile
 | 
				
			||||||
 | 
						include Mongoid::Document
 | 
				
			||||||
 | 
						include Mongoid::Timestamps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						field :title, localize: true
 | 
				
			||||||
 | 
						field :description, localize: true
 | 
				
			||||||
 | 
						field :should_destroy, :type => Boolean  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mount_uploader :file, AssetUploader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						belongs_to :course
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					<%= form_for(@course_category, :html =>{:class=>"form-horizontal", :style=>"margin: 0;"}, :remote => true, :url => @url ) do |f| %>
 | 
				
			||||||
 | 
					  <div class="modal-header">
 | 
				
			||||||
 | 
					    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | 
				
			||||||
 | 
					    <h3 id="myModalLabel"><%= t("personal_course.course_category") %></h3>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="modal-body">
 | 
				
			||||||
 | 
					    <%= f.fields_for :title_translations do |f| %>
 | 
				
			||||||
 | 
					      <% @site_in_use_locales.each do |locale| %>
 | 
				
			||||||
 | 
					      <div class="control-group">
 | 
				
			||||||
 | 
					        <%= label_tag t(locale), t(locale), :class => 'control-label' %>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= f.text_field locale, :value => (@course_category.title_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="modal-footer">
 | 
				
			||||||
 | 
					    <%= f.submit t('submit'), :class=>'btn btn-primary' %>
 | 
				
			||||||
 | 
					    <a class="btn" data-dismiss="modal"><%= t('cancel')%></a>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_categories tbody").html("<%= j render :partial => '/admin/courses/course_category', :collection => @course_categories %>");
 | 
				
			||||||
 | 
					$("#course_category_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_categories tbody").html("<%= j render :partial => '/admin/courses/course_category', :collection => @course_categories %>");
 | 
				
			||||||
 | 
					$("#course_category_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					$("#course_category_modal").html("<%= j render 'form' %>")
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					$("#course_category_modal").html("<%= j render 'form' %>")
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_categories tbody").html("<%= j render :partial => '/admin/courses/course_category', :collection => @course_categories %>");
 | 
				
			||||||
 | 
					$("#course_category_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					<%= form_for(@course_semester, :html =>{:class=>"form-horizontal", :style=>"margin: 0;"}, :remote => true, :url => @url ) do |f| %>
 | 
				
			||||||
 | 
					  <div class="modal-header">
 | 
				
			||||||
 | 
					    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | 
				
			||||||
 | 
					    <h3 id="myModalLabel"><%= t("personal_course.course_semester") %></h3>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="modal-body">
 | 
				
			||||||
 | 
					    <%= f.fields_for :title_translations do |f| %>
 | 
				
			||||||
 | 
					      <% @site_in_use_locales.each do |locale| %>
 | 
				
			||||||
 | 
					      <div class="control-group">
 | 
				
			||||||
 | 
					        <%= label_tag t(locale), t(locale), :class => 'control-label' %>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= f.text_field locale, :value => (@course_semester.title_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="modal-footer">
 | 
				
			||||||
 | 
					    <%= f.submit t('submit'), :class=>'btn btn-primary' %>
 | 
				
			||||||
 | 
					    <a class="btn" data-dismiss="modal"><%= t('cancel')%></a>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_semesters tbody").html("<%= j render :partial => '/admin/courses/course_semester', :collection => @course_semesters %>");
 | 
				
			||||||
 | 
					$("#course_semester_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_semesters tbody").html("<%= j render :partial => '/admin/courses/course_semester', :collection => @course_semesters %>");
 | 
				
			||||||
 | 
					$("#course_semester_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					$('#course_semester_modal').html("<%= j render 'form' %>");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					$('#course_semester_modal').html("<%= j render 'form' %>");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					$("#course_semesters tbody").html("<%= j render :partial => '/admin/courses/course_semester', :collection => @course_semesters %>");
 | 
				
			||||||
 | 
					$("#course_semester_modal").modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					<tr id="<%= dom_id course_category %>" data-type-id="<%= course_category.id.to_s %>">
 | 
				
			||||||
 | 
					  <td><%= course_category.title %></td>
 | 
				
			||||||
 | 
					  <td class="span2">
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  <a href="<%= edit_admin_course_category_path(course_category) %>#course_category_modal" data-toggle="modal" data-remote="true" class="action"><%= t(:edit) %></a>
 | 
				
			||||||
 | 
					  <%= link_to t(:delete_), admin_course_category_path(course_category), "data-confirm" => t('sure?'), :method => :delete, :remote => true,:class=>"archive_toggle action" %>
 | 
				
			||||||
 | 
					  </td>
 | 
				
			||||||
 | 
					</tr>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					<tr id="<%= dom_id course_semester %>">
 | 
				
			||||||
 | 
					  <td><%= course_semester.title %></td>
 | 
				
			||||||
 | 
					  <td class="span2">
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  <a href="<%= edit_admin_course_semester_path(course_semester) %>#course_semester_modal" data-toggle="modal" data-remote="true" class="action"><%= t(:edit) %></a>
 | 
				
			||||||
 | 
					  <%= link_to t(:delete_), admin_course_semester_path(course_semester), "data-confirm" => t('sure?'), :method => :delete, :remote => true,:class=>"archive_toggle action" %>
 | 
				
			||||||
 | 
					  </td>
 | 
				
			||||||
 | 
					</tr>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					<% @courses.each do |course| %>
 | 
				
			||||||
 | 
						<tr id="<%= dom_id course %>" class="with_action">
 | 
				
			||||||
 | 
							<td class="span1"><%= course.year %></td>
 | 
				
			||||||
 | 
							<td class="span1">
 | 
				
			||||||
 | 
							<%= link_to course.title, page_for_course(course), target: "blank"%>
 | 
				
			||||||
 | 
							<div class="quick-edit">
 | 
				
			||||||
 | 
								<ul class="nav nav-pills hide">
 | 
				
			||||||
 | 
									<li><%= link_to t('edit'), edit_admin_course_path(course,:page => params[:page]) %></li>
 | 
				
			||||||
 | 
									<li><%= link_to t(:delete_), admin_course_path(id: course.id, :page => params[:page]), method: :delete, data: { confirm: 'Are you sure?' } %></li>
 | 
				
			||||||
 | 
								</ul>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							</td>
 | 
				
			||||||
 | 
							<td><%= course.member_profile.name rescue "" %></td>		
 | 
				
			||||||
 | 
						</tr>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,212 @@
 | 
				
			||||||
 | 
					<% # encoding: utf-8 %>
 | 
				
			||||||
 | 
					<% content_for :page_specific_css do %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/main-forms" %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/fileupload" %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/main-list" %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/main-form-col2" %>
 | 
				
			||||||
 | 
					  <style type="text/css">
 | 
				
			||||||
 | 
					    .ui-helper-hidden-accessible{
 | 
				
			||||||
 | 
					      display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  </style>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					<% content_for :page_specific_javascript do %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/bootstrap-fileupload" %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/file-type" %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/module-area" %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Input Area -->
 | 
				
			||||||
 | 
					<div class="input-area">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- Language Tabs -->
 | 
				
			||||||
 | 
					  <div class="nav-name"><strong><%= t(:language) %></strong></div>
 | 
				
			||||||
 | 
					  <ul class="nav nav-pills language-nav">
 | 
				
			||||||
 | 
					    <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					      <li class="<%= 'active' if i == 0 %>">
 | 
				
			||||||
 | 
					        <a data-toggle="tab" href=".<%= locale %>"><%= t(locale) %></a>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					    <li class="pull-right">
 | 
				
			||||||
 | 
					      <%= copy_to_all_language_button(".language-nav", ".language-area") %>
 | 
				
			||||||
 | 
					    </li>
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- Language -->
 | 
				
			||||||
 | 
					  <div class="tab-content language-area">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <div class="<%= locale %> tab-pane fade <%= ( i == 0 ) ? "in active" : '' %>">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- course title-->
 | 
				
			||||||
 | 
					        <div class="control-group input-title">
 | 
				
			||||||
 | 
					          <label class="control-label muted"><%= t("personal_course.title") %></label>
 | 
				
			||||||
 | 
					          <div class="controls">
 | 
				
			||||||
 | 
					            <%= f.fields_for :title_translations do |f| %>
 | 
				
			||||||
 | 
					              <%= f.text_field locale, class: "input-block-level", placeholder: t("personal_course.title"), value: (@course.title_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					            <% end %>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- course objective -->
 | 
				
			||||||
 | 
					        <div class="control-group">
 | 
				
			||||||
 | 
					          <label class="control-label muted"><%= t("personal_course.objective") %></label>
 | 
				
			||||||
 | 
					          <div class="controls">
 | 
				
			||||||
 | 
					            <%= f.fields_for :objective_translations do |f| %>
 | 
				
			||||||
 | 
					              <%= f.text_area locale, class: "input-block-level ckeditor", placeholder: t("personal_course.objective"), value: (@course.title_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					            <% end %>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					        <!-- File -->
 | 
				
			||||||
 | 
					    <%
 | 
				
			||||||
 | 
					    files_hash = {} 
 | 
				
			||||||
 | 
					    ["course_syllabus_file", "course_progress_file", "course_activity_file", "course_multimedia_file", "course_material_file", "course_supplement_file", "course_evaluation_file"].each do |file|
 | 
				
			||||||
 | 
					    hash = {}
 | 
				
			||||||
 | 
					    hash["html"] = add_attribute("form_file", f, file.pluralize.to_sym)
 | 
				
			||||||
 | 
					    hash["count"] = @course.send(file.pluralize).count rescue 0
 | 
				
			||||||
 | 
					    files_hash[file] = hash
 | 
				
			||||||
 | 
					    %>
 | 
				
			||||||
 | 
					    <div class="control-group">
 | 
				
			||||||
 | 
					      <label class="control-label muted"><%= t("personal_course.#{file}") %></label>
 | 
				
			||||||
 | 
					      <div class="controls">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- Exist -->
 | 
				
			||||||
 | 
					        <% if !@course.new_record? && hash["count"] > 0 %>
 | 
				
			||||||
 | 
					          <div class="exist">
 | 
				
			||||||
 | 
					            <% @course.send(file.pluralize).each_with_index do |obj, i| %>
 | 
				
			||||||
 | 
					            <% if !obj.new_record? %>
 | 
				
			||||||
 | 
					              <%= f.fields_for file.pluralize.to_sym, obj do |f| %>
 | 
				
			||||||
 | 
					                <%= render :partial => "form_file", :object => obj, :locals => {:f => f, :i => i} %>
 | 
				
			||||||
 | 
					              <% end %>
 | 
				
			||||||
 | 
					            <% end %>
 | 
				
			||||||
 | 
					            <% end %>
 | 
				
			||||||
 | 
					            <hr>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        <% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- Add -->
 | 
				
			||||||
 | 
					        <div class="add-target" for="<%= file %>">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <p class="add-btn">
 | 
				
			||||||
 | 
					          <a class="add_file trigger btn btn-small btn-primary" for="<%= file %>"><i class="icons-plus"></i> <%= t(:add) %></a>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="nav-name"><strong><%= t(:module) %></strong></div>
 | 
				
			||||||
 | 
					  <ul class="nav nav-pills module-nav">
 | 
				
			||||||
 | 
					    <li></li>
 | 
				
			||||||
 | 
					    <li class="active">
 | 
				
			||||||
 | 
					      <a href="#basic" data-toggle="tab"><%= t(:basic) %></a>
 | 
				
			||||||
 | 
					    </li>
 | 
				
			||||||
 | 
					    <li>
 | 
				
			||||||
 | 
					      <a href="#status" data-toggle="tab"><%= t(:status) %></a>
 | 
				
			||||||
 | 
					    </li>
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- Module -->
 | 
				
			||||||
 | 
					  <div class="tab-content module-area">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Basic Module -->
 | 
				
			||||||
 | 
					    <div class="tab-pane fade in active" id="basic">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <% if !@member.nil? %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <div class="control-group big-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t("personal_plugins.author") %></label>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= @member.name rescue ''%>
 | 
				
			||||||
 | 
					          <%= f.hidden_field :member_profile_id, :value => @member.id %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <% else %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <div class="control-group big-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t("personal_plugins.author") %></label>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					            <% members = !@course.member_profile.nil? ? @course.member_profile.to_a : [] %>
 | 
				
			||||||
 | 
					            <%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'course[member_profile_id]', email_members: members} %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- year -->
 | 
				
			||||||
 | 
					      <div class="control-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t("personal_course.year") %></label>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= select_year((@course.year ? @course.year.to_i : DateTime.now.year), {:start_year => DateTime.now.year, :end_year => 1930}, {:name => 'course[year]',:class => 'span1'} ) %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- course_category -->
 | 
				
			||||||
 | 
					      <div class="control-group big-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t("personal_course.course_category") %></label>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= f.select :course_category_id, CourseCategory.all.collect {|t| [ t.title, t.id ]} %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- course_semester -->
 | 
				
			||||||
 | 
					      <div class="control-group big-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t("personal_course.course_semester") %></label>
 | 
				
			||||||
 | 
					        <div class="controls">
 | 
				
			||||||
 | 
					          <%= f.select :course_semester_id, CourseSemester.all.collect {|t| [ t.title, t.id ]} %>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Status Module -->
 | 
				
			||||||
 | 
					    <div class="tab-pane fade" id="status">
 | 
				
			||||||
 | 
					      <div class="control-group">
 | 
				
			||||||
 | 
					        <label class="control-label muted"><%= t(:status) %></label>
 | 
				
			||||||
 | 
					        <div class="controls" data-toggle="buttons-checkbox">
 | 
				
			||||||
 | 
					          <label class="checkbox inline btn <%= 'active' if @course.is_hidden? %>">
 | 
				
			||||||
 | 
					            <%= f.check_box :is_hidden %> <%= t(:hide) %>
 | 
				
			||||||
 | 
					          </label>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<!-- Form Actions -->
 | 
				
			||||||
 | 
					<div class="form-actions">
 | 
				
			||||||
 | 
					  <%= f.hidden_field :user_id, :value => params[:user_id] if !params[:user_id].blank? %>
 | 
				
			||||||
 | 
					  <input type="hidden" name="referer_url" value="<%= request.referer %>">
 | 
				
			||||||
 | 
					  <%= f.submit t('submit'), class: 'btn btn-primary' %>
 | 
				
			||||||
 | 
					  <%= link_to t('cancel'), get_go_back, :class=>"btn" %>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					  var files = <%= files_hash.to_json.html_safe %>;
 | 
				
			||||||
 | 
					  $("a.add_file").on("click",function(){
 | 
				
			||||||
 | 
					      var type = $(this).attr("for"),
 | 
				
			||||||
 | 
					          html = files[type].html,
 | 
				
			||||||
 | 
					          count = parseInt(files[type].count),
 | 
				
			||||||
 | 
					          replaceReg = new RegExp("new_" + type + "s","g");
 | 
				
			||||||
 | 
					      html = html.replace(replaceReg,count);
 | 
				
			||||||
 | 
					      $(".add-target[for=" + type + "]").append(html);
 | 
				
			||||||
 | 
					      count++;
 | 
				
			||||||
 | 
					      files[type].count = count;
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  $(document).on('click', '.delete_file', function(){
 | 
				
			||||||
 | 
					      $(this).parents('.input-prepend').remove();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  $(document).on('click', '.remove_existing_record', function(){
 | 
				
			||||||
 | 
					      if(confirm("<%= I18n.t(:sure?)%>")){
 | 
				
			||||||
 | 
					        $(this).children('.should_destroy').attr('value', 1);
 | 
				
			||||||
 | 
					        $(this).parents('.start-line').hide();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					<% if form_file.new_record? %>
 | 
				
			||||||
 | 
					  <div class="fileupload fileupload-new start-line" data-provides="fileupload">
 | 
				
			||||||
 | 
					<% else %>
 | 
				
			||||||
 | 
					  <div class="fileupload fileupload-exist start-line" data-provides="fileupload">
 | 
				
			||||||
 | 
					    <% if form_file.file.blank? %>
 | 
				
			||||||
 | 
					      <%= t(:no_file) %>
 | 
				
			||||||
 | 
					    <% else %>
 | 
				
			||||||
 | 
					      <%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					  <div class="input-prepend input-append">
 | 
				
			||||||
 | 
					    <label>
 | 
				
			||||||
 | 
					      <span class="add-on btn btn-file" title='<%= t(:file_) %>'>
 | 
				
			||||||
 | 
					        <i class="icons-paperclip"></i>
 | 
				
			||||||
 | 
					        <%= f.file_field :file %>
 | 
				
			||||||
 | 
					      </span>
 | 
				
			||||||
 | 
					      <div class="uneditable-input input-medium">
 | 
				
			||||||
 | 
					        <i class="icon-file fileupload-exists"></i>
 | 
				
			||||||
 | 
					        <span class="fileupload-preview"><%= (form_file.new_record? || form_file.file.blank?) ? t(:select_file) : t(:change_file) %></span>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </label>
 | 
				
			||||||
 | 
					    <span class="add-on icons-pencil" title='<%= t(:alternative) %>'></span>
 | 
				
			||||||
 | 
					    <span class="tab-content">
 | 
				
			||||||
 | 
					      <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					        <span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
 | 
				
			||||||
 | 
					          <%= f.fields_for :title_translations do |f| %>
 | 
				
			||||||
 | 
					            <%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					          <% end %>
 | 
				
			||||||
 | 
					        </span>
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
 | 
					    </span>
 | 
				
			||||||
 | 
					    <span class="add-on icons-pencil" title='<%= t(:description) %>'></span>
 | 
				
			||||||
 | 
					    <span class="tab-content">
 | 
				
			||||||
 | 
					      <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					        <span class="tab-pane fade <%= ( i == 0 ) ? "in active" : '' %> <%= locale %>">
 | 
				
			||||||
 | 
					          <%= f.fields_for :description_translations do |f| %>
 | 
				
			||||||
 | 
					            <%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					          <% end %>
 | 
				
			||||||
 | 
					        </span>
 | 
				
			||||||
 | 
					      <% end %>
 | 
				
			||||||
 | 
					    </span>
 | 
				
			||||||
 | 
					    </span>
 | 
				
			||||||
 | 
					    <% if form_file.new_record? %>
 | 
				
			||||||
 | 
					      <span class="delete_file add-on btn" title="<%= t(:delete_) %>">
 | 
				
			||||||
 | 
					        <a class="icon-trash"></a>
 | 
				
			||||||
 | 
					      </span>
 | 
				
			||||||
 | 
					    <% else %> 
 | 
				
			||||||
 | 
					      <span class="remove_existing_record add-on btn" title="<%= t(:remove) %>">
 | 
				
			||||||
 | 
					        <%= f.hidden_field :id %>
 | 
				
			||||||
 | 
					        <a class="icon-remove"></a>
 | 
				
			||||||
 | 
					        <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %>
 | 
				
			||||||
 | 
					      </span>
 | 
				
			||||||
 | 
					    <% end %>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					<%= form_for @course, url: admin_course_path(@course), html: {class: "form-horizontal main-forms previewable"} do |f| %>
 | 
				
			||||||
 | 
					  <fieldset>
 | 
				
			||||||
 | 
					    <%= render partial: 'form', locals: {f: f} %>
 | 
				
			||||||
 | 
					  </fieldset>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,94 @@
 | 
				
			||||||
 | 
					<% content_for :page_specific_css do %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/main-forms" %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/main-list" %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<%= form_for(:course_intro, :url => update_frontend_setting_admin_courses_path, :method => "post", html: {class: "form-horizontal main-forms previewable"} ) do |f| %>
 | 
				
			||||||
 | 
					  <fieldset>
 | 
				
			||||||
 | 
					    <!-- Input Area -->
 | 
				
			||||||
 | 
					    <div class="input-area">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Module Tabs --> 
 | 
				
			||||||
 | 
					      <div class="nav-name"><strong><%= t("module_name.personal_project") %></strong></div>
 | 
				
			||||||
 | 
					      <ul class="nav nav-pills module-nav">
 | 
				
			||||||
 | 
					        <li></li>
 | 
				
			||||||
 | 
					        <li class="active">
 | 
				
			||||||
 | 
					          <a href="#basic" data-toggle="tab"><%= t(:basic) %></a>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					      </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Module -->
 | 
				
			||||||
 | 
					      <div class="tab-content module-area">
 | 
				
			||||||
 | 
					        <!-- Basic Module -->
 | 
				
			||||||
 | 
					        <div class="tab-pane fade in active" id="basic">
 | 
				
			||||||
 | 
					          <% if !@member.blank? %>
 | 
				
			||||||
 | 
					            <div class="control-group">
 | 
				
			||||||
 | 
					              <label class="control-label muted"><%= t("personal_plugins.author") %></label>
 | 
				
			||||||
 | 
					              <div class="controls">
 | 
				
			||||||
 | 
					                <%= @member.name rescue ''%>
 | 
				
			||||||
 | 
					                <%= f.hidden_field :member_profile_id, :value => @member.id %>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div> 
 | 
				
			||||||
 | 
					          <% end %>
 | 
				
			||||||
 | 
					          <!-- frontend_page -->
 | 
				
			||||||
 | 
					          <div class="control-group">
 | 
				
			||||||
 | 
					            <label class="control-label muted"><%= t("personal_plugins.frontend_page") %></label>
 | 
				
			||||||
 | 
					            <div class="controls">
 | 
				
			||||||
 | 
					                <%= f.check_box :brief_intro, :checked => @intro.brief_intro %> <%= t("personal_plugins.brief_intro") %>
 | 
				
			||||||
 | 
					                <%= f.check_box :complete_list, :checked => @intro.complete_list %> <%= t("personal_plugins.complete_list") %>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div> 
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Language Tabs -->
 | 
				
			||||||
 | 
					      <div class="nav-name"><strong><%= t(:language) %></strong></div>
 | 
				
			||||||
 | 
					      <ul class="nav nav-pills language-nav">
 | 
				
			||||||
 | 
					        <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					          <li class="<%= 'active' if i == 0 %>">
 | 
				
			||||||
 | 
					            <a data-toggle="tab" href=".<%= locale %>"><%= t(locale) %></a>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					        <% end %>
 | 
				
			||||||
 | 
					      </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Language -->
 | 
				
			||||||
 | 
					      <div class="tab-content language-area">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <% @site_in_use_locales.each_with_index do |locale, i| %>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					          <div class="<%= locale %> tab-pane fade <%= ( i == 0 ) ? "in active" : '' %>">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Content -->
 | 
				
			||||||
 | 
					            <div class="control-group input-content">
 | 
				
			||||||
 | 
					              <label class="control-label muted"><%= t(:content) %></label>
 | 
				
			||||||
 | 
					              <div class="controls">
 | 
				
			||||||
 | 
					                <div class="textarea">
 | 
				
			||||||
 | 
					                  <%= f.fields_for :text_translations do |f| %>
 | 
				
			||||||
 | 
					                    <%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@intro.text_translations[locale] rescue nil) %>
 | 
				
			||||||
 | 
					                  <% end %>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Form Actions -->
 | 
				
			||||||
 | 
					    <div class="form-actions">
 | 
				
			||||||
 | 
					      <%= f.hidden_field :user_id, :value => params[:user_id] if !params[:user_id].blank? %>
 | 
				
			||||||
 | 
					      <%= hidden_field_tag :member_profile_id, @member.id.to_s %>
 | 
				
			||||||
 | 
					      <%= f.submit t('submit'), class: 'btn btn-primary' %>
 | 
				
			||||||
 | 
					      <%= link_to t('cancel'), get_go_back, :class=>"btn" %>  
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </fieldset>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					<table class="table main-list">
 | 
				
			||||||
 | 
						<thead>
 | 
				
			||||||
 | 
							<tr>
 | 
				
			||||||
 | 
								<th class="span1"><%= t('personal_course.year') %></th>
 | 
				
			||||||
 | 
								<th class="span7"><%= t('module_name.courses') %></th>
 | 
				
			||||||
 | 
								<th class="span1"><%= t("personal_plugins.author") %></th>
 | 
				
			||||||
 | 
							</tr>
 | 
				
			||||||
 | 
						</thead>
 | 
				
			||||||
 | 
						<tbody id="tbody_writing_journals" class="sort-holder">
 | 
				
			||||||
 | 
							<%= render 'courses' %>
 | 
				
			||||||
 | 
						</tbody>
 | 
				
			||||||
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="bottomnav clearfix">
 | 
				
			||||||
 | 
						<div class="action pull-right">
 | 
				
			||||||
 | 
							<!-- <div class="dropup upload-button">
 | 
				
			||||||
 | 
					    		<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
 | 
				
			||||||
 | 
					    			<i class="icon-upload-alt icon-white"></i>上傳
 | 
				
			||||||
 | 
					    			<span class="caret"></span>
 | 
				
			||||||
 | 
					    		</button>
 | 
				
			||||||
 | 
						    	<div class="dropdown-menu upload-box">
 | 
				
			||||||
 | 
						    		<form action="/admin/journal_papers/import_from_excel" method="post" enctype="multipart/form-data">
 | 
				
			||||||
 | 
						    			<%#= hidden_field_tag :authenticity_token, form_authenticity_token %>
 | 
				
			||||||
 | 
						    			<input type="file" name="import_file" >
 | 
				
			||||||
 | 
						      			<button class="btn btn-primary" type="submit"><%#= t(:submit) %></button>
 | 
				
			||||||
 | 
						      			<a class="" href="/admin/journal_papers/download_excel_format.xlsx">Download excel format</a>
 | 
				
			||||||
 | 
						    		</form>
 | 
				
			||||||
 | 
						    	</div>
 | 
				
			||||||
 | 
					  		</div> -->
 | 
				
			||||||
 | 
							<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:new_), new_admin_course_path, :class => 'btn btn-primary' %>
 | 
				
			||||||
 | 
							<%= link_to content_tag(:i, nil, :class => 'icon-cog icon-white') + t('setting'), admin_course_setting_path, :class => 'btn btn-primary pull-right' %>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="pagination pagination-centered">
 | 
				
			||||||
 | 
							<%= content_tag :div, paginate(@courses), class: "pagination pagination-centered" %>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<% if params[:error] == "1" %>
 | 
				
			||||||
 | 
						<script type="text/javascript">
 | 
				
			||||||
 | 
							alert("File cannot be imported. File has more than 500 entries. Please seperate the entries in different files.");
 | 
				
			||||||
 | 
							window.location.href = "<%= admin_journal_papers_url %>"
 | 
				
			||||||
 | 
						</script>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					<%= form_for @course, url: admin_courses_path, html: {class: "form-horizontal main-forms previewable"} do |f| %>
 | 
				
			||||||
 | 
					  <fieldset>
 | 
				
			||||||
 | 
					    <%= render partial: 'form', locals: {f: f} %>
 | 
				
			||||||
 | 
					  </fieldset>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					<% content_for :page_specific_javascript do %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/jquery-ui-sortable.min" %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					<style type="text/css">
 | 
				
			||||||
 | 
					  .element{
 | 
				
			||||||
 | 
					    background: #FFF;
 | 
				
			||||||
 | 
					    margin-bottom: 10px;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    border: 1px solid #DDD;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .detail{
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    min-height: 250px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .totle{
 | 
				
			||||||
 | 
					    margin-bottom: 25px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .totle span{
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="row">
 | 
				
			||||||
 | 
					  <div class="element span4">
 | 
				
			||||||
 | 
					    <div class="detail w-a h-a">
 | 
				
			||||||
 | 
					      <p class="totle">
 | 
				
			||||||
 | 
					        <a class="btn btn-small btn-primary pull-right" href="<%= new_admin_course_semester_path %>#course_semester_modal" data-toggle="modal" data-remote="true"><i class="icon-plus"></i> <%= t('add')%></a>
 | 
				
			||||||
 | 
					        <span><%= t("personal_course.course_semester") %></span>                        
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					      <div class="detal-list my_scroll">
 | 
				
			||||||
 | 
					        <div class="scrollbar">
 | 
				
			||||||
 | 
					          <div class="track">
 | 
				
			||||||
 | 
					            <div class="thumb">
 | 
				
			||||||
 | 
					              <div class="end"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="viewport">
 | 
				
			||||||
 | 
					          <div class="overview">
 | 
				
			||||||
 | 
					            <table id="course_semesters" class="table table-striped">
 | 
				
			||||||
 | 
					              <tbody>
 | 
				
			||||||
 | 
					                <%= render :partial => 'course_semester', :collection => @course_semesters %>
 | 
				
			||||||
 | 
					              </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="element span4">
 | 
				
			||||||
 | 
					    <div class="detail w-a h-a">
 | 
				
			||||||
 | 
					      <p class="totle">
 | 
				
			||||||
 | 
					        <a class="btn btn-small btn-primary pull-right" href="<%= new_admin_course_category_path %>#course_category_modal" data-toggle="modal" data-remote="true"><i class="icon-plus"></i> <%= t('add')%></a>
 | 
				
			||||||
 | 
					        <span><%= t("personal_course.course_category") %></span>                        
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					      <div class="detal-list my_scroll">
 | 
				
			||||||
 | 
					        <div class="scrollbar">
 | 
				
			||||||
 | 
					          <div class="track">
 | 
				
			||||||
 | 
					            <div class="thumb">
 | 
				
			||||||
 | 
					              <div class="end"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="viewport">
 | 
				
			||||||
 | 
					          <div class="overview">
 | 
				
			||||||
 | 
					            <table id="course_categories" class="table table-striped">
 | 
				
			||||||
 | 
					              <tbody>
 | 
				
			||||||
 | 
					                <%= render :partial => 'course_category', :collection => @course_categories %>
 | 
				
			||||||
 | 
					              </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="paper_type_qe">
 | 
				
			||||||
 | 
					  <div style="display:none;" class="modal" id="course_semester_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="paper_level_qe">
 | 
				
			||||||
 | 
					  <div style="display:none;" class="modal" id="course_category_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					  $("#course_categories tbody").sortable({
 | 
				
			||||||
 | 
					    update : function(){
 | 
				
			||||||
 | 
					      var data = {};
 | 
				
			||||||
 | 
					      $("#course_categories tbody tr").each(function(i){
 | 
				
			||||||
 | 
					        data[$(this).data("type-id")] = i;
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      $.ajax({
 | 
				
			||||||
 | 
					        url : "/admin/course_categories/update_order",
 | 
				
			||||||
 | 
					        type : "post",
 | 
				
			||||||
 | 
					        data : {"order" : data}
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					<%= render_view %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					<%= render_view %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,85 @@
 | 
				
			||||||
 | 
					<% content_for :page_specific_css do %>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag "lib/list-check" %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					<% content_for :page_specific_javascript do %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag "lib/list-check" %>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<%
 | 
				
			||||||
 | 
					  if has_access?
 | 
				
			||||||
 | 
					    @courses = Course.where(member_profile_id: @member.id).desc(:year).page(params[:page]).per(10)
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    @courses = Course.where(is_hidden: false, member_profile_id: @member.id).desc(:year).page(params[:page]).per(10)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					%>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<% if has_access? %>
 | 
				
			||||||
 | 
					  <div class="list-active">
 | 
				
			||||||
 | 
					    <div class="btn-group">
 | 
				
			||||||
 | 
					      <%= link_to('Hide', '#', :class => "btn btn-mini list-active-btn disabled", "data-check-action" => "list-be-hide", :rel => toggle_hide_admin_courses_path(member_profile_id: @member.id.to_s, disable: 'true') ) %>
 | 
				
			||||||
 | 
					      <%= link_to('Show', '#', :class => "btn btn-mini list-active-btn disabled", "data-check-action" => "list-be-show", :rel => toggle_hide_admin_courses_path(member_profile_id: @member.id.to_s, disable: 'false') ) %>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					<% end -%>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<table class="table table-condensed table-striped main-list">
 | 
				
			||||||
 | 
					  <thead>
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					      <% if has_access? %>
 | 
				
			||||||
 | 
					        <th><input type="checkbox" /></th>
 | 
				
			||||||
 | 
					      <% end -%>
 | 
				
			||||||
 | 
					      <th class="span2"><%= t('personal_course.year') %></th>
 | 
				
			||||||
 | 
					      <th class="span4"><%= t('personal_course.title') %></th>
 | 
				
			||||||
 | 
					      <th class="span4"><%= t('personal_course.course_category') %></th>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					  </thead>
 | 
				
			||||||
 | 
					  <tbody>
 | 
				
			||||||
 | 
					    <% @courses.each do |course| %> 
 | 
				
			||||||
 | 
					      <tr id="<%= dom_id course %>" class="<%= course.is_hidden ? "checkHide" : "" %>">
 | 
				
			||||||
 | 
					        <% if has_access? %>
 | 
				
			||||||
 | 
					          <td>
 | 
				
			||||||
 | 
					            <%= check_box_tag 'to_change[]', course.id.to_s, false, :class => "list-check" %>
 | 
				
			||||||
 | 
					          </td>
 | 
				
			||||||
 | 
					        <% end %>
 | 
				
			||||||
 | 
					        <td><%= course.year %></td>
 | 
				
			||||||
 | 
					        <td>
 | 
				
			||||||
 | 
					          <%= link_to course.title, OrbitHelper.url_to_plugin_show(course.to_param,'personal_course').to_s, target: "blank"%>
 | 
				
			||||||
 | 
					          <div class="quick-edit">
 | 
				
			||||||
 | 
					            <ul class="nav nav-pills hide">
 | 
				
			||||||
 | 
					              <% if has_access? %>
 | 
				
			||||||
 | 
					                <li><%= link_to t('edit'), '/admin/members/'+@member.to_param+'/courses/'+course.id+'/edit' %></li>
 | 
				
			||||||
 | 
					                <li><%= link_to t(:delete_), admin_course_path(id: course.id, member_profile_id: @member.id), method: :delete, remote: true, data: { confirm: t('sure?') } %></li>
 | 
				
			||||||
 | 
					              <% end %> 
 | 
				
			||||||
 | 
					            </ul>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </td>
 | 
				
			||||||
 | 
					        <td><%= course.course_category.title %></td>
 | 
				
			||||||
 | 
					      </tr>   
 | 
				
			||||||
 | 
					    <% end %> 
 | 
				
			||||||
 | 
					  </tbody>
 | 
				
			||||||
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="bottomnav clearfix">
 | 
				
			||||||
 | 
					  <% if has_access? %>
 | 
				
			||||||
 | 
					    <div class="action pull-right">
 | 
				
			||||||
 | 
					      <%= link_to content_tag(:i, nil, :class => 'icon-edit') +' '+ t('setting'),'/admin/members/'+@member.to_param+'/courses/frontend_setting', :class => 'btn btn-primary' %>
 | 
				
			||||||
 | 
					      <%= link_to content_tag(:i, nil, :class => 'icon-plus') +' '+ t('new_'), 
 | 
				
			||||||
 | 
					          '/admin/members/'+@member.to_param+'/courses/new', :class => 'btn btn-primary' %>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  <% end %>
 | 
				
			||||||
 | 
					  <div class="pagination pagination-centered">
 | 
				
			||||||
 | 
					    <%= paginate @courses, :params => {:direction => params[:direction], :sort => params[:sort] } %>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="dialog" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="Delete item" aria-hidden="true">
 | 
				
			||||||
 | 
					  <div class="modal-header">
 | 
				
			||||||
 | 
					    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | 
				
			||||||
 | 
					    <h3><%= t(:sure?) %></h3>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="modal-footer">
 | 
				
			||||||
 | 
					    <button class="btn" data-dismiss="modal" aria-hidden="true"><%= t(:close) %></button>
 | 
				
			||||||
 | 
					    <button class="delete-item btn btn-danger"><%= t(:submit) %></button>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env ruby
 | 
				
			||||||
 | 
					# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENGINE_ROOT = File.expand_path('../..', __FILE__)
 | 
				
			||||||
 | 
					ENGINE_PATH = File.expand_path('../../lib/personal_course/engine', __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set up gems listed in the Gemfile.
 | 
				
			||||||
 | 
					ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
 | 
				
			||||||
 | 
					require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'rails/all'
 | 
				
			||||||
 | 
					require 'rails/engine/commands'
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					en:
 | 
				
			||||||
 | 
					  module_name:
 | 
				
			||||||
 | 
					    personal_course: Courses
 | 
				
			||||||
 | 
					    courses: Courses
 | 
				
			||||||
 | 
					    course: Course
 | 
				
			||||||
 | 
					  personal_course:
 | 
				
			||||||
 | 
					    year: Year
 | 
				
			||||||
 | 
					    title: Course Title
 | 
				
			||||||
 | 
					    objective: Objective
 | 
				
			||||||
 | 
					    course_semester: Semester
 | 
				
			||||||
 | 
					    course_category: Category
 | 
				
			||||||
 | 
					    course_syllabus_file: Syllabus Files
 | 
				
			||||||
 | 
					    course_progress_file: Progress Files
 | 
				
			||||||
 | 
					    course_activity_file: Activity Files
 | 
				
			||||||
 | 
					    course_multimedia_file: Multimedia Files
 | 
				
			||||||
 | 
					    course_material_file: Material Files
 | 
				
			||||||
 | 
					    course_supplement_file: Supplement File
 | 
				
			||||||
 | 
					    course_evaluation_file: Evaluation File
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					zh_tw:
 | 
				
			||||||
 | 
					  module_name:
 | 
				
			||||||
 | 
					    personal_course: 教學資料
 | 
				
			||||||
 | 
					    courses: 教學資料
 | 
				
			||||||
 | 
					    course: 教學資料
 | 
				
			||||||
 | 
					  personal_course:
 | 
				
			||||||
 | 
					    year: 年度
 | 
				
			||||||
 | 
					    title: 課程名稱
 | 
				
			||||||
 | 
					    objective: 課程目標
 | 
				
			||||||
 | 
					    course_category: 課程類別
 | 
				
			||||||
 | 
					    course_semester: 學期
 | 
				
			||||||
 | 
					    course_syllabus_file: 教學大綱 
 | 
				
			||||||
 | 
					    course_progress_file: 教學進度表
 | 
				
			||||||
 | 
					    course_activity_file: 教學活動設計
 | 
				
			||||||
 | 
					    course_multimedia_file: 教學媒體應用
 | 
				
			||||||
 | 
					    course_material_file: 自編教材
 | 
				
			||||||
 | 
					    course_supplement_file: 補充教材
 | 
				
			||||||
 | 
					    course_evaluation_file: 評量紀錄
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					Rails.application.routes.draw do
 | 
				
			||||||
 | 
						locales = Site.find_by(site_active: true).in_use_locales rescue I18n.available_locales
 | 
				
			||||||
 | 
						scope "(:locale)", locale: Regexp.new(locales.join("|")) do
 | 
				
			||||||
 | 
							namespace :admin do
 | 
				
			||||||
 | 
					      		get 'course_setting' => "courses#setting"
 | 
				
			||||||
 | 
						    	resources :courses do
 | 
				
			||||||
 | 
							        collection do
 | 
				
			||||||
 | 
							          get 'toggle_hide' => 'courses#toggle_hide'
 | 
				
			||||||
 | 
							        end
 | 
				
			||||||
 | 
						   	 	end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    resources :members do
 | 
				
			||||||
 | 
						        collection do
 | 
				
			||||||
 | 
						          scope '(:name-:uid)' do
 | 
				
			||||||
 | 
						            resources :courses do
 | 
				
			||||||
 | 
						              collection do
 | 
				
			||||||
 | 
						                get 'frontend_setting' => 'courses#frontend_setting'
 | 
				
			||||||
 | 
						                post 'update_frontend_setting' => 'courses#update_frontend_setting'
 | 
				
			||||||
 | 
						              end
 | 
				
			||||||
 | 
						            end
 | 
				
			||||||
 | 
						          end
 | 
				
			||||||
 | 
						        end
 | 
				
			||||||
 | 
						    end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
							resources :course_semesters
 | 
				
			||||||
 | 
							resources :course_categories
 | 
				
			||||||
 | 
							post "course_categories/update_order" => "course_categories#update_order"
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					require "personal_course/engine"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module PersonalCourse
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					module PersonalCourse
 | 
				
			||||||
 | 
					  class Engine < ::Rails::Engine
 | 
				
			||||||
 | 
					   initializer "personal_course" do
 | 
				
			||||||
 | 
							OrbitApp.registration "PersonalCourse",:type=> 'ModuleApp' do
 | 
				
			||||||
 | 
								module_label 'module_name.courses'
 | 
				
			||||||
 | 
								base_url File.expand_path File.dirname(__FILE__)
 | 
				
			||||||
 | 
								personal_plugin :enable => true, :sort_number => '35', :app_name=>"Course", :intro_app_name=>"CourseIntro",:path=>"/plugin/personal_course/profile",:front_path=>"/profile",:admin_path=>"/admin/courses/",:i18n=>'module_name.courses', :module_app_name=>'Course'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								version "0.1"
 | 
				
			||||||
 | 
								desktop_enabled true
 | 
				
			||||||
 | 
								organization "Rulingcom"
 | 
				
			||||||
 | 
								author "RD dep"
 | 
				
			||||||
 | 
								intro "I am intro"
 | 
				
			||||||
 | 
								update_info 'some update_info'
 | 
				
			||||||
 | 
								frontend_enabled
 | 
				
			||||||
 | 
								icon_class_no_sidebar "icons-user"
 | 
				
			||||||
 | 
								data_count 1..10
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					module PersonalCourse
 | 
				
			||||||
 | 
					  VERSION = "0.0.1"
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					# desc "Explaining what the task does"
 | 
				
			||||||
 | 
					# task :personal_course do
 | 
				
			||||||
 | 
					#   # Task goes here
 | 
				
			||||||
 | 
					# end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					$:.push File.expand_path("../lib", __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Maintain your gem's version:
 | 
				
			||||||
 | 
					require "personal_course/version"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Describe your gem and declare its dependencies:
 | 
				
			||||||
 | 
					Gem::Specification.new do |s|
 | 
				
			||||||
 | 
					  s.name        = "personal_course"
 | 
				
			||||||
 | 
					  s.version     = PersonalCourse::VERSION
 | 
				
			||||||
 | 
					  s.authors     = ["Rulingcom"]
 | 
				
			||||||
 | 
					  s.email       = ["service@rulingcom.com"]
 | 
				
			||||||
 | 
					  s.homepage    = "http://www.rulingcom.com"
 | 
				
			||||||
 | 
					  s.summary     = "Personal plugin for courses."
 | 
				
			||||||
 | 
					  s.description = "Personal plugin for courses."
 | 
				
			||||||
 | 
					  s.license     = "MIT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
 | 
				
			||||||
 | 
					  s.test_files = Dir["test/**/*"]
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					== README
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This README would normally document whatever steps are necessary to get the
 | 
				
			||||||
 | 
					application up and running.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Things you may want to cover:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Ruby version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* System dependencies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Database creation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Database initialization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* How to run the test suite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Services (job queues, cache servers, search engines, etc.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Deployment instructions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please feel free to use a different markup language if you do not plan to run
 | 
				
			||||||
 | 
					<tt>rake doc:app</tt>.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					# Add your own tasks in files placed in lib/tasks ending in .rake,
 | 
				
			||||||
 | 
					# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require File.expand_path('../config/application', __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rails.application.load_tasks
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					// This is a manifest file that'll be compiled into application.js, which will include all the files
 | 
				
			||||||
 | 
					// listed below.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
 | 
				
			||||||
 | 
					// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
 | 
				
			||||||
 | 
					// compiled file.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
 | 
				
			||||||
 | 
					// about supported directives.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//= require_tree .
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This is a manifest file that'll be compiled into application.css, which will include all the files
 | 
				
			||||||
 | 
					 * listed below.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 | 
				
			||||||
 | 
					 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
 | 
				
			||||||
 | 
					 * compiled file so the styles you add here take precedence over styles defined in any styles
 | 
				
			||||||
 | 
					 * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
 | 
				
			||||||
 | 
					 * file per style scope.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *= require_tree .
 | 
				
			||||||
 | 
					 *= require_self
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					class ApplicationController < ActionController::Base
 | 
				
			||||||
 | 
					  # Prevent CSRF attacks by raising an exception.
 | 
				
			||||||
 | 
					  # For APIs, you may want to use :null_session instead.
 | 
				
			||||||
 | 
					  protect_from_forgery with: :exception
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					module ApplicationHelper
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <title>Dummy</title>
 | 
				
			||||||
 | 
					  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
 | 
				
			||||||
 | 
					  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
 | 
				
			||||||
 | 
					  <%= csrf_meta_tags %>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<%= yield %>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env ruby
 | 
				
			||||||
 | 
					ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
 | 
				
			||||||
 | 
					load Gem.bin_path('bundler', 'bundle')
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env ruby
 | 
				
			||||||
 | 
					APP_PATH = File.expand_path('../../config/application',  __FILE__)
 | 
				
			||||||
 | 
					require_relative '../config/boot'
 | 
				
			||||||
 | 
					require 'rails/commands'
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env ruby
 | 
				
			||||||
 | 
					require_relative '../config/boot'
 | 
				
			||||||
 | 
					require 'rake'
 | 
				
			||||||
 | 
					Rake.application.run
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					# This file is used by Rack-based servers to start the application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require ::File.expand_path('../config/environment',  __FILE__)
 | 
				
			||||||
 | 
					run Rails.application
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					require File.expand_path('../boot', __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'rails/all'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Bundler.require(*Rails.groups)
 | 
				
			||||||
 | 
					require "personal_course"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module Dummy
 | 
				
			||||||
 | 
					  class Application < Rails::Application
 | 
				
			||||||
 | 
					    # Settings in config/environments/* take precedence over those specified here.
 | 
				
			||||||
 | 
					    # Application configuration should go into files in config/initializers
 | 
				
			||||||
 | 
					    # -- all .rb files in that directory are automatically loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
 | 
				
			||||||
 | 
					    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
 | 
				
			||||||
 | 
					    # config.time_zone = 'Central Time (US & Canada)'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
 | 
				
			||||||
 | 
					    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
 | 
				
			||||||
 | 
					    # config.i18n.default_locale = :de
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					# Set up gems listed in the Gemfile.
 | 
				
			||||||
 | 
					ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
 | 
				
			||||||
 | 
					$LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					# SQLite version 3.x
 | 
				
			||||||
 | 
					#   gem install sqlite3
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#   Ensure the SQLite 3 gem is defined in your Gemfile
 | 
				
			||||||
 | 
					#   gem 'sqlite3'
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					default: &default
 | 
				
			||||||
 | 
					  adapter: sqlite3
 | 
				
			||||||
 | 
					  pool: 5
 | 
				
			||||||
 | 
					  timeout: 5000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					development:
 | 
				
			||||||
 | 
					  <<: *default
 | 
				
			||||||
 | 
					  database: db/development.sqlite3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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:
 | 
				
			||||||
 | 
					  <<: *default
 | 
				
			||||||
 | 
					  database: db/test.sqlite3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					production:
 | 
				
			||||||
 | 
					  <<: *default
 | 
				
			||||||
 | 
					  database: db/production.sqlite3
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					# Load the Rails application.
 | 
				
			||||||
 | 
					require File.expand_path('../application', __FILE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Initialize the Rails application.
 | 
				
			||||||
 | 
					Rails.application.initialize!
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,37 @@
 | 
				
			||||||
 | 
					Rails.application.configure do
 | 
				
			||||||
 | 
					  # Settings specified here will take precedence over those in config/application.rb.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # In the development environment your application's code is reloaded on
 | 
				
			||||||
 | 
					  # every request. This slows down response time but is perfect for development
 | 
				
			||||||
 | 
					  # since you don't have to restart the web server when you make code changes.
 | 
				
			||||||
 | 
					  config.cache_classes = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Do not eager load code on boot.
 | 
				
			||||||
 | 
					  config.eager_load = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Show full error reports and disable caching.
 | 
				
			||||||
 | 
					  config.consider_all_requests_local       = true
 | 
				
			||||||
 | 
					  config.action_controller.perform_caching = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Don't care if the mailer can't send.
 | 
				
			||||||
 | 
					  config.action_mailer.raise_delivery_errors = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Print deprecation notices to the Rails logger.
 | 
				
			||||||
 | 
					  config.active_support.deprecation = :log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Raise an error on page load if there are pending migrations.
 | 
				
			||||||
 | 
					  config.active_record.migration_error = :page_load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Debug mode disables concatenation and preprocessing of assets.
 | 
				
			||||||
 | 
					  # This option may cause significant delays in view rendering with a large
 | 
				
			||||||
 | 
					  # number of complex assets.
 | 
				
			||||||
 | 
					  config.assets.debug = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Adds additional error checking when serving assets at runtime.
 | 
				
			||||||
 | 
					  # Checks for improperly declared sprockets dependencies.
 | 
				
			||||||
 | 
					  # Raises helpful error messages.
 | 
				
			||||||
 | 
					  config.assets.raise_runtime_errors = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Raises error for missing translations
 | 
				
			||||||
 | 
					  # config.action_view.raise_on_missing_translations = true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,78 @@
 | 
				
			||||||
 | 
					Rails.application.configure do
 | 
				
			||||||
 | 
					  # Settings specified here will take precedence over those in config/application.rb.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Code is not reloaded between requests.
 | 
				
			||||||
 | 
					  config.cache_classes = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Eager load code on boot. This eager loads most of Rails and
 | 
				
			||||||
 | 
					  # your application in memory, allowing both threaded web servers
 | 
				
			||||||
 | 
					  # and those relying on copy on write to perform better.
 | 
				
			||||||
 | 
					  # Rake tasks automatically ignore this option for performance.
 | 
				
			||||||
 | 
					  config.eager_load = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Full error reports are disabled and caching is turned on.
 | 
				
			||||||
 | 
					  config.consider_all_requests_local       = false
 | 
				
			||||||
 | 
					  config.action_controller.perform_caching = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Enable Rack::Cache to put a simple HTTP cache in front of your application
 | 
				
			||||||
 | 
					  # Add `rack-cache` to your Gemfile before enabling this.
 | 
				
			||||||
 | 
					  # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
 | 
				
			||||||
 | 
					  # config.action_dispatch.rack_cache = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Disable Rails's static asset server (Apache or nginx will already do this).
 | 
				
			||||||
 | 
					  config.serve_static_assets = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Compress JavaScripts and CSS.
 | 
				
			||||||
 | 
					  config.assets.js_compressor = :uglifier
 | 
				
			||||||
 | 
					  # config.assets.css_compressor = :sass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Do not fallback to assets pipeline if a precompiled asset is missed.
 | 
				
			||||||
 | 
					  config.assets.compile = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Generate digests for assets URLs.
 | 
				
			||||||
 | 
					  config.assets.digest = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Specifies the header that your server uses for sending files.
 | 
				
			||||||
 | 
					  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
 | 
				
			||||||
 | 
					  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
 | 
				
			||||||
 | 
					  # config.force_ssl = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Set to :debug to see everything in the log.
 | 
				
			||||||
 | 
					  config.log_level = :info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Prepend all log lines with the following tags.
 | 
				
			||||||
 | 
					  # config.log_tags = [ :subdomain, :uuid ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Use a different logger for distributed setups.
 | 
				
			||||||
 | 
					  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Use a different cache store in production.
 | 
				
			||||||
 | 
					  # config.cache_store = :mem_cache_store
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
 | 
				
			||||||
 | 
					  # config.action_controller.asset_host = "http://assets.example.com"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Ignore bad email addresses and do not raise email delivery errors.
 | 
				
			||||||
 | 
					  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
 | 
				
			||||||
 | 
					  # config.action_mailer.raise_delivery_errors = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
 | 
				
			||||||
 | 
					  # the I18n.default_locale when a translation cannot be found).
 | 
				
			||||||
 | 
					  config.i18n.fallbacks = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Send deprecation notices to registered listeners.
 | 
				
			||||||
 | 
					  config.active_support.deprecation = :notify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Disable automatic flushing of the log to improve performance.
 | 
				
			||||||
 | 
					  # config.autoflush_log = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Use default logging formatter so that PID and timestamp are not suppressed.
 | 
				
			||||||
 | 
					  config.log_formatter = ::Logger::Formatter.new
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Do not dump schema after migrations.
 | 
				
			||||||
 | 
					  config.active_record.dump_schema_after_migration = false
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					Rails.application.configure do
 | 
				
			||||||
 | 
					  # Settings specified here will take precedence over those in config/application.rb.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # The test environment is used exclusively to run your application's
 | 
				
			||||||
 | 
					  # test suite. You never need to work with it otherwise. Remember that
 | 
				
			||||||
 | 
					  # your test database is "scratch space" for the test suite and is wiped
 | 
				
			||||||
 | 
					  # and recreated between test runs. Don't rely on the data there!
 | 
				
			||||||
 | 
					  config.cache_classes = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Do not eager load code on boot. This avoids loading your whole application
 | 
				
			||||||
 | 
					  # just for the purpose of running a single test. If you are using a tool that
 | 
				
			||||||
 | 
					  # preloads Rails for running tests, you may have to set it to true.
 | 
				
			||||||
 | 
					  config.eager_load = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Configure static asset server for tests with Cache-Control for performance.
 | 
				
			||||||
 | 
					  config.serve_static_assets  = true
 | 
				
			||||||
 | 
					  config.static_cache_control = 'public, max-age=3600'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Show full error reports and disable caching.
 | 
				
			||||||
 | 
					  config.consider_all_requests_local       = true
 | 
				
			||||||
 | 
					  config.action_controller.perform_caching = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Raise exceptions instead of rendering exception templates.
 | 
				
			||||||
 | 
					  config.action_dispatch.show_exceptions = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Disable request forgery protection in test environment.
 | 
				
			||||||
 | 
					  config.action_controller.allow_forgery_protection = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Tell Action Mailer not to deliver emails to the real world.
 | 
				
			||||||
 | 
					  # The :test delivery method accumulates sent emails in the
 | 
				
			||||||
 | 
					  # ActionMailer::Base.deliveries array.
 | 
				
			||||||
 | 
					  config.action_mailer.delivery_method = :test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Print deprecation notices to the stderr.
 | 
				
			||||||
 | 
					  config.active_support.deprecation = :stderr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Raises error for missing translations
 | 
				
			||||||
 | 
					  # config.action_view.raise_on_missing_translations = true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Version of your assets, change this if you want to expire all your assets.
 | 
				
			||||||
 | 
					Rails.application.config.assets.version = '1.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Precompile additional assets.
 | 
				
			||||||
 | 
					# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
 | 
				
			||||||
 | 
					# Rails.application.config.assets.precompile += %w( search.js )
 | 
				
			||||||
| 
						 | 
					@ -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,3 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rails.application.config.action_dispatch.cookies_serializer = :json
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configure sensitive parameters which will be filtered from the log file.
 | 
				
			||||||
 | 
					Rails.application.config.filter_parameters += [:password]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add new inflection rules using the following format. Inflections
 | 
				
			||||||
 | 
					# are locale specific, and you may define rules for as many different
 | 
				
			||||||
 | 
					# locales as you wish. All of these examples are active by default:
 | 
				
			||||||
 | 
					# ActiveSupport::Inflector.inflections(:en) do |inflect|
 | 
				
			||||||
 | 
					#   inflect.plural /^(ox)$/i, '\1en'
 | 
				
			||||||
 | 
					#   inflect.singular /^(ox)en/i, '\1'
 | 
				
			||||||
 | 
					#   inflect.irregular 'person', 'people'
 | 
				
			||||||
 | 
					#   inflect.uncountable %w( fish sheep )
 | 
				
			||||||
 | 
					# end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# These inflection rules are supported but not enabled by default:
 | 
				
			||||||
 | 
					# ActiveSupport::Inflector.inflections(:en) do |inflect|
 | 
				
			||||||
 | 
					#   inflect.acronym 'RESTful'
 | 
				
			||||||
 | 
					# end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rails.application.config.session_store :cookie_store, key: '_dummy_session'
 | 
				
			||||||
| 
						 | 
					@ -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] if respond_to?(:wrap_parameters)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To enable root element in JSON for ActiveRecord objects.
 | 
				
			||||||
 | 
					# ActiveSupport.on_load(:active_record) do
 | 
				
			||||||
 | 
					#  self.include_root_in_json = true
 | 
				
			||||||
 | 
					# end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					# Files in the config/locales directory are used for internationalization
 | 
				
			||||||
 | 
					# and are automatically loaded by Rails. If you want to use locales other
 | 
				
			||||||
 | 
					# than English, add the necessary files in this directory.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To use the locales, use `I18n.t`:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     I18n.t 'hello'
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# In views, this is aliased to just `t`:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     <%= t('hello') %>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To use a different locale, set it with `I18n.locale`:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     I18n.locale = :es
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This would use the information in config/locales/es.yml.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To learn more, please read the Rails Internationalization guide
 | 
				
			||||||
 | 
					# available at http://guides.rubyonrails.org/i18n.html.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					en:
 | 
				
			||||||
 | 
					  hello: "Hello world"
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					Rails.application.routes.draw do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mount PersonalCourse::Engine => "/personal_course"
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					# Be sure to restart your server when you modify this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Your secret key is used for verifying the integrity of signed cookies.
 | 
				
			||||||
 | 
					# If you change this key, all old signed cookies will become invalid!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make sure the secret is at least 30 characters and all random,
 | 
				
			||||||
 | 
					# no regular words or you'll be exposed to dictionary attacks.
 | 
				
			||||||
 | 
					# You can use `rake secret` to generate a secure secret key.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make sure the secrets in this file are kept private
 | 
				
			||||||
 | 
					# if you're sharing your code publicly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					development:
 | 
				
			||||||
 | 
					  secret_key_base: 7c3d6006ba19a38b126337be5c954acc76ea069fc59ab3b64ddb42e42883655978b5162d26bdcfeb9f363e5626a2c34e2036a9b0a010c9adceabbcdc01daa3cd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test:
 | 
				
			||||||
 | 
					  secret_key_base: f25e944e4db0a66681fe04d9a9f325978e481cabf76235247d86f881ab7c1616d542fb4a80306c539569becaeb9fee301d583845d11860df915e14e2224712b9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Do not keep production secrets in the repository,
 | 
				
			||||||
 | 
					# instead read values from the environment.
 | 
				
			||||||
 | 
					production:
 | 
				
			||||||
 | 
					  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,67 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <title>The page you were looking for doesn't exist (404)</title>
 | 
				
			||||||
 | 
					  <meta name="viewport" content="width=device-width,initial-scale=1">
 | 
				
			||||||
 | 
					  <style>
 | 
				
			||||||
 | 
					  body {
 | 
				
			||||||
 | 
					    background-color: #EFEFEF;
 | 
				
			||||||
 | 
					    color: #2E2F30;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-family: arial, sans-serif;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog {
 | 
				
			||||||
 | 
					    width: 95%;
 | 
				
			||||||
 | 
					    max-width: 33em;
 | 
				
			||||||
 | 
					    margin: 4em auto 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > div {
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #BBB;
 | 
				
			||||||
 | 
					    border-top: #B00100 solid 4px;
 | 
				
			||||||
 | 
					    border-top-left-radius: 9px;
 | 
				
			||||||
 | 
					    border-top-right-radius: 9px;
 | 
				
			||||||
 | 
					    background-color: white;
 | 
				
			||||||
 | 
					    padding: 7px 12% 0;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  h1 {
 | 
				
			||||||
 | 
					    font-size: 100%;
 | 
				
			||||||
 | 
					    color: #730E15;
 | 
				
			||||||
 | 
					    line-height: 1.5em;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > p {
 | 
				
			||||||
 | 
					    margin: 0 0 1em;
 | 
				
			||||||
 | 
					    padding: 1em;
 | 
				
			||||||
 | 
					    background-color: #F7F7F7;
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: 4px;
 | 
				
			||||||
 | 
					    border-bottom-right-radius: 4px;
 | 
				
			||||||
 | 
					    border-top-color: #DADADA;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					  <!-- This file lives in public/404.html -->
 | 
				
			||||||
 | 
					  <div class="dialog">
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      <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>
 | 
				
			||||||
 | 
					    <p>If you are the application owner check the logs for more information.</p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,67 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <title>The change you wanted was rejected (422)</title>
 | 
				
			||||||
 | 
					  <meta name="viewport" content="width=device-width,initial-scale=1">
 | 
				
			||||||
 | 
					  <style>
 | 
				
			||||||
 | 
					  body {
 | 
				
			||||||
 | 
					    background-color: #EFEFEF;
 | 
				
			||||||
 | 
					    color: #2E2F30;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-family: arial, sans-serif;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog {
 | 
				
			||||||
 | 
					    width: 95%;
 | 
				
			||||||
 | 
					    max-width: 33em;
 | 
				
			||||||
 | 
					    margin: 4em auto 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > div {
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #BBB;
 | 
				
			||||||
 | 
					    border-top: #B00100 solid 4px;
 | 
				
			||||||
 | 
					    border-top-left-radius: 9px;
 | 
				
			||||||
 | 
					    border-top-right-radius: 9px;
 | 
				
			||||||
 | 
					    background-color: white;
 | 
				
			||||||
 | 
					    padding: 7px 12% 0;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  h1 {
 | 
				
			||||||
 | 
					    font-size: 100%;
 | 
				
			||||||
 | 
					    color: #730E15;
 | 
				
			||||||
 | 
					    line-height: 1.5em;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > p {
 | 
				
			||||||
 | 
					    margin: 0 0 1em;
 | 
				
			||||||
 | 
					    padding: 1em;
 | 
				
			||||||
 | 
					    background-color: #F7F7F7;
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: 4px;
 | 
				
			||||||
 | 
					    border-bottom-right-radius: 4px;
 | 
				
			||||||
 | 
					    border-top-color: #DADADA;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					  <!-- This file lives in public/422.html -->
 | 
				
			||||||
 | 
					  <div class="dialog">
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      <h1>The change you wanted was rejected.</h1>
 | 
				
			||||||
 | 
					      <p>Maybe you tried to change something you didn't have access to.</p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <p>If you are the application owner check the logs for more information.</p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,66 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <title>We're sorry, but something went wrong (500)</title>
 | 
				
			||||||
 | 
					  <meta name="viewport" content="width=device-width,initial-scale=1">
 | 
				
			||||||
 | 
					  <style>
 | 
				
			||||||
 | 
					  body {
 | 
				
			||||||
 | 
					    background-color: #EFEFEF;
 | 
				
			||||||
 | 
					    color: #2E2F30;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-family: arial, sans-serif;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog {
 | 
				
			||||||
 | 
					    width: 95%;
 | 
				
			||||||
 | 
					    max-width: 33em;
 | 
				
			||||||
 | 
					    margin: 4em auto 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > div {
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #BBB;
 | 
				
			||||||
 | 
					    border-top: #B00100 solid 4px;
 | 
				
			||||||
 | 
					    border-top-left-radius: 9px;
 | 
				
			||||||
 | 
					    border-top-right-radius: 9px;
 | 
				
			||||||
 | 
					    background-color: white;
 | 
				
			||||||
 | 
					    padding: 7px 12% 0;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  h1 {
 | 
				
			||||||
 | 
					    font-size: 100%;
 | 
				
			||||||
 | 
					    color: #730E15;
 | 
				
			||||||
 | 
					    line-height: 1.5em;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  div.dialog > p {
 | 
				
			||||||
 | 
					    margin: 0 0 1em;
 | 
				
			||||||
 | 
					    padding: 1em;
 | 
				
			||||||
 | 
					    background-color: #F7F7F7;
 | 
				
			||||||
 | 
					    border: 1px solid #CCC;
 | 
				
			||||||
 | 
					    border-right-color: #999;
 | 
				
			||||||
 | 
					    border-left-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-color: #999;
 | 
				
			||||||
 | 
					    border-bottom-left-radius: 4px;
 | 
				
			||||||
 | 
					    border-bottom-right-radius: 4px;
 | 
				
			||||||
 | 
					    border-top-color: #DADADA;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					  <!-- This file lives in public/500.html -->
 | 
				
			||||||
 | 
					  <div class="dialog">
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      <h1>We're sorry, but something went wrong.</h1>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <p>If you are the application owner check the logs for more information.</p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					require 'test_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class NavigationTest < ActionDispatch::IntegrationTest
 | 
				
			||||||
 | 
					  fixtures :all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # test "the truth" do
 | 
				
			||||||
 | 
					  #   assert true
 | 
				
			||||||
 | 
					  # end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					require 'test_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PersonalCourseTest < ActiveSupport::TestCase
 | 
				
			||||||
 | 
					  test "truth" do
 | 
				
			||||||
 | 
					    assert_kind_of Module, PersonalCourse
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue