diff --git a/app/assets/javascripts/management/object_types.coffee b/app/assets/javascripts/management/object_types.coffee deleted file mode 100644 index 24f83d18bbd38c24c4f7c3c2fc360cd68e857a2a..0000000000000000000000000000000000000000 --- a/app/assets/javascripts/management/object_types.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# 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/stylesheets/management/object_types.scss b/app/assets/stylesheets/management/object_types.scss deleted file mode 100644 index 50fa99926838dd5a5ace0e1740788e8de9883451..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/management/object_types.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the management/object_types controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/management/mime_types_controller.rb b/app/controllers/management/mime_types_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..6f826068eb3b678037ee3086816e9acc86d2b001 --- /dev/null +++ b/app/controllers/management/mime_types_controller.rb @@ -0,0 +1,69 @@ +class Management::MimeTypesController < ManagementController + before_action :set_mime_type, only: [:edit, :update, :destroy] + + # GET /management/mime_types + # GET /management/mime_types.json + def index + @mime_types = ::MimeType.all + end + + # GET /management/mime_types/new + def new + @mime_type = ::MimeType.new + end + + # GET /management/mime_types/1/edit + def edit + end + + # POST /management/mime_types + # POST /management/mime_types.json + def create + @mime_type = ::MimeType.new(mime_type_params) + + respond_to do |format| + if @mime_type.save + format.html { redirect_to management_mime_types_path, notice: 'Mime type criado com sucesso.' } + format.json { render :show, status: :created, location: @mime_type } + else + format.html { render :new } + format.json { render json: @mime_type.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /management/mime_types/1 + # PATCH/PUT /management/mime_types/1.json + def update + respond_to do |format| + if @mime_type.update(mime_type_params) + format.html { redirect_to management_mime_types_path, notice: 'Mime type atualizado com sucesso.' } + format.json { render :show, status: :ok, location: @management_mime_type } + else + format.html { render :edit } + format.json { render json: @mime_type.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /management/mime_types/1 + # DELETE /management/mime_types/1.json + def destroy + @mime_type.destroy + respond_to do |format| + format.html { redirect_to management_mime_types_url, notice: 'Mime Type destruido com sucesso.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_mime_type + @mime_type = ::MimeType.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def mime_type_params + params.require(:mime_type).permit(:extension, :mime_type) + end +end diff --git a/app/controllers/management/object_types_controller.rb b/app/controllers/management/object_types_controller.rb index b13a975d4b6e0a4be4d2f8fb8f884ca03195718b..64709f2013435db9818a8f97deaeab5f1a9e85c2 100644 --- a/app/controllers/management/object_types_controller.rb +++ b/app/controllers/management/object_types_controller.rb @@ -1,25 +1,29 @@ class Management::ObjectTypesController < ManagementController before_action :set_management_object_type, only: [:edit, :update, :destroy] + before_action :get_mime_types, only: [:new, :edit] # GET /management/object_types # GET /management/object_types.json def index - @object_types = ::ObjectType.all + @object_types = ::ObjectType.includes(:mime_types).all end # GET /management/object_types/new def new @object_type = ::ObjectType.new + @selected = [] end # GET /management/object_types/1/edit def edit + @selected = @object_type.mime_types.map { |mime_type| mime_type.id } end + # POST /management/object_types # POST /management/object_types.json def create - @object_type = ::ObjectType.new(object_type_params) + @object_type = ::ObjectType.new(sanitazed_params) respond_to do |format| if @object_type.save @@ -36,8 +40,8 @@ class Management::ObjectTypesController < ManagementController # PATCH/PUT /management/object_types/1.json def update respond_to do |format| - if @object_type.update(object_type_params) - format.html { redirect_to management_object_types_path, notice: 'Object type was successfully updated.' } + if @object_type.update(sanitazed_params) + format.html { redirect_to management_object_types_path, notice: 'Tipo de objeto atualizado com sucesso.' } format.json { render :show, status: :ok, location: management_object_types_path } else format.html { render :edit } @@ -51,19 +55,36 @@ class Management::ObjectTypesController < ManagementController def destroy SafeObjectTypeDestroyService.execute @object_type respond_to do |format| - format.html { redirect_to management_object_types_url, notice: 'Object type was successfully destroyed.' } + format.html { redirect_to management_object_types_url, notice: 'Tipo de objeto destruido com sucesso.' } format.json { head :no_content } end end private - # Use callbacks to share common setup or constraints between actions. - def set_management_object_type - @object_type = ObjectType.find(params[:id]) - end - # Never trust parameters from the scary internet, only allow the white list through. - def object_type_params - params.require(:object_type).permit(:name) + # Get all the mime types + def get_mime_types + @mime_types = MimeType.all + end + # Use callbacks to share common setup or constraints between actions. + def set_management_object_type + @object_type = ObjectType.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def object_type_params + params.require(:object_type).permit(:name, mime_types: []) + end + + # Build mimetypes + def sanitazed_params + _params = object_type_params + _params[:mime_types] = [] + unless object_type_params[:mime_types].blank? + object_type_params[:mime_types].each do |mime_type| + _params[:mime_types] << MimeType.find(mime_type) + end end + _params + end end diff --git a/app/helpers/management/object_types_helper.rb b/app/helpers/management/object_types_helper.rb index 136947e491a79c1a576abf41d8833b78c302a2b5..19b4fe1383986675f5c274ad08a1d474dc5ff39a 100644 --- a/app/helpers/management/object_types_helper.rb +++ b/app/helpers/management/object_types_helper.rb @@ -2,4 +2,8 @@ module Management::ObjectTypesHelper def show_delete_button?(object_type) object_type.name =~ /outros/i ? false : true end + + def mime_types(mime_types = []) + mime_types.map { |mime_type| mime_type.extension }.reduce { |i, ext| i + ', '+ ext } + end end diff --git a/app/models/mime_type.rb b/app/models/mime_type.rb new file mode 100644 index 0000000000000000000000000000000000000000..4aa9f72fc04926d9e63f56e978b7ca7e57644311 --- /dev/null +++ b/app/models/mime_type.rb @@ -0,0 +1,3 @@ +class MimeType < ActiveRecord::Base + has_and_belongs_to_many :object_types +end diff --git a/app/models/object_type.rb b/app/models/object_type.rb index 7bc5dd427a3bb29093f4a457bb820008263b45c3..0aedd137ed47c2fdb9b1b9dbb8a797c498a5bfa0 100644 --- a/app/models/object_type.rb +++ b/app/models/object_type.rb @@ -1,5 +1,6 @@ class ObjectType < ActiveRecord::Base has_many :learning_objects + has_and_belongs_to_many :mime_types validates_presence_of :name validates_uniqueness_of :name diff --git a/app/services/safe_object_type_destroy_service.rb b/app/services/safe_object_type_destroy_service.rb index d25ae86beac1e3e739013881ea3dd19bcbbf2db4..ab0bb89a4287e84c0b185d79eb001629b2158d42 100644 --- a/app/services/safe_object_type_destroy_service.rb +++ b/app/services/safe_object_type_destroy_service.rb @@ -2,7 +2,7 @@ class SafeObjectTypeDestroyService def self.execute(object_type) default_type = ObjectType.find_or_create_by(name: 'Outros') - object_type.learning_objects.each{|lo| lo.update_attribute(:object_type, default_type)} + LearningObject.where(object_type: object_type).update_all(object_type_id: default_type.id) object_type.destroy end diff --git a/app/views/layouts/management.html.erb b/app/views/layouts/management.html.erb index 5a31b893032b6d869c23a4737ff5e0e68f53a4b0..62fe8eeb76b4efbf9b1487eb4c0bc58250a96147 100644 --- a/app/views/layouts/management.html.erb +++ b/app/views/layouts/management.html.erb @@ -12,6 +12,8 @@ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <meta name="description" content="Insira aqui a descrição da página."> + <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/css/select2.min.css" rel="stylesheet" /> + <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.2/js/select2.min.js"></script> <link rel="icon" sizes="192x192" href="<%= image_url 'ico-boilerplate.png' %>"> <link rel="apple-touch-icon" href="<%= image_url 'ico-boilerplate.png' %>"> </head> diff --git a/app/views/management/mime_types/_form.html.erb b/app/views/management/mime_types/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..8419a7d4f0ddb52f4daccb8f399753ccc5f1a256 --- /dev/null +++ b/app/views/management/mime_types/_form.html.erb @@ -0,0 +1,33 @@ +<%= form_for([:management, @mime_type]) do |f| %> + <% if @mime_type.errors.any? %> + <div id="error_explanation"> + <h2><%= pluralize(@mime_type.errors.count, "error") %> prohibited this management_mime_type from being saved:</h2> + + <ul> + <% @mime_type.errors.full_messages.each do |message| %> + <li><%= message %></li> + <% end %> + </ul> + </div> + <% end %> + + <fieldset> + <label class="ls-label col-md-6"> + <b class="ls-label-text">Extensões</b> + + <p>Digite o nome do tipo</p> + <%= f.text_field :extension, {required: true} %> + </label> + <label class="ls-label col-md-6"> + <b class="ls-label-text">MimeType</b> + + <p>Digite o nome do mimetype</p> + <%= f.text_field :mime_type, {required: true} %> + </label> + </fieldset> + + <div class="ls-actions-btn"> + <button class="ls-btn">Salvar</button> + <%= link_to "Cancelar", management_mime_types_path,class: "ls-btn-danger"%> + </div> +<% end %> diff --git a/app/views/management/mime_types/edit.html.erb b/app/views/management/mime_types/edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..f95a6110e03f9e49ed5ad71a21f0ab6f3bb05434 --- /dev/null +++ b/app/views/management/mime_types/edit.html.erb @@ -0,0 +1,3 @@ +<h1>Editar Mime Type</h1> + +<%= render 'form' %> \ No newline at end of file diff --git a/app/views/management/mime_types/index.html.erb b/app/views/management/mime_types/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..79f73dcdeeb9c1a770545e0af537469d1f20ded9 --- /dev/null +++ b/app/views/management/mime_types/index.html.erb @@ -0,0 +1,25 @@ +<h1 class="ls-title-intro ls-ico-list2">Tipos de Objetos</h1> +<a href="<%= new_management_mime_type_path %>" class="ls-btn-primary" aria-expanded="false" role="combobox">Cadastrar novo</a> +<table class="ls-table"> + <thead> + <tr> + <th>Nome</th> + <th>MimeType</th> + <th></th> + <th></th> + </tr> + </thead> + + <tbody> + <% @mime_types.each do |mime_type| %> + <tr> + <td><%= mime_type.extension %></td> + <td><%= mime_type.mime_type %></td> + <td class="ls-txt-right ls-regroup"><%= link_to 'Editar', edit_management_mime_type_path(mime_type) %> + <td> + <%= link_to 'Excluir', management_mime_type_path(mime_type), method: :delete, data: { confirm: 'Você tem certeza?' }, class:'ls-btn-danger ls-ico-close' %> + </td> + </tr> + <% end %> + </tbody> +</table> \ No newline at end of file diff --git a/app/views/management/mime_types/index.json.jbuilder b/app/views/management/mime_types/index.json.jbuilder new file mode 100644 index 0000000000000000000000000000000000000000..ad7a3f10f2b318b2cfca2cd9a0fe80d88f0d5f52 --- /dev/null +++ b/app/views/management/mime_types/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@management_mime_types) do |management_mime_type| + json.extract! management_mime_type, :id + json.url management_mime_type_url(management_mime_type, format: :json) +end diff --git a/app/views/management/mime_types/new.html.erb b/app/views/management/mime_types/new.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..32dee4e7069520326033c2ab3c1b05ee62ebc219 --- /dev/null +++ b/app/views/management/mime_types/new.html.erb @@ -0,0 +1,7 @@ +<h1 class="ls-title-intro ls-ico-list2">MimeType</h1> + +<ol class="ls-breadcrumb"> + <li><%= link_to 'MimeTypes', management_mime_types_path%></li> + <li>Novo MimeType</li> +</ol> +<%= render 'form' %> \ No newline at end of file diff --git a/app/views/management/mime_types/show.html.erb b/app/views/management/mime_types/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..6ba77c166568d01a8f9a8d832bed474210d0ce14 --- /dev/null +++ b/app/views/management/mime_types/show.html.erb @@ -0,0 +1,4 @@ +<p id="notice"><%= notice %></p> + +<%= link_to 'Edit', edit_management_mime_type_path(@management_mime_type) %> | +<%= link_to 'Back', management_mime_types_path %> diff --git a/app/views/management/mime_types/show.json.jbuilder b/app/views/management/mime_types/show.json.jbuilder new file mode 100644 index 0000000000000000000000000000000000000000..2ac13213098d6509c92f0ab61466fed14efadaa1 --- /dev/null +++ b/app/views/management/mime_types/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @management_mime_type, :id, :created_at, :updated_at diff --git a/app/views/management/object_types/_form.html.erb b/app/views/management/object_types/_form.html.erb index 0bd6667dee5cddf3feab2aa34e45f30e43a78ec0..7cb97dfb5a330720c731e6aae0ae133a9aa66ad0 100644 --- a/app/views/management/object_types/_form.html.erb +++ b/app/views/management/object_types/_form.html.erb @@ -12,12 +12,29 @@ <% end %> <fieldset> + <label class="ls-label col-md-6"> <b class="ls-label-text">Nome</b> <p>Digite o nome do tipo</p> <%= f.text_field :name, {required: true} %> </label> + + <label class="ls-label col-md-6"> + <b class="ls-label-text">MimeTypes</b> + + <p>Selecione os mimetypes</p><br> + <select id='mimeTypes' name="object_type[mime_types][]" multiple> + <%= @mime_types.each do |t| %> + <% if @selected.include? t.id %> + <option value='<%= t.id %>' selected><%= t.extension %></option> + <% else %> + <option value='<%= t.id %>'><%= t.extension %></option> + <% end %> + <% end %> + </select> + </label> + </fieldset> <div class="ls-actions-btn"> @@ -25,3 +42,9 @@ <%= link_to "Cancelar", management_object_types_path,class: "ls-btn-danger"%> </div> <% end %> +<script> + $("#mimeTypes").select2({ + placeholder: "MimeTypes", + width: '100%' + }); +</script> \ No newline at end of file diff --git a/app/views/management/object_types/edit.html.erb b/app/views/management/object_types/edit.html.erb index f3e56a92b08424cd65a82ff019c6cd3962476893..1d101139a3ea74f9849ca9e353075714408ef4b7 100644 --- a/app/views/management/object_types/edit.html.erb +++ b/app/views/management/object_types/edit.html.erb @@ -1,6 +1,3 @@ -<h1>Editing Management Object Type</h1> +<h1>Editar Tipo de Objeto</h1> -<%= render 'form' %> - -<%= link_to 'Show', @management_object_type %> | -<%= link_to 'Back', management_object_types_path %> +<%= render 'form' %> \ No newline at end of file diff --git a/app/views/management/object_types/index.html.erb b/app/views/management/object_types/index.html.erb index 4cb3775fee40a9716f845bb6514f3826224bcdc8..4b57a1e91240f225c4d792fe49814d503cc8bd05 100644 --- a/app/views/management/object_types/index.html.erb +++ b/app/views/management/object_types/index.html.erb @@ -4,6 +4,12 @@ <thead> <tr> <th>Nome</th> + <th> + Extensões  + <a style="text-decoration: none;" href="#" data-toggle="popover" title="Informação" data-trigger="hover" data-content="Tipos de objetos sem extensões aceitam todos os tipos de mimetypes"> + <i class="ls-ico-info"></i> + </a> + </th> <th></th> <th></th> </tr> @@ -13,6 +19,7 @@ <% @object_types.each do |object_type| %> <tr> <td><%= object_type.name %></td> + <td><%= mime_types object_type.mime_types %></td> <td class="ls-txt-right ls-regroup"><%= link_to 'Editar', edit_management_object_type_path(object_type) %> <td> <% if show_delete_button? object_type %> @@ -23,6 +30,11 @@ <% end %> </tbody> </table> +<script> + $(document).ready(function(){ + $('[data-toggle="popover"]').popover(); + }); +</script> diff --git a/app/views/shared/management/_nav_menu.html.erb b/app/views/shared/management/_nav_menu.html.erb index 5abce7779ac4f407f94422286560769720be08bd..ef5dd61dae608a2e8cc67fcdf59fae6ed74965f1 100644 --- a/app/views/shared/management/_nav_menu.html.erb +++ b/app/views/shared/management/_nav_menu.html.erb @@ -33,7 +33,13 @@ </ul> </li> <li> <%= link_to "Escore", management_scores_path, class: 'ls-ico-bars' %> </li> - <li> <%= link_to "Tipos de Objetos", management_object_types_path, class: 'ls-ico-pencil2' %> </li> + <li class="ls-submenu"> + <a href="#" class="ls-ico-pencil2">Objetos Educacionais</a> + <ul role="menu"> + <li> <%= link_to "Tipos de Objetos", management_object_types_path, class: '' %> </li> + <li> <%= link_to "MimeTypes", management_mime_types_path, class: '' %> </li> + </ul> + </li> <li> <%= link_to "Voltar ao Portal", root_path, class: 'ls-ico-chevron-left' %> </li> </ul> diff --git a/config/routes.rb b/config/routes.rb index dfa66bc2cdddcd67db69b289aaa3f1b1b05ecec8..87ec841c5c042439200cb657238179ec9bda8f71 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,7 @@ Rails.application.routes.draw do resources :learning_objects, only: [:index] resources :scores, :score_user_categories, :user_categories resources :object_types, except: :show + resources :mime_types, except: :show resources :statistics do collection do diff --git a/db/migrate/20160310121839_create_mime_types.rb b/db/migrate/20160310121839_create_mime_types.rb new file mode 100644 index 0000000000000000000000000000000000000000..4b5ecbad1bf99a98c2ba283f6f550e7c44ee9e81 --- /dev/null +++ b/db/migrate/20160310121839_create_mime_types.rb @@ -0,0 +1,8 @@ +class CreateMimeTypes < ActiveRecord::Migration + def change + create_table :mime_types do |t| + t.string :extension + t.string :mime_type + end + end +end diff --git a/db/migrate/20160310124058_remove_mime_types_from_object_types.rb b/db/migrate/20160310124058_remove_mime_types_from_object_types.rb new file mode 100644 index 0000000000000000000000000000000000000000..22f7df4a07088f751ae6e534e21babcbf988aa02 --- /dev/null +++ b/db/migrate/20160310124058_remove_mime_types_from_object_types.rb @@ -0,0 +1,5 @@ +class RemoveMimeTypesFromObjectTypes < ActiveRecord::Migration + def change + remove_column :object_types, :mime_type, :string + end +end diff --git a/db/migrate/20160310124059_add_associations_to_object_types_and_mime_types.rb b/db/migrate/20160310124059_add_associations_to_object_types_and_mime_types.rb new file mode 100644 index 0000000000000000000000000000000000000000..7cb48bc0ea04f2cf75ca2591ee2506f2e5e6f83f --- /dev/null +++ b/db/migrate/20160310124059_add_associations_to_object_types_and_mime_types.rb @@ -0,0 +1,8 @@ +class AddAssociationsToObjectTypesAndMimeTypes < ActiveRecord::Migration + def change + create_table :mime_types_object_types do |t| + t.belongs_to :object_type, index: true + t.belongs_to :mime_type, index: true + end + end +end