From 9f818116aef99dad1f4660d51eecc9bb94a13f14 Mon Sep 17 00:00:00 2001
From: Mauricio Giacomini Girardello <mauriciogiacomini4@gmail.com>
Date: Wed, 30 Sep 2015 10:56:44 -0300
Subject: [PATCH] now, users can like learning objects

---
 .../javascripts/application/learning_objects.coffee      | 8 ++++++++
 app/controllers/learning_objects_controller.rb           | 9 ++++++---
 app/models/learning_object.rb                            | 6 ++----
 app/repositories/orient_db/learning_object_repository.rb | 4 +++-
 app/repositories/user_repository_proxy.rb                | 2 +-
 app/views/learning_objects/_actions_buttons.html.erb     | 2 +-
 .../learning_objects/_learning_object_horizontal.erb     | 2 +-
 app/views/learning_objects/_learning_object_vertical.erb | 8 ++++----
 app/views/learning_objects/_like_button.html.erb         | 6 +++---
 9 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/app/assets/javascripts/application/learning_objects.coffee b/app/assets/javascripts/application/learning_objects.coffee
index b50f394bd..d0216b867 100644
--- a/app/assets/javascripts/application/learning_objects.coffee
+++ b/app/assets/javascripts/application/learning_objects.coffee
@@ -5,3 +5,11 @@ $ ->
       $('#collections_list_popover').html()
 
   return
+
+
+# Rails creates this event, when the link_to(remote: true)
+# successfully executes
+$(document).on 'ajax:success', 'a.vote', (status, data, xhr)->
+# the `data` parameter is the decoded JSON object
+  $(".votes-count[data-id=#{data.id}]").text data.count
+  return
\ No newline at end of file
diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index a1e384b0a..1ec896da8 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -1,7 +1,7 @@
 class LearningObjectsController < ApplicationController
   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]
+  before_action :authenticate_user!, except: [:index, :show, :like]
 
   # GET /learning_objects
   # GET /learning_objects.json
@@ -62,7 +62,10 @@ class LearningObjectsController < ApplicationController
   # POST /learning_objects/1/like
   def like
     learning_object_repository.like current_user, @learning_object
-    redirect_to :back
+
+    if request.xhr?
+      render json: {count: @learning_object.likes, id: params[:id]}
+    end
   end
 
   private
@@ -83,4 +86,4 @@ class LearningObjectsController < ApplicationController
     end
   end
 
-end
+end
\ No newline at end of file
diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb
index b0c27500d..9c6986622 100644
--- a/app/models/learning_object.rb
+++ b/app/models/learning_object.rb
@@ -1,5 +1,7 @@
 class LearningObject
   include ActiveModel::Model
+  include RepositoriesProxy
+
   attr_accessor :id, :id_dspace, :rid, :name, :description,
                 :thumbnail, :created_at, :last_modified,
                 :type, :bitstreams, :metadata, :likes, :views,
@@ -73,8 +75,4 @@ class LearningObject
     }
   end
 
-  def learning_object_repository
-    Portalmec::Application.repository.for :learning_object
-  end
-
 end
diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index ad6b2fa81..51e747d9b 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -5,6 +5,7 @@ module OrientDb
 
     def increment_views(user, learning_object)
       create_edge "Views", user.rid, learning_object.id
+      learning_object.views = learning_object.views + 1
     end
 
     #
@@ -13,6 +14,7 @@ module OrientDb
     #
     def like(user, learning_object)
       create_edge "Likes", user.rid, learning_object.id
+      learning_object.likes = learning_object.likes + 1
     end
 
     # Example:
@@ -58,7 +60,7 @@ module OrientDb
       result = connection.command "INSERT INTO LearningObject CONTENT #{learning_object.to_json}"
     end
 
-    def update_property(learning_object,property,value)
+    def update_property(learning_object, property, value)
       if accepted_properties.include? property
         connection.command "UPDATE LearningObject SET #{property}='#{value}' WHERE @rid = #{learning_object.id}"
       end
diff --git a/app/repositories/user_repository_proxy.rb b/app/repositories/user_repository_proxy.rb
index 27643d6e0..ca65c093d 100644
--- a/app/repositories/user_repository_proxy.rb
+++ b/app/repositories/user_repository_proxy.rb
@@ -48,7 +48,7 @@ class UserRepositoryProxy
   def update_user_refs(user)
     rid = get_graph_id user
     user.rid = rid
-    user.save!
+    save user
   end
 
   def check_references(user)
diff --git a/app/views/learning_objects/_actions_buttons.html.erb b/app/views/learning_objects/_actions_buttons.html.erb
index 23ca78e50..eb1d2c5ee 100644
--- a/app/views/learning_objects/_actions_buttons.html.erb
+++ b/app/views/learning_objects/_actions_buttons.html.erb
@@ -1,5 +1,5 @@
 <div class="learning-object-actions">
-  <%= render 'learning_objects/like_button' %>
+  <%= render 'learning_objects/like_button', learning_object: learning_object %>
   <%= render 'learning_objects/bookmarks_button' %>
   <%= render 'learning_objects/collections_button' %>
 </div>
\ No newline at end of file
diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb
index ab1cb73e9..96f29ce57 100644
--- a/app/views/learning_objects/_learning_object_horizontal.erb
+++ b/app/views/learning_objects/_learning_object_horizontal.erb
@@ -8,7 +8,7 @@
         end %>
 
         <% if user_signed_in? %>
-            <%= render 'learning_objects/actions_buttons' %>
+            <%= render 'learning_objects/actions_buttons', learning_object: learning_object %>
         <% end %>
       </div>
     </div>
diff --git a/app/views/learning_objects/_learning_object_vertical.erb b/app/views/learning_objects/_learning_object_vertical.erb
index 6084b3a02..e6241383b 100644
--- a/app/views/learning_objects/_learning_object_vertical.erb
+++ b/app/views/learning_objects/_learning_object_vertical.erb
@@ -5,14 +5,14 @@
         learning_object_thumbnail learning_object
       end %>
       <% if user_signed_in? %>
-          <%= render 'learning_objects/actions_buttons' %>
+          <%= render 'learning_objects/actions_buttons', learning_object: learning_object %>
       <% end %>
     </div>
     <div class="panel-body">
       <h4 class="media-heading"><%= learning_object_title(learning_object) %></h4>
-      <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %>&nbsp;</span>
-      <span class="glyphicon glyphicon-star"><%= learning_object.likes %>&nbsp;</span>
+      <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %></span>
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>"><%= learning_object.likes %></span>
       <span class="author-label">Por <%= learning_object.get_metadata_value_of("dc.contributor.author") %></span>
     </div>
   </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/views/learning_objects/_like_button.html.erb b/app/views/learning_objects/_like_button.html.erb
index b59543135..45a5e0059 100644
--- a/app/views/learning_objects/_like_button.html.erb
+++ b/app/views/learning_objects/_like_button.html.erb
@@ -1,3 +1,3 @@
-<button type="button" class="btn btn-primary btn-xs" data-toggle="button" aria-pressed="false" autocomplete="off" title="Gostei">
-  <span class="glyphicon glyphicon-thumbs-up" aria-hidden="true"></span>
-</button>
\ No newline at end of file
+<%= link_to like_learning_object_path(id: learning_object.id), class: 'btn btn-primary btn-xs vote', method: :post, remote: true do %>
+    <span class="glyphicon glyphicon-thumbs-up" aria-hidden="true"></span>
+<% end %>
\ No newline at end of file
-- 
GitLab