Skip to content
Snippets Groups Projects
Commit 84e60179 authored by Mauricio Giacomini Girardello's avatar Mauricio Giacomini Girardello
Browse files

Merge branch 'master' of gitlab.c3sl.ufpr.br:portalmec/portalmec

parents 8ac179ab 77c3b5a2
No related branches found
No related tags found
No related merge requests found
$ ->
# valid types of operations in collections
permitted_types = ['add', 'download', 'copy', 'move', 'remove']
# create collection popover
$('#create_collection_popover').popover
html: true
......@@ -7,15 +10,9 @@ $ ->
title: ->
$('#create_collection_popover_title').html()
# add learning object to collection
$(document).on 'click', 'input[class=collection-element]', ->
url = '/collections/' + encodeURIComponent($(this).data('cid')) + '/learning_object/' + encodeURIComponent($(this).data('loid'))
if this.checked
$.ajax {method: "POST", url: url }, (d) ->
d
else
$.ajax {method: "DELETE", url: url }, (d) ->
d
# add/remove learning object to collection
$(document).on 'click', '.add-to-collection', ->
$(document).trigger('open_collections_modal', [learning_object: [$(this).data('loid')], type: 'add'])
# change collection privacy
$(document).on 'click', 'input[name=privacy]', ->
......@@ -25,20 +22,62 @@ $ ->
d
$(document).on 'open_collections_modal', (evt, params) ->
url = '/collections/' + encodeURIComponent(params) + '/list'
url = '/collections/list?type=' + params.type
url += '&id=' + encodeURIComponent(params.collection) if params.collection != undefined
url += '&learning_objects_ids=' + encodeURIComponent(JSON.stringify(params.learning_object)) if params.learning_object != undefined
$.get url, (d) ->
$('#collections-modal').remove()
$('body').append d
$('#collections-modal').modal('show')
return
return
# manipulate collections in show page
$ ->
mount_modal_params = (e) ->
array = $(e).serializeArray()
object = {}
collection = ""
type = ""
collections = []
learning_objects = []
i = 0
length = array.length
while i < length
switch array[i].name
when 'collection' then collections.push(array[i].value)
when 'learning_object' then learning_objects.push(array[i].value)
when 'collection_id' then collection = array[i].value
when 'type' then type = array[i].value
++i
object.collection_id = collection
object.collections_ids = collections if collections.length > 0
object.learning_objects_ids = learning_objects if learning_objects.length > 0
object.type = type
return object
$(document).on 'submit', '#collections-modal-form', (evt, params) ->
evt.preventDefault()
refreshable_type = ['move']
data = mount_modal_params(this)
return false if (data.learning_objects_ids.length < 1) || (data.collections_ids.length < 1) || (permitted_types.indexOf(data.type) < 0)
id = if (data.collection_id == undefined) then data.collections_ids else data.collection_id
url = '/collections/' + encodeURIComponent(id) + '/' + data.type
$.ajax {method: "POST", url: url, data: data }
location.reload(true) if !(refreshable_type.indexOf(data.type) < 0)
$('#collections-modal').modal('hide')
return
# manipulate collections
$(document).on 'ready page:load', ->
if $('.collection-show-page').val() != undefined
# array with selected collections ids
selected_collections = []
# array with selected objects ids
selected_objects = []
collection = $('.collection-show-page').data('cid')
# add selectors
......@@ -47,23 +86,23 @@ $ ->
$('.learning-object-thumbnail', this).append '<input class="collection-selector" type="checkbox" value="' + loid + '"></input>'
return
# add/remove collection to array when click checkbox
# add/remove object to array when click checkbox
$(document).on 'click', '.collection-selector', ->
if this.checked
if selected_collections.indexOf(this.value) < 0
selected_collections.push this.value
if selected_objects.indexOf(this.value) < 0
selected_objects.push { name: 'learning_object', value: this.value }
$(document).trigger('check_selected_collection');
return
else
index = selected_collections.indexOf(this.value)
index = selected_objects.indexOf({ name: 'learning_object', value: this.value })
if !!(~index)
selected_collections.splice(index, 1)
selected_objects.splice(index, 1)
$(document).trigger('check_selected_collection');
return
# clear selected collections
# clear selected objects
$(document).on 'clear_collections', ->
selected_collections = []
selected_objects = []
$('.collection-selector').attr('checked', false);
$(document).trigger('check_selected_collection')
......@@ -72,15 +111,20 @@ $ ->
# manipulation buttons
$(document).on 'click', '.collection-button', ->
switch $(this).data('action')
when 'download' then
when 'copy' then $(document).trigger('open_collections_modal', [collection])
when 'move' then
when 'remove' then
index = permitted_types.indexOf($(this).data('action'))
learning_objects = selected_objects.map (o) ->
return o.value
if permitted_types[index] == 'remove'
url = '/collections/' + encodeURIComponent(collection) + '/remove'
$.ajax {method: 'DELETE', url: url, data: { learning_objects_ids: learning_objects } } if confirm('Você tem certeza?')
location.reload(true)
else
$(document).trigger('open_collections_modal', [collection: collection, type: permitted_types[index], learning_object: learning_objects ]) if !!(~index)
# update interface when add/remove a collection
# update interface when add/remove an object
$(document).on 'check_selected_collection', (e) ->
length = selected_collections.length
length = selected_objects.length
if length == 0
return $('.collection-show-select-nav').slideUp('slow')
else if (length == 1)
......@@ -89,15 +133,4 @@ $ ->
html = length + " objetos selecionados"
$('.collection-show-select-nav .navbar-brand').html html
$('.collection-show-select-nav').slideDown('slow')
$(document).on 'submit', '#collections-modal-form', (evt) ->
evt.preventDefault()
url = '/collections/' + encodeURIComponent(collection) + '/copy'
collections = $(this).serializeArray()
$.ajax {method: "POST", url: url, data: {col: collections} }, (d) ->
console.log d
return
console.log collections
$('#collections-modal').modal('close')
return
return
$ ->
$('.default_btn').toggleClass 'active_btn'
$(document).on 'click', '*[data-poload]', ->
e = $(this)
e.popover({content: "Carregando..."}).popover('show')
all = undefined
objects = undefined
url = $(this).data('poload')
loid = $(this).data('loid')
$.get '/collections.json', (d) ->
all = d
$.get url, (d) ->
object = d
# generate a lookup table for object's collections id
lookup = {}
i = 0
len = object.length
while i < len
lookup[object[i].id] = object[i]
i++
# mark checked objects
i = 0
len = all.length
html = ''
while i < len
name = 'collection_' + all[i].id.split(':').slice(-1)[0]
html += '<input type="checkbox" class="collection-element" data-cid="' + all[i].id + '" data-loid="' + loid + '" id="' + name + '" value="' + all[i].id + '"'
if lookup[all[i].id] != undefined
html += " checked"
html += '>'
html += '<label for="' + name + '">' + all[i].name + '</label><br/>'
++i
html = 'Você não possui coleções.<br>É possível criá-las na sua página pessoal.' if html == ""
$('.popover-content').html(html)
return
return
return
# $(document).on 'click', '*[data-poload]', ->
# e = $(this)
# e.popover({content: "Carregando..."}).popover('show')
# all = undefined
# objects = undefined
# url = $(this).data('poload')
# loid = $(this).data('loid')
# $.get '/collections.json', (d) ->
# all = d
# $.get url, (d) ->
# object = d
#
# # generate a lookup table for object's collections id
# lookup = {}
# i = 0
# len = object.length
# while i < len
# lookup[object[i].id] = object[i]
# i++
#
# # mark checked objects
# i = 0
# len = all.length
# html = ''
# while i < len
# name = 'collection_' + all[i].id.split(':').slice(-1)[0]
# html += '<input type="checkbox" class="collection-element" data-cid="' + all[i].id + '" data-loid="' + loid + '" id="' + name + '" value="' + all[i].id + '"'
# if lookup[all[i].id] != undefined
# html += " checked"
# html += '>'
# html += '<label for="' + name + '">' + all[i].name + '</label><br/>'
# ++i
#
# html = 'Você não possui coleções.<br>É possível criá-las na sua página pessoal.' if html == ""
#
# $('.popover-content').html(html)
# return
# return
# return
$ ->
$(document).on 'click', '.add_to_collection', (e) ->
......
class CollectionsController < ApplicationController
before_action :set_collection, only: [:show, :update, :destroy, :like, :list, :add_learning_object, :remove_learning_object, :move_learning_objects, :copy_learning_objects, :change_privacy]
before_action :authenticate_user!, only: [:update, :destroy, :like, :list, :add_learning_object, :remove_learning_object, :move_learning_objects, :copy_learning_objects, :change_privacy]
before_action :set_manipulation_params, only: [:move_learning_objects, :copy_learning_objects]
# GET /collections
# GET /collections.json
......@@ -75,36 +74,34 @@ class CollectionsController < ApplicationController
end
def list
@learning_object = learning_object_repository.find params[:learning_object_id] unless params[:learning_object_id].blank?
@collections = collection_repository.all(Collections::UserContext.new(current_user))
@collections.select!{|c| c.id != @collection.id} unless @collection.blank?
@collections = collection_repository.all Collections::UserContext.new(current_user)
@type = params[:type] unless params[:type].blank?
render layout: false
end
# POST /collections/1/learning_object/43
# POST /collections/1/learning_object
def add_learning_object
learning_object = learning_object_repository.find params[:learning_object_id]
@collection.add learning_object
response = learning_objects_to_collections(@learning_objects, @collection)
if request.xhr? && collection_repository.save_learning_objects(@collection)
render json: {status: true}
if request.xhr?
render json: {status: response}
end
end
# DELETE /collections/1/learning_object/43
# DELETE /collections/1/learning_object
def remove_learning_object
learning_object = learning_object_repository.find params[:learning_object_id]
@collection.remove learning_object
collection_repository.save_learning_objects @collection
response = remove_learning_objects_from_collection(@learning_objects, @collection)
if request.xhr?
render json: {status: true}
render json: {status: response}
end
end
def copy_learning_objects
response = learning_objects_to_collection(@learning_objects, @target_collection)
response = learning_objects_to_collections(@learning_objects, @target_collections)
if request.xhr?
render json: {status: response}
......@@ -112,15 +109,9 @@ class CollectionsController < ApplicationController
end
def move_learning_objects
response = learning_objects_to_collection(@learning_objects, @target_collection)
if response
@learning_objects.each do |learning_object|
@collection.remove learning_object
end
response = learning_objects_to_collections(@learning_objects, @target_collections)
response = collection_repository.save_learning_objects(@target_collection)
end
remove_learning_objects_from_collection(@learning_objects, @collection) if response
if request.xhr?
render json: {status: response}
......@@ -141,14 +132,26 @@ class CollectionsController < ApplicationController
def authorize_create_collection!
end
def learning_objects_to_collection(learning_objects, collection)
if collection.owner?
learning_objects.each do |learning_object|
collection.add learning_object
def learning_objects_to_collections(learning_objects, collections)
collections.each do |collection|
if collection.owner?(current_user)
learning_objects.each do |learning_object|
collection.add learning_object
end
collection_repository.save_learning_objects(collection)
end
end
end
return collection_repository.save_learning_objects(@target_collection)
def remove_learning_objects_from_collection(learning_objects, collection)
learning_objects = [learning_objects] if learning_objects.class == String
learning_objects.each do |learning_object|
collection.remove learning_object
end
collection_repository.save_learning_objects(collection)
end
def check_collection_privacy!(collection)
......@@ -158,15 +161,12 @@ class CollectionsController < ApplicationController
end
def set_collection
@collection = collection_repository.find params[:id]
end
@collection = collection_repository.find params[:id] unless params[:id].blank?
def set_manipulation_params
p "AQUI"
p JSON.stringify(params)
@target_collection = collection_repository.find params[:collection_id] unless params[:collection_id].empty?
@target_collections = params[:collections_ids].map{|id| collection_repository.find id} unless params[:collections_ids].blank?
@learning_objects = params[:learning_objects].map{|id| learning_object_repository.find id || false} unless params[:learning_objects].empty?
params[:learning_objects_ids] = JSON.parse(params[:learning_objects_ids]) if params[:learning_objects_ids].class == String
@learning_objects = params[:learning_objects_ids].map{|id| learning_object_repository.find id || false} unless params[:learning_objects_ids].blank?
end
# Never trust parameters from the scary internet, only allow the white list through.
......
......@@ -7,14 +7,19 @@
</div>
<form id="collections-modal-form">
<div class="modal-body">
<% if @learning_object.blank? %>
<% @collections.each do |collection| %>
<% unless collection.id == @collection.id %>
<input type="checkbox" class="collection-element" id="<%= collection.id %>" name="collections" value="<%= collection.id %>">
<label for="<%= collection.id %>"><%= collection.name %></label><br/>
<% end %>
<%= hidden_field_tag 'collection_id', @collection.id unless @collection.blank? %>
<%= hidden_field_tag 'type', @type unless @type.blank? %>
<% unless @learning_objects.blank? %>
<% @learning_objects.each do |object| %>
<%= hidden_field_tag 'learning_object', object.id %>
<% end %>
<% end %>
<% @collections.each do |collection| %>
<input type="checkbox" class="collection-element" id="<%= collection.id %>" name="collection" value="<%= collection.id %>">
<label for="<%= collection.id %>"><%= collection.name %></label><br/>
<% end %>
<%= 'Nenhuma coleção disponível. Crie novas no seu perfil de usuário.' if @collections.blank? %>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
......
<a tabindex="0" data-container="body" class="btn btn-default btn-xs add_to_collection" role="button" data-toggle="popover" data-placement="left" title="Adicionar as coleções" data-loid="<%= learning_object.id %>" data-poload="/learning_objects/<%= ERB::Util.url_encode(learning_object.id) %>/collections.json">
<a tabindex="0" class="add-to-collection btn btn-default btn-xs" role="button" title="Adicionar as coleções" data-loid="<%= learning_object.id %>">
<span class="glyphicon glyphicon-list" aria-hidden="true"></span>
</a>
......@@ -65,23 +65,21 @@ Rails.application.routes.draw do
end
end
# collection list
get '/collections/list' => "collections#list", as: 'collection_list'
resources :collections do
member do
# collection list
get :list
# add a learning object for some collection
post '/learning_object/:learning_object_id', as: :add_learning_object, action: :add_learning_object
# remove a learning object for some collection
delete '/learning_object/:learning_object_id', as: :destroy_learning_object, action: :remove_learning_object
member do
# change privacy
post :change_privacy
# copy / move learning_objects
get '/copy', as: :copy_learning_objects, action: :copy_learning_objects
get '/move', as: :move_learning_objects, action: :move_learning_objects
# add/remove a learning object for some collection
post '/add', as: :add_learning_object, action: :add_learning_object
delete '/remove', as: :remove_learning_object, action: :remove_learning_object
# copy / move learning objects from a collection to another
post '/copy', as: :copy_learning_objects, action: :copy_learning_objects
post '/move', as: :move_learning_objects, action: :move_learning_objects
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment