diff --git a/Gemfile b/Gemfile
index d0fe369..2ab6deb 100755
--- a/Gemfile
+++ b/Gemfile
@@ -98,4 +98,6 @@ gem "seed_dump", "~> 0.5.3"
#gem "themes_for_rails", :git=> 'git://github.com/lucasefe/themes_for_rails.git'
gem 'themes_for_rails'
-gem 'rubyzip'
\ No newline at end of file
+gem 'rubyzip'
+
+gem 'acts_as_votable'
\ No newline at end of file
diff --git a/app/assets/stylesheets/layout.css.scss b/app/assets/stylesheets/layout.css.scss
index 65afdb4..039053b 100755
--- a/app/assets/stylesheets/layout.css.scss
+++ b/app/assets/stylesheets/layout.css.scss
@@ -32,10 +32,10 @@ a.linkbox, div.contentbox
padding:5px;
border-radius:$box-border-radius;
border: $box-border;
- background: $box-background;
-
+ background: $box-background;
}
+
a.linkbox:hover
{
box-shadow: 1px 1px 2px 2px lightgray;
@@ -164,3 +164,12 @@ ul.linklist li a i{
vertical-align:middle;
margin-right:6px;
font-size:2em;}
+span.linklist a {
+ padding:5px;
+ border-radius:$box-border-radius;
+ border: $box-border;
+ background: $box-background;
+ display:block;
+ float:left;
+
+}
\ No newline at end of file
diff --git a/app/controllers/beispiele_controller.rb b/app/controllers/beispiele_controller.rb
index ed0b475..647c45f 100755
--- a/app/controllers/beispiele_controller.rb
+++ b/app/controllers/beispiele_controller.rb
@@ -1,16 +1,17 @@
class BeispieleController < ApplicationController
# GET /beispiele
- # GET /beispiele.json
+
load_and_authorize_resource
+ include LikeVoteable
def index
@beispiele = Beispiel.all
-
+
respond_to do |format|
format.html # index.html.erb
format.json { render json: @beispiele }
end
end
-
+
# GET /beispiele/1
# GET /beispiele/1.json
def show
@@ -47,8 +48,8 @@ class BeispieleController < ApplicationController
logger.info "New Beispiel: #{params.inspect}"
# @backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
- @beispiel.name=@beispiel.beispieldatei.filename
- logger.info "New Beispiel: #{@beispiel.attributes.inspect}"
+ @beispiel.name=@beispiel.beispieldatei.filename
+ logger.info "New Beispiel: #{@beispiel.attributes.inspect}"
@beispiel.datum=Time.now
respond_to do |format|
@@ -91,7 +92,7 @@ class BeispieleController < ApplicationController
# DELETE /beispiele/1.json
def destroy
@beispiel = Beispiel.find(params[:id])
- @backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
+ @backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
@beispiel.destroy
respond_to do |format|
@@ -99,4 +100,4 @@ class BeispieleController < ApplicationController
format.json { head :no_content }
end
end
-end
+ end
diff --git a/app/controllers/lvas_controller.rb b/app/controllers/lvas_controller.rb
index 916916e..5423e28 100755
--- a/app/controllers/lvas_controller.rb
+++ b/app/controllers/lvas_controller.rb
@@ -117,7 +117,7 @@ private
@toolbar_elements =[]
@toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)} if can? :edit, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>"Tissvergleichladen", :path=> compare_tiss_lva_path(@lva)} if can? :compare_tiss, @lva
- @toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('common.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>'Sure?' } if can? :delete, @lva
+ @toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('lva.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>t('lva.deletesure') } if can? :delete, @lva
diff --git a/app/models/beispiel.rb b/app/models/beispiel.rb
index 6f87953..8e0ba3c 100755
--- a/app/models/beispiel.rb
+++ b/app/models/beispiel.rb
@@ -14,7 +14,9 @@
class Beispiel < ActiveRecord::Base
has_paper_trail
attr_accessible :desc, :name, :lva_id, :beispieldatei, :beispieldatei_cache, :datum
+ acts_as_votable
belongs_to :lva
+
mount_uploader :beispieldatei, AttachmentUploader
validates :beispieldatei, :presence => true
validates :name, :presence => true
diff --git a/app/views/beispiele/_beispiel.html.erb b/app/views/beispiele/_beispiel.html.erb
index 95206e5..b44dde7 100644
--- a/app/views/beispiele/_beispiel.html.erb
+++ b/app/views/beispiele/_beispiel.html.erb
@@ -1,13 +1,32 @@
-
-
<%=link_to beispiel.name, beispiel.beispieldatei.url%>
-<%= link_to "edit", edit_beispiel_path(beispiel)%>
-<%= link_to "delete", beispiel_path(beispiel), :method=>:delete, :data=>{:confirm=>I18n.t('beispiel.sure')}%>
+
-<%= I18n.t("file.size") + ": " + (beispiel.beispieldatei.size/1024.0).round(2).to_s %>KiB
+<%=link_to ffi1_icon("note20")+" " + beispiel.name, beispiel.beispieldatei.url, title: beispiel.desc %>
+
+<%= I18n.t("file.size") + ": " + (beispiel.beispieldatei.size/1024.0).round(2).to_s %>KiB
+<%=
+if can?(:like, beispiel)
+link_to ffi1_icon("like3")+" like" + "("+beispiel.get_likes.size.to_s+")", like_beispiel_path(beispiel),title: "liked by " + ((current_user.liked?(beispiel)) ? ("you and " + ((beispiel.get_likes.size - 1).to_s + " others")) : beispiel.get_likes.size.to_s)
+else
+"liked by " + beispiel.get_likes.size.to_s
+end
+%>
+
+<%=
+if can?(:dislike, beispiel)
+link_to ffi1_icon("dislike")+" dislike" + "("+beispiel.get_dislikes.size.to_s+")", dislike_beispiel_path(beispiel),title:"disliked by " + ((current_user.disliked?(beispiel)) ? ("you and " + ((beispiel.get_dislikes.size - 1).to_s + " others")) : beispiel.get_dislikes.size.to_s)
+else
+"disliked by " + beispiel.get_dislikes.size.to_s
+end
+
+%>
+
+<%= link_to ff_icon("icon-pencil")+" edit", edit_beispiel_path(beispiel) if can? :edit, beispiel%>
+<%= link_to ff_icon("icon-remove")+" delete", beispiel_path(beispiel), :method=>:delete, :data=>{:confirm=>I18n.t('beispiel.sure')} if can? :delete, beispiel %>
+
-
diff --git a/app/views/lvas/show.html.erb b/app/views/lvas/show.html.erb
index 01fe5ba..60c311e 100755
--- a/app/views/lvas/show.html.erb
+++ b/app/views/lvas/show.html.erb
@@ -22,11 +22,6 @@
<%= @lva.desc.to_s.html_safe %>
-
Beispiele
- <%= link_to t("beispiel.zip") , beispiel_sammlung_lva_path(@lva), class: :linkbox %>
- <% @lva.beispiele.each do |b| %>
- <%= render b%>
- <% end %>
@@ -61,6 +56,17 @@
+
+
+
+
Beispiele
+ <%= link_to t("beispiel.zip") , beispiel_sammlung_lva_path(@lva), class: :linkbox %>
+ <% @lva.beispiele.each do |b| %>
+ <%= render b%>
+ <% end %>
+
+
+
<% unless @lva.nlinks.empty? %>
diff --git a/config/application.rb b/config/application.rb
index b5812a0..38f38e4 100755
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,7 +1,7 @@
require File.expand_path('../boot', __FILE__)
require 'rails/all'
-
+require File.expand_path('lib/like_voteable.rb')
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
diff --git a/config/environment.rb b/config/environment.rb
index 346858f..be3a8f5 100755
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -3,3 +3,4 @@ require File.expand_path('../application', __FILE__)
# Initialize the rails application
Fetsite::Application.initialize!
+
diff --git a/config/locales/studien.de.yml b/config/locales/studien.de.yml
index 2b8bb28..8583f6e 100644
--- a/config/locales/studien.de.yml
+++ b/config/locales/studien.de.yml
@@ -20,6 +20,8 @@ de:
addrem: "Lva hinzufügen/entfernen"
editlvas: "Lvas bearbeiten"
list: "Alle Lvas"
+ delete: "LVA löschen"
+ deletesure: "Willst du sicher die ganze LVA löschen?"
modulgruppe:
typ: "Typ"
edit: "Modulgruppe bearbeiten"
diff --git a/config/routes.rb b/config/routes.rb
index 1c8dcfc..07d5b8f 100755
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -62,7 +62,12 @@ Fetsite::Application.routes.draw do
end
end
- resources :beispiele#, :only=>[:show,:index,:create]
+ resources :beispiele do #, :only=>[:show,:index,:create]
+ member do
+ get 'like'
+ get 'dislike'
+ end
+ end
resources :lvas do
member do
get 'beispiel_sammlung'
diff --git a/db/migrate/20140719200449_acts_as_votable_migration.rb b/db/migrate/20140719200449_acts_as_votable_migration.rb
new file mode 100644
index 0000000..5f381af
--- /dev/null
+++ b/db/migrate/20140719200449_acts_as_votable_migration.rb
@@ -0,0 +1,27 @@
+class ActsAsVotableMigration < ActiveRecord::Migration
+ def self.up
+ create_table :votes do |t|
+
+ t.references :votable, :polymorphic => true
+ t.references :voter, :polymorphic => true
+
+ t.boolean :vote_flag
+ t.string :vote_scope
+ t.integer :vote_weight
+
+ t.timestamps
+ end
+
+ if ActiveRecord::VERSION::MAJOR < 4
+ add_index :votes, [:votable_id, :votable_type]
+ add_index :votes, [:voter_id, :voter_type]
+ end
+
+ add_index :votes, [:voter_id, :voter_type, :vote_scope]
+ add_index :votes, [:votable_id, :votable_type, :vote_scope]
+ end
+
+ def self.down
+ drop_table :votes
+ end
+end
diff --git a/lib/like_voteable.rb b/lib/like_voteable.rb
new file mode 100644
index 0000000..79c1aef
--- /dev/null
+++ b/lib/like_voteable.rb
@@ -0,0 +1,21 @@
+module LikeVoteable
+ def self.included(base)
+ base.class_eval do
+ include InstanceMethods
+ #base.hidden_actions.delete 'like'
+ end
+ end
+ module InstanceMethods
+ def like
+ @obj=controller_name.classify.constantize.find(params[:id])
+ @obj.liked_by current_user
+ redirect_to @obj
+ end
+ def dislike
+ @obj=controller_name.classify.constantize.find(params[:id])
+ @obj.disliked_by current_user
+ redirect_to @obj
+ end
+
+ end
+end