commit 52d35811302f5baedc8f7c91961bdacaa77cdff1 Author: Rulingcom Date: Wed Jun 29 14:57:45 2016 +0800 first commit for seminar diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..1950993 --- /dev/null +++ b/Gemfile @@ -0,0 +1,14 @@ +source "https://rubygems.org" + +# Declare your gem's dependencies in seminar.gemspec. +# Bundler will treat runtime dependencies like base dependencies, and +# development dependencies will be added by default to the :development group. +gemspec + +# Declare any dependencies that are still in development here instead of in +# your gemspec. These might include edge Rails or gems from your path or +# Git. Remember to move these dependencies to your gemspec before releasing +# your gem to rubygems.org. + +# To use debugger +# gem 'debugger' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..305eb37 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,87 @@ +PATH + remote: . + specs: + seminar (0.0.1) + rails (~> 4.1.9) + +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.1.9) + actionpack (= 4.1.9) + actionview (= 4.1.9) + mail (~> 2.5, >= 2.5.4) + actionpack (4.1.9) + actionview (= 4.1.9) + activesupport (= 4.1.9) + rack (~> 1.5.2) + rack-test (~> 0.6.2) + actionview (4.1.9) + activesupport (= 4.1.9) + builder (~> 3.1) + erubis (~> 2.7.0) + activemodel (4.1.9) + activesupport (= 4.1.9) + builder (~> 3.1) + activerecord (4.1.9) + activemodel (= 4.1.9) + activesupport (= 4.1.9) + arel (~> 5.0.0) + activesupport (4.1.9) + i18n (~> 0.6, >= 0.6.9) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.1) + tzinfo (~> 1.1) + arel (5.0.1.20140414130214) + builder (3.2.2) + erubis (2.7.0) + hike (1.2.3) + i18n (0.7.0) + json (1.8.2) + mail (2.6.3) + mime-types (>= 1.16, < 3) + mime-types (2.4.3) + minitest (5.5.1) + multi_json (1.10.1) + rack (1.5.2) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.1.9) + actionmailer (= 4.1.9) + actionpack (= 4.1.9) + actionview (= 4.1.9) + activemodel (= 4.1.9) + activerecord (= 4.1.9) + activesupport (= 4.1.9) + bundler (>= 1.3.0, < 2.0) + railties (= 4.1.9) + sprockets-rails (~> 2.0) + railties (4.1.9) + actionpack (= 4.1.9) + activesupport (= 4.1.9) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (10.4.2) + sprockets (2.12.3) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.2.4) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (>= 2.8, < 4.0) + sqlite3 (1.3.10) + thor (0.19.1) + thread_safe (0.3.4) + tilt (1.4.1) + tzinfo (1.2.2) + thread_safe (~> 0.1) + +PLATFORMS + ruby + +DEPENDENCIES + seminar! + sqlite3 diff --git a/MIT-LICENSE b/MIT-LICENSE new file mode 100644 index 0000000..1e4beb8 --- /dev/null +++ b/MIT-LICENSE @@ -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. diff --git a/README.rdoc b/README.rdoc new file mode 100644 index 0000000..53399c4 --- /dev/null +++ b/README.rdoc @@ -0,0 +1,3 @@ += Seminar + +This project rocks and uses MIT-LICENSE. \ No newline at end of file diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..d4cf079 --- /dev/null +++ b/Rakefile @@ -0,0 +1,32 @@ +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end + +require 'rdoc/task' + +RDoc::Task.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'Seminar' + rdoc.options << '--line-numbers' + rdoc.rdoc_files.include('README.rdoc') + rdoc.rdoc_files.include('lib/**/*.rb') +end + + + + +Bundler::GemHelper.install_tasks + +require 'rake/testtask' + +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' + t.libs << 'test' + t.pattern = 'test/**/*_test.rb' + t.verbose = false +end + + +task default: :test diff --git a/app/assets/javascripts/check_seminar_set_items.js.erb b/app/assets/javascripts/check_seminar_set_items.js.erb new file mode 100755 index 0000000..bc793f5 --- /dev/null +++ b/app/assets/javascripts/check_seminar_set_items.js.erb @@ -0,0 +1,78 @@ +function checkTagsQuantity() { + var $tagLead = $('.tag-lead'), + $tagsGroups = $('.tags-groups'); + + $tagsGroups.each(function(i) { + var $children = $(this).children().length; + $tagLead.eq(i).children('.badge').text($children); + }) +} + +function checkedLength() { + var $tagsList = $('#tags-list'), + $defaultTags, + ids; + function reload_links() { + var _checked = 0; + ids = []; + $defaultTags = $('li.default input[type="checkbox"]'); + $defaultTags.each(function(index, el) { + if($(el).prop('checked')) { + _checked ++; + ids.push($(el).val()) + } + }); + console.log(_checked,ids) + if(_checked > 0) { + $('#deselect').removeClass('hide'); + $('#deselect').on('click', deselect); + $('#deleteItems').attr('rel', "<%= Rails.application.routes.url_helpers.delete_items_admin_seminar_items_path %>" + "?ids=" + ids); + $('#deleteItems').removeClass('hide'); + + } else { + $('#deselect').addClass('hide'); + $('#deleteItems').attr('rel', ""); + $('#deleteItems').addClass('hide'); + $('#deselect').off('click', deselect); + }; + } + $tagsList.on('click', '.card', function(event) { + reload_links(); + }); + $('#selectAllTags').on('click', function() { + $('.filter-item:not(".mark") input[type="checkbox"]').prop('checked', true); + $('.filter-item:not(".mark") .card').addClass('active'); + reload_links(); + }); + $('#deleteItems').on('click', function() { + $('#delete_seminar_items .tags-groups').empty(); + $('#delete_seminar_items a.delete-tags').attr("href", $(this).attr("rel")); + if(ids.length) { + $('.filter-item').children('.card.active').each(function(i, e) { + console.log($(e)) + $(e).parents('.filter-item').clone().appendTo('#delete_seminar_items .tags-groups'); + $('#delete_seminar_items .tags-groups .filter-item').addClass('def'); + }); + } + + $('#delete_seminar_items').modal('show', cleanTagInputs()); + function cleanTagInputs(){ + var $tagsDelete = $('#delete_seminar_items'), + $filterItem = $tagsDelete.find('.filter-item'); + $filterItem.find('.card, .amount').remove(); + $filterItem.find('a').removeAttr('class'); + $filterItem.find('a').removeAttr('href'); + } + }); + + function deselect() { + $('.tags input[type="checkbox"]').prop('checked', false); + $('.card').removeClass('active'); + $('.bottomnav .toggable').not('.open-slide').addClass('hide'); + $('#deleteItems').attr('rel', ""); + } +} + +$(function() { + checkedLength(); +}); diff --git a/app/assets/javascripts/field-forms.js b/app/assets/javascripts/field-forms.js new file mode 100644 index 0000000..1c62186 --- /dev/null +++ b/app/assets/javascripts/field-forms.js @@ -0,0 +1,494 @@ +// Retrieve the initial data +function temporary() { + attributesArray.length = 0; + $('.attributes').each(function() { + var attributesData = {}, + $selectType = $('.dataType').data().type; + + // Capture "attributes-body" within the input[type = "text"] val + $(this).find('.attributes-body').find('input[type="text"]').each(function(i) { + var $type = $(this).data().type; + attributesData[$type] = $(this).val(); + }); + + // Capture "attributes-body" within the input[type = "radio"] checked + $(this).find('.attributes-body').find('input[type="radio"]').each(function(i) { + var $type = $(this).data().type; + attributesData[$type] = $(this).prop("checked"); + }); + + // Capture "attributes-body" within the dataType selected + $(this).find('.attributes-body').find('.dataType').children("option:selected").each(function () { + attributesData[$selectType] = {}; + attributesData[$selectType].index = $(this).index(); + attributesData[$selectType].name = $(this).attr('ref'); + if($(this).attr('ref') == 'typeB' || $(this).attr('ref') == 'typeE' || $(this).attr('ref') == 'typeF') { + attributesData[$selectType].option = []; + } + }); + + // Capture "field-type" within the input[type = "text"] val + $(this).find('.field-type').find('input[type="text"]').each(function(i) { + var $type = $(this).data().type; + if(!$type.match('option_lang')) { + attributesData[$selectType][$type] = $(this).val(); + } + }); + + $(this).find('.field-type .add-target').find('.input-append').each(function() { + var append = [] + $(this).children('input[type="text"]').each(function() { + var val = $(this).val(); + append.push(val); + }); + attributesData[$selectType].option.push(append); + }) + + // Capture "field-type" within the input[type = "checkbox"] checked + $(this).find('.field-type').find('input[type="checkbox"]').each(function() { + var $type = $(this).data().type; + attributesData[$selectType][$type] = $(this).prop("checked"); + }); + + // Capture "field-type" within the input[type = "radio"] checked + $(this).find('.field-type').find('input[type="radio"]').each(function() { + var $type = $(this).data().type; + attributesData[$selectType][$type] = $(this).prop("checked"); + }); + + // Capture "field-type" within the dataType selected + $(this).find('.field-type').find('select').children("option:selected").each(function () { + attributesData[$selectType].dateFormat = $(this).index(); + }); + + attributesArray.push(attributesData); + }); +}; + +// Determine the Append input length +function inputAppendLength() { + $('.add-target').each(function(i) { + if($(this).children('.input-append:not(:hidden)').length == 1 || $(this).children('.input-append').length == 1) { + $(this).children('.input-append').each(function() { + if($(this).children('div').hasClass('tab-content')) { + var btnLength = $(this).children('.btn').length; + $(this).find('.btn').eq(btnLength-2).addClass('last'); + $(this).find('.remove-input').addClass('hide'); + } else { + var mediumLength = $(this).children('.input-medium').length; + $(this).children('.input-medium').eq(mediumLength-1).addClass('last'); + $(this).children('.remove-input').addClass('hide'); + } + }); + } else { + $(this).children('.input-append').each(function() { + if($(this).children('div').hasClass('tab-content')) { + $(this).find('.btn').removeClass('last'); + $(this).find('.remove-input').removeClass('hide'); + } else { + $(this).children('.input-medium').removeClass('last'); + $(this).children('.remove-input').removeClass('hide'); + } + }); + } + }); +}; + +// Role Attribute Template Data +function setData(l, type, ol) { + var fields = $('#info').length ? "info[seminar_signup_fields]" : $('#sub_seminar_main').length ? "sub_seminar_main[seminar_signup_fields]" : "seminar_main[seminar_signup_fields]", + data = { + _add_more: ["add_more_" +l, fields+"["+l+"]["+type+"][add_more]"], + _calendar: ["calendar_" +l, fields+"["+l+"]["+type+"][calendar]"], + _cross_lang: ["cross_lang_" +l, fields+"["+l+"]["+type+"][cross_lang]"], + _disabled: ["disabled_" +l, fields+"["+l+"][disabled]"], + _format: ["format_" +l, fields+"["+l+"]["+type+"][format]"], + _initial: ["initial_" +l, fields+"["+l+"]["+type+"][initial]"], + _is_range: ["is_range_" +l, fields+"["+l+"]["+type+"][is_range]"], + _key: ["key_" +l, fields+"["+l+"][key]"], + _markup: fields+"["+l+"][markup]", + _option_list: ["option_list_"+l+"_"+ol, fields+"["+l+"]["+type+"][option_list]["+ol+"]", "option_list_"+ol], + _placeholder: ["placeholder_" +l, fields+"["+l+"]["+type+"][placeholder]"], + _title_translations: ["title_translations_" +l, fields+"["+l+"][title_translations]"], + _to_delete: ["to_delete_" +l, fields+"["+l+"][to_delete]"], + _to_require: ["to_require_" +l, fields+"["+l+"][to_require]"], + }; + return data; +} + +// Get Default Address Form +function getAddressForm(trigger, element, decide) { + if(decide) { + addressVal.length = addressArray.length = 0; + var addressAllVal = []; + var inputNameArray = []; + trigger.closest('.input-append').find('.tab-pane').each(function() { + var adderssText = $(this).children('input[type="text"]').val(), + addersshidden = '', + addressData = {}, + inputName = []; + $(this).children('input:not(:first)').each(function(j) { + var name = $(this).attr('name'), + val = $(this).val(); + addersshidden += val; + addressData[name] = val; + inputName.push(name); + }); + addressArray.push(addressData); + addressAllVal.push(adderssText); + inputNameArray.push(inputName); + if(adderssText != addersshidden) { + addressVal.push(false); + } else { + addressVal.push(true); + } + }); + element.find('.tab-pane').each(function(i) { + $(this).find('textarea, input[type="text"]').each(function(j) { + $(this).attr('name',inputNameArray[i][j]); + }); + if(addressVal[i]) { + $(this).find('textarea, input[type="text"]').each(function(j) { + $(this).val(addressArray[i][$(this).attr('name')]); + }); + } else { + $(this).find('textarea').val(addressAllVal[i]); + $(this).find('input[type="text"]').each(function(j) { + $(this).val(''); + }); + } + }); + }; + element.off('show'); +}; + +// Return Address Form +function returnAddressForm(element, decide) { + if(decide) { + addressArray.length = 0; + element.find('.tab-pane').each(function(i) { + var addressData = {}; + $(this).find('textarea, input[type="text"]').each(function(j) { + var name = $(this).attr('name'), + val = $(this).val(); + addressData[name] = val; + }); + addressArray.push(addressData); + }); + $.map(addressInputId, function(n, i) { + var v = ''; + $('#'+n).find('input[type="hidden"]').each(function() { + $(this).val(addressArray[i][$(this).attr('name')]); + v += addressArray[i][$(this).attr('name')] + }); + $('#'+n).find('input[type="text"]').each(function() { + $(this).val(v); + }); + }); + }; + returnDecide = false; +}; + +$(function() { + appendIndex = null; + if($('#user-forms').length) { + addressVal = []; + addressArray = []; + addressInputId = []; + seminar_mainType = null; + returnDecide = false; + $('.attributes').each(function() { + if($(this).find('.toggle-check').attr('value') == "true") { + $(this).addClass('disabled').children('.attributes-body').hide(); + } + }); + $('.returnDecide').on(clickEvent, function() { + returnDecide = true; + }) + $('#address-field').on('hidden', function () { + $('.btn[data-toggle="modal"]').removeClass('active').blur(); + $(this).find('.nav-tabs > li').removeClass('active').eq(0).addClass('active'); + $(this).find('.tab-content > .tab-pane').removeClass('active in').eq(0).addClass('active in'); + $(this).on('show', getAddressForm(null, $(this), false)); + returnAddressForm($(this), returnDecide) + }); + $('.control-group').delegate('.btn[data-toggle="modal"]', 'click', function() { + var $trigger = $(this); + addressInputId.length = 0; + $(this).closest('.input-append').find('.tab-pane').each(function() { + addressInputId.push($(this).attr('id')); + }); + $('#address-field').on('show', getAddressForm($trigger, $('#address-field'), true)); + }); + $('#user-forms').delegate('.togglebox, .delete, .trigger, .remove-input', clickEvent, function(event) { + if($(this).hasClass('togglebox')) { + var seminar_main_staus = []; + if($(this).hasClass('disable')) { + $(this).find('.toggle-check') + .attr('value', 'false') + .closest('.attributes') + .removeClass('disabled') + .children('.attributes-body') + .fadeIn(300); + } else { + $(this).find('.toggle-check') + .attr('value', 'true') + .closest('.attributes') + .addClass('disabled') + .children('.attributes-body') + .fadeOut(300) + .find('.check') + .attr("checked",false) + .attr("value",seminar_main_staus); + } + $(this).toggleClass('disable'); + }; + if($(this).hasClass('remove-input')) { + $(this).closest('.input-append').fadeOut(300, function() { + $(this).remove(); + inputAppendLength(); + }); + }; + if($(this).hasClass('trigger')) { + appendIndex = $(this).closest('.controls').find('.input-append').length; + nameNumber = $(this).closest('.controls').find('.input-append:eq(0)').find('input').eq(0).attr('name'); + nameNumber = nameNumber.match(/[^[\D\]]+(?=])/g)[0]; + seminar_mainType = $(this).data('seminar_mains') + if($(this).hasClass('textInput')) { + $("#template-text").tmpl().appendTo($(this).closest('.controls').find('.add-target')); + } else if ($(this).hasClass('textLengInput')) { + $("#template-text-language").tmpl().appendTo($(this).closest('.controls').find('.add-target')); + } else if ($(this).hasClass('address')) { + $("#template-address").tmpl().appendTo($(this).closest('.controls').find('.add-target')); + } + inputAppendLength(); + }; + event.preventDefault(); + }); + inputAppendLength(); + } else { + attributesArray = []; + attributesHeaderLength = null; + templateType = null; + attributeIndex = null; + if($('.add-target').length) { + inputAppendLength(); + } + if(!$('.attributes').length) { + $('#attributes-area').addClass('clickHere'); + } else { + temporary(); + }; + + $('.add-attributes').on(clickEvent, function() { + if($('#attributes-area').hasClass('clickHere')) { + $('#attributes-area').removeClass('clickHere'); + }; + attributesHeaderLength = $('.attributes:not(:hidden)').length+1; + attributesLength = $('#attributes-area .attributes').length; + $("#template-attributes").tmpl(setData(attributesLength, templateType, appendIndex)).appendTo( "#attributes-area" ); + $('.toggle-check').togglebox(); + }); + + + + $('.attributes.default').each(function(i) { + $(this).children('.field-type').not('.default').hide(); + $(this).find('input[type="text"]').on('keyup', function() { + $(this).trigger("checking"); + }); + $(this).find('input[type="radio"], input[type="checkbox"], select').change(function() { + $(this).trigger("checking"); + }); + $(this).delegate('input[type="text"], input[type="radio"], input[type="checkbox"], select', 'checking', function(e) { + var e = e.target.type, + $data = $(this).data().type; + switch(e) { + case 'text': + var val = $(this).val(); + if(!$(this).closest('.field-type').length) { + $data = attributesArray[i][$data]; + } else if(!$(this).closest('.add-target').length) { + $data = attributesArray[i].select[$data]; + } else { + appendIndex = $(this).parent('.input-append').index() + optionIndex = $(this).index() + $data = attributesArray[i].select.option[appendIndex][optionIndex]; + } + if(val != $data) { + $(this).closest('.attributes').find('.reply').removeClass('hide'); + } + break; + case 'radio': + var checked = $(this).prop("checked"); + $data = attributesArray[i][$data]; + if(checked != $data) { + $(this).closest('.attributes').find('.reply').removeClass('hide'); + } + break; + case 'checkbox': + var checked = $(this).prop("checked"); + $data = attributesArray[i].select[$data]; + if(checked != $data) { + $(this).closest('.attributes').find('.reply').removeClass('hide'); + } + break; + case 'select-one': + var ref, + $data = attributesArray[i].select.name; + $(this).children("option:selected").each(function() { + ref = $(this).attr('ref'); + }); + if(ref != $data) { + $(this).closest('.attributes').find('.reply').removeClass('hide'); + } + break; + }; + }); + $(this).delegate('.reply', clickEvent, function() { + var $bodyText = $(this).parent('.attributes-header').siblings('.attributes-body').find('input[type="text"]'), + $bodyRadio = $(this).parent('.attributes-header').siblings('.attributes-body').find('input[type="radio"]'), + $bodySelected = $(this).parent('.attributes-header').siblings('.attributes-body').find('.dataType').children("option"), + $fieldTypeO = $(this).parent('.attributes-header').siblings('.field-type.default'), + $fieldTypeN = $(this).parent('.attributes-header').siblings('.field-type').not('.default'); + $bodyText.each(function() { + var $type = $(this).data().type; + $(this).val(attributesArray[i][$type]); + }); + $bodyRadio.each(function() { + var $type = $(this).data().type; + $(this).prop("checked", attributesArray[i][$type]) + }); + $fieldTypeO.find('input[type="text"]').each(function() { + var $type = $(this).data().type; + if(!$type.match('option_lang')) { + $(this).val(attributesArray[i].select[$type]); + } + }); + $fieldTypeO.find('.add-target').find('.input-append').each(function(k) { + $(this).children('input[type="text"]').each(function(j) { + $(this).val(attributesArray[i].select.option[k][j]); + // var val = $(this).val(); + // append.push(val); + }); + }) + $fieldTypeO.find('input[type="checkbox"], input[type="radio"]').each(function() { + var $type = $(this).data().type; + $(this).prop("checked", attributesArray[i].select[$type]); + }); + $fieldTypeO.find('select').children("option").eq(attributesArray[i].select.dateFormat).prop('selected',true); + $bodySelected.eq(attributesArray[i].select.index).prop('selected',true); + $fieldTypeO.show(); + $fieldTypeN.empty().hide(); + $(this).addClass('hide') + return false + }) + }); + $('#attributes-area').delegate('.togglebox, .delete, .trigger, .remove-input', clickEvent, function(event) { + if($(this).hasClass('togglebox')) { + if($(this).hasClass('disable')) { + $(this).find('.toggle-check') + .attr('value', 'false') + .closest('.attributes') + .removeClass('disabled') + .find('input, select') + .removeAttr('disabled') + .end('.attributes') + .find('.btn-group .btn') + .removeClass('disabled') + .end().find('.attribute_field_disabled').attr('value', 'false'); + if($(this).closest('.attributes').find('.dataType').children("option:selected").attr('ref')) { + $(this).closest('.attributes').find('.field-type').addClass('in').find('.control-group').delay(150).fadeIn(300); + } + } else { + $(this).find('.toggle-check') + .attr('value', 'true') + .closest('.attributes') + .addClass('disabled') + .find('.attributes-body input, .attributes-body select') + .attr({'disabled': 'disabled'}) + .end('.attributes') + .find('.btn-group .btn') + .addClass('disabled') + .end().find('.attribute_field_disabled').attr('value', 'true') + .end().find('.field-type .control-group').fadeOut(300, function() { + $(this).parent('.field-type').removeClass('in'); + }); + } + $(this).toggleClass('disable'); + }; + if($(this).hasClass('delete')) { + $(this).closest('.attributes').fadeOut(300, function() { + $('.attributes:not(:hidden)').each(function(i) { + $(this).find('.attributes-header h4 span').text(i+1); + }); + attributesHeaderLength = $('.attributes:not(:hidden)').length+1; + if(!$('.attributes:not(:hidden)').length) { + $('#attributes-area').addClass('clickHere'); + }; + }).find('.attribute_field_to_delete').attr('value', 'true');; + }; + if($(this).hasClass('trigger')) { + // appendIndex = $(this).closest('.controls').find('.input-append').length; + appendIndex = $(this).closest('.controls').find('.input-append:last-child').children('input:first-child').attr('name'); + // appendIndex = appendIndex.split("]["); + // appendIndex = parseInt(appendIndex[appendIndex.length-2])+1; + appendIndex = parseInt(appendIndex.match(/[^[\D\]]+(?=])/g)[1])+1; + console.log(appendIndex) + attributeIndex = $(this).closest('.attributes').index(); + templateType = $(this).closest('.attributes').find('.dataType').children("option:selected").attr('ref'); + $("#template-input-append").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo($(this).closest('.controls').find('.add-target')); + inputAppendLength(); + }; + if($(this).hasClass('remove-input')) { + $(this).parent('.input-append').fadeOut(300, function() { + $(this).remove() + inputAppendLength(); + }); + + } + event.preventDefault(); + }); + $('#attributes-area').delegate('.dataType', 'change', function() { + $(this).children("option:selected").each(function () { + var target = $(this).closest('.attributes').find('.field-type').not('.default'); + attributeIndex = $(this).closest('.attributes').index(); + appendIndex = 0 + // $(this).closest('.attributes').find('.add-target').find('.input-append').length; + if($(this).closest('.attributes').hasClass('default')){ + var i = $(this).closest('.attributes').index() + if($(this).attr('ref') == attributesArray[i].select.name) { + $(this).closest('.attributes').find('.field-type.default').show() + target.empty().hide(); + } else { + $(this).closest('.attributes').find('.field-type.default').hide() + if($(this).attr('ref')) { + templateType = $(this).attr('ref'); + target.removeAttr('class').addClass('field-type fade in ' + templateType).empty(); + $("#template-type").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo(target); + if(templateType == 'typeB' || templateType == 'typeE' || templateType == 'typeF') { + inputAppendLength(); + } + } else { + target.removeAttr('class').addClass('field-type fade') + target.empty(); + }; + target.show(); + } + } else { + if($(this).attr('ref')) { + templateType = $(this).attr('ref'); + target.removeAttr('class').addClass('field-type fade in ' + templateType).empty(); + $("#template-type").tmpl(setData(attributeIndex, templateType, appendIndex)).appendTo(target); + if(templateType == 'typeB' || templateType == 'typeE' || templateType == 'typeF') { + inputAppendLength(); + } + } else { + target.removeAttr('class').addClass('field-type fade') + target.empty(); + }; + } + }); + }); + } +}); \ No newline at end of file diff --git a/app/assets/javascripts/seminar.js.coffee b/app/assets/javascripts/seminar.js.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/app/assets/javascripts/seminar.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/seminar_sets.js b/app/assets/javascripts/seminar_sets.js new file mode 100644 index 0000000..92be5b3 --- /dev/null +++ b/app/assets/javascripts/seminar_sets.js @@ -0,0 +1,29 @@ +$(function() { + + $('a[data-toggle="tab"]').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + }); + + $.pageslide.closeCallback(function(pageslide, item) { + $('.filter-item').removeClass("active"); + }); + + $.pageslide.loadComplete(function(pageslide, item) { + + $('.filter-item').removeClass("active"); + + item.closest('li').addClass('active'); + + if(item.data('id') == 'new') { + resetForm(); + pageslide.find('form:eq(0)').attr('action', window.location.pathname); + pageslide.find('form:eq(0)').attr('method', 'post'); + }else { + setForm(item.data('form')); + pageslide.find('form:eq(0)').attr('action', window.location.pathname + '/' + item.data('id')); + pageslide.find('form:eq(0)').attr('method', 'put'); + } + + }); +}) \ No newline at end of file diff --git a/app/assets/stylesheets/seminar.css.scss b/app/assets/stylesheets/seminar.css.scss new file mode 100644 index 0000000..d0f9802 --- /dev/null +++ b/app/assets/stylesheets/seminar.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the seminar controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/seminar_sets.css b/app/assets/stylesheets/seminar_sets.css new file mode 100644 index 0000000..16aacf9 --- /dev/null +++ b/app/assets/stylesheets/seminar_sets.css @@ -0,0 +1,3 @@ +/* + *= require lib/tags-groups +*/ \ No newline at end of file diff --git a/app/controllers/admin/seminar_agreements_controller.rb b/app/controllers/admin/seminar_agreements_controller.rb new file mode 100644 index 0000000..fdca660 --- /dev/null +++ b/app/controllers/admin/seminar_agreements_controller.rb @@ -0,0 +1,20 @@ +class Admin::SeminarAgreementsController < OrbitAdminController + + def initialize + super + @app_title = 'seminar' + end + + def index + @seminar_agreement = SeminarAgreement.first || SeminarAgreement.create + @url = admin_seminar_agreement_path(@seminar_agreement) + end + + def update + @seminar_agreement = SeminarAgreement.first + @seminar_agreement.update_attributes(params.require(:seminar_agreement).permit!) + + redirect_to admin_seminar_agreements_path, notice: t('seminar.save_success') + end + +end diff --git a/app/controllers/admin/seminar_item_contents_controller.rb b/app/controllers/admin/seminar_item_contents_controller.rb new file mode 100644 index 0000000..a445fb4 --- /dev/null +++ b/app/controllers/admin/seminar_item_contents_controller.rb @@ -0,0 +1,70 @@ +# encoding: utf-8 +class Admin::SeminarItemContentsController < OrbitAdminController + + before_action ->(module_app = @app_title) { set_variables module_app } + + def initialize + super + @app_title = "seminar" + end + + def index + + @seminar_item_contents = SeminarItemContent.where(:seminar_main_id => params[:seminar_main_id]).page(params[:page]).per(10) + @seminar = SeminarMain.find(params[:seminar_main_id]) + + @seminar_items = SeminarItem.where(:_id.nin=> SeminarItemContent.where(:seminar_main_id => params[:seminar_main_id]).collect{|t| t.seminar_item_id} ).collect{|a| [a.title,a.id]} + end + + def new + + @contents = SeminarItemContent.where(:seminar_main_id => params[:seminar_main_id]).collect{|t| t.seminar_item_id} + @seminar_item_content = SeminarItemContent.new + + @seminar_items = SeminarItem.where(:_id.nin=> @contents).collect{|a| [a.title,a.id]} + + end + + def create + + seminar_item_content = SeminarItemContent.new(seminar_item_content_params) + + seminar_item_content.create_user_id = current_user.id + seminar_item_content.update_user_id = current_user.id + + seminar_item_content.save + + redirect_to params['referer_url']+"?seminar_main_id="+seminar_item_content.seminar_main_id + + end + + def edit + + @seminar_item_content = SeminarItemContent.find(params[:id]) + @seminar = SeminarMain.find(@seminar_item_content.seminar_main_id) + + end + + def update + + @seminar_item_content = SeminarItemContent.find(params[:id]) + @seminar_item_content.update_attributes(seminar_item_content_params) + + redirect_to "/admin/seminar_item_contents?seminar_main_id="+@seminar_item_content.seminar_main_id + + end + + def destroy + @seminar_item_content = SeminarItemContent.find(params[:id]) + + @seminar_item_content.destroy + + redirect_to "/admin/seminar_item_contents?seminar_main_id="+@seminar_item_content.seminar_main_id + end + + private + + def seminar_item_content_params + params.require(:seminar_item_content).permit! + end +end diff --git a/app/controllers/admin/seminar_items_controller.rb b/app/controllers/admin/seminar_items_controller.rb new file mode 100644 index 0000000..d376fcf --- /dev/null +++ b/app/controllers/admin/seminar_items_controller.rb @@ -0,0 +1,52 @@ +class Admin::SeminarItemsController < OrbitAdminController + + def initialize + super + @app_title = 'seminar' + end + + def index + @seminar_items = SeminarItem.all + @url = admin_seminar_item_path(@seminar_items) + end + + def create + @seminar_item = SeminarItem.new(seminar_item_params) + @seminar_item.save + redirect_to request.referer, :status => 303 + end + + def create_in_form + @seminar_item = SeminarItem.new(seminar_item_params) + @seminar_item.saveseminar_item + render :json => {:id=>@seminar_item.id.to_s, :title=>@seminar_item.title}.to_json ,:layout => false + end + + def update + @seminar_item = SeminarItem.find(params[:id]) + @seminar_item.update_attributes(seminar_item_params) + redirect_to request.referer, :status => 303 + end + + def toggle + @seminar_item = SeminarItem.find(params[:id]) + @seminar_item.save! + redirect_to request.referer, :status => 303 + end + + def delete_items + items = SeminarItem.find(params[:ids].split(',')) rescue nil + if items + items.each(&:destroy) + end + redirect_to request.referer, :status => 303 + end + + + private + + def seminar_item_params + params.require(:seminar_item).permit! + end + +end diff --git a/app/controllers/admin/seminar_signups_controller.rb b/app/controllers/admin/seminar_signups_controller.rb new file mode 100644 index 0000000..792341d --- /dev/null +++ b/app/controllers/admin/seminar_signups_controller.rb @@ -0,0 +1,53 @@ +# encoding: utf-8 +class Admin::SeminarSignupsController < OrbitAdminController + include Admin::SeminarsHelper + before_action ->(module_app = @app_title) { set_variables module_app } + + def initialize + super + @app_title = "seminar" + end + + def edit + + params[:controller] = "admin/seminars" + + @seminar_signup = SeminarSignup.find(params[:id]) + @seminar = SeminarMain.find(@seminar_signup.seminar_main_id) + + @form_index = 0 + + end + + def update + + @seminar_signup = SeminarSignup.find(params[:id]) + @seminar_signup.update_attributes(seminar_signup_params) + + if !params[:seminar_signup_values].nil? + params[:seminar_signup_values].each_with_index do |r,i| + field_value = r.last[:id].present? + @custom_field_value = SeminarSignupValue.put_field_values(@seminar_signup, r.last, r.last[:id], field_value) + end + end + + redirect_to "/admin/seminars/#{@seminar_signup.seminar_main_id}/seminar_signup" + + end + + def destroy + @seminar_signup = SeminarSignup.find(params[:id]) + + @seminar_main_id = @seminar_signup.seminar_main_id + + @seminar_signup.destroy + + redirect_to "/admin/seminars/#{@seminar_main_id}/seminar_signup" + end + + private + + def seminar_signup_params + params.require(:seminar_signup).permit! + end +end diff --git a/app/controllers/admin/seminars_controller.rb b/app/controllers/admin/seminars_controller.rb new file mode 100644 index 0000000..ed71378 --- /dev/null +++ b/app/controllers/admin/seminars_controller.rb @@ -0,0 +1,194 @@ +# encoding: utf-8 +class Admin::SeminarsController < OrbitAdminController + + require 'axlsx' + + before_action ->(module_app = @app_title) { set_variables module_app } + before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy] + + def initialize + super + @app_title = "seminar" + end + + def filter_fields(categories) + { + :category=>categories.map{|c| {:title=>(c.title.blank? ? " " : c.title), :id=>c.id}} + } + end + + def index + @categories = @module_app.categories.enabled + @filter_fields = filter_fields(@categories) + @table_fields = [:category, 'seminar.title', 'seminar.event_during', 'seminar.signup_during', 'seminar.signup_count', 'seminar.export'] + + if !params[:sort].blank? + if params[:sort] == 'event_during' + sort = {:seminar_start_date.to_sym=>params[:order]} + elsif params[:sort] == 'signup_during' + sort = {:signup_start_date.to_sym=>params[:order]} + else + sort = {params[:sort].to_sym=>params[:order]} + end + else + sort = {:signup_start_date=>"desc"} + end + + @seminars = SeminarMain.all.order_by(sort).with_categories(filters("category")) + + @seminars = search_data(@seminars,[:title]).page(params[:page]).per(10) + + if request.xhr? + render :partial => "index" + end + + end + + def export + + @seminar = SeminarMain.find(params[:id]) + @seminar_signups = SeminarSignup.where(:seminar_main_id => params[:id]) + + respond_to do |format| + format.xlsx { + response.headers['Content-Disposition'] = 'attachment; filename="export.xlsx"' + } + end + + end + + def new + + @seminar = SeminarMain.new + + @seminar_items = SeminarItem.all + + end + + def create + + if !seminar_params['seminar_links_attributes'].nil? + seminar_params['seminar_links_attributes'].each do |idx,link| + seminar_params['seminar_links_attributes'].delete(idx.to_s) if link['url'].blank? + end + end + + seminar = SeminarMain.new(seminar_params) + + seminar.create_user_id = current_user.id + seminar.update_user_id = current_user.id + + seminar.save + + redirect_to params['referer_url'] + + end + + def edit + + @seminar_items = SeminarItem.all + + end + + def update + + + params[:seminar_main][:registration_status] = (params[:seminar_main][:registration_status] ? params[:seminar_main][:registration_status] : []) + + uid = params[:id].split('-').last + @seminar = SeminarMain.find_by(:uid=>uid) + + if params[:seminar_main][:seminar_signup_fields] + seminar_params[:seminar_signup_fields].each do |a| + @field_name = 'seminar_main' + field_status = a.last[:id].present? + @attribute_field = SeminarSignupField.add_seminar_signup_field(@seminar, a.last, a.last[:id], field_status) + @attribute = @seminar + end + flash.now[:notice] = "Updated Fields" + @seminar.seminar_signup_fields.each{|t| t.destroy if t["to_delete"] == true} + + redirect_to admin_seminars_path + + else + + if !seminar_params['seminar_links_attributes'].nil? + seminar_params['seminar_links_attributes'].each do |idx,link| + seminar_params['seminar_links_attributes'].delete(idx.to_s) if link['url'].blank? + end + end + + @seminar.update_user_id = current_user.id + + if @seminar.update_attributes(seminar_params) + @seminar.seminar_signup_fields.each{|t| t.destroy if t["to_delete"] == true} + redirect_to params['referer_url'] + else + flash.now[:error] = t('update.error.category') + render action: :edit + end + end + + end + + def set_write_off + + @seminar.donation_write_off_status = true + @seminar.save + + redirect_to "/admin/seminars?page=#{params['page']}" + + end + + def destroy + + @seminar.destroy + redirect_to "/admin/seminars" + + end + + def seminar_signup_field + @field_name = 'seminar_main' + @attribute = SeminarMain.find(params[:id]) + @attribute_type = 'seminar' + @class = 'seminars' + end + + def seminar_signup + + if !params[:search].blank? + @seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id, :name=>params[:search]).page(params[:page]).per(10) + else + @seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id).page(params[:page]).per(10) + end + + end + + def edit_seminar_signup + @seminar_signup = SeminarSignup.find(params[:id]) + @seminar = SeminarMain.find(@seminar_signup.seminar_main_id) + end + + def delete_seminar_signup + + @seminar_signup = SeminarSignup.find(params[:id]) + + @seminar_id = @seminar_signup.seminar_main_id + + @seminar_signup.destroy + + redirect_to "/admin/seminars/@seminar_id.to_s/seminar_signup" + end + + private + + def set_seminar + @seminar = SeminarMain.find(params[:id]) + end + + def seminar_params + params.require(:seminar_main).permit! + end + + +end diff --git a/app/controllers/seminars_controller.rb b/app/controllers/seminars_controller.rb new file mode 100644 index 0000000..99d62e3 --- /dev/null +++ b/app/controllers/seminars_controller.rb @@ -0,0 +1,317 @@ +class SeminarsController < ApplicationController + + helper MemberHelper + include Admin::SeminarsHelper + + def index + + time_now = Time.now + + seminars = SeminarMain.filter_by_categories.desc(:signup_start_date).page(OrbitHelper.params[:page_no]).per(OrbitHelper.page_data_count) + + { + "seminars" => seminars, + 'time_now' => time_now, + "total_pages" => seminars.total_pages + } + + end + + def show_privacy + + params = OrbitHelper.params + + seminar = SeminarMain.find_by(uid: params[:uid]) + + seminar_agreement = SeminarAgreement.first + + { + 'seminar' => seminar, + "seminar_agreement" => seminar_agreement + } + + end + + def show_data + + time_now = Time.now + + session = OrbitHelper.get_session + + params = OrbitHelper.params + + seminar = SeminarMain.find_by(uid: params[:uid]) + + if !seminar.registration_status.blank? and seminar.signup_start_date <= time_now and ( seminar.signup_end_date.nil? or seminar.signup_end_date+1 >= time_now ) + sign_up = ('' + t('seminar.signup') + '').html_safe + elsif seminar.registration_status.blank? + sign_up = t('seminar.sign_up_not_open') + elsif seminar.signup_start_date > time_now + sign_up = t('seminar.sign_up_not_yet') + else + sign_up = t('seminar.sign_up_overdue') + end + + if !seminar.registration_status.blank? and seminar.registration_status.include?('C') and seminar.contribute_start_date <= time_now and ( seminar.contribute_end_date.nil? or seminar.contribute_end_date+1 >= time_now ) + if !session[:seminar_signup_id].blank? + if session[:seminar_main_id] == seminar.id + contribute_action = ('' + t('seminar_signup.uploads') + '').html_safe + else + contribute_action = ('' + t('seminar_signup.con_login') + '').html_safe + end + else + contribute_action = ('' + t('seminar_signup.con_login') + '').html_safe + end + end + + + + { + 'seminar' => seminar, + 'sign_up' => sign_up, + 'contribute_action' => contribute_action, + 'time_now' => time_now, + 'contribute_time_range' => SeminarMain.time_range(seminar.contribute_start_date, seminar.contribute_end_date), + 'sign_up_time_range' => SeminarMain.time_range(seminar.signup_start_date, seminar.signup_end_date), + 'seminar_time_range' => SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) + } + + end + + def show + + params = OrbitHelper.params + + module_app = ModuleApp.where(:key => "seminar").first + + categories = module_app.categories + + seminar = SeminarMain.find_by(uid: params[:uid]) + + seminar_signup = SeminarSignup.new + + time_now = Time.now + + { + "seminar" => seminar, + "seminar_signup" => seminar_signup, + "time_now" => time_now + } + + end + + def check_email + + params = OrbitHelper.params + + if !params[:email].blank? + count = SeminarSignup.where(:email => params[:email], :seminar_main_id => params[:no]).count + + result = count > 0 ? '已存在' : '可使用' + else + result = '請輸入email' + end + + { + "result" => result + } + + end + + def check_availability + + params = OrbitHelper.params + + response = {} + case params[:type] + when "seminar_signup_email" + + response["success"] = SeminarSignup.where(:email => params[:value], :seminar_main_id => params[:no]).count > 0 ? false : true + end + render :json => response.to_json + end + + def create + + @signup = SeminarSignup.where(email: params[:seminar_signup][:email], seminar_main_id: params[:seminar_signup][:seminar_main_id] ).first + + @seminar_signup = SeminarSignup.new(seminar_signup_params) + + if @signup.blank? && @seminar_signup.save + # if gotcha_valid? && @seminar_signup.save + + if !params[:seminar_signup_values].nil? + params[:seminar_signup_values].each_with_index do |r,i| + field_value = r.last[:id].present? + @custom_field_value = SeminarSignupValue.put_field_values(@seminar_signup, r.last, r.last[:seminar_signup_field_id], field_value) + end + end + + redirect_to "#{params[:referer_url]}/?method=signup_ok" + else + if !@signup.blank? + redirect_to "#{params[:referer_url]}", :notice => 'mail已存在' + else + redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed') + end + end + + end + + def signup_ok + end + + def add_file_proc + + @con = SeminarSignupContribute.new(seminar_signup_contribute_params) + + if @con.save + + redirect_to "#{params[:referer_url]}/?method=con_upload" + else + redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed') + end + + end + + def update + + @con = SeminarSignupContribute.find(params[:seminar_signup_contribute][:id]) + @con.update_attributes(seminar_signup_contribute_params) + + if @con.save + + redirect_to "#{params[:referer_url]}/?method=con_upload" + else + redirect_to "#{params[:referer_url]}", :notice => t('recaptcha.errors.verification_failed') + end + + end + + def del_file + + con = SeminarSignupContribute.find(params[:con_no]) + + # seminar_signup = SeminarSignup.find_by(_id: con.seminar_signup_id ) + # seminar = SeminarMain.find_by(_id: seminar_signup.seminar_main_id ) + + con.destroy + + redirect_to "#{params[:referer_url]}/?method=con_upload" + + end + + def add_file + + session = OrbitHelper.get_session + + if !session[:seminar_main_id].blank? + + seminar = SeminarMain.find_by(id: session[:seminar_main_id]) + + seminar_signup = SeminarSignup.find_by(_id: session[:seminar_signup_id], seminar_main_id: session[:seminar_main_id] ) + + else + + seminar = {} + seminar_signup = {} + + end + + con = SeminarSignupContribute.new + + { + 'con' => con, + 'seminar' => seminar, + 'seminar_signup' => seminar_signup + } + + end + + def edit_file + + params = OrbitHelper.params + + con = SeminarSignupContribute.find(params[:con_no]) + + { + 'con' => con + } + + end + + def con_upload + + time_now = Time.now + + session = OrbitHelper.get_session + + if !session[:seminar_main_id].blank? + + seminar = SeminarMain.find_by(id: session[:seminar_main_id]) + + seminar_signup = SeminarSignup.find_by(_id: session[:seminar_signup_id], seminar_main_id: session[:seminar_main_id] ) + + else + + seminar = {} + seminar_signup = {} + + end + + { + 'time_now' => time_now, + 'seminar' => seminar, + 'seminar_signup' => seminar_signup + } + + end + + def con_logout + + # redirect_to page_for_seminar_url + + end + + def con_login + + time_now = Time.now + + params = OrbitHelper.params + + seminar = SeminarMain.find_by(uid: params[:uid]) + + { + 'seminar' => seminar, + 'time_now' => time_now + } + + end + + def con_login_proc + + seminar = SeminarMain.find_by(id: params[:seminar_signup][:seminar_main_id]) + + @seminar_signup = SeminarSignup.where(:status=>'C', :email=> params[:user_name], :password => params[:password], :seminar_main_id => params[:seminar_signup][:seminar_main_id]).first + + if !@seminar_signup.blank? + + session[:seminar_signup_id] = @seminar_signup.id + session[:seminar_main_id] = @seminar_signup.seminar_main_id + + redirect_to "#{params[:referer_url]}/?method=con_upload" + else + redirect_to "#{params[:referer_url]}/?method=con_login", :notice => '登入失敗' + end + + end + + def seminar_signup_params + params.require(:seminar_signup).permit! + end + + def seminar_signup_contribute_params + params.require(:seminar_signup_contribute).permit! + end + +end \ No newline at end of file diff --git a/app/helpers/admin/seminars_field_helper.rb b/app/helpers/admin/seminars_field_helper.rb new file mode 100644 index 0000000..9c0eb8d --- /dev/null +++ b/app/helpers/admin/seminars_field_helper.rb @@ -0,0 +1,451 @@ +module Admin::SeminarsFieldHelper + + include ActionView::Helpers::FormTagHelper + include ActionView::Helpers::FormOptionsHelper + include ActionView::Helpers::DateHelper + include ActionView::Helpers::TagHelper + include ActionView::Helpers::RenderingHelper + include ActionView::Context + include OrbitBasis::RenderAnywhere + + include OrbitFormHelper + + def block_helper(member,index,disable = false,attribute_type=nil,signup=nil, to_require=true) + unless self.disabled + @index = index + @require = to_require + @markup_options = markup_options.merge(:disabled=>disable, :required => to_require) + @member = member + @attribute_value = @member.get_value_from_field_id(id,signup) + @attribute_type = attribute_type + @new_attribute = @attribute_value.nil? + @attribute_value = @attribute_value || signup.seminar_signup_values.build(seminar_signup_field_id: id) + @prefiled_value = @attribute_value.value rescue nil + return instance_eval("render_#{markup}") rescue "" + end + end + + def lang_tab(str,lang) + content_tag(:div,str,:class=>"tab-pane fade",:id=>(get_field_name_base+"tab_#{lang}")) + end + + def render_address + control_group_wrapper do |key,value| + value = (can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value) rescue nil + key_field = can_muti_lang_input? ? "[#{key}]" : "" + place_holder= @panel_setting["placeholder"][key] rescue '' + # result = text_area_tag(get_field_name_base + key_field, value,@markup_options.merge({:placeholder=>place_holder,:for=>key})) + result = text_field_tag(get_field_name_base + key_field, value,@markup_options.merge({:placeholder=>place_holder,:for=>key})) + + add_ext= @attribute_value.address_key[key] rescue {} + + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][county]",add_ext["county"],:class=>"county_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][street_address]",add_ext["street_address"],:class=>"street_address_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][city]",add_ext["city"],:class=>"city_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][zip]",add_ext["zip"],:class=>"zip_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][country]",add_ext["country"],:class=>"country_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][indicator]",add_ext["indicator"],:class=>"indicator_#{key}") + end + end + + def render_checkbox + @prefiled_value ||=[] + control_group_wrapper do + a = self.typeE[:option_list].collect do |key,value| + label_tag(key,check_box_tag(get_field_name_base+"[#{key}]", true , (@prefiled_value.include?(key) ? true : false), { :id=>"seminar_signup_values_#{self.id}"})+value[I18n.locale.to_s],@markup_options.merge(:class=>"checkbox inline")) + end.join rescue "" + end + end + + def render_date + d = DateTime.now() + + if date_is_range? + # fill_from = @attribute_value.get_date(:from) rescue nil + # fill_to = @attribute_value.get_date(:to) rescue nil + control_group_wrapper do + + case self.typeC['format'] + when 'format1' + fill_from = (@prefiled_value && @prefiled_value["from"] ) ? @prefiled_value["from"] : d.strftime("%Y/%m/%d %H:%M") + fill_to = (@prefiled_value && @prefiled_value["to"] ) ? @prefiled_value["to"] : d.strftime("%Y/%m/%d %H:%M") + buf = datetime_picker(get_field_name_base+'[from]', fill_from, 'yyyy/MM/dd hh:mm', true) + buf << ' ~ ' + buf << datetime_picker(get_field_name_base+'[to]', fill_to, 'yyyy/MM/dd hh:mm', true) + when 'format2' + fill_from = (@prefiled_value && @prefiled_value["from"] ) ? @prefiled_value["from"] : d.strftime("%Y/%m/%d") + fill_to = (@prefiled_value && @prefiled_value["to"] ) ? @prefiled_value["to"] : d.strftime("%Y/%m/%d") + buf = datetime_picker(get_field_name_base+'[from]', fill_from, 'yyyy/MM/dd') + buf << ' ~ ' + buf << datetime_picker(get_field_name_base+'[to]', fill_to, 'yyyy/MM/dd') + when 'format3' + fill_from = (@prefiled_value && @prefiled_value["from"] ) ? @prefiled_value["from"] : d.strftime("%Y/%m") + fill_to = (@prefiled_value && @prefiled_value["to"] ) ? @prefiled_value["to"] : d.strftime("%Y/%m/") + buf = datetime_picker(get_field_name_base+'[from]', fill_from, 'yyyy/MM') + buf << ' ~ ' + buf << datetime_picker(get_field_name_base+'[to]', fill_to, 'yyyy/MM') + when 'format4' + fill_from = (@prefiled_value && @prefiled_value["from"] ) ? @prefiled_value["from"] : d.strftime("%Y") + fill_to = (@prefiled_value && @prefiled_value["to"] ) ? @prefiled_value["to"] : d.strftime("%Y") + buf = datetime_picker(get_field_name_base+'[from]', fill_from, 'yyyy') + buf << ' ~ ' + buf << datetime_picker(get_field_name_base+'[to]', fill_to, 'yyyy') + end + + # buf = date_select(get_field_name_base+'[from]',nil,@markup_options.merge(:default=>fill_from),:class=>"input-small") + # buf << ' ~ ' + # buf << date_select(get_field_name_base+'[to]',nil,@markup_options.merge(:default=>fill_to),:class=>"input-small") + buf + end + else + # @prefiled_value = @attribute_value.get_date + # @prefiled_value = @attribute_value.get_date + + case self.typeC['format'] + when 'format1' + tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d %H:%M")), 'yyyy/MM/dd hh:mm', true) + when 'format2' + tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m/%d")), 'yyyy/MM/dd') + when 'format3' + tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y/%m")), 'yyyy/MM') + when 'format4' + tmp = datetime_picker(get_field_name_base, (@prefiled_value ? @prefiled_value : d.strftime("%Y")), 'yyyy') + end + + control_group_wrapper{tmp} + # control_group_wrapper{date_select(get_field_name_base,nil,@markup_options.merge(:default=>@prefiled_value),:class=>"input-small")} + + end + end + + def seminar_datetime_picker(object_name, value, format, time=false) + content_tag :div, :class => "input-append datetimepick", "data-date-format"=>format, "data-picktime"=>"#{time}" do + concat text_field_tag(object_name, value, :placeholder=>format) + concat (content_tag :span, :class => 'add-on clearDate' do + content_tag :i, nil, :class => 'icons-cross-3' + end) + concat (content_tag :span, :class => 'add-on iconbtn' do + content_tag :i, nil, 'data-time-icon' => 'icons-clock', 'data-date-icon' => 'icons-calendar', :class=>"icons-calendar" + end) + end + end + + def render_date_durnation #Need re-write low priority + + end + + def render_radio_button + @prefiled_value ||=[] + control_group_wrapper do + self.typeE[:option_list].collect do |key,value| + label_tag(key,radio_button_tag(get_field_name_base, key , (@prefiled_value.include?(key) ? true : false), {:required=>@require})+value[I18n.locale.to_s],@markup_options.merge(:class=>"radio inline")) + end.join + end + end + + def render_select + prompt = @panel_setting["initial"][I18n.locale.to_s] rescue nil + @markup_options.merge!(:prompt => prompt) unless prompt.nil? + control_group_wrapper{select_tag( get_field_name_base,options_for_select(self.typeB["option_list"].collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue "" + end + + def render_text_area + control_group_wrapper do |key,value| + value = can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value + key = can_muti_lang_input? ? "[#{key}]" : "" + place_holder= @panel_setting["placeholder"][I18n.locale.to_s] rescue '' + text_area_tag(get_field_name_base + key, value,@markup_options.merge(:placeholder=>place_holder)) + end + end + + def render_text_field + a = control_group_wrapper do |key,value| + add_more_blank = can_add_more ? "[]" : "" + key_field = can_muti_lang_input? ? "[#{key}]" : "" + place_holder= @panel_setting["placeholder"][key] rescue '' + text_field_tag([get_field_name_base,add_more_blank,key_field].join, value,@markup_options.merge(:placeholder=>place_holder)) + end + end + + def date_is_range? + is_range = "false" + data = get_data + if !data.nil? + is_range = data['is_range'] if data.has_key? "is_range" + end + is_range == "true" + end + +protected + + def valid_locales + site = Site.first + [I18n.locale]+(site.valid_locales-[I18n.locale]) + end + + def lang_panel_tabbable_wrapper(add_more_params,&block) + add_more_counter = '' + + if self.markup=='text_area' #or self.markup=='address' + + tmp1 = valid_locales.collect do |key| + value = @prefiled_value[key] rescue nil + # div_class_ary = ["tab-pane" ,"fade","#{get_pairing_tab_class({})}_#{key}"] + div_class_ary = ["tab-pane" ,"fade"] + + div_id = "#{get_pairing_tab_class({})}_#{key}" + + if can_add_more + add_more_value = add_more_params[0][:value] + add_more_counter = add_more_params[0][:counter] + value = add_more_value[key] rescue nil + div_class_ary << "add_more_item_#{add_more_counter}" + end + + div_class = div_class_ary.join(" ") + div_class << (key == I18n.locale ? " active in" : '') + content_tag(:div,yield(key,value), :id=>div_id,:class=>div_class) + end# of VALID_LOCALES.collect for tabed input + + + tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do + buff2 = valid_locales.each.collect do |key| + # link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}" + link_entry_ary = ["##{get_pairing_tab_class({})}","_#{key}"] + link_entry_ary << ".add_more_item_#{add_more_counter}" if can_add_more + link_entry = link_entry_ary.join + link_to(I18n.t(key),link_entry,:data=>{:toggle=>"tab"},:class=>"btn #{(key == I18n.locale ? "active" : nil)}",:for=>key) + end # of VALID_LOCALES.collect for tabs + + buff2 << link_to((content_tag :i,'',:class=>'icon-edit'),"##{get_pairing_tab_class({})}_m_window", :role=>"button",:class=>'btn',:data=>{:toggle=>"modal"}) if self.markup == 'address' + buff2 << link_to((content_tag :i,'',:class=>'icon-trash'),"#",:class=>"btn remove-input") if self.add_more + buff2.join.html_safe + end # of content ul + + + tmp = content_tag :div,:class=> "tab-content textarea-lang" do + tmp2 << tmp1.join('').html_safe + end + + else + + # tmp = content_tag :div,:class=> (add_more || self.markup=='address') ? "input-append" : "tab-content" do + tmp1 = + content_tag :div,:class=> "tab-content" do + + buff = valid_locales.collect do |key| + value = @prefiled_value[key] rescue nil + # div_class_ary = ["tab-pane" ,"fade","#{get_pairing_tab_class({})}_#{key}"] + div_class_ary = ["tab-pane" ,"fade"] + + div_id = "#{get_pairing_tab_class({})}_#{key}" + + + if can_add_more + add_more_value = add_more_params[0][:value] + add_more_counter = add_more_params[0][:counter] + value = add_more_value[key] rescue nil + div_class_ary << "add_more_item_#{add_more_counter}" + end + + div_class = div_class_ary.join(" ") + div_class << (key == I18n.locale ? " active in" : '') + content_tag(:div,yield(key,value), :id=>div_id,:class=>div_class) + end# of VALID_LOCALES.collect for tabed input + + buff.join('').html_safe + + end + + tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do + buff2 = valid_locales.each.collect do |key| + # link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}" + link_entry_ary = ["##{get_pairing_tab_class({})}","_#{key}"] + link_entry_ary << ".add_more_item_#{add_more_counter}" if can_add_more + link_entry = link_entry_ary.join + link_to(I18n.t(key),link_entry,:data=>{:toggle=>"tab"},:class=>"btn #{(key == I18n.locale ? "active" : nil)}",:for=>key) + end # of VALID_LOCALES.collect for tabs + + buff2 << link_to((content_tag :i,'',:class=>'icon-edit'),"#address-field", :role=>"button",:class=>'btn',:data=>{:toggle=>"modal"}) if self.markup == 'address' + buff2 << link_to((content_tag :i,'',:class=>'icon-trash'),"#",:class=>"btn remove-input") if self.add_more + buff2.join.html_safe + end # of content ul + + + + tmp = content_tag :div,:class=> "input-append" do + tmp1 << tmp2 + end + + end + + end + + + def controls_wrapper(*add_more_params,&block) + result = '' + add_more_counter = "" + + if can_add_more + add_more_counter = add_more_params[0][:counter] + add_more_value = add_more_params[0][:value] + end + + + + if can_muti_lang_input? + result << lang_panel_tabbable_wrapper(add_more_params,&block) + result << gen_modal_dialog if self.markup == "address" + + # result << add_more_unt if can_add_more + else #cross lang field + + case can_add_more + when true + value = add_more_params[0][:value] + result << content_tag(:div,:class=>"input-append"){yield(nil,value) + link_to((content_tag :i,'',:class=>'icon-trash'),"#",:class=>"btn remove-input") } + # result << add_more_unt + else + value = @prefiled_value + result << yield(nil,value) + end + + + end + + result.html_safe + + end # of def controls_wrapper(&block) + + def control_group_wrapper(&block) + div_class = can_muti_lang_input? ? "col-sm-10 controls" : "col-sm-10 controls" + # div_class = can_muti_lang_input? ? "control-group language-swich" : "control-group" + result ="" + + case self.markup + + when "text_field" + + if can_add_more + + multipleInputs = + content_tag(:div,:class=>"add-target") do + @attribute_value.add_more_counter.times.collect do |t| + controls_wrapper(:value=>(@prefiled_value[t] rescue nil),:counter=>t,&block) + end.join('').html_safe # of add_more fields + end + + + temp = content_tag(:div, multipleInputs + add_more_unt, :class=>'add-input') + + result = form_label + content_tag(:div,temp,:class=>div_class) + + # result = label + multipleInputs + add_more_unt + # result = label + 一堆的輸入框(要用 multipleInput editMore 包起來) + add_more btn + hidden_fields + else + result = form_label + content_tag(:div,controls_wrapper(&block),:class=>div_class) + + end + + when "address" + + # address = content_tag :div,:class=>"multipleInput editMore" do + address = content_tag :div,:class=>"col-sm-10" do + form_label + content_tag(:div, controls_wrapper(&block), :class=>'add-input') + end # of div multipleInput editMore + + result = address + + else + result = form_label + content_tag(:div,controls_wrapper(&block),:class=>div_class) + + end + + result << end_block + result.html_safe + + end + + + def add_more_unt + temp_field_name = get_basic_field_name_base + '[temp]' + add_more = content_tag :p,:class=> 'add-btn' do + content = link_to (content_tag :i,I18n.t(:add),:class=>"icon-plus"),"#","data-roles"=>"role_a",:class=>"trigger #{can_muti_lang_input? ? 'textLengInput' : 'textInput' } btn btn-small btn-primary" + content << hidden_field_tag("#{temp_field_name}[count]",@attribute_value.add_more_counter ,:class=>"list_count") + content << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name") + content + end # of div + # add_more = content_tag :div,:class=> 'controls' do + # content_tag :span,:class=> 'help-block' do + # content = link_to (content_tag :i,I18n.t(:add),:class=>"icon-plus-sign"),"#",:class=>'addinput' + # content << hidden_field_tag("#{temp_field_name}[count]",@attribute_value.add_more_counter ,:class=>"list_count") + # content << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name") + # content + # end # of span + # end # of div + end + + def end_block + if @new_attribute + hidden_field_tag(get_basic_field_name_base+"[seminar_signup_field_id]",id,:for=>"field_#{@index}") + else + hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}") + end + end + + def add_more_tab(mode,counter,key) + case mode + when :input_field + get_pairing_tab_class(:suffix=>['','tab'+counter.to_s,key].join('-')) + when :tab_btn + ".#{get_pairing_tab_class(:suffix=>['','tab'+counter.to_s,key].join('-'))}" + end + end + + def get_pairing_tab_class(opts) + prefix = opts[:prefix] + suffix = opts[:suffix] + str = get_basic_field_name_base.gsub("[","_").gsub("]",'') + str = prefix.nil? ? str : prefix+ str + suffix.nil? ? str : str + suffix + end + + def get_basic_field_name_base + "seminar_signup_values[#{@index}]" + end + + def get_field_name_base + get_basic_field_name_base + "[value]" + end + + def form_label + label_tag(key,(!@require.blank? ? '*'+title : title),:class=>"col-sm-2 control-label muted") + end + + def can_muti_lang_input? + if self.markup == "address" + return true + else + LIST[:markups][markup]["muti_lang_input_supprt"] and !(get_data["cross_lang"] == "true") + end + end + + def can_add_more + if self.markup == "address" + return false + else + add_more + end + end + + def gen_modal_dialog + render_anywhere("shared/attribute_field/address_modal_dialog",{ + :field_name=>title, + :html_id=>"address-field", + :btn_class => "#{get_pairing_tab_class({})}", + :field_name_basic => get_basic_field_name_base + } + ) + end + +end \ No newline at end of file diff --git a/app/helpers/admin/seminars_helper.rb b/app/helpers/admin/seminars_helper.rb new file mode 100644 index 0000000..73825f4 --- /dev/null +++ b/app/helpers/admin/seminars_helper.rb @@ -0,0 +1,33 @@ +module Admin::SeminarsHelper + def page_for_seminar(seminar) + ann_page = nil + pages = Page.where(:module=>'seminar') + + pages.each do |page| + if page.categories.count ==1 + if page.categories.include?(seminar.category.id.to_s) + ann_page = page + end + end + break if !ann_page.nil? + end + + if ann_page.nil? + pages.each do |page| + if page.categories.include?(seminar.category.id.to_s) + ann_page = page + end + break if !ann_page.nil? + end + end + + ann_page = pages.first if ann_page.nil? + request.protocol+(request.host_with_port+ann_page.url+'/'+seminar.to_param).gsub('//','/') rescue "/" + end + + def page_for_seminar_url + page = Page.where(:module => 'seminar').first + return request.protocol+(request.host_with_port+"/#{I18n.locale}#{page.url}").gsub('//','/') rescue "/" + # return "/#{I18n.locale}#{page.url}/#{seminar.to_param}" + end +end \ No newline at end of file diff --git a/app/helpers/admin/seminars_values_helper.rb b/app/helpers/admin/seminars_values_helper.rb new file mode 100644 index 0000000..7743617 --- /dev/null +++ b/app/helpers/admin/seminars_values_helper.rb @@ -0,0 +1,109 @@ +module Admin::SeminarsValuesHelper + def show_west_calender(from_to=nil) + case from_to + when :to + date = get_date(:to) + when :from + date = get_date(:from) + when nil + date = get_date + end + + # case self.member_profile_field["typeC"]["format"] + # when 'format1' # Y/M/D h:m + # date.strftime("%Y/%m/%d %H:%M") + # when 'format2' # Y/M/D + # date.strftime("%Y/%m/%d") + # when 'format3' # Y/M + # date.strftime("%Y/%m") + # when 'format4' # Y + # date.strftime("%Y") + # end # of case west cal format + end + + def show_minguo_calendar(from_to=nil) + get_minguo + + case from_to + when :to + date = get_date(:to) + when :from + date = get_date(:from) + when nil + date = get_date + end + + @date = date.split('/') + date_year = @date[0].to_i + + year_str = "" + unless date_year == 1912 + m_year = (date_year - 1912).abs.to_s + I18n.t("date.minguo_calendar.year") + year_str = minguo_format_year(m_year) + end + get_minguo_year(from_to) + minguo_m_y_d_time(from_to) + end + + def get_minguo_year(from_to=nil) + case from_to + when :to + date = get_date(:to) + when :from + date = get_date(:from) + when nil + date = get_date + end + + @date = date.split('/') + date_year = @date[0].to_i + + m_year = (date_year - 1911).abs + year_end = I18n.t("date.minguo_calendar.year") + case + when date_year <1912 + I18n.t("date.minguo_calendar.before") + (m_year+1).to_s + year_end + when date_year ==1912 + I18n.t("date.minguo_calendar.first_year") + when date_year >1912 + I18n.t("date.minguo_calendar.after")+ (m_year).to_s + year_end + end # of case tw_calendar year + end + + def minguo_m_y_d_time(from_to=nil) + case from_to + when :to + date = get_date(:to) + when :from + date = get_date(:from) + when nil + date = get_date + end + @date = date.split('/') + + case self.seminar_signup_field["typeC"]["format"] + when 'format1' # Y/M/D h:m + "/#{@date[1]}/#{@date[2]}" + when 'format2' # Y/M/D + "/#{@date[1]}/#{@date[2]}" + when 'format3' # Y/M + + "/#{@date[1]}#{I18n.t("date.minguo_calendar.month")}"\ + when 'format4' # Y + '' + end # of case + end + + def get_date_by_format(from_to = nil) + case I18n.locale + when :zh_tw + case + when self.seminar_signup_field["typeC"]["calendar"] == "west_calendar" + show_west_calender(from_to) + when self.seminar_signup_field["typeC"]["calendar"] == "tw_calendar" + show_minguo_calendar(from_to) + end #case self.seminar_signup_field["typeC"]["calendar"] + when :en + show_west_calender(from_to) + end + end +end \ No newline at end of file diff --git a/app/models/seminar_agreement.rb b/app/models/seminar_agreement.rb new file mode 100644 index 0000000..f3a21ef --- /dev/null +++ b/app/models/seminar_agreement.rb @@ -0,0 +1,7 @@ +class SeminarAgreement + include Mongoid::Document + include Mongoid::Timestamps + + field :content, localize: true + +end \ No newline at end of file diff --git a/app/models/seminar_file.rb b/app/models/seminar_file.rb new file mode 100644 index 0000000..143296b --- /dev/null +++ b/app/models/seminar_file.rb @@ -0,0 +1,14 @@ +# encoding: utf-8 +class SeminarFile + + include Mongoid::Document + include Mongoid::Timestamps + + mount_uploader :file, AssetUploader + + field :description, localize: true + field :title, localize: true + + belongs_to :seminar_main + +end diff --git a/app/models/seminar_item.rb b/app/models/seminar_item.rb new file mode 100644 index 0000000..cfd1192 --- /dev/null +++ b/app/models/seminar_item.rb @@ -0,0 +1,12 @@ +class SeminarItem + include Mongoid::Document + include Mongoid::Timestamps + + field :title, localize: true + + belongs_to :seminar_main + + has_many :seminar_item_contents, :autosave => true, :dependent => :destroy + accepts_nested_attributes_for :seminar_item_contents, :allow_destroy => true + +end \ No newline at end of file diff --git a/app/models/seminar_item_content.rb b/app/models/seminar_item_content.rb new file mode 100644 index 0000000..5eba95a --- /dev/null +++ b/app/models/seminar_item_content.rb @@ -0,0 +1,15 @@ +# encoding: utf-8 +class SeminarItemContent + + include Mongoid::Document + include Mongoid::Timestamps + + field :content, localize: true + + field :create_user_id + field :update_user_id + + belongs_to :seminar_item + belongs_to :seminar_main + +end diff --git a/app/models/seminar_link.rb b/app/models/seminar_link.rb new file mode 100644 index 0000000..2009008 --- /dev/null +++ b/app/models/seminar_link.rb @@ -0,0 +1,25 @@ +# encoding: utf-8 +require 'uri' + +class SeminarLink + include Mongoid::Document + include Mongoid::Timestamps + + field :url + field :title, localize: true + + belongs_to :seminar_main + + before_validation :add_http + + validates :url, :presence => true, :format => /\A(http|https):\/\/(([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:[0-9]{1,5})?(\/.*)?\Z/i + + protected + + def add_http + unless self.url[/^http:\/\//] || self.url[/^https:\/\//] + self.url = 'http://' + self.url + end + end + +end \ No newline at end of file diff --git a/app/models/seminar_main.rb b/app/models/seminar_main.rb new file mode 100644 index 0000000..7b284ad --- /dev/null +++ b/app/models/seminar_main.rb @@ -0,0 +1,79 @@ +class SeminarMain + include Mongoid::Document + include Mongoid::Timestamps + + include OrbitModel::Impression + # encoding: utf-8 + include OrbitCategory::Categorizable + include Slug + + field :title, as: :slug_title, type: String, localize: true + field :speaker, localize: true + field :content, localize: true + field :act_place, localize: true + + field :seminar_start_date, :type => Date, :default => Time.now + field :seminar_end_date, :type => Date, :default => Time.now + + field :signup_start_date, :type => Date, :default => Time.now + field :signup_end_date, :type => Date, :default => Time.now + + field :contribute_start_date, :type => Date + field :contribute_end_date, :type => Date + + field :contribute_file_count, type: String + + field :registration_status , :type => Array #C: 投稿者 G:一般 + + field :create_user_id + field :update_user_id + + belongs_to :seminar_item + + has_many :seminar_links, :autosave => true, :dependent => :destroy + has_many :seminar_files, :autosave => true, :dependent => :destroy + has_many :seminar_item_contents, :autosave => true, :dependent => :destroy + has_many :seminar_signups, :autosave => true, :dependent => :destroy + has_many :seminar_signup_fields, :autosave => true, :dependent => :destroy + + accepts_nested_attributes_for :seminar_links, :allow_destroy => true + accepts_nested_attributes_for :seminar_files, :allow_destroy => true + accepts_nested_attributes_for :seminar_item_contents, :allow_destroy => true + accepts_nested_attributes_for :seminar_signups, :allow_destroy => true + accepts_nested_attributes_for :seminar_signup_fields, :allow_destroy => true + + + + def self.time_range(date1 = null, date2 = null) + + if !date1.blank? + + r = "#{date1.strftime('%Y-%m-%d')}" + + if date2 + r += " - #{date2.strftime('%Y-%m-%d')}" + else + r += " - #{I18n.t(:no_deadline)}" + end + + r + + end + + end + + def get_attribute_value(attribute_field, signup_id) + SeminarSignupValue.find_by(seminar_signup_field_id: attribute_field.id, seminar_signup_id: signup_id) + end + + def get_attribute_values(attribute_type=nil) + @attribute_values = attribute_type.seminar_signup_values rescue nil + end + + def get_value_from_field_id(field_id,attribute_type=nil) + values = get_attribute_values(attribute_type) + value = values.detect {|value| value.seminar_signup_field_id == field_id} rescue nil + value ? value : nil + end + +end diff --git a/app/models/seminar_signup.rb b/app/models/seminar_signup.rb new file mode 100644 index 0000000..983f365 --- /dev/null +++ b/app/models/seminar_signup.rb @@ -0,0 +1,27 @@ +# encoding: utf-8 +class SeminarSignup + + include Mongoid::Document + include Mongoid::Timestamps + + field :status + field :name + field :unit, localize: true + field :tel, type: String + field :phone, type: String + field :fax, type: String + field :email, type: String + field :address, localize: true + field :password + field :note, localize: true + + belongs_to :seminar_main + + has_many :seminar_signup_values + has_many :seminar_signup_contributes + + accepts_nested_attributes_for :seminar_signup_values, allow_destroy: true + accepts_nested_attributes_for :seminar_signup_contributes, allow_destroy: true + + +end diff --git a/app/models/seminar_signup_contribute.rb b/app/models/seminar_signup_contribute.rb new file mode 100644 index 0000000..1174cd3 --- /dev/null +++ b/app/models/seminar_signup_contribute.rb @@ -0,0 +1,14 @@ +class SeminarSignupContribute + + include Mongoid::Document + include Mongoid::Timestamps + + mount_uploader :file, AssetUploader + + field :description + field :title + + + belongs_to :seminar_signup + +end \ No newline at end of file diff --git a/app/models/seminar_signup_field.rb b/app/models/seminar_signup_field.rb new file mode 100644 index 0000000..cce01b9 --- /dev/null +++ b/app/models/seminar_signup_field.rb @@ -0,0 +1,160 @@ +class SeminarSignupField + include Mongoid::Document + include Mongoid::Timestamps + include Mongoid::Attributes::Dynamic + include ::AttributeFieldsHelper + include ::Admin::SeminarsFieldHelper + + field :key, type: String + field :af_count + field :title, type: String, localize: true + field :markup, default: "text_field" + field :option_list, type: Hash,default: {} + field :markup_options, type: Hash + field :built_in, type: Boolean, default: false + field :disabled, type: Boolean, default: false + field :to_delete, type: Boolean, default: false + + field :to_require,type: Boolean, default: true + + field :typeA, type: Hash, default: {cross_lang: false} + field :typeB, type: Hash, default: {} + field :typeC, type: Hash, default: {calendar: "west_calendar", format: "format3"} + field :typeD, type: Hash, default: {cross_lang: false} + field :typeE, type: Hash, default: {} + + belongs_to :seminar_main + has_many :seminar_signup_values, autosave: true, dependent: :destroy + before_save :check_option_list + + def markup_value + get_data["option_list"] + end + + def add_more + (get_data["add_more"] == "true" ? true : false) rescue false + end + + def locale + get_data["cross_lang"] == "true" ? false : true + end + + def self_defined_markup_options? + (self.seminar.method(self[:key].pluralize.to_sym) && self.seminar.method(self[:key].pluralize+"_for_"+markup)) rescue false + end + + def option_list + if self_defined_markup_options? + #Class need to have corresponding field and value agent + # Ex: For "status" the class must have field called "statuses" for the relation and "statuses_for_select" for the select function + method = self.seminar.method(self[:key].pluralize+"_for_"+markup) + return (method.call rescue {}) + elsif self[:option_list].nil? || (self[:option_list].empty?) + return {} + else + return self[:option_list] + end + end + + def markup_options=(var) + self[:markup_options] = (eval(var) rescue {}) + end + + def markup_options + if self[:markup_options].nil? + return {} + else + Hash[self[:markup_options].map{|key,val|[key.to_sym,val]}] rescue {} + end + + end + + def panel + panel = LIST[:markups][self[:markup]]["panel"] + end + + def get_data + self[panel] + end + + def typeA=(var) + check_add_more_convert(var) + check_cross_lang_convert(var,"typeA") + self["typeA"] = var + end + + def typeD=(var) + check_cross_lang_convert(var,"typeD") + self["typeD"] = var + end + + def is_built_in? + self.built_in + end + + def is_disabled? + self.disabled + end + + def self.add_seminar_signup_field(seminar,seminar_param, seminar_signup_field_id=nil,field_status) + @field_name = 'seminar' + if field_status.eql?(true) + @seminar_signup_field_counter = seminar.seminar_signup_fields.count rescue nil + @seminar_signup_field = self.find(seminar_signup_field_id) rescue nil + old_key = @seminar_signup_field.key + @seminar_signup_field.update(seminar_param) + @seminar_signup_field.save + attribute_values = @seminar_signup_field.seminar_signup_values + if attribute_values.count > 0 + attribute_values.each do |av| + av.key = seminar_param["key"] + av.save + end + end + @seminar_signup_field[:af_count] = @seminar_signup_field_counter + else + @seminar_signup_field_counter = seminar.seminar_signup_fields.count rescue nil + @seminar_signup_field = seminar.seminar_signup_fields.build(seminar_param) rescue nil + @seminar_signup_field.save + @seminar_signup_field[:af_count] = @seminar_signup_field_counter + end + return @seminar_signup_field + end + + protected + + def check_cross_lang_convert(var,field) + if self[field]["cross_lang"] != var["cross_lang"] + case var["cross_lang"] + when "true" #from no-add_more to add_more + cross_lang_convert(:to_cross_lang) + else #from add_more to no-add_more + cross_lang_convert(:to_no_cross_lang) + end # of case + end # of if + end + + def check_add_more_convert(var) + if self["typeA"]["add_more"] != var["add_more"] + case var["add_more"] + when "true" #from no-add_more to add_more + add_more_convert(:to_add_more) + else #from add_more to no-add_more + add_more_convert(:to_no_add_more) + end # of case + end # of if + end + + def cross_lang_convert(opt) + + end + + def check_option_list + self[:option_list] = self[panel]["option_list"] rescue nil + end + + def add_more_convert(opt) + + end + +end \ No newline at end of file diff --git a/app/models/seminar_signup_value.rb b/app/models/seminar_signup_value.rb new file mode 100644 index 0000000..9175137 --- /dev/null +++ b/app/models/seminar_signup_value.rb @@ -0,0 +1,213 @@ +class SeminarSignupValue + include Mongoid::Document + include Mongoid::Timestamps + include Mongoid::Attributes::Dynamic + include ::AttributeValuesHelper + include ::Admin::SeminarsValuesHelper + + field :key, type: String + + belongs_to :seminar_signup_field + belongs_to :seminar_signup + + before_save :check_key + before_save :data_proc + + def add_more_counter + index_max = self["val"].count rescue 0 + index_max == 0 ? 1 : index_max + end + + def value(index = nil) + site = Site.first + result = case self.seminar_signup_field.markup + when 'text_field','text_area' + if self.seminar_signup_field.add_more and (self.seminar_signup_field.markup == "text_field") + index.nil? ? self["val"] : self["val"][index] + else + self.seminar_signup_field.get_data["cross_lang"] =="true" ? self["val"] : Hash[site.valid_locales.collect{|lang| [lang,self[lang.to_sym]]}] + end + when 'select','radio_button','address' + self["val"] + when 'date' + if !self["val"].blank? and !self["val"]['(1i)'].blank? + "#{self["val"]['(1i)']}/#{self["val"]['(2i)']}/#{self["val"]['(3i)']}" + else + self["val"] + end + when 'checkbox' + self["val"] + end #end of case self.seminar_signup_field.markup + end + + def value=(value) + #save everything to temp_data waiting for futher process + self[:temp_data] = value + end + + def get_field_value + if (self.seminar_signup_field.markup.eql?("text_field") || self.seminar_signup_field.markup.eql?("text_area")) + field_value = self.value[I18n.locale] + elsif (self.seminar_signup_field.markup.eql?("select") || self.seminar_signup_field.markup.eql?("radio_button")) + field_value = self.seminar_signup_field.markup_value["#{self.value}"][I18n.locale] rescue nil + elsif self.seminar_signup_field.markup.eql?("address") + field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ') + elsif self.seminar_signup_field.markup.eql?("date") + case self.seminar_signup_field.typeC['format'] + when 'format1' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format2' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format3' + field_value = self.value.to_date.strftime("%Y/%m") + when 'format4' + field_value = self.value.to_date.strftime("%Y") + end + elsif self.seminar_signup_field.markup.eql?("checkbox") + field_value = self.value.map {|v| self.seminar_signup_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil + end + + field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "#{field_value}" : field_value + field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "#{field_value}" : field_value + + if !field_value.blank? + { + "key" => self.seminar_signup_field.key, + "title" => self.seminar_signup_field.title, + "value" => field_value, + "val" => field_value = self.value + } + else + { + "key" => self.seminar_signup_field.key, + "title" => self.seminar_signup_field.title, + "value" => "", + "val" => field_value = self.value + } + end + end + + def get_value_by_locale(locale,add_more_index=nil) + case self.seminar_signup_field.markup + when "text_field" + case self.seminar_signup_field.add_more + when true + if self.seminar_signup_field.locale + add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale] + else + add_more_index.nil? ? self.value.join(",") : self.value(add_more_index) + end + + when false + self.seminar_signup_field.locale ? self[locale.to_s] : self.value + end + + when "select" + markup_values = self.seminar_signup_field.self_defined_markup_options? ? self.seminar_signup_field.markup_value : self.seminar_signup_field.markup_value + markup_values[self.value][locale.to_s] rescue 'NoData' + + when "text_area" + self.seminar_signup_field.locale ? self[locale.to_s] : self.value + + when "date" + if self.seminar_signup_field.date_is_range? + get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to) + # self.value["from"] + ' ~ ' + self.value["to"] + else + get_date_by_format + # self.value + end + + when "address" + self.value[locale.to_s] + + when "radio_button" + markup_values = self.seminar_signup_field.markup_value + markup_values[self.value][locale.to_s] + + when "checkbox" + markup_values = self.seminar_signup_field.markup_value + self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",") + when "date_durnation" + self.value + + else + self.seminar_signup_field.locale ? self[locale.to_s] : self.value + end + end + + def get_date(item = nil) + case item + when :from + # data = self[:val]["from"] + data = self.value["from"] + when :to + # data = self[:val]["to"] + data = self.value["to"] + when nil + # data = self[:val] + data = self.value + end + + # Date.new(data["(1i)"].to_i,data["(2i)"].to_i,data["(3i)"].to_i) rescue nil + end + + def self.put_field_values(member, field_value_param, field_value_id=nil,field_value_status) + if field_value_status.eql?(true) + @seminar_signup_field_value = self.find(field_value_id) rescue nil + @seminar_signup_field_value.update(field_value_param) rescue nil + @seminar_signup_field_value.save rescue nil + else + @seminar_signup_field_value = member.seminar_signup_values.build(field_value_param) rescue nil + @seminar_signup_field_value.save + end + return @seminar_signup_field_value + end + + +protected + +def unset_all_lang_values + VALID_LOCALES.each{|t| self.unset t} + end + + def data_proc + unless self[:temp_data].nil? + case self.seminar_signup_field.markup + when "address" + self["val"] = self["temp_data"] + when 'text_field','text_area' + if self.seminar_signup_field.add_more + self["val"] = self["temp_data"] + else # if not add_more + if self.seminar_signup_field.can_muti_lang_input? + self[:temp_data].each do |key,val| + self[key] = val + end if(!self.seminar_signup_field.get_data[:cross_lang]) + else + self["val"] = self[:temp_data] + end + end # of self.seminar_signup_field.add_more + + when 'select','date','radio_button' + self["val"] = self[:temp_data] + when 'checkbox' + self["val"] = self[:temp_data].keys + end #end of case self.seminar_signup_field.markup + end # of self[:temp_data].nil? + self.unset('temp_data') + self.unset('temp') + end #of data_proc + + def check_key + self.key = self.seminar_signup_field.key + end + + def method_missing(*field) + if field.size < 1 + self[field[0]] + else + self[(field[0].to_s.delete "=")] = field[1] + end + end +end diff --git a/app/views/admin/seminar_agreements/index.html.erb b/app/views/admin/seminar_agreements/index.html.erb new file mode 100644 index 0000000..a2014a9 --- /dev/null +++ b/app/views/admin/seminar_agreements/index.html.erb @@ -0,0 +1,63 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/main-list" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/module-area" %> +<% end %> + +

<%= t('seminar.seminar') %>

+ +<%= form_for @seminar_agreement, url: @url, html: {class: "form-horizontal main-forms"} do |f| %> +
+ + +
+ + + + + + +
+ + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
"> + +
+ +
+
+ <%= f.fields_for :content_translations do |f| %> + <%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@seminar_agreement.content_translations[locale] rescue nil) %> + <% end %> +
+
+
+ +
+ + <% end %> + +
+ +
+ + +
+ <%= get_referer_url[:action] rescue "" %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + + <%= link_to t('cancel'), admin_seminars_path, :class=>"btn" %> +
+ +
+ +<% end %> diff --git a/app/views/admin/seminar_item_contents/_form.html.erb b/app/views/admin/seminar_item_contents/_form.html.erb new file mode 100644 index 0000000..4dd4f7b --- /dev/null +++ b/app/views/admin/seminar_item_contents/_form.html.erb @@ -0,0 +1,91 @@ + + <% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> + <% end %> + <% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> + <% end %> + + +
+ + + + + + +
+ + +
+ + +
+ +
+ <% if !@seminar_item_content.seminar_item_id.blank? %> + <%= @seminar_item_content.seminar_item.title %> + <% else %> + <%= select_tag "seminar_item_content[seminar_item_id]", options_for_select(@seminar_items) %> + <% end %> +
+
+ +
+ +
+ + + + + + +
+ + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
"> + + +
+ +
+
+ <%= f.fields_for :content_translations do |f| %> + <%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@seminar_item_content.content_translations[locale] rescue nil) %> + <% end %> +
+
+
+ + +
+ + <% end %> + +
+ +
+ + +
+ <%= f.hidden_field :seminar_main_id, :value => (!params[:seminar_main_id].blank? ? params[:seminar_main_id] : @seminar_item_content.seminar_main_id) %> + <%= get_referer_url[:seminarion] rescue "" %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + + <%= link_to t('cancel'), admin_seminars_path, :class=>"btn" %> +
\ No newline at end of file diff --git a/app/views/admin/seminar_item_contents/edit.html.erb b/app/views/admin/seminar_item_contents/edit.html.erb new file mode 100644 index 0000000..721edfa --- /dev/null +++ b/app/views/admin/seminar_item_contents/edit.html.erb @@ -0,0 +1,5 @@ +<%= form_for @seminar_item_content, url: admin_seminar_item_content_path(@seminar_item_content), html: {class: "form-horizontal main-forms"} do |f| %> +
+ <%= render :partial => 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/seminar_item_contents/index.html.erb b/app/views/admin/seminar_item_contents/index.html.erb new file mode 100644 index 0000000..e69742f --- /dev/null +++ b/app/views/admin/seminar_item_contents/index.html.erb @@ -0,0 +1,43 @@ + + + + +

<%= @seminar.title %>

+ + + + + + + + + <% @seminar_item_contents.each do |seminar_item_content| %> + + + + <% end %> + +
<%= t(:item)%>
+ <%= seminar_item_content.seminar_item.title %> +
+ +
+
+ +<%= link_to content_tag(:i, nil, :class => 'icon-plus') +' '+ t('new_'), new_admin_seminar_item_content_path(:seminar_main_id=>params[:seminar_main_id]), :class => 'btn btn-primary' if @seminar_items.count > 0 %> + +<%= + content_tag :div, class: "bottomnav clearfix" do + content_tag :div, paginate(@seminar_item_contents), class: "pagination pagination-centered" + end +%> +
+ +<%= render 'layouts/delete_modal', delete_options: @delete_options %> diff --git a/app/views/admin/seminar_item_contents/new.html.erb b/app/views/admin/seminar_item_contents/new.html.erb new file mode 100644 index 0000000..e7100ed --- /dev/null +++ b/app/views/admin/seminar_item_contents/new.html.erb @@ -0,0 +1,5 @@ +<%= form_for @seminar_item_content, url: admin_seminar_item_contents_path, html: {class: "form-horizontal main-forms"} do |f| %> +
+ <%= render :partial => 'form', locals: {f: f} %> +
+<% end %> \ No newline at end of file diff --git a/app/views/admin/seminar_items/_delete_modal.html.erb b/app/views/admin/seminar_items/_delete_modal.html.erb new file mode 100644 index 0000000..0d68c8e --- /dev/null +++ b/app/views/admin/seminar_items/_delete_modal.html.erb @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/app/views/admin/seminar_items/_form.html.erb b/app/views/admin/seminar_items/_form.html.erb new file mode 100644 index 0000000..6335b9d --- /dev/null +++ b/app/views/admin/seminar_items/_form.html.erb @@ -0,0 +1,11 @@ +<%= f.fields_for :title_translations do |f| %> + <% @site_in_use_locales.each do |locale| %> +
+ +
+ + <%= t('front_page.name_field_helper') %> +
+
+ <% end %> +<% end %> diff --git a/app/views/admin/seminar_items/_index.html.erb b/app/views/admin/seminar_items/_index.html.erb new file mode 100644 index 0000000..1b6c311 --- /dev/null +++ b/app/views/admin/seminar_items/_index.html.erb @@ -0,0 +1,27 @@ + +
+
+ + + <%= link_to t(:delete_), '#', id: "deleteItems", class: "btn btn-danger toggable hide", rel: '' %> + <%= link_to content_tag(:i, nil, class: "icons-plus") + " " + t(:add), '#', class: "btn btn-primary open-slide", data: {title: t('seminar_item.new_item'), id: 'new'} %> +
+
+ + + +
+
+

<%= t('seminar_item.set_item') %>

+ <% if !@seminar_items.blank? %> +
    + <%= render partial: "item", collection: @seminar_items, locals: {in_module: true} %> +
+ <% end %> +
+
+ + + +<%= render 'delete_modal' %> + \ No newline at end of file diff --git a/app/views/admin/seminar_items/_item.html.erb b/app/views/admin/seminar_items/_item.html.erb new file mode 100644 index 0000000..f62d177 --- /dev/null +++ b/app/views/admin/seminar_items/_item.html.erb @@ -0,0 +1,8 @@ +
  • +

    + +

    + <%= link_to '#', class: "open-slide", data: {title: t('seminar_item.edit_item'), id: item.id.to_s, form: item.title_translations} do %> + <%= item.title_translations.values.join(" / ") %> + <% end %> +
  • \ No newline at end of file diff --git a/app/views/admin/seminar_items/index.html.erb b/app/views/admin/seminar_items/index.html.erb new file mode 100644 index 0000000..fee290b --- /dev/null +++ b/app/views/admin/seminar_items/index.html.erb @@ -0,0 +1,81 @@ +
    + <%= render 'index' %> +
    + + +
    +
    + + + + +
    +
    +
    +
    +
    + +
    + +
    + <%= form_for :seminar_item, url: nil, remote: true do |f| %> +
    + <%= render :partial => "form", :locals => { :f => f } %> +
    + <%= t(:cancel) %> + <%= f.submit t(:submit), class: 'btn btn-primary btn-small', id: "tag_submit" %> +
    +
    + <% end %> +
    + +
    + +
    +
    +
    +
    +
    + +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "seminar_sets" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "check_seminar_set_items.js" %> + <%= javascript_include_tag "seminar_sets.js" %> +<% end %> + + + \ No newline at end of file diff --git a/app/views/admin/seminar_items/index.js.erb b/app/views/admin/seminar_items/index.js.erb new file mode 100644 index 0000000..df389d1 --- /dev/null +++ b/app/views/admin/seminar_items/index.js.erb @@ -0,0 +1,8 @@ +$("#delete_seminar_items").modal('hide'); +$("#seminar_items_index").html("<%= j render 'index' %>") +$.pageslide.close(); +openSlide(); +$('.card').cardCheck({ + item: $('.card input[type="checkbox"]'), +}); +checkedLength(); \ No newline at end of file diff --git a/app/views/admin/seminar_signups/edit.html.erb b/app/views/admin/seminar_signups/edit.html.erb new file mode 100644 index 0000000..468ee44 --- /dev/null +++ b/app/views/admin/seminar_signups/edit.html.erb @@ -0,0 +1,191 @@ +<%= form_for @seminar_signup, url: admin_seminar_signup_path(@seminar_signup), html: {class: "form-horizontal main-forms"} do |f| %> +
    + +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + <%= javascript_include_tag "lib/datetimepicker/date.time.picker.js" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> +<% end %> + + +
    + + +
    + + + +
    + +
    + <%= @seminar.title %> +
    +
    + +
    + +
    + + +
    +
    + + +
    + +
    + <%= f.text_field :name, :class => "input-block-level", placeholder: t('seminar_signup.name') %> +
    +
    + + +
    + +
    +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="unit_<%= locale %>"> + <%= f.fields_for "unit_translations".to_sym do |f| %> + <%= f.text_field locale, :class=>"input-block-level", :value => (@seminar_signup.send("unit_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}", :required => true %> + <% end %> +
    + <% end %> +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#unit_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    +
    +
    +
    + + +
    + +
    + <%= f.text_field :tel, :class=>"input-block-level", :placeholder=> t('seminar_signup.tel'), :required => true %> +
    +
    + + +
    + +
    + <%= f.text_field :phone, :class=>"input-block-level", :placeholder=> t('seminar_signup.phone') %> +
    +
    + + +
    + +
    + <%= f.text_field :phone, :class=>"input-block-level", :placeholder=> t('seminar_signup.fax') %> +
    +
    + + +
    + +
    + +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="address_<%= locale %>"> + <%= f.fields_for "address_translations".to_sym do |f| %> + <%= f.text_field locale, :class=>"input-block-level", :value => (@seminar_signup.send("address_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}" %> + <% end %> +
    + <% end %> +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#address_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    +
    +
    +
    + + +
    + +
    + <%= f.email_field :email, :class=>"input-block-level", :placeholder=> t(:email), :required => true %> +
    +
    + + +
    + +
    + <%= f.text_field :password, :class=>"input-block-level", :placeholder=> t('seminar_signup.password') %> +
    +
    + + + + +
    + +
    +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#note_<%= locale %>" for="<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="note_<%= locale %>"> + <%= f.fields_for "note_translations".to_sym do |f| %> + <%= f.text_area locale, rows: 5, :class=>"input-block-level", :value => (@seminar_signup.send("note_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}" %> + <% end %> +
    + <% end %> +
    +
    +
    + +
    + + <% @seminar.seminar_signup_fields.asc(:_id).each do |rf| %> + +
    + + <%= rf.block_helper(@seminar,@form_index,false,"seminar_signup", @seminar_signup, rf.to_require) %> + +
    + + <% @form_index = @form_index +1 %> + + <% end %> + + +
    + +
    + + +
    + <%#= get_referer_url[:action] rescue "" %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + <%= link_to t('cancel'), "/admin/seminars/#{@seminar.id}/seminar_signup", :class=>"btn" %> +
    + + +
    +<% end %> \ No newline at end of file diff --git a/app/views/admin/seminars/_attribute_field.html.erb b/app/views/admin/seminars/_attribute_field.html.erb new file mode 100644 index 0000000..bf3ceb7 --- /dev/null +++ b/app/views/admin/seminars/_attribute_field.html.erb @@ -0,0 +1,132 @@ +
    +<% + attribute_field.af_count ? @af_counter = attribute_field_counter + attribute_field.af_count : @af_counter = attribute_field_counter +%> +
    +
    +
    + <%= hidden_field "#{@field_name}[seminar_signup_fields][#{@af_counter}]","disabled",:value=>attribute_field.disabled,:class=>"toggle-check", :data=>{:deploy=>"right"} %> + +
    +
    + <%= t(:delete_)%> + <%= hidden_field "#{@field_name}[seminar_signup_fields][#{@af_counter}]","to_delete",:value=>false,:class=>"attribute_field_to_delete"%> + Reset +

    Field <%= @af_counter + 1 %>

    +
    +
    +
    + +
    + <%= text_field "#{@field_name}[seminar_signup_fields][#{@af_counter}]","key",:value=>attribute_field.key, :data=>{:type=>"key"} %> +
    +
    + + <%= render :partial=>"shared/attribute_field/placeholder_block",:locals=>{:values=>attribute_field.title_translations,:class_ext=>"pull-left",:label_ext=>t(:name),:field_name=>"#{@field_name}[seminar_signup_fields][#{@af_counter}][title_translations]"}%> + +
    + +
    + + +
    +
    +
    + +
    + +
    +
    +
    + +
    + + <%= content_tag :div,:class=>"field-type default fade in #{show_type_panel(attribute_field,"typeA")}" do%> +
    + +
    + + +
    +
    + <%= render :partial=>"shared/attribute_field/placeholder_block",:locals=>{:values=>attribute_field["typeA"]["placeholder"],:field_name=>"#{@field_name}[seminar_signup_fields][#{@af_counter}][typeA][placeholder]"}%> + <% end if show_type_panel(attribute_field,"typeA") != 'typeA hide' %> + + <%= content_tag :div,:class=>"field-type default fade in #{show_type_panel(attribute_field,"typeB")}" do %> + <%= render :partial=>"shared/attribute_field/placeholder_block",:locals=>{:label_ext=>t(:initial),:values=>attribute_field["typeB"]["initial"],:field_name=>"#{@field_name}[seminar_signup_fields][#{@af_counter}][typeB][initial]"}%> + + <% if attribute_field.self_defined_markup_options?%> + <%= render :partial=>"shared/attribute_field/list_block",:locals=>{:values=>attribute_field["option_list"],:field_name=> "#{@field_name}[seminar_signup_fields][#{@af_counter}][attribute][seminar][statuses]"} %> + <%else #normal list%> + <%= render :partial=>"shared/attribute_field/list_block",:locals=>{:values=>attribute_field["option_list"],:field_name=> "#{@field_name}[seminar_signup_fields][#{@af_counter}][typeB][option_list]"} %> + <% end #of self_defined_markup_options?%> + + <% end if show_type_panel(attribute_field,"typeB") != 'typeB hide' %> + + <%= content_tag :div,:class=>"field-type default fade in #{show_type_panel(attribute_field,"typeC")}" do %> +
    + +
    + <%= select "#{@field_name}[seminar_signup_fields][#{@af_counter}][typeC]","format",Admin::AttributeValuesViewHelper::OPT,:class=>"dataType",:selected=>attribute_field["typeC"]["format"] %> +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    + <% end if show_type_panel(attribute_field,"typeC") != 'typeC hide' %> + + <%= content_tag :div,:class=>"field-type default fade in #{show_type_panel(attribute_field,"typeD")}" do%> +
    + +
    + +
    +
    + <%= render :partial=>"shared/attribute_field/placeholder_block",:locals=>{:field_name=>"#{@field_name}[seminar_signup_fields][#{@af_counter}][typeD][placeholder]",:values=>attribute_field["typeD"]["placeholder"]} %> + <% end if show_type_panel(attribute_field,"typeD") != 'typeD hide' %> + + <%= content_tag :div,:class=>"field-type default fade in #{show_type_panel(attribute_field,"typeE")}" do%> + <%= render :partial=>"shared/attribute_field/list_block",:locals=>{:field_name=>"#{@field_name}[seminar_signup_fields][#{@af_counter}][typeE][option_list]",:values=>attribute_field["typeE"]["option_list"]}%> + <% end if show_type_panel(attribute_field,"typeE") != 'typeE hide' %> + + <%= hidden_field "#{@field_name}[seminar_signup_fields][#{@af_counter}]","id",:value=>attribute_field.id%> + +
    \ No newline at end of file diff --git a/app/views/admin/seminars/_form.html.erb b/app/views/admin/seminars/_form.html.erb new file mode 100644 index 0000000..43d812b --- /dev/null +++ b/app/views/admin/seminars/_form.html.erb @@ -0,0 +1,287 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> +<% end %> + + +
    + + + + + + +
    + + +
    + + +
    + +
    + <%= select_category(f, @module_app) %> +
    +
    + + +
    + +
    + <%= f.datetime_picker :seminar_start_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + +
    + +
    + <%= f.datetime_picker :seminar_end_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + +
    + + + +
    + + +
    + +
    + <% ['G','C'].each do |t| %> + + <% end %> +
    +
    + + +
    + +
    + <%= f.datetime_picker :signup_start_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + +
    + +
    + <%= f.datetime_picker :signup_end_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + + +
    + +
    + <%= f.datetime_picker :contribute_start_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + +
    + +
    + <%= f.datetime_picker :contribute_end_date, :no_label => true, :format=>"yyyy/MM/dd" %> +
    +
    + +
    + +
    + <%= f.text_field :contribute_file_count %> + (空白無限制) +
    +
    + +
    + +
    + + + + + + +
    + + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
    "> + + +
    + +
    + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t(:title), value: (@seminar.title_translations[locale] rescue nil) %> + <% end %> +
    +
    + + +
    + +
    + <%= f.fields_for :speaker_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t('seminar.speaker'), value: (@seminar.speaker_translations[locale] rescue nil) %> + <% end %> +
    +
    + + +
    + +
    +
    + <%= f.fields_for :content_translations do |f| %> + <%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@seminar.content_translations[locale] rescue nil) %> + <% end %> +
    +
    +
    + + +
    + +
    + <%= f.fields_for :act_place_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t('seminar.act_place'), value: (@seminar.act_place_translations[locale] rescue nil) %> + <% end %> +
    +
    + + +
    + + <% end %> + + +
    + +
    + + + <% if @seminar && !@seminar.seminar_links.blank? %> +
    + <% @seminar.seminar_links.each_with_index do |seminar_link, i| %> + <%= f.fields_for :seminar_links, seminar_link do |f| %> + <%= render :partial => 'form_link', :object => seminar_link, :locals => {:f => f, :i => i} %> + <% end %> + <% end %> +
    +
    + <% end %> + + +
    +
    +

    + <%= hidden_field_tag 'seminar_link_field_count', @seminar.seminar_links.count %> + <%= t(:add) %> +

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

    + <%= hidden_field_tag 'seminar_file_field_count', @seminar.seminar_files.count %> + <%= t(:add) %> +

    + +
    +
    + +
    + +
    + + +
    + <%= get_referer_url[:seminarion] rescue "" %> + <%= f.submit t('submit'), class: 'btn btn-primary' %> + + <%= link_to t('cancel'), admin_seminars_path, :class=>"btn" %> +
    + +<% content_for :page_specific_javascript do %> + +<% end %> \ No newline at end of file diff --git a/app/views/admin/seminars/_form_file.html.erb b/app/views/admin/seminars/_form_file.html.erb new file mode 100644 index 0000000..8628623 --- /dev/null +++ b/app/views/admin/seminars/_form_file.html.erb @@ -0,0 +1,55 @@ +<% if form_file.new_record? %> +
    +<% else %> +
    + <% if form_file.file.blank? %> + <%= t(:no_file) %> + <% else %> + <%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %> + <% end %> +<% end %> +
    + + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, :class => "input-medium", placeholder: t(:alternative), :value => (form_file.title_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :description_translations do |f| %> + <%= f.text_field locale, :class => "input-medium", placeholder: t(:description), :value => (form_file.description_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + <% if form_file.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
    +
    \ No newline at end of file diff --git a/app/views/admin/seminars/_form_link.html.erb b/app/views/admin/seminars/_form_link.html.erb new file mode 100644 index 0000000..d4aa5fd --- /dev/null +++ b/app/views/admin/seminars/_form_link.html.erb @@ -0,0 +1,26 @@ +
    + + <%= f.text_field :url, class: "input-large", placeholder: t(:url) %> + + + <% @site_in_use_locales.each_with_index do |locale, i| %> + <%= locale %>"> + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, :class => "input-large", placeholder: t(:url_alt), :value => (form_link.title_translations[locale] rescue nil) %> + <% end %> + + <% end %> + + + <% if form_link.new_record? %> + + + + <% else %> + + <%= f.hidden_field :id %> + + <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> + + <% end %> +
    \ No newline at end of file diff --git a/app/views/admin/seminars/_index.html.erb b/app/views/admin/seminars/_index.html.erb new file mode 100644 index 0000000..a1ae842 --- /dev/null +++ b/app/views/admin/seminars/_index.html.erb @@ -0,0 +1,47 @@ + + + + + + <% @table_fields.each do |f| %> + <% if f == 'seminar.title' %> + + <% else %> + <%= thead(f) %> + <% end %> + <% end %> + + + + <% @seminars.each do |seminar| %> + + + + + + + + + <% end %> + +
    <%= t(f)%>
    <%= seminar.category.title %> + <%= seminar.title %> + + <%= SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) %><%= SeminarMain.time_range(seminar.signup_start_date, seminar.signup_end_date) %><%= seminar.seminar_signups.count %><%= t('seminar.export') %>
    + +<%= + content_tag :div, class: "bottomnav clearfix" do + content_tag :div, paginate(@seminars), class: "pagination pagination-centered" + end +%> \ No newline at end of file diff --git a/app/views/admin/seminars/_support_member_form_js.erb b/app/views/admin/seminars/_support_member_form_js.erb new file mode 100644 index 0000000..c90efb7 --- /dev/null +++ b/app/views/admin/seminars/_support_member_form_js.erb @@ -0,0 +1,268 @@ +<%#= encoding: utf-8 %> + + + + + + + + + + \ No newline at end of file diff --git a/app/views/admin/seminars/edit.html.erb b/app/views/admin/seminars/edit.html.erb new file mode 100644 index 0000000..f6a638b --- /dev/null +++ b/app/views/admin/seminars/edit.html.erb @@ -0,0 +1,5 @@ +<%= form_for @seminar, url: admin_seminar_path(@seminar), html: {class: "form-horizontal main-forms"} do |f| %> +
    + <%= render :partial => 'form', locals: {f: f} %> +
    +<% end %> \ No newline at end of file diff --git a/app/views/admin/seminars/export.xlsx.axlsx b/app/views/admin/seminars/export.xlsx.axlsx new file mode 100644 index 0000000..2291e44 --- /dev/null +++ b/app/views/admin/seminars/export.xlsx.axlsx @@ -0,0 +1,54 @@ +# encoding: utf-8 + +wb = xlsx_package.workbook + +wb.add_worksheet(name: @seminar.title) do |sheet| + + row = [t('seminar_signup.signup_time')] + + row << t('seminar_signup.name') + + row << t('seminar_signup.unit') + + row << t('seminar_signup.tel') + + row << t('seminar_signup.phone') + + row << t('seminar_signup.fax') + + row << t('seminar_signup.address') + + row << t(:email) + + row << t('seminar_signup.note') + + @seminar.seminar_signup_fields.asc(:_id).each do |rf| + row << rf.title + end + + sheet.add_row row + + @seminar.seminar_signups.each do |signup| + + row2 = [] + + row2 << "#{signup.created_at} " + row2 << "#{signup[:name]} " + row2 << "#{signup.unit} " + row2 << "#{signup[:tel]} " + row2 << "#{signup[:phone]} " + row2 << "#{signup[:fax]} " + row2 << "#{signup.address} " + row2 << "#{signup[:email]} " + row2 << "#{signup.note} " + + @seminar.seminar_signup_fields.asc(:_id).each do |rf| + row2 << nl2br(show_attribute_value(@seminar.get_attribute_value(rf,signup.id).get_value_by_locale(I18n.locale))) rescue ' ' + end + + sheet.add_row row2 + end + + +end + diff --git a/app/views/admin/seminars/index.html.erb b/app/views/admin/seminars/index.html.erb new file mode 100644 index 0000000..4513c37 --- /dev/null +++ b/app/views/admin/seminars/index.html.erb @@ -0,0 +1,6 @@ +<%= render_filter @filter_fields, "index_table" %> + + <%= render 'index'%> + + +<%= render 'layouts/delete_modal', delete_options: @delete_options %> diff --git a/app/views/admin/seminars/new.html.erb b/app/views/admin/seminars/new.html.erb new file mode 100644 index 0000000..fe6d4fe --- /dev/null +++ b/app/views/admin/seminars/new.html.erb @@ -0,0 +1,5 @@ +<%= form_for @seminar, url: admin_seminars_path, html: {class: "form-horizontal main-forms"} do |f| %> +
    + <%= render :partial => 'form', locals: {f: f} %> +
    +<% end %> \ No newline at end of file diff --git a/app/views/admin/seminars/seminar_item_content.html.erb b/app/views/admin/seminars/seminar_item_content.html.erb new file mode 100644 index 0000000..7268cdd --- /dev/null +++ b/app/views/admin/seminars/seminar_item_content.html.erb @@ -0,0 +1,44 @@ + + + + +

    <%= @seminar.title %>

    + + + + + + + + + <% @seminar_item_contents.each do |seminar_item_content| %> + + + + <% end %> + +
    <%= t('seminar_item_content.name')%>
    + <%= seminar_item_content.content %> +
    + +
    +
    + +<%= link_to content_tag(:i, nil, :class => 'icon-plus') +' '+ t('new_'), + '/admin/seminar_item_contents/'+@member.to_param+'/journal_papers/new', :class => 'btn btn-primary' %> + +<%= + content_tag :div, class: "bottomnav clearfix" do + content_tag :div, paginate(@seminar_item_contents), class: "pagination pagination-centered" + end +%> +
    + +<%= render 'layouts/delete_modal', delete_options: @delete_options %> diff --git a/app/views/admin/seminars/seminar_signup.html.erb b/app/views/admin/seminars/seminar_signup.html.erb new file mode 100644 index 0000000..4a3b18b --- /dev/null +++ b/app/views/admin/seminars/seminar_signup.html.erb @@ -0,0 +1,60 @@ + + + + + +
    +
    + +
    +
    + + +

    <%= @seminar.title %>

    + + + + + + + + + + + <% @seminar_signups.each do |seminar_signup| %> + + + + + + <% end %> + +
    <%= t('seminar_signup.name')%><%= t('seminar.registration_status')%><%= t('seminar_signup.uploads')%>
    + <%= seminar_signup.name %> +
    + +
    +
    <%= t("seminar.registration_status_#{seminar_signup.status}") if !seminar_signup.status.blank? %> +
      + <% seminar_signup.seminar_signup_contributes.collect do |seminar_signup_contribute| %> +
    • <%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => seminar_signup_contribute.description} if seminar_signup_contribute.file.file + %>
    • + <% end %> +
    +
    + +<%= + content_tag :div, class: "bottomnav clearfix" do + content_tag :div, paginate(@seminar_signups), class: "pagination pagination-centered" + end +%> +
    + +<%= render 'layouts/delete_modal', delete_options: @delete_options %> diff --git a/app/views/admin/seminars/seminar_signup_field.html.erb b/app/views/admin/seminars/seminar_signup_field.html.erb new file mode 100644 index 0000000..330b6f4 --- /dev/null +++ b/app/views/admin/seminars/seminar_signup_field.html.erb @@ -0,0 +1,37 @@ +<% content_for :page_specific_css do -%> + <%= stylesheet_link_tag "lib/wrap-nav.css" %> + <%= stylesheet_link_tag "lib/pageslide.css" %> + <%= stylesheet_link_tag "lib/main-forms.css" %> + <%= stylesheet_link_tag "lib/togglebox.css" %> +<% end -%> + +<% content_for :page_specific_javascript do -%> + <%= javascript_include_tag "lib/jquery.tmpl.min.js" %> + <%= javascript_include_tag "field-forms.js" %> +<% end -%> + +<%= form_for @attribute,:url => admin_seminar_path(@attribute) , :html => { :class=> "form-horizontal main-forms" } do |f| %> + <% if flash.now[:notice].present? %> + <%= flash.now[:notice]%> + <% end %> + +

    <%= @attribute.title %>

    +
    + +
    + <%= render partial: "attribute_field",collection: @attribute.seminar_signup_fields.asc(:_id)%> +
    + +
    + + <%= hidden_field_tag 'id', params[:id] if !params[:id].blank? %> + <%= f.submit t(:submit),:class=>"btn btn-primary"%> + <%= link_to t('cancel'), get_go_back, :class=>"btn" %> +
    +
    +<% end %> + + +<% content_for :page_specific_javascript do -%> + <%= render 'support_member_form_js' %> +<% end -%> \ No newline at end of file diff --git a/app/views/seminars/add_file.html.erb b/app/views/seminars/add_file.html.erb new file mode 100644 index 0000000..a916fd6 --- /dev/null +++ b/app/views/seminars/add_file.html.erb @@ -0,0 +1,59 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @con = data["con"] + @seminar = data["seminar"] + @seminar_signup = data["seminar_signup"] +%> +<% if !session[:seminar_signup_id].blank? %> + + <% if ( @seminar.contribute_file_count.blank? or @seminar_signup.seminar_signup_contributes.count < @seminar.contribute_file_count.to_i ) %> + +<%= form_for @con, url: add_file_proc_seminars_path, html: {class: "content form-horizontal" , :id=>"new-seminar-signup-contribute"} do |f| %> +
    + +
    + +
    + <%= f.text_field :title, :class=>"input-medium form-control", :id=>'name', :placeholder=> t('seminar_signup.file_name'), :required => true %> +
    +
    + +
    + +
    + <%= f.text_area :description, rows: 5, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.file_note') %> +
    +
    + +
    + +
    + <%= f.file_field :file %> +
    +
    + +
    +
    + "> + + <%= f.submit t('submit'), class: 'btn btn-primary', :id => 'button-mail' %> + <%= f.button t('cancel'), type: 'reset', class: 'btn' %> +
    +
    + +<% end %> + +<% else %> + +上傳檔案數已滿 + +<% end %> + +<% else %> + +請先登入 +
    +回列表頁 + +<% end %> \ No newline at end of file diff --git a/app/views/seminars/check_availability.html.erb b/app/views/seminars/check_availability.html.erb new file mode 100644 index 0000000..80cbe51 --- /dev/null +++ b/app/views/seminars/check_availability.html.erb @@ -0,0 +1,4 @@ +<% # encoding: utf-8 %> +<% + data = action_data +%> \ No newline at end of file diff --git a/app/views/seminars/check_email.html.erb b/app/views/seminars/check_email.html.erb new file mode 100644 index 0000000..0e026d0 --- /dev/null +++ b/app/views/seminars/check_email.html.erb @@ -0,0 +1,10 @@ +<% # encoding: utf-8 %> +<% + data = action_data + result = data["result"] +%> + +
    +

    <%= result %>

    +關閉視窗 +
    \ No newline at end of file diff --git a/app/views/seminars/con_login.html.erb b/app/views/seminars/con_login.html.erb new file mode 100644 index 0000000..32f245c --- /dev/null +++ b/app/views/seminars/con_login.html.erb @@ -0,0 +1,53 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @seminar = data["seminar"] + @time_now = data["time_now"] +%> + +<% if @seminar.contribute_start_date <= @time_now and (@seminar.contribute_end_date.nil? or @seminar.contribute_end_date+1 >= @time_now ) %> + +
    + +
    + +<% else %> + +已截止 + +<% end %> \ No newline at end of file diff --git a/app/views/seminars/con_logout.html.erb b/app/views/seminars/con_logout.html.erb new file mode 100644 index 0000000..0e2913a --- /dev/null +++ b/app/views/seminars/con_logout.html.erb @@ -0,0 +1,13 @@ +<% # encoding: utf-8 %> +<% + # data = action_data + + session[:seminar_signup_id] = nil + session[:seminar_main_id] = nil + + +%> + +<%= t('seminar_signup.logouting') %> + + \ No newline at end of file diff --git a/app/views/seminars/con_upload.html.erb b/app/views/seminars/con_upload.html.erb new file mode 100644 index 0000000..6144d9e --- /dev/null +++ b/app/views/seminars/con_upload.html.erb @@ -0,0 +1,71 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @seminar = data["seminar"] + @seminar_signup = data["seminar_signup"] + @time_now = data["time_now"] +%> +<% if @seminar.contribute_start_date <= @time_now and ( @seminar.contribute_end_date.nil? or @seminar.contribute_end_date+1 >= @time_now ) %> + + <% if !session[:seminar_signup_id].blank? %> + + <%= t('seminar_signup.logout') %> + + + + + + + + + + + + + <% + @seminar_signup.seminar_signup_contributes.each do |seminar_signup_contribute| + %> + + + + + + + <% end %> + +
    +

    <%= @seminar.title %>

    +
    <%= t('seminar_signup.file_name') %><%= t('seminar_signup.file_note') %><%= t('seminar_signup.files') %><%= t(:action) %>
    <%= seminar_signup_contribute.title %><%= seminar_signup_contribute.description %><%= link_to (seminar_signup_contribute.title.blank? ? File.basename(seminar_signup_contribute.file.path) : seminar_signup_contribute.title) , seminar_signup_contribute.file.url, {:target => '_blank', :title => seminar_signup_contribute.description} if seminar_signup_contribute.file.file %> + <%= link_to t(:edit), OrbitHelper.url_to_show(@seminar.to_param) + '?method=edit_file&con_no=' + seminar_signup_contribute.id, :class => 'btn btn-primary' %> +
    + <%= submit_tag t(:delete_), class: "btn btn-primary" %> + "> + +
    + +
    + + <% if ( @seminar.contribute_file_count.blank? or @seminar_signup.seminar_signup_contributes.count < @seminar.contribute_file_count.to_i ) %> + + <%= link_to content_tag(:i, nil, :class => 'icon-plus') +' '+ t('new_'), OrbitHelper.url_to_show(@seminar.to_param) + '?method=add_file', :class => 'btn btn-primary' %> + + <% end %> + +
    +
    + 檔案上限: <%= @seminar.contribute_file_count.blank? ? '無' : @seminar.contribute_file_count %> + + <% else %> + + 請先登入 +
    + 回列表頁 + + <% end %> + +<% else %> + +已截止 + +<% end %> + \ No newline at end of file diff --git a/app/views/seminars/edit_file.html.erb b/app/views/seminars/edit_file.html.erb new file mode 100644 index 0000000..80074c7 --- /dev/null +++ b/app/views/seminars/edit_file.html.erb @@ -0,0 +1,46 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @con = data["con"] +%> +<% if !session[:seminar_signup_id].blank? %> + +<%= form_for @con, url: edit_file_proc_seminars_path, html: {class: "content form-horizontal" , :id=>"new-seminar-signup-contribute"} do |f| %> +
    + +
    + +
    + <%= f.text_field :title, :class=>"input-medium form-control", :id=>'name', :placeholder=> t('seminar_signup.file_name'), :required => true %> +
    +
    + +
    + +
    + <%= f.text_area :description, rows: 5, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.file_note') %> +
    +
    + +
    + +
    + <%= f.file_field :file %> +
    +
    + +
    +
    + "> + + + <%= f.submit t('submit'), class: 'btn btn-primary', :id => 'button-mail' %> + <%= f.button t('cancel'), type: 'reset', class: 'btn' %> +
    +
    + +<% end %> + +<% else %> +請登入 +<% end %> \ No newline at end of file diff --git a/app/views/seminars/index.html.erb b/app/views/seminars/index.html.erb new file mode 100644 index 0000000..eba6e34 --- /dev/null +++ b/app/views/seminars/index.html.erb @@ -0,0 +1,63 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @seminars = data["seminars"] + @total_pages = data["total_pages"] + @time_now = data["time_now"] +%> + + + + + + + + + + + + + + <% + @seminars.each do |seminar| + + if !seminar.registration_status.blank? and seminar.signup_start_date <= @time_now and ( seminar.signup_end_date.nil? or seminar.signup_end_date+1 >= @time_now ) + sign_up = ('' + t('seminar.signup') + '').html_safe + elsif seminar.registration_status.blank? + sign_up = t('seminar.sign_up_not_open') + elsif seminar.signup_start_date > @time_now + sign_up = t('seminar.sign_up_not_yet') + else + sign_up = t('seminar.sign_up_overdue') + end + %> + + + + + + + + <% end %> + +
    +

    <%= t('seminar.seminar') %>

    +
    <%= t(:category) %><%= t('seminar.title') %><%= t('seminar_signup.time') %><%= t('seminar_signup.place') %><%= t('seminar.signup') %>
    <%= seminar.category.title %><%= ('' + seminar.title + '').html_safe %><%= SeminarMain.time_range(seminar.seminar_start_date, seminar.seminar_end_date) %><%= seminar.act_place %> + <%= sign_up %>
    + + <%= + if !seminar.registration_status.blank? and seminar.registration_status.include?('C') and seminar.contribute_start_date <= @time_now and ( seminar.contribute_end_date.nil? or seminar.contribute_end_date+1 >= @time_now ) + if !session[:seminar_signup_id].blank? + if session[:seminar_main_id] == seminar.id + ('' + t('seminar_signup.uploads') + '').html_safe + else + ('' + t('seminar_signup.con_login') + '').html_safe + end + else + ('' + t('seminar_signup.con_login') + '').html_safe + end + end + %> +
    + +<%= create_pagination(@total_pages).html_safe if @total_pages > 1 %> \ No newline at end of file diff --git a/app/views/seminars/show.html.erb b/app/views/seminars/show.html.erb new file mode 100644 index 0000000..6e64ab5 --- /dev/null +++ b/app/views/seminars/show.html.erb @@ -0,0 +1,312 @@ +<% # encoding: utf-8 %> +<% + data = action_data + @seminar = data["seminar"] + @seminar_signup = data["seminar_signup"] + @time_now = data["time_now"] + @form_index = 0 +%> + +<% if !@seminar.registration_status.blank? and @seminar.signup_start_date < @time_now and ( @seminar.signup_end_date.nil? or @seminar.signup_end_date+1 > @time_now ) %> + + <%#= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "basic/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/bootstrap-datetimepicker" %> + <%= javascript_include_tag "lib/datetimepicker/date.time.picker.js" %> + <%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %> + + +<% flash.each do |key, msg| %> + <%= content_tag :p, msg, :class => [key, "alert alert-error in fade"] %> +<% end %> + +<%= form_for @seminar_signup, url: seminars_path, html: {class: "content form-horizontal" , :id=>"new-seminar-signup"} do |f| %> +
    + + +
    + +
    + <%= @seminar.title %> +
    +
    + +
    + +
    + <% if @seminar.registration_status.include?('G') %> + + <% end %> + <% if @seminar.registration_status.include?('C') %> + + <% end %> +
    +
    + + +
    + +
    + <%= f.text_field :name, :class=>"input-medium form-control", :id=>'name', :placeholder=> t('seminar_signup.name'), :required => true %> +
    +
    + + +
    + +
    +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="unit_<%= locale %>"> + <%= f.fields_for "unit_translations".to_sym do |f| %> + <%= f.text_field locale, :class=>"input-medium form-control", :value => (@seminar_signup.send("unit_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}", :required => true %> + <% end %> +
    + <% end %> +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#unit_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    +
    +
    +
    + + +
    + +
    + <%= f.text_field :tel, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.tel'), :required => true %> +
    +
    + + +
    + +
    + <%= f.text_field :phone, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.phone') %> +
    +
    + + +
    + +
    + <%= f.text_field :fax, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.fax') %> +
    +
    + + +
    + +
    +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="address_<%= locale %>"> + <%= f.fields_for "address_translations".to_sym do |f| %> + <%= f.text_field locale, :class=>"input-medium form-control", :value => (@seminar_signup.send("address_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}" %> + <% end %> +
    + <% end %> +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#address_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    +
    +
    +
    + + +
    + +
    + <%= f.email_field :email, :class=>"input-medium form-control availibility", :placeholder=> t(:email), :required => true %> check mail +
    +
    + +
    + +
    + <%= f.text_field :password, :class=>"input-medium form-control", :placeholder=> t('seminar_signup.password') %> + ( 此密碼為下次投稿上傳檔案時必須輸入的密碼。 ) +
    +
    + + +
    + +
    +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> +
    " id="note_<%= locale %>"> + <%= f.fields_for "note_translations".to_sym do |f| %> + <%= f.text_area locale, rows: 5, :class=>"input-medium form-control", :value => (@seminar_signup.send("note_translations")[locale] rescue nil), :placeholder=> "#{t(locale.to_s)}" %> + <% end %> +
    + <% end %> +
    +
    + <% @site_in_use_locales.each_with_index do |locale, i| %> + " href="#note_<%= locale %>" data-toggle="tab"><%= t(locale.to_s) %> + <% end %> +
    +
    +
    +
    + + <% @seminar.seminar_signup_fields.asc(:_id).each do |rf| %> + +
    + + <%= rf.block_helper(@seminar,@form_index,false,"seminar_signup",@seminar_signup, rf.to_require) %> + +
    + + <% @form_index = @form_index +1 %> + + <% end %> + + + +
    + +
    + <%= gotcha_error %> + <%= gotcha %> +
    +
    + +
    + +
    + <%= show_simple_captcha %> +
    +
    + + + +
    +
    + "> + + <%= f.submit t('submit'), class: 'btn btn-primary', :id => 'button-mail' %> + <%= f.button t('cancel'), type: 'reset', class: 'btn' %> +
    +
    + +
    +<% end %> + + + + +<% elsif @seminar.registration_status.blank? %> + +<%= t('seminar.sign_up_not_open') %> + +<% elsif @seminar.signup_start_date > @time_now %> + +<%= t('seminar.sign_up_not_yet') %> + +<% else %> + +<%= t('seminar.sign_up_overdue') %> + +<% end %> diff --git a/app/views/seminars/show_data.html.erb b/app/views/seminars/show_data.html.erb new file mode 100644 index 0000000..d0a0183 --- /dev/null +++ b/app/views/seminars/show_data.html.erb @@ -0,0 +1,91 @@ +<% # encoding: utf-8 %> + +<% + data = action_data + @seminar = data["seminar"] + @sign_up = data["sign_up"] + @sign_up_time_range = data["sign_up_time_range"] + @seminar_time_range = data["seminar_time_range"] + @contribute_time_range = data["contribute_time_range"] + @contribute_action = data["contribute_action"] +%> + + + + + + + + + + + + + + + + + <% if !@seminar.speaker.blank? %> + + + + + <% end %> + <% if !@seminar.content.blank? %> + + + + + <% end %> + + + + + <% if !@contribute_time_range.blank? %> + + + + + <% end %> + + + + + <% if !@seminar.act_place.blank? %> + + + + + <% end %> + <% if !@seminar.seminar_files.blank? %> + + + + + <% end %> + <% if !@seminar.seminar_links.blank? %> + + + + + <% end %> + <% @seminar.seminar_item_contents.asc(:_id).each do |item_content| %> + + + + + <% end %> + +
    <%= t(:category) %><%= @seminar.category.title %>
    <%= t('seminar.event_during') %><%= @seminar_time_range %>
    <%= t('seminar.title') %><%= @seminar.title %>
    <%= t('seminar.speaker') %><%= @seminar.speaker %>
    <%= t('seminar.content') %><%= nl2br(@seminar.content) %>
    <%= t('seminar.signup_during') %><%= @sign_up_time_range %>
    <%= t('seminar.contribute_during') %><%= @contribute_time_range %>
    <%= t('seminar.signup') %><%= @sign_up %>
    <%= @contribute_action %>
    <%= t('seminar.act_place') %><%= @seminar.act_place %>
    <%= t(:file_) %> + <% @seminar.seminar_files.map do |file| %> + <%= link_to (file.title.blank? ? File.basename(file.file.path) : file.title) , file.file.url, {:target => '_blank', :title => file.description} if file.file.file %> + <% end %> +
    <%= t(:link) %> + <% @seminar.seminar_links.map do |link| %> + <%= link_to (link.title.blank? ? link.url : link.title), link.url, :target => '_blank' %> + <% end %> +
    <%= item_content.seminar_item.title %><%= item_content.content.html_safe %>
    + +
    + +<%= link_to t(:close), 'javascript:window.close();', :class => 'btn btn-primary' %> diff --git a/app/views/seminars/show_privacy.html.erb b/app/views/seminars/show_privacy.html.erb new file mode 100644 index 0000000..ea812ea --- /dev/null +++ b/app/views/seminars/show_privacy.html.erb @@ -0,0 +1,28 @@ +<% # encoding: utf-8 %> + +<% + data = action_data + @seminar_agreement = data["seminar_agreement"] +%> + + + +

    個資及隱私權保護宣告

    + +
    + +<%= @seminar_agreement.content.html_safe %> + +
    + +
    + +<%= link_to t(:close), 'javascript:window.close();', :class => 'btn btn-primary' %> \ No newline at end of file diff --git a/app/views/seminars/signup_ok.html.erb b/app/views/seminars/signup_ok.html.erb new file mode 100644 index 0000000..11ea5a4 --- /dev/null +++ b/app/views/seminars/signup_ok.html.erb @@ -0,0 +1,6 @@ +<% # encoding: utf-8 %> +<% + data = action_data +%> + +您的報名已成功,感謝您的參與。 \ No newline at end of file diff --git a/app/views/simple_captcha/_simple_captcha.erb b/app/views/simple_captcha/_simple_captcha.erb new file mode 100644 index 0000000..748746f --- /dev/null +++ b/app/views/simple_captcha/_simple_captcha.erb @@ -0,0 +1,33 @@ + + +
    +
    + <%= simple_captcha_options[:image] %> +
    + +
    + <%= simple_captcha_options[:field] %> +
    +
    diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000..426790e --- /dev/null +++ b/bin/rails @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application. + +ENGINE_ROOT = File.expand_path('../..', __FILE__) +ENGINE_PATH = File.expand_path('../../lib/nkuht_donate/engine', __FILE__) + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) + +# require 'rails/all' +# require 'rails/engine/commands' +require "action_controller/railtie" +require "action_mailer/railtie" +require "sprockets/railtie" +require "rails/test_unit/railtie" +require 'rails/engine/commands' +require "mongoid/railtie" diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..010de05 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,86 @@ +en: + + simple_captcha: + placeholder: "" + label: "" + + restful_actions: + act_signup: 報名資料 + + module_name: + seminar: 研討會 + + recaptcha: + errors: + verification_failed: 驗證碼錯誤 + + seminar: + export_csv: 匯出CSV + recaptcha: 驗證碼 + yes_: 是 + no_: 否 + seminar: 研討會 + title: 研討會名稱 + speaker: 主講者 + content: 內容說明 + act_place: 活動地點 + registration_status: 報名身分 + registration_status_C: 投稿者 + registration_status_G: 一般報名 + seminar_start_date: 活動開始時間 + seminar_end_date: 活動結束時間 + signup_start_date: 報名開始時間 + signup_end_date: 報名結束時間 + contribute_start_date: 投稿開始時間 + contribute_end_date: 投稿結束時間 + event_during: 活動期間 + contribute_during: 投稿期間 + signup_during: 報名期間 + signup_count: 報名人數 + signup: 報名 + export: 匯出 + set_seminar_items: 項目 + set_seminar_signup_field: 圈選設定 + set_seminar_item_content: 項目設定 + set_seminar_agreements: 個資宣告設定 + seminar_agreements_content: 個資宣告內容 + to_require: 是否必填 + sign_up_not_yet: 報名時間未開始 + sign_up_not_open: 未開放報名 + sign_up_overdue: 報名時間已過 + contribute_file_count: 投稿檔案數 + + frontend: + seminar: 研討會前台 + + seminar_item: + new_item: 新增項目 + edit_item: 編輯項目 + set_item: 設定項目 + del_item: 刪除項目 + + seminar_item_content: + content: 內容 + + seminar_signup: + signup_time: 報名時間 + name: Name + unit: 單位 + tel: TEL + phone: Mobile telephone + fax: Fax + address: 地址 + email: e-mail信箱 + password: 密碼 + note: 註解 + time: (開始/結束)時間 + place: 地點 + agree: "Accept Privacy and Personal Information Protection Policy of the Site" + signup_field: 圈選項目 + uploads: 上傳檔案 + con_login: 投稿者登入 + file_name: 稿件名稱 + file_note: 摘要 + files: 檔案 + logout: 登出 + logouting: 登出中 diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml new file mode 100644 index 0000000..dcc1eac --- /dev/null +++ b/config/locales/zh_tw.yml @@ -0,0 +1,87 @@ +zh_tw: + + simple_captcha: + placeholder: "" + label: "" + + restful_actions: + act_signup: 報名資料 + + module_name: + seminar: 研討會 + + recaptcha: + errors: + verification_failed: 驗證碼錯誤 + + seminar: + export_csv: 匯出CSV + recaptcha: 驗證碼 + yes_: 是 + no_: 否 + seminar: 研討會 + title: 研討會名稱 + speaker: 主講者 + content: 內容說明 + act_place: 活動地點 + registration_status: 報名身分 + registration_status_C: 投稿者 + registration_status_G: 一般報名 + seminar_start_date: 活動開始時間 + seminar_end_date: 活動結束時間 + signup_start_date: 報名開始時間 + signup_end_date: 報名結束時間 + contribute_start_date: 投稿開始時間 + contribute_end_date: 投稿結束時間 + event_during: 活動期間 + contribute_during: 投稿期間 + signup_during: 報名期間 + signup_count: 報名人數 + signup: 報名 + export: 匯出 + set_seminar_items: 項目 + set_seminar_signup_field: 圈選設定 + set_seminar_item_content: 項目設定 + set_seminar_agreements: 個資宣告設定 + seminar_agreements_content: 個資宣告內容 + to_require: 是否必填 + sign_up_not_yet: 報名時間未開始 + sign_up_not_open: 未開放報名 + sign_up_overdue: 報名時間已過 + contribute_file_count: 投稿檔案數 + + frontend: + seminar: 研討會前台 + + seminar_item: + new_item: 新增項目 + edit_item: 編輯項目 + set_item: 設定項目 + del_item: 刪除項目 + + seminar_item_content: + content: 內容 + + seminar_signup: + signup_time: 報名時間 + name: 姓名 + unit: 單位 + tel: 聯絡電話 + phone: 行動電話 + fax: 傳真 + address: 地址 + email: e-mail信箱 + password: 密碼 + note: 註解 + time: (開始/結束)時間 + place: 地點 + agree: 同意接受本站個資及隱私權保護宣告 + recaptcha: 驗證碼 + signup_field: 圈選項目 + uploads: 上傳檔案 + con_login: 投稿者登入 + file_name: 稿件名稱 + file_note: 摘要 + files: 檔案 + logout: 登出 + logouting: 登出中 diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..55fd0ce --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,39 @@ +Rails.application.routes.draw do + + locales = Site.first.in_use_locales rescue I18n.available_locales + + scope "(:locale)", locale: Regexp.new(locales.join("|")) do + namespace :admin do + resources :seminars do + member do + get 'export' + get 'set_write_off' + get 'seminar_signup' + get 'seminar_item_content' + get 'seminar_signup_field' + end + end + resources :seminar_items do + collection do + post 'delete_items' + end + end + resources :seminar_agreements + resources :seminar_signups + resources :seminar_item_contents + end + + resources :seminars do + collection do + get ':slug_title-:uid', to: 'seminars#show' + post 'con_login_proc', to: 'seminars#con_login_proc' + post 'con_logout_proc', to: 'seminars#con_logout_proc' + post 'add_file_proc', to: 'seminars#add_file_proc' + post 'edit_file_proc', to: 'seminars#edit_file_proc' + post 'del_file', to: 'seminars#del_file' + end + end + + end + +end diff --git a/lib/seminar.rb b/lib/seminar.rb new file mode 100644 index 0000000..740f4f9 --- /dev/null +++ b/lib/seminar.rb @@ -0,0 +1,4 @@ +require "seminar/engine" + +module Seminar +end diff --git a/lib/seminar/engine.rb b/lib/seminar/engine.rb new file mode 100644 index 0000000..6e026e0 --- /dev/null +++ b/lib/seminar/engine.rb @@ -0,0 +1,50 @@ +module Seminar + class Engine < ::Rails::Engine + initializer "seminar" do + OrbitApp.registration "Seminar", :type => "ModuleApp" do + module_label "seminar.seminar" + base_url File.expand_path File.dirname(__FILE__) + authorizable + categorizable + frontend_enabled + data_count 1..20 + + side_bar do + head_label_i18n 'seminar.seminar', icon_class: "icon-globe" + available_for "managers" + active_for_controllers (['admin/seminars']) + head_link_path "admin_seminars_path" + + context_link 'list_', + :link_path=>"admin_seminars_path" , + :priority=>1, + :active_for_action=>{'admin/seminars'=>'index'}, + :available_for => 'managers' + context_link 'new_', + :link_path=>"new_admin_seminar_path" , + :priority=>2, + :active_for_action=>{'admin/seminars'=>'new'}, + :available_for => 'managers' + context_link 'categories', + :link_path=>"admin_module_app_categories_path" , + :link_arg=>"{:module_app_id=>ModuleApp.find_by(:key=>'seminar').id}", + :priority=>3, + :active_for_action=>{'admin/seminars'=>'categories'}, + :active_for_category => 'Seminar', + :available_for => 'managers' + context_link 'seminar.set_seminar_items', + :link_path=>"admin_seminar_items_path" , + :priority=>3, + :active_for_action=>{'admin/seminars'=>'seminar_items'}, + :available_for => 'managers' + context_link 'seminar.set_seminar_agreements', + :link_path=>"admin_seminar_agreements_path" , + :priority=>3, + :active_for_action=>{'admin/seminars'=>'seminar_agreements'}, + :available_for => 'managers' + end + + end + end + end +end \ No newline at end of file diff --git a/lib/seminar/version.rb b/lib/seminar/version.rb new file mode 100644 index 0000000..7e91fe9 --- /dev/null +++ b/lib/seminar/version.rb @@ -0,0 +1,3 @@ +module Seminar + VERSION = "0.0.1" +end diff --git a/lib/tasks/seminar_tasks.rake b/lib/tasks/seminar_tasks.rake new file mode 100644 index 0000000..ad9c435 --- /dev/null +++ b/lib/tasks/seminar_tasks.rake @@ -0,0 +1,4 @@ +# desc "Explaining what the task does" +# task :seminar do +# # Task goes here +# end diff --git a/seminar.gemspec b/seminar.gemspec new file mode 100644 index 0000000..1963deb --- /dev/null +++ b/seminar.gemspec @@ -0,0 +1,23 @@ +$:.push File.expand_path("../lib", __FILE__) + +# Maintain your gem's version: +require "seminar/version" + +# Describe your gem and declare its dependencies: +Gem::Specification.new do |s| + s.name = "seminar" + s.version = Seminar::VERSION + s.authors = ["TODO: Your name"] + s.email = ["TODO: Your email"] + s.homepage = "TODO" + s.summary = "TODO: Summary of Seminar." + s.description = "TODO: Description of Seminar." + s.license = "MIT" + + s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] + s.test_files = Dir["test/**/*"] + + s.add_dependency "rails", "~> 4.1.9" + + s.add_development_dependency "sqlite3" +end diff --git a/test/controllers/seminar_controller_test.rb b/test/controllers/seminar_controller_test.rb new file mode 100644 index 0000000..0308133 --- /dev/null +++ b/test/controllers/seminar_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SeminarControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/dummy/README.rdoc b/test/dummy/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/test/dummy/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/test/dummy/Rakefile b/test/dummy/Rakefile new file mode 100644 index 0000000..ba6b733 --- /dev/null +++ b/test/dummy/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/test/dummy/app/assets/images/.keep b/test/dummy/app/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/assets/javascripts/application.js b/test/dummy/app/assets/javascripts/application.js new file mode 100644 index 0000000..5bc2e1c --- /dev/null +++ b/test/dummy/app/assets/javascripts/application.js @@ -0,0 +1,13 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require_tree . diff --git a/test/dummy/app/assets/stylesheets/application.css b/test/dummy/app/assets/stylesheets/application.css new file mode 100644 index 0000000..a443db3 --- /dev/null +++ b/test/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/test/dummy/app/controllers/application_controller.rb b/test/dummy/app/controllers/application_controller.rb new file mode 100644 index 0000000..d83690e --- /dev/null +++ b/test/dummy/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/test/dummy/app/controllers/concerns/.keep b/test/dummy/app/controllers/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/helpers/application_helper.rb b/test/dummy/app/helpers/application_helper.rb new file mode 100644 index 0000000..de6be79 --- /dev/null +++ b/test/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/test/dummy/app/mailers/.keep b/test/dummy/app/mailers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/models/.keep b/test/dummy/app/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/models/concerns/.keep b/test/dummy/app/models/concerns/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/app/views/layouts/application.html.erb b/test/dummy/app/views/layouts/application.html.erb new file mode 100644 index 0000000..593a778 --- /dev/null +++ b/test/dummy/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Dummy + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/test/dummy/bin/bundle b/test/dummy/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/test/dummy/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/test/dummy/bin/rails b/test/dummy/bin/rails new file mode 100755 index 0000000..728cd85 --- /dev/null +++ b/test/dummy/bin/rails @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/test/dummy/bin/rake b/test/dummy/bin/rake new file mode 100755 index 0000000..1724048 --- /dev/null +++ b/test/dummy/bin/rake @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/test/dummy/config.ru b/test/dummy/config.ru new file mode 100644 index 0000000..5bc2a61 --- /dev/null +++ b/test/dummy/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb new file mode 100644 index 0000000..ad1e5de --- /dev/null +++ b/test/dummy/config/application.rb @@ -0,0 +1,23 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +Bundler.require(*Rails.groups) +require "seminar" + +module Dummy + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + end +end + diff --git a/test/dummy/config/boot.rb b/test/dummy/config/boot.rb new file mode 100644 index 0000000..6266cfc --- /dev/null +++ b/test/dummy/config/boot.rb @@ -0,0 +1,5 @@ +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) +$LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) diff --git a/test/dummy/config/database.yml b/test/dummy/config/database.yml new file mode 100644 index 0000000..1c1a37c --- /dev/null +++ b/test/dummy/config/database.yml @@ -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 diff --git a/test/dummy/config/environment.rb b/test/dummy/config/environment.rb new file mode 100644 index 0000000..ee8d90d --- /dev/null +++ b/test/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/test/dummy/config/environments/development.rb b/test/dummy/config/environments/development.rb new file mode 100644 index 0000000..ddf0e90 --- /dev/null +++ b/test/dummy/config/environments/development.rb @@ -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 diff --git a/test/dummy/config/environments/production.rb b/test/dummy/config/environments/production.rb new file mode 100644 index 0000000..b93a877 --- /dev/null +++ b/test/dummy/config/environments/production.rb @@ -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 diff --git a/test/dummy/config/environments/test.rb b/test/dummy/config/environments/test.rb new file mode 100644 index 0000000..053f5b6 --- /dev/null +++ b/test/dummy/config/environments/test.rb @@ -0,0 +1,39 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static asset server for tests with Cache-Control for performance. + config.serve_static_assets = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/test/dummy/config/initializers/assets.rb b/test/dummy/config/initializers/assets.rb new file mode 100644 index 0000000..d2f4ec3 --- /dev/null +++ b/test/dummy/config/initializers/assets.rb @@ -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 ) diff --git a/test/dummy/config/initializers/backtrace_silencers.rb b/test/dummy/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/test/dummy/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/test/dummy/config/initializers/cookies_serializer.rb b/test/dummy/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000..7a06a89 --- /dev/null +++ b/test/dummy/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json \ No newline at end of file diff --git a/test/dummy/config/initializers/filter_parameter_logging.rb b/test/dummy/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/test/dummy/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/test/dummy/config/initializers/inflections.rb b/test/dummy/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/test/dummy/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/test/dummy/config/initializers/mime_types.rb b/test/dummy/config/initializers/mime_types.rb new file mode 100644 index 0000000..dc18996 --- /dev/null +++ b/test/dummy/config/initializers/mime_types.rb @@ -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 diff --git a/test/dummy/config/initializers/session_store.rb b/test/dummy/config/initializers/session_store.rb new file mode 100644 index 0000000..e766b67 --- /dev/null +++ b/test/dummy/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_dummy_session' diff --git a/test/dummy/config/initializers/wrap_parameters.rb b/test/dummy/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/test/dummy/config/initializers/wrap_parameters.rb @@ -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 diff --git a/test/dummy/config/locales/en.yml b/test/dummy/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/test/dummy/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/test/dummy/config/routes.rb b/test/dummy/config/routes.rb new file mode 100644 index 0000000..3f66539 --- /dev/null +++ b/test/dummy/config/routes.rb @@ -0,0 +1,56 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + # root 'welcome#index' + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/test/dummy/config/secrets.yml b/test/dummy/config/secrets.yml new file mode 100644 index 0000000..c621c5a --- /dev/null +++ b/test/dummy/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: c53b94057e642e092f31259835d5d0e5f5a8ddafd9c909d0b3fa4b8d8943376e8b75272b304e851a78d3fe5bcc0876f0a5c087f9ed2f29d238194d573bfd247a + +test: + secret_key_base: 1795e84e03b4646722454c9658d58cc88dca7e3469605daf77a5143c0fbf7b0c67a6b95684b2c693c5d19aab955daa070fa889ca2714e345be478e686237a335 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/test/dummy/lib/assets/.keep b/test/dummy/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/log/.keep b/test/dummy/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/dummy/public/404.html b/test/dummy/public/404.html new file mode 100644 index 0000000..b612547 --- /dev/null +++ b/test/dummy/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
    +
    +

    The page you were looking for doesn't exist.

    +

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

    +
    +

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

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

    The change you wanted was rejected.

    +

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

    +
    +

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

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

    We're sorry, but something went wrong.

    +
    +

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

    +
    + + diff --git a/test/dummy/public/favicon.ico b/test/dummy/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/test/helpers/seminar_helper_test.rb b/test/helpers/seminar_helper_test.rb new file mode 100644 index 0000000..b3b3157 --- /dev/null +++ b/test/helpers/seminar_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class SeminarHelperTest < ActionView::TestCase +end diff --git a/test/seminar_test.rb b/test/seminar_test.rb new file mode 100644 index 0000000..b1770aa --- /dev/null +++ b/test/seminar_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SeminarTest < ActiveSupport::TestCase + test "truth" do + assert_kind_of Module, Seminar + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000..ec238d9 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,18 @@ +# Configure Rails Environment +ENV["RAILS_ENV"] = "test" + +require File.expand_path("../../test/dummy/config/environment.rb", __FILE__) +ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)] +require "rails/test_help" + +# Filter out Minitest backtrace while allowing backtrace from other libraries +# to be shown. +Minitest.backtrace_filter = Minitest::BacktraceFilter.new + +# Load support files +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } + +# Load fixtures from the engine +if ActiveSupport::TestCase.method_defined?(:fixture_path=) + ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) +end