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