diff --git a/app/assets/javascripts/application/collections.coffee b/app/assets/javascripts/application/collections.coffee index 04a4d2015eb8de7fe0a63e9d371fd15ea5396170..46fc726d97a435afe67bfca9934690757b4a6ccf 100644 --- a/app/assets/javascripts/application/collections.coffee +++ b/app/assets/javascripts/application/collections.coffee @@ -5,4 +5,4 @@ $ -> $('#create_collection_popover_content').html() title: -> $('#create_collection_popover_title').html() - return \ No newline at end of file + return diff --git a/app/assets/javascripts/application/complaints.coffee b/app/assets/javascripts/application/complaints.coffee new file mode 100644 index 0000000000000000000000000000000000000000..149f06dc8666751b27ff649bb82eac0f24f352e1 --- /dev/null +++ b/app/assets/javascripts/application/complaints.coffee @@ -0,0 +1,10 @@ +$ -> + $('.add_to_complaint').popover + html: true + placement: "left" + title: -> + $('#complaints_list_popover_title').html() + content: -> + $('#complaints_list_popover').html() + + return diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index b72a65dddc8db2ab604b9299cb892d25d7271d79..74da17c7a1a381d86975ff7af99f13fc99304fbc 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -63,6 +63,17 @@ a, a:focus, a:hover { top: 45%; } + +.popover{ + display: none; + z-index: 999; + max-width: 600px; + width: auto; +} + +.radio { + margin-left: 20px; +} //// HEADER header { border: 0; @@ -188,6 +199,8 @@ header { } } + + // navbar .navigation { background: $nav-grey; diff --git a/app/controllers/complaints_controller.rb b/app/controllers/complaints_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..26f48b71b69f57068c1b3993cd63448285fb726d --- /dev/null +++ b/app/controllers/complaints_controller.rb @@ -0,0 +1,42 @@ +class ComplaintsController < ApplicationController + before_action :set_complaint, only: [:show, :update, :destroy, :like] + + # POST /complaints + # POST /complaints.json + def create + @complaint = Complaint.new(complaint_params) + @complaint.user = current_user + @complaint.object = params[:object] + + respond_to do |format| + if complaint_repository.report @complaint + format.html { redirect_to @complaint, notice: 'complaint was successfully created.' } + else + format.html { render :new } + end + end + end + + # DELETE /complaints/1 + # DELETE /complaints/1.json + def destroy + complaint_repository.destroy @complaint + + respond_to do |format| + format.html { redirect_to complaints_url, notice: 'Complaint was successfully destroyed.' } + end + end + + + private + + def set_complaint + @complaint = complaint_repository.find params[:id] + end + + # Never trust parameters from the scary internet, only allow the white list through. + def complaint_params + params.require(:complaint).permit(:object, :message, :description) + end + +end diff --git a/app/controllers/concerns/reportable.rb b/app/controllers/concerns/reportable.rb new file mode 100644 index 0000000000000000000000000000000000000000..e53469daf34c818bf66be44bec181984a47f26d5 --- /dev/null +++ b/app/controllers/concerns/reportable.rb @@ -0,0 +1,14 @@ +module Reportable + extend ActiveSupport::Concern + + included do + @complaint = Complaint.new + @messages = [ + Complaint.copyrights, + Complaint.ofensive_content, + Complaint.ofensive_user, + Complaint.fake_user + ] + end + +end diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb index 8185408d8577a84750cd48f65ac2f8dfa98edf23..52fcf5b9c29c880a4ccb9ea5feed719e97fe125e 100644 --- a/app/controllers/learning_objects_controller.rb +++ b/app/controllers/learning_objects_controller.rb @@ -1,4 +1,6 @@ class LearningObjectsController < ApplicationController + include Reportable + before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like] after_action :increment_learning_object_views, only: [:show] before_action :authenticate_user!, except: [:index, :show, :like] @@ -12,6 +14,13 @@ class LearningObjectsController < ApplicationController # GET /learning_objects/1 # GET /learning_objects/1.json def show + @complaint = Complaint.new + @messages = [ + Complaint.copyrights, + Complaint.ofensive_content, + Complaint.ofensive_user, + Complaint.fake_user + ] end # GET /learning_objects/new @@ -72,6 +81,10 @@ class LearningObjectsController < ApplicationController end end + def report_object + learning_object_repository.report current_user, @learning_object, message, description + end + private # Use callbacks to share common setup or constraints between actions. @@ -90,4 +103,5 @@ class LearningObjectsController < ApplicationController end end -end \ No newline at end of file + +end diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 47abcf8da59da31342ab60074b7346ce1123b2e6..6c462ae0406d09989f4434af713e390426de8996 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -15,7 +15,7 @@ class SearchController < ApplicationController @pagination_limit=params[:page_limit].to_i end - unless params[:qry].empty? + unless params[:qry].blank? objectsFound = search params[:qry], params[:sort] @numFound = objectsFound.length diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb index 05cbd683fe91cc444b0a36c4477ebf26bd2b926e..26b818e5bca0d9d42c7b4306bf186f3d85457de0 100644 --- a/app/helpers/learning_objects_helper.rb +++ b/app/helpers/learning_objects_helper.rb @@ -7,9 +7,7 @@ module LearningObjectsHelper def learning_object_thumbnail(learning_object, size = "") default = false - if learning_object.thumbnail.nil? - default = true - elsif learning_object.thumbnail.empty? + if learning_object.thumbnail.blank? default = true end diff --git a/app/models/complaint.rb b/app/models/complaint.rb new file mode 100644 index 0000000000000000000000000000000000000000..f5815c162ac3840058331a5ef4c82d971da2b9f8 --- /dev/null +++ b/app/models/complaint.rb @@ -0,0 +1,22 @@ +class Complaint + include ActiveModel::Model + + attr_accessor :user,:object,:message,:description + validates_presence_of :user,:object,:message + + def self.copyrights + ComplaintMessage.new("Objeto viola direitos autorais") + end + + def self.ofensive_content + ComplaintMessage.new "Objeto contém conteúdo ofensivo/abusivo" + end + + def self.ofensive_user + ComplaintMessage.new "Usuário ofensivo/agressivo" + end + + def self.fake_user + ComplaintMessage.new "Usuário falso" + end +end diff --git a/app/models/complaint_message.rb b/app/models/complaint_message.rb new file mode 100644 index 0000000000000000000000000000000000000000..a87abecbfeac95fbc8431adc9c7ad80fc40dc3f3 --- /dev/null +++ b/app/models/complaint_message.rb @@ -0,0 +1,11 @@ +class ComplaintMessage + attr_accessor :message + + def initialize(message) + @message = message + end + + def to_s + @message.to_s + end +end diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb index 8252f320cb41981c567f665c9f78807849ba2bd4..792381900e6f57a06c70f241d1a620c6f0f2de7a 100644 --- a/app/repositories/orient_db/base.rb +++ b/app/repositories/orient_db/base.rb @@ -64,7 +64,7 @@ class OrientDb::Base raise NoMethodError, "You must implement this method" end - private + protected def odb_class raise NoMethodError, "You must implement this method" diff --git a/app/repositories/orient_db/complaint_repository.rb b/app/repositories/orient_db/complaint_repository.rb new file mode 100644 index 0000000000000000000000000000000000000000..267b800cd6591b5b4aaac924a16fb93fffe2a5ee --- /dev/null +++ b/app/repositories/orient_db/complaint_repository.rb @@ -0,0 +1,33 @@ +module OrientDb + class LearningObjectRepository < Base + include OrientDb::Methods::EdgeMethods + include RepositoriesProxy + + def report(complaint) + if edge_exists?(odb_class, complaint.user.id, complaint.object.id) + raise "The user has already been reported" + end + + connection.command "CREATE EDGE Complaint FROM #{complaint.user.id} TO #{complaint.object.id} SET message = #{complaint.message}, description = #{complaint.description}" + end + + def destroy(object) + if !edge_exists?(odb_class, complaint.user.id, complaint.object.id) + raise "The user has not already been reported" + end + + connection.command "DELETE EDGE Complaint FROM #{complaint.user.id} TO #{complaint.object.id}" + end + + def build_object(args={}) + Complaint.new(args) + end + + protected + + def odb_class + "Complaint" + end + + end +end diff --git a/app/repositories/repositories_proxy.rb b/app/repositories/repositories_proxy.rb index 3fdfe2cbe2e1cc077a3a16fc271f99194a17d1bf..05477b70d2bb68b2d87b9d81bf8d55d02e7c5c48 100644 --- a/app/repositories/repositories_proxy.rb +++ b/app/repositories/repositories_proxy.rb @@ -18,6 +18,10 @@ module RepositoriesProxy application_repository.for(:collection) end + def complaint_repository + application_repository.for(:complaint) + end + def institution_repository application_repository.for(:institution) end diff --git a/app/views/complaints/_complaints_button.html.erb b/app/views/complaints/_complaints_button.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..25d6f5669caa9eb37975e096cc1741bdb0268730 --- /dev/null +++ b/app/views/complaints/_complaints_button.html.erb @@ -0,0 +1,7 @@ +<button type="button" class="btn btn-default btn-xs add_to_complaint " data-toggle="button" data-trigger="click" aria-pressed="false" autocomplete="off" title="Denunciar Objeto" border-style: "none" > + <%= image_tag "icons/report-circle.png", alt: "Denunciar objeto" %> +</button> + +<div id="complaints_list_popover" class="popover"> + <%= render 'complaints/form' %> +</div> diff --git a/app/views/complaints/_form.html.erb b/app/views/complaints/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..6abcde32db89ce3e4cf52d80d6ec781500893bef --- /dev/null +++ b/app/views/complaints/_form.html.erb @@ -0,0 +1,32 @@ + +<%= form_for @complaint do |f| %> + <fieldset> + + <div class="ls-label " > + + <h4 class="ls-title-4"><p><b>Escolha a razão da denúncia:</b></p></h4> + <br><br> + + <%= f.collection_radio_buttons :message, @messages, :message, :message do |m| %> + <div class="radio" > + <%= f.radio_button :message, m.text %> + <%= f.label :message, m.text %> + </div> + <% end %> + + <br><br> + <div align="center"> + <%= f.text_area :description, placeholder: "mais informações", rows: "10", cols: "30" %> + </div> + + </div> + + <%= f.hidden_field :object, value: @learning_object %> + </fieldset> + + <div align="center" class="ls-btn-primary"> + <%= f.submit "Salvar" %> + <%= link_to "Fechar", class:"btn-success" %> + + </div> + <%end%> diff --git a/app/views/learning_objects/_collections_button.html.erb b/app/views/learning_objects/_collections_button.html.erb index 24ff0d56ec818d514e8ca1889900edcbc49748f2..06d3d88a76c7a8ffdb74e941cb21432a32420833 100644 --- a/app/views/learning_objects/_collections_button.html.erb +++ b/app/views/learning_objects/_collections_button.html.erb @@ -5,4 +5,4 @@ <div id="collections_list_popover" style="display: none; z-index: 999;"> <a href="#">Segundo ano - B</a> <a href="#">Terceiro ano - A</a> -</div> \ No newline at end of file +</div> diff --git a/app/views/learning_objects/show.html.erb b/app/views/learning_objects/show.html.erb index 25c0ccd0ff7389b27b2914f1277eca24db9c5b0a..5f87f10d8fd61f54426dd947166baa18912327ed 100644 --- a/app/views/learning_objects/show.html.erb +++ b/app/views/learning_objects/show.html.erb @@ -79,7 +79,9 @@ </div> <div class="col-md-3 action"></div> <div class="col-md-3 action"> - <%= image_tag "icons/report-circle.png", alt: "Denunciar objeto" %> + + + <%= render "complaints/complaints_button" %> <h6>denunciar objeto</h6> </div> </div> diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 69d4d07acbf46ed76d26b4bd81115f13135ff81e..5144ba23dec6310cb136969db47b82a3c924bad6 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -66,7 +66,7 @@ <div class="row mainpage-subjects"> <div class="col-md-12"> - <% unless @subjects.nil? || @subjects.empty?%> + <% unless @subjects.blank? %> <div class="row learning-object-columns"> <h2>Destaque por assunto</h2> <% @subjects.each do |subject|%> diff --git a/config/initializers/repositories/repositories.rb b/config/initializers/repositories/repositories.rb index f6666e218bec5ea09b18d95b0217612a57577a43..f7d3c35d3a535fbda79aab1fc23ca0e80bc2451b 100644 --- a/config/initializers/repositories/repositories.rb +++ b/config/initializers/repositories/repositories.rb @@ -29,10 +29,12 @@ Repository::Environments.create :development do |repository| repository.register :attribute, OrientDb::AttributeRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) repository.register :carousel, ActiveRecord::CarouselRepository.new + repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance) end Repository::Environments.create :test do |repository| repository.register :carousel, ActiveRecord::CarouselRepository.new + repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance) repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) @@ -43,6 +45,7 @@ end Repository::Environments.create :production do |repository| repository.register :carousel, ActiveRecord::CarouselRepository.new + repository.register :complaint, OrientDb::ComplaintRepository.new(OrientDb::Client.instance) repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) diff --git a/config/routes.rb b/config/routes.rb index 8aba03ba2cab166645195efe7200d600df26c41a..c31c2a4338f6e444a54203c2c526532fee5479d7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -37,18 +37,17 @@ Rails.application.routes.draw do resources :institutions resources :collections resources :subjects, only: [:index, :show] + resources :complaints, only: [:create, :destroy] resources :users, only: [:show] do collection do get :me end end - get 'users/:id', to: 'users#show', as: 'users_show' - + get '/faq' => 'welcome#faq' get '/contact' => 'welcome#contact', as: 'contact' - get '/complaint' => 'welcome#complaint', as: 'complaint' get '/search' => 'search#index', as: 'search' get '/subject/:id' => 'welcome#subject', as:'subject_index' -end +end \ No newline at end of file diff --git a/test/models/complaint_message_test.rb b/test/models/complaint_message_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..271fe992bb8b77dd005b71ef5559366190fd9e9b --- /dev/null +++ b/test/models/complaint_message_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ComplaintMessageTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end