diff --git a/app/assets/javascripts/admin/categories.js b/app/assets/javascripts/admin/categories.js new file mode 100644 index 0000000..03cb492 --- /dev/null +++ b/app/assets/javascripts/admin/categories.js @@ -0,0 +1,21 @@ +$(function() { + $.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').attr('action', '/admin/module_apps/' + item.data('module') + '/categories/'); + pageslide.find('form').attr('method', 'post'); + } + else { + setForm(item.data('form')); + pageslide.find('form').attr('action', '/admin/module_apps/' + item.data('module') + '/categories/' + item.data('id')); + pageslide.find('form').attr('method', 'put'); + console.log(item.data('disable')); + pageslide.find('input[type="checkbox"]').prop( 'checked', item.data('disable') ); + } + }); +}) \ No newline at end of file diff --git a/app/assets/javascripts/admin/tags.js b/app/assets/javascripts/admin/tags.js index 3283b23..54396f4 100644 --- a/app/assets/javascripts/admin/tags.js +++ b/app/assets/javascripts/admin/tags.js @@ -1,21 +1,40 @@ //= require lib/tags $(function() { + $('a[data-toggle="tab"]').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + }); + + // $('#tags-list .filter-item.default .card').click(function(){ + // $('#removeDefaults').attr('rel', "<%= Rails.application.routes.url_helpers.remove_default_admin_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids); + // $('#removeDefaults').removeClass('hide'); + // console.log("@@"); + // }); + $.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.hasClass('btn')) { + $('#filter-default-tag').fastLiveFilter('.add-default-tags-list', '.filter-item', '.tag'); + } + if(item.data('id') == 'new') { resetForm(); - pageslide.find('form').attr('action', '/admin/tags/'); - pageslide.find('form').attr('method', 'post'); - } - else { + 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').attr('action', '/admin/tags/' + item.data('id')); - pageslide.find('form').attr('method', 'put'); + 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/javascripts/ckeditor/config.js.erb b/app/assets/javascripts/ckeditor/config.js.erb index 199ec32..1fe6b38 100644 --- a/app/assets/javascripts/ckeditor/config.js.erb +++ b/app/assets/javascripts/ckeditor/config.js.erb @@ -26,9 +26,9 @@ CKEDITOR.editorConfig = function( config ) { // config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images'; // config.filebrowserUploadUrl = '/uploader/upload.php'; - config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:module_app_id=>ModuleApp.where(:key=>'asset').first.id) %>"; - config.filebrowserImageBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:type=>'image',:module_app_id=>ModuleApp.where(:key=>'asset').first.id) %>"; - // config.filebrowserUploadUrl = "<%= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>"; + config.filebrowserBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:module_app_id=>ModuleApp.where(:key=>'asset').first.id) rescue '' %>"; + config.filebrowserImageBrowseUrl = "<%= Rails.application.routes.url_helpers.admin_assets_path(:type=>'image',:module_app_id=>ModuleApp.where(:key=>'asset').first.id) rescue '' %>"; + // config.filebrowserUploadUrl = "<%#= Rails.application.routes.url_helpers.file_upload_admin_assets_path %>"; // config.contentsCss = '/orbit_4.0.1/assets/javascripts/lib/ckeditor/plugins/stylesheetparser/samples/assets/sample.css'; diff --git a/app/assets/javascripts/lib/tags.js.erb b/app/assets/javascripts/lib/tags.js.erb index b24d0d2..9cdc70b 100755 --- a/app/assets/javascripts/lib/tags.js.erb +++ b/app/assets/javascripts/lib/tags.js.erb @@ -1,207 +1,209 @@ function checkTagsQuantity() { - var $tagLead = $('.tag-lead'), - $tagsGroups = $('.tags-groups'); + var $tagLead = $('.tag-lead'), + $tagsGroups = $('.tags-groups'); - $tagsGroups.each(function(i) { - var $children = $(this).children().length; - $tagLead.eq(i).children('.badge').text($children); - }) + $tagsGroups.each(function(i) { + var $children = $(this).children().length; + $tagLead.eq(i).children('.badge').text($children); + }) } function checkedLength() { - var $tagsList = $('#tags-list'), - $moduleTags, - $defaultTags, - $toDefault; - function reload_links() { - if($('.default-tags').length) { - $moduleTags = $('.module-tags input[type="checkbox"]:checked'); - $defaultTags = $('.default-tags input[type="checkbox"]:checked'); + var $tagsList = $('#tags-list'), + $moduleTags, + $defaultTags, + $toDefault; + function reload_links() { + if($('.default-tags').length) { + $moduleTags = $('.module-tags input[type="checkbox"]:checked'); + $defaultTags = $('.default-tags input[type="checkbox"]:checked'); - if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) { - $('#mergerTags').removeClass('hide'); - } else { - $('#mergerTags').addClass('hide'); - }; + if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) { + $('#mergerTags').removeClass('hide'); + } else { + $('#mergerTags').addClass('hide'); + }; + } else { + $moduleTags = $('li.module input[type="checkbox"]:checked'); + $defaultTags = $('li.default input[type="checkbox"]:checked'); - if ($moduleTags.length > 0 || $defaultTags.length > 0) { - $('#deselect').removeClass('hide'); - var ids = new Array(); - $defaultTags.each(function(i) { - ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val()); - }); - $moduleTags.each(function(i) { - ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); - }); - $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>" + "?ids=" + ids); - $('#deleteTags').removeClass('hide'); - $('#deselect').on('click', deselect); - } else { - $('#deselect').addClass('hide'); - $('#deleteTags').attr('rel', ""); - $('#deleteTags').addClass('hide'); - $('#deselect').off('click', deselect); - }; + if($defaultTags.length > 0 || $moduleTags.length > 0) { + $('#deselect').removeClass('hide'); + $('#deselect').on('click', deselect); + if($defaultTags.length > 0 && $moduleTags.length > 0) { + $('#deleteTags').attr('rel', ""); + $('#deleteTags').addClass('hide'); + $('#removeDefaults').attr('rel', ""); + $('#removeDefaults').addClass('hide'); + $('#mergerTags').addClass('hide'); + } else if ($defaultTags.length > 0) { + var ids = new Array(); + $defaultTags.each(function(i) { + ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val()); + }); + $('#removeDefaults').attr('href', "<%= Rails.application.routes.url_helpers.remove_default_admin_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids); + $('#removeDefaults').removeClass('hide'); + } else { + var ids = new Array(); + $moduleTags.each(function(i) { + ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); + }); + $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>" + "?ids=" + ids); + $('#deleteTags').removeClass('hide'); + if($moduleTags.length > 1) { + $('#mergerTags').removeClass('hide'); + } else { + $('#mergerTags').addClass('hide'); + }; + }; + } else { + $('#deselect').addClass('hide'); + $('#deleteTags').attr('rel', ""); + $('#deleteTags').addClass('hide'); + $('#removeDefaults').attr('rel', ""); + $('#removeDefaults').addClass('hide'); + $('#mergerTags').addClass('hide'); + $('#deselect').off('click', deselect); + }; + }; - if ($moduleTags.length > 0 && $defaultTags.length == 0) { - var ids = new Array(); - $moduleTags.each(function(i) { - ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); - }); - $('#addDefault').attr('href', "<%= Rails.application.routes.url_helpers.add_to_default_admin_tags_path %>" + "?ids=" + ids); - $('#addDefault').removeClass('hide'); - } else { - $('#addDefault').attr('href', ""); - $('#addDefault').addClass('hide'); - }; - } else { - $moduleTags = $('.module-tags li.module input[type="checkbox"]:checked'); - $defaultTags = $('.module-tags li.default input[type="checkbox"]:checked'); - if($defaultTags.length > 0 || $moduleTags.length > 0) { - $('#deselect').removeClass('hide'); - $('#deselect').on('click', deselect); - if($defaultTags.length > 0 && $moduleTags.length > 0) { - $('#deleteTags').attr('rel', ""); - $('#deleteTags').addClass('hide'); - $('#removeDefaults').attr('rel', ""); - $('#removeDefaults').addClass('hide'); - $('#mergerTags').addClass('hide'); - } else if ($defaultTags.length > 0) { - var ids = new Array(); - $defaultTags.each(function(i) { - ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val()); - }); - $('#removeDefaults').attr('rel', "<%= Rails.application.routes.url_helpers.remove_default_admin_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids); - $('#removeDefaults').removeClass('hide'); - } else { - var ids = new Array(); - $moduleTags.each(function(i) { - ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); - }); - $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids); - $('#deleteTags').removeClass('hide'); - if($moduleTags.length > 1) { - $('#mergerTags').removeClass('hide'); - } else { - $('#mergerTags').addClass('hide'); - }; - }; - } else { - $('#deselect').addClass('hide'); - $('#deleteTags').attr('rel', ""); - $('#deleteTags').addClass('hide'); - $('#removeDefaults').attr('rel', ""); - $('#removeDefaults').addClass('hide'); - $('#mergerTags').addClass('hide'); - $('#deselect').off('click', deselect); - }; - }; - } - $tagsList.delegate('.card', 'click', function() { - reload_links(); - }); - $('#selectAllTags').on('click', function() { - $('.filter-item:not(".mark") input[type="checkbox"]').attr('checked', true); - $('.filter-item:not(".mark") .card').addClass('active'); - reload_links(); - }); - $('#deleteTags').on('click', function() { - $('#delete_tags .tags-groups').empty(); + if ($moduleTags.length > 0 && $defaultTags.length == 0) { + var ids = new Array(); + $moduleTags.each(function(i) { + ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); + }); + $('#addDefault').attr('href', "<%= Rails.application.routes.url_helpers.add_to_default_admin_tags_path %>" + "?ids=" + ids); + $('#addDefault').removeClass('hide'); + } else { + $('#addDefault').attr('href', ""); + $('#addDefault').addClass('hide'); + }; + + if ($moduleTags.length > 0 || $defaultTags.length > 0) { + $('#deselect').removeClass('hide'); + var ids = new Array(); + $defaultTags.each(function(i) { + ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val()); + }); + + $moduleTags.each(function(i) { + ids.push($moduleTags.eq(i).parent().siblings('.tag_id').val()); + }); + $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>" + "?ids=" + ids); + $('#deleteTags').removeClass('hide'); + $('#deselect').on('click', deselect); + } else { + $('#deselect').addClass('hide'); + $('#deleteTags').attr('rel', ""); + $('#deleteTags').addClass('hide'); + $('#deselect').off('click', deselect); + }; + } + $tagsList.delegate('.card', 'click', function() { + reload_links(); + }); + $('#selectAllTags').on('click', function() { + $('.filter-item:not(".mark") input[type="checkbox"]').attr('checked', true); + $('.filter-item:not(".mark") .card').addClass('active'); + reload_links(); + }); + $('#deleteTags').on('click', function() { + $('#delete_tags .tags-groups').empty(); $('#delete_tags a.delete-tags').attr("href", $(this).attr("rel")); if($defaultTags) { - $defaultTags.each(function(i) { - $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#delete_tags .tags-groups'); - $('#delete_tags .tags-groups .filter-item').addClass('def'); - }); - } - $moduleTags.each(function(i) { - $moduleTags.eq(i).parents('.filter-item').clone().appendTo('#delete_tags .tags-groups'); - }); + $defaultTags.each(function(i) { + $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#delete_tags .tags-groups'); + $('#delete_tags .tags-groups .filter-item').addClass('def'); + }); + } + $moduleTags.each(function(i) { + $moduleTags.eq(i).parents('.filter-item').clone().appendTo('#delete_tags .tags-groups'); + }); $('#delete_tags').modal('show', cleanTagInputs()); function cleanTagInputs(){ - var $tagsDelete = $('#delete_tags'), - $filterItem = $tagsDelete.find('.filter-item'); - $filterItem.find('.card, .amount').remove(); - $filterItem.find('a').removeAttr('class'); - $filterItem.find('a').removeAttr('href'); + var $tagsDelete = $('#delete_tags'), + $filterItem = $tagsDelete.find('.filter-item'); + $filterItem.find('.card, .amount').remove(); + $filterItem.find('a').removeAttr('class'); + $filterItem.find('a').removeAttr('href'); } - }); - $('#mergerTags').on('click', function() { - if($moduleTags || $defaultTags) { - if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) { - $('#tags-merger form').attr("action", $(this).attr("rel")); - mergerTags() - } - } - }); - $('#removeDefaults').on('click', function() { - $('#remove_defaults .tags-groups').empty(); + }); + $('#mergerTags').on('click', function() { + if($moduleTags || $defaultTags) { + if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) { + $('#tags-merger form').attr("action", $(this).attr("rel")); + mergerTags() + } + } + }); + $('#removeDefaults').on('click', function() { + $('#remove_defaults .tags-groups').empty(); $('#remove_defaults a.remove-defaults').attr("href", $(this).attr("rel")); - $defaultTags.each(function(i) { - $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#remove_defaults .tags-groups'); - }); + $defaultTags.each(function(i) { + $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#remove_defaults .tags-groups'); + }); $('#remove_defaults').modal('show', cleanTagInputs()); function cleanTagInputs(){ - var $removeDefaults = $('#remove_defaults'), - $filterItem = $removeDefaults.find('.filter-item'); - $filterItem.find('.card, .amount').remove(); - $filterItem.find('a').removeAttr('class'); - $filterItem.find('a').removeAttr('href'); + var $removeDefaults = $('#remove_defaults'), + $filterItem = $removeDefaults.find('.filter-item'); + $filterItem.find('.card, .amount').remove(); + $filterItem.find('a').removeAttr('class'); + $filterItem.find('a').removeAttr('href'); } - }); + }); - function deselect() { - $('.tags input[type="checkbox"]').attr('checked', false); - $('.card').removeClass('active'); - $('.bottomnav .toggable').not('.open-slide').addClass('hide'); - $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>"); - $('#addDefault').attr('href', "<%= Rails.application.routes.url_helpers.add_to_default_admin_tags_path %>"); - } + function deselect() { + $('.tags input[type="checkbox"]').attr('checked', false); + $('.card').removeClass('active'); + $('.bottomnav .toggable').not('.open-slide').addClass('hide'); + $('#deleteTags').attr('rel', "<%= Rails.application.routes.url_helpers.delete_tags_admin_tags_path %>"); + $('#addDefault').attr('href', "<%= Rails.application.routes.url_helpers.add_to_default_admin_tags_path %>"); + } } function addTagsTab() { - $('a[data-toggle="tab"]').click(function (e) { - e.preventDefault(); - $(this).tab('show'); - }) + $('a[data-toggle="tab"]').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + }) } function mergerTags() { - var $moduleTags = $('.module-tags input[type="checkbox"]:checked'), - $defaultTags = $('.default-tags input[type="checkbox"]:checked'); + var $moduleTags = $('.module-tags input[type="checkbox"]:checked'), + $defaultTags = $('.default-tags input[type="checkbox"]:checked'); - $defaultTags.each(function(i) { - $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups'); - $('#tags-merger .tags-groups .filter-item').addClass('def'); - }); - $moduleTags.each(function(i) { - $moduleTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups'); - }); + $defaultTags.each(function(i) { + $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups'); + $('#tags-merger .tags-groups .filter-item').addClass('def'); + }); + $moduleTags.each(function(i) { + $moduleTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups'); + }); - $('#tags-merger').modal('show', changeTagName()); - function changeTagName() { - var $tagsMerger = $('#tags-merger'), - $newTagsName = $('.new-tags-name'), - $filterItem = $tagsMerger.find('.filter-item'); - $filterItem.find('.card, .amount').remove(); - $filterItem.find('a').removeAttr('class'); - $filterItem.find('a').removeAttr('href'); - $filterItem.on('click', function() { - $(this).find('.tag').each(function(i) { - $newTagsName.eq(i).val($(this).text()) - }); - }); - } + $('#tags-merger').modal('show', changeTagName()); + function changeTagName() { + var $tagsMerger = $('#tags-merger'), + $newTagsName = $('.new-tags-name'), + $filterItem = $tagsMerger.find('.filter-item'); + $filterItem.find('.card, .amount').remove(); + $filterItem.find('a').removeAttr('class'); + $filterItem.find('a').removeAttr('href'); + $filterItem.on('click', function() { + $(this).find('.tag').each(function(i) { + $newTagsName.eq(i).val($(this).text()) + }); + }); + } } $(function() { - if($('.default-tags').length) { - checkedLength(); - $('#tags-merger').on('hidden', function () { - $(this).find('.filter-item').remove(); - }); - } else { - checkedLength(); - }; + if($('.default-tags').length) { + checkedLength(); + $('#tags-merger').on('hidden', function () { + $(this).find('.filter-item').remove(); + }); + } else { + checkedLength(); + }; }); diff --git a/app/assets/stylesheets/admin/categories.css.scss b/app/assets/stylesheets/admin/categories.css.scss new file mode 100644 index 0000000..42f3561 --- /dev/null +++ b/app/assets/stylesheets/admin/categories.css.scss @@ -0,0 +1,6 @@ +// Place all the styles related to the admin/categories controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ +/* + *= require lib/tags-groups +*/ \ No newline at end of file diff --git a/app/assets/stylesheets/lib/tags-groups.css b/app/assets/stylesheets/lib/tags-groups.css index dff88fc..a1d47f1 100644 --- a/app/assets/stylesheets/lib/tags-groups.css +++ b/app/assets/stylesheets/lib/tags-groups.css @@ -55,6 +55,16 @@ .tags-groups li.active .amount { color: #8cb8be; } +.tags-groups li.add { + background-color: #cccccc; + cursor: pointer; +} +.tags-groups li.add a{ + color: #333333; +} +.tags-groups li.disabled { + background-color: #707070; +} .tags-groups li a { text-decoration: none; color: #ededed; diff --git a/app/controllers/admin/categories_controller.rb b/app/controllers/admin/categories_controller.rb new file mode 100644 index 0000000..9480e21 --- /dev/null +++ b/app/controllers/admin/categories_controller.rb @@ -0,0 +1,46 @@ +class Admin::CategoriesController < OrbitAdminController + before_action :setup_vars + + def index + unless @module_app.nil? + @categories = Kaminari.paginate_array(@module_app.categories).page(params[:page]).per(10) + end + end + + def create + category = @module_app.categories.build(category_params) + category.save + redirect_to request.referer, :status => 303 + end + + def create_in_form + @category = @module_app.categories.build(category_params) + @category.save + render :json => {:id=>@category.id.to_s, :title=>@category.title}.to_json ,:layout => false + end + + def update + @category = Category.find(params[:id]) + @category.update_attributes(category_params) + redirect_to request.referer, :status => 303 + end + + def toggle + category = Category.find(params[:id]) + category.disable = category.disable ? false : true + category.save! + redirect_to request.referer, :status => 303 + end + + private + + def setup_vars + @module_apps = params[:module_app_id].blank? ? ModuleApp.where(categorizable: true) : [ModuleApp.find(params[:module_app_id])] + @module_app = params[:module_app_id].blank? ? ModuleApp.find_by(:key=>'category') : ModuleApp.find(params[:module_app_id]) + end + + def category_params + params.require(:category).permit! + end + +end diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 513c250..e991bd2 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -1,39 +1,31 @@ -class Admin::TagsController < ApplicationController +class Admin::TagsController < OrbitAdminController before_filter :setup_vars - layout "back_end" - def index @tag = Tag.new - @tags = Tag.where(:is_default=>true) - @module_apps = ModuleApp.where(taggable: true) - end - - def new - @tag = Tag.new - render layout: false - end - - def edit - @tag = Tag.find(params[:id]) - render layout: false + @tags = @is_module_tag ? @module_app.tags.where(:is_default=>true) : Tag.where(:is_default=>true) + @default_tags = Tag.where(:is_default=>true).not_in(:id => @module_app.tag_ids) end def create - @tag = Tag.new(tag_params.merge(is_default: true)) - if @tag.save - redirect_to admin_tags_url - else - @tag = Tag.new(tag_params) - flash.now[:error] = t('create.error.tag') - render :action => "new" - end + @tag = Tag.new(tag_params.merge(is_default: !@is_module_tag)) + if @tag.save + @module_app.tags << @tag if @is_module_tag + end + redirect_to request.referer, :status => 303 + end + + def create_in_form + @tag = Tag.new(tag_params.merge(is_default: !@is_module_tag)) + @tag.save + @module_app.tags << @tag + render :json => {:id=>@tag.id.to_s, :name=>@tag.name}.to_json ,:layout => false end def update @tag = Tag.find(params[:id]) if @tag.update_attributes(tag_params) - redirect_to action: :index, :status => 303 + redirect_to request.referer, :status => 303 else flash.now[:error] = t('update.error.tag') render :action => "edit" @@ -45,7 +37,15 @@ class Admin::TagsController < ApplicationController if tags tags.each(&:destroy) end - redirect_to admin_tags_url + redirect_to request.referer, :status => 303 + end + + def add_from_default + tags = Tag.find(params[:ids].split(',')) rescue nil + if tags + @module_app.tags << tags + end + redirect_to request.referer, :status => 303 end def add_to_default @@ -55,7 +55,17 @@ class Admin::TagsController < ApplicationController tag.update_attribute(:is_default, true) end end - redirect_to admin_tags_url + redirect_to request.referer, :status => 303 + end + + def remove_default + tags = Tag.find(params[:ids].split(',')) rescue nil + if tags + tags.each do |tag| + tag.update_attribute(:is_default, false) + end + end + redirect_to request.referer, :status => 303 end def merge @@ -88,17 +98,19 @@ class Admin::TagsController < ApplicationController new_tag.save - redirect_to admin_tags_url + redirect_to request.referer, :status => 303 end def tag_params - params.require(:tag).permit! + params.require(:tag).permit! unless params[:tag].blank? end protected def setup_vars - @module_app = ModuleApp.where(:key=>"tag").first + @is_module_tag = !params[:module_app_id].blank? + @module_apps = @is_module_tag ? [ModuleApp.find(params[:module_app_id])] : ModuleApp.where(categorizable: true) + @module_app = @is_module_tag ? ModuleApp.find(params[:module_app_id]) : ModuleApp.find_by(:key=>'tag') end end \ No newline at end of file diff --git a/app/helpers/admin/categories_helper.rb b/app/helpers/admin/categories_helper.rb new file mode 100644 index 0000000..f586acd --- /dev/null +++ b/app/helpers/admin/categories_helper.rb @@ -0,0 +1,2 @@ +module Admin::CategoriesHelper +end diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index 3691b0d..75857e8 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -78,6 +78,14 @@ module OrbitBackendHelper def is_filter_active?(field, value) params[:filters][field].include?(value.to_s) ? "active" : "" rescue "" end + + def select_category(f, module_app) + render :partial => '/admin/categories/select_form', :locals => {:f=> f, :module_app=>module_app } + end + + def select_tag(f, module_app, object) + render :partial => '/admin/tags/tag_form', :locals => {:f=> f, :module_app=>module_app, :object=>object } + end end diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 1e81311..7733818 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -82,11 +82,19 @@ module OrbitHelper res << "
  • #{params[:type].underscore.humanize.capitalize} #{t(:authorization_)}
  • " end when 'categories' - res << "
  • #{@module_app.title}#{divider}
  • " - res << "
  • #{t(:categories)}
  • " - when 'module_tags' - res << "
  • #{@module_app.title}#{divider}
  • " - res << "
  • #{t(:tags)}
  • " + if @module_app.key!='category' + res << "
  • #{@module_app.title}#{divider}
  • " + res << "
  • #{t(:categories)}
  • " + else + res << "
  • #{@module_app.title}
  • " + end + when 'tags' + if @module_app.key!='tag' + res << "
  • #{@module_app.title}#{divider}
  • " + res << "
  • #{t(:tags)}
  • " + else + res << "
  • #{@module_app.title}
  • " + end else if params[:action].eql?('index') res << "
  • #{@module_app.title}
  • " diff --git a/app/views/admin/categories/_category.html.erb b/app/views/admin/categories/_category.html.erb new file mode 100644 index 0000000..6a07e3c --- /dev/null +++ b/app/views/admin/categories/_category.html.erb @@ -0,0 +1,9 @@ +
  • "> + <%= hidden_field_tag "ids[]", category.id, class: "category_id" %> + <%= link_to '#', class: "open-slide", data: {title: t(:edit_category), id: category.id.to_s, module: @mod.id.to_s, form: category.title_translations, disable: category.disable} do %> + <% if category.disable %> + + <% end %> + <%= category.title_translations.values.join(" / ") %> + <% end %> +
  • \ No newline at end of file diff --git a/app/views/admin/categories/_index.html.erb b/app/views/admin/categories/_index.html.erb new file mode 100644 index 0000000..b3ab042 --- /dev/null +++ b/app/views/admin/categories/_index.html.erb @@ -0,0 +1,22 @@ + +
    +
    + <% @module_apps.each do |mod| %> + <% + @mod = mod + categories = mod.categories + %> + <% icon_name = OrbitApp::Module::Registration.find_by_key(mod.key).get_icon_class rescue 'icons-daniel-bruce-2' %> +

    <%= mod.title %> <%= categories.count %>

    + + <% end %> +
    +
    + \ No newline at end of file diff --git a/app/views/admin/categories/_select_form.html.erb b/app/views/admin/categories/_select_form.html.erb new file mode 100644 index 0000000..beb9227 --- /dev/null +++ b/app/views/admin/categories/_select_form.html.erb @@ -0,0 +1,56 @@ + + <%= f.select :category_id, module_app.categories.collect{|t| [ t.title, t.id ]} %> + + + + + + \ No newline at end of file diff --git a/app/views/admin/categories/index.html.erb b/app/views/admin/categories/index.html.erb new file mode 100644 index 0000000..04a7e12 --- /dev/null +++ b/app/views/admin/categories/index.html.erb @@ -0,0 +1,36 @@ +
    + <%= render 'index' %> +
    + +
    +
    + + + + +
    +
    +
    +
    + <%= form_for :category, url: nil, remote: true do |f| %> +
    + <%= f.fields_for :title_translations do |f| %> + <% Site.first.in_use_locales.each do |locale| %> + <%= label_tag "name-#{locale}", "#{t(:name)} (#{t(locale)})" %> + <%= f.text_field locale, :class => 'input-large', :value => (@category.title_translations[locale] rescue ''), placeholder: t(:name), id: locale %> + <% end %> + <% end %> + <%= label_tag "disable" do %> + <%= f.check_box :disable %> + <%= t(:disable) %> + <% end %> +
    + <%= t(:cancel) %> + <%= f.submit t(:submit), class: 'btn btn-primary btn-small' %> +
    +
    + <% end %> +
    +
    +
    +
    \ No newline at end of file diff --git a/app/views/admin/categories/index.js.erb b/app/views/admin/categories/index.js.erb new file mode 100644 index 0000000..641d1fa --- /dev/null +++ b/app/views/admin/categories/index.js.erb @@ -0,0 +1,3 @@ +$("#categories_index").html("<%= j render 'index' %>") +$.pageslide.close(); +openSlide(); \ No newline at end of file diff --git a/app/views/admin/tags/_index.html.erb b/app/views/admin/tags/_index.html.erb index 057ce16..955dd71 100644 --- a/app/views/admin/tags/_index.html.erb +++ b/app/views/admin/tags/_index.html.erb @@ -5,6 +5,7 @@ <%= link_to t(:delete_), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %> <%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_tags_path %> + <%= link_to t(:remove_default), '#', id: "removeDefaults", class: "btn btn-info toggable hide", method: :post, remote: true %> <%= link_to t(:add_to_default), add_to_default_admin_tags_path, id: "addDefault", class: "btn btn-info toggable hide", method: :post, remote: true %> <%= link_to content_tag(:i, nil, class: "icons-plus") + " " + t(:add), '#', class: "btn btn-primary open-slide", data: {title: t('new.tag'), id: 'new'} %> @@ -14,10 +15,12 @@
    -

    <%= t(:default) %> <%= @tags.count %>

    - + <% unless @is_module_tag %> +

    <%= t(:default) %> <%= @tags.count %>

    + + <% end %> <% @module_apps.each do |mod| %> <% @mod = mod diff --git a/app/views/admin/tags/_tag.html.erb b/app/views/admin/tags/_tag.html.erb index 6d050fc..23c2d74 100644 --- a/app/views/admin/tags/_tag.html.erb +++ b/app/views/admin/tags/_tag.html.erb @@ -1,20 +1,20 @@ -
  • - - <% unless defined?(in_module) && tag.is_default %> +
  • + <% if defined?(in_module) && tag.is_default && !@is_module_tag %> + + + <%= tag.get_module_tagging_count @mod.taggable_model %> + + <%= tag.show_names_slash %> + + <% else %>

    <%= hidden_field_tag "ids[]", tag.id, class: "tag_id" %> - <% end %> - - <% if defined?(in_module) && tag.is_default %> - - <%= tag.get_module_tagging_count @mod.taggable_model %> - <%= tag.show_names_slash %> - - <% else %> <%= link_to '#', class: "open-slide", data: {title: t('editing.tag'), id: tag.id.to_s, form: tag.name_translations} do %> - <%= tag.taggings.count %> + + <%= tag.taggings.count %> + <%= tag.show_names_slash %> <% end %> <% end %> diff --git a/app/views/admin/tags/_tag_form.html.erb b/app/views/admin/tags/_tag_form.html.erb new file mode 100644 index 0000000..79c902d --- /dev/null +++ b/app/views/admin/tags/_tag_form.html.erb @@ -0,0 +1,62 @@ +
    + + <% module_app.tags.each do |tag| %> + + <% end %> + +
    + + + + + \ No newline at end of file diff --git a/app/views/admin/tags/index.html.erb b/app/views/admin/tags/index.html.erb index 6d031fa..f341a3d 100644 --- a/app/views/admin/tags/index.html.erb +++ b/app/views/admin/tags/index.html.erb @@ -1,3 +1,5 @@ +<%= hidden_field_tag 'module_app_id', @module_app.id.to_s %> + <% content_for :right_nav do %>
    @@ -19,15 +21,59 @@
    - <%= form_for :tag, url: nil, remote: true do |f| %> -
    - <%= render :partial => "form", :locals => { :f => f } %> -
    - <%= t(:cancel) %> - <%= f.submit t(:submit), class: 'btn btn-primary btn-small' %> +
    + + <% if @is_module_tag %> + + <% end %> + +
    + +
    + <%= form_for :tag, url: nil, remote: true do |f| %> +
    + <%= render :partial => "form", :locals => { :f => f } %> +
    + <%= t(:cancel) %> + <%= f.submit t(:submit), class: 'btn btn-primary btn-small' %> +
    +
    + <% end %>
    -
    - <% end %> + + <% if @is_module_tag %> +
    + + <%= form_tag add_from_default_admin_module_app_tags_path(:module_app_id=>@module_app.id), id: "filter-default-tag", method: :post, remote: true do %> +
    + +
    + <%= t(:cancel) %> + <%= submit_tag t(:add), class: 'btn btn-primary btn-small' %> +
    +
    + <% end %> +
    + <% end %> +
    + +
  • diff --git a/app/views/admin/tags/index.js.erb b/app/views/admin/tags/index.js.erb index ac7e2ee..379573b 100644 --- a/app/views/admin/tags/index.js.erb +++ b/app/views/admin/tags/index.js.erb @@ -1,9 +1,10 @@ $("#delete_tags").modal('hide'); $("#tags-merger").modal('hide'); +$("#remove_defaults").modal('hide'); $("#tags_index").html("<%= j render 'index' %>") $.pageslide.close(); openSlide(); $('.card').cardCheck({ item: $('.card input[type="checkbox"]'), }); -checkedLength() \ No newline at end of file +checkedLength(); \ No newline at end of file diff --git a/app/views/admin/tags/new.html.erb b/app/views/admin/tags/new.html.erb deleted file mode 100644 index 41230ac..0000000 --- a/app/views/admin/tags/new.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render 'new' %> diff --git a/config/environment.rb b/config/environment.rb index 40bba31..015b484 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -20,7 +20,26 @@ if Page.count == 0 end if User.count==0 + group = Workgroup.new + group.title = "Administrator" + group.key = 'admin' + group.save + + role = Role.new + role.key = 'admin' + role.title_translations = {:en=>'Administrator', :zh_tw=>'Administrator'} + role.save + + profile = MemberProfile.new + profile.first_name_translations = {:en=>'Digital', :zh_tw=>'Digital'} + profile.last_name_translations = {:en=>'Ruling', :zh_tw=>'Ruling'} + profile.save + + role.member_profiles << profile + user = User.new + user.workgroup = group + user.member_profile = profile user.user_name = "rulingcom" user.password = "bjo4xjp6" user.email = "orbit@rulingcom.com" diff --git a/config/initializers/orbit_category.rb b/config/initializers/orbit_category.rb new file mode 100644 index 0000000..22988c7 --- /dev/null +++ b/config/initializers/orbit_category.rb @@ -0,0 +1,21 @@ + OrbitApp.registration "Category", type: 'ModuleApp' do + module_label 'module_name.category' + base_url File.expand_path File.dirname(__FILE__) + + authorizable + + side_bar do + head_label_i18n 'module_name.category', icon_class: "icons-flow-cascade" + head_link_path "admin_categories_path" + active_for_controllers (['admin/categories']) + + # available_for [:admin, :manager] + + # context_link 'all', + # link_path: "admin_categorys_path", + # priority: 1, + # active_for_action: {categorys: :index}, + # available_for: [:admin, :manager] + + end + end diff --git a/config/initializers/orbit_tag.rb b/config/initializers/orbit_tag.rb index 13475b5..4a23af1 100644 --- a/config/initializers/orbit_tag.rb +++ b/config/initializers/orbit_tag.rb @@ -7,7 +7,7 @@ side_bar do head_label_i18n 'module_name.tag', icon_class: "icons-tag" head_link_path "admin_tags_path" - active_for_controllers ({public: ['admin/tags']}) + active_for_controllers (['admin/tags']) # available_for [:admin, :manager] diff --git a/config/locales/en.yml b/config/locales/en.yml index 69e7d5e..06720a0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -667,6 +667,7 @@ en: module_name: tag: Tag + category: Category datetime_picker: date: diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 0984455..c06ab0a 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -1,5 +1,7 @@ zh_tw: _locale: 中文 + en: 英文 + zh_tw: 中文 more: "更多" site_: 網站 site_info: 基本資訊 @@ -7,8 +9,10 @@ zh_tw: site_structure: 網站架構 sitemap: 網站地圖 site_name: 網站名稱 + submit: 送出 mobile_settings: 行動設定 modules: 網站模組 + name: 名稱 search_engine: 搜尋引擎 templates: 網站模版 preference: 系統偏好 @@ -17,8 +21,10 @@ zh_tw: locale: 位置 login: 登入 logout: 登出 + cancel: 取消 dashboard_: 儀表版 desktop: 桌面 + disable: 停用 password: 密碼 all: 全部 add: 新增 @@ -60,4 +66,5 @@ zh_tw: register: 註冊 registered: 已註冊 - + module_name: + category: 類別 diff --git a/config/routes.rb b/config/routes.rb index c148ad6..b2f1368 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -51,15 +51,41 @@ Orbit::Application.routes.draw do post 'toggle' end - resources :module_apps + resources :module_apps do + resources :categories do + collection do + post 'create_in_form' + end + member do + post 'toggle' + end + end + resources :tags do + collection do + post 'add_to_default' + post 'add_from_default' + post 'create_in_form' + post 'delete_tags' + post 'merge' + post 'remove_default' + post 'update_included_default' + end + end + end get 'authorizations(/:module(/:type(/:id)))' => 'authorizations#index', :as => :authorizations resources :authorizations resources :items + resources :categories do + member do + post 'toggle' + end + end resources :tags do collection do post 'add_to_default' + post 'add_from_default' post 'delete_tags' post 'merge' post 'remove_default' diff --git a/lib/orbit_app/helper/context_link_renderer.rb b/lib/orbit_app/helper/context_link_renderer.rb index c4aa62c..f578875 100644 --- a/lib/orbit_app/helper/context_link_renderer.rb +++ b/lib/orbit_app/helper/context_link_renderer.rb @@ -7,7 +7,7 @@ module ContextLinkRenderer @request = request @params = params @current_user = current_user - content_tag :li, link_to(content_tag(:span, I18n.t(@label_i18n)), Rails.application.routes.url_helpers.send(@path)), :class => ( active_actions[controller] == action ? 'active' : nil) + content_tag :li, link_to(content_tag(:span, I18n.t(@label_i18n)), Rails.application.routes.url_helpers.send(@path, @arg)), :class => ( active_actions[controller] == action ? 'active' : nil) end end \ No newline at end of file diff --git a/lib/orbit_app/module/side_bar.rb b/lib/orbit_app/module/side_bar.rb index 5ee4ee6..ecfb5d9 100644 --- a/lib/orbit_app/module/side_bar.rb +++ b/lib/orbit_app/module/side_bar.rb @@ -142,6 +142,7 @@ module OrbitApp @label_i18n = label_i18n @priority = options[:priority] || 0 @path = options[:link_path] || "" + @arg = options[:link_arg] || "" set_available_for_avoiding_sensitive_links(options[:available_for] ) @active_for_action = options[:active_for_action] || [] @active_for_app_auth = options[:active_for_app_auth] || [] diff --git a/public/assets/bulletin_file/file/535f7fd06d616e3889220000/thumb_Ruling_Digital-LOGO.jpg b/public/assets/bulletin_file/file/535f7fd06d616e3889220000/thumb_Ruling_Digital-LOGO.jpg deleted file mode 100644 index 56b5f49..0000000 Binary files a/public/assets/bulletin_file/file/535f7fd06d616e3889220000/thumb_Ruling_Digital-LOGO.jpg and /dev/null differ diff --git a/test/controllers/admin/categories_controller_test.rb b/test/controllers/admin/categories_controller_test.rb new file mode 100644 index 0000000..1f3df16 --- /dev/null +++ b/test/controllers/admin/categories_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class Admin::CategoriesControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/helpers/admin/categories_helper_test.rb b/test/helpers/admin/categories_helper_test.rb new file mode 100644 index 0000000..3b21c35 --- /dev/null +++ b/test/helpers/admin/categories_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class Admin::CategoriesHelperTest < ActionView::TestCase +end