Revert "removecomments"

This reverts commit 6ee1468ce3.
This commit is contained in:
Andreas Stephanides
2014-10-17 09:54:39 +02:00
parent 3a8f84d9b4
commit 699517fb56
19 changed files with 296 additions and 5 deletions

View File

@@ -0,0 +1,94 @@
class CommentsController < ApplicationController
def index
@commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
@comments=@commentable.comments.order(:created_at).roots.page(params[:page]).per(2).reverse_order
respond_to do |format|
format.html # new.html.erb
format.json { render json: @comment }
format.js
end
end
def hide
@commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
respond_to do |format|
format.js
end
end
def show
@comment = Comment.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @comment }
end
end
def new
@comment = Comment.new
@comment.commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
respond_to do |format|
format.html # new.html.erb
format.json { render json: @comment }
format.js
end
end
# GET /comments/1/edit
def edit
@comment = Comment.find(params[:id])
end
# POST /comments
# POST /comments.json
def create
params_new= params[:comment].select {|i| !["commentable_id", "commentable_type"].include?(i)}
c = params[:comment][:commentable_type].constantize.find(params[:comment][:commentable_id]) unless params[:comment][:commentable_type].nil? or params[:comment][:commentable_id].nil?
@comment = Comment.build_for(c, current_user,"", params_new)
respond_to do |format|
if @comment
format.html { redirect_to @comment.commentable, notice: 'Comment was successfully created.', show_comments: true }
format.json { render json: @comment, status: :created, location: @comment }
else
format.html { render action: "new" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
# PUT /comments/1
# PUT /comments/1.json
def update
params[:comment].select! {|i| !["commentable_id", "commentable_type"].include?(i)}
@comment = Comment.find(params[:id])
@comment.commentable=params[:comment][:commentable_type].constantize.find(params[:comment][:commentable_id]) unless params[:comment][:commentable_type].nil? or params[:comment][:commentable_id].nil?
respond_to do |format|
if @comment.update_attributes(params[:comment])
format.html { redirect_to @comment.commentable, notice: 'Comment was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
# DELETE /comments/1
# DELETE /comments/1.json
def destroy
@comment = Comment.find(params[:id])
@commentable=@comment.commentable
@comment.destroy
respond_to do |format|
format.html { redirect_to @commentable, :action=>"show"}
format.json { head :no_content }
end
end
end

View File

@@ -5,7 +5,7 @@ class Ability
loggedin=!(user.nil?)
user ||= User.new # guest user (not logged in)
can :manage, Comment
#-----------------------------------------------------
# Rechteverwaltung fuer Studien Modul
can [:show, :index], Studium

View File

@@ -16,7 +16,7 @@ class Beispiel < ActiveRecord::Base
attr_accessible :desc, :name, :lva_id, :beispieldatei, :beispieldatei_cache, :datum
acts_as_votable
belongs_to :lva
include IsCommentable
mount_uploader :beispieldatei, AttachmentUploader
validates :beispieldatei, :presence => true
validates :name, :presence => true

51
app/models/comment.rb Normal file
View File

@@ -0,0 +1,51 @@
class Comment < ActiveRecord::Base
attr_accessible :text,:anonym, :intern, :hidden
# commentable depth, official, intern, anonym
acts_as_votable
acts_as_nested_set :scope => [:commentable_id, :commentable_type]
belongs_to :commentable, :polymorphic=> true
belongs_to :user
validate :text, :presence=>true
validate :user, :presence=>true
validate :commentable, :presence=>true
include IsCommentable
def self.build_for(set_commentable, user, text,attr={})
c = new
raise "Tried to build comment for non commentable" unless set_commentable.try(:is_commentable?)
c.user=user
c.text=text
c.assign_attributes(attr)
unless set_commentable.class.to_s == "Comment"
c.commentable=set_commentable
c.save
else
c.commentable=set_commentable.commentable
c.save
c.move_to_child_of(set_commentable)
end
c
end
def thumb_url
t_url= user.fetprofile.picture.thumb.url unless user.nil? or user.fetprofile.nil?
t_url
end
def self.wrapid_for(c)
"comments_" + c.class.to_s + "_" + c.id.to_s
end
def self.switchshowid_for(c)
"show_comments_" + c.class.to_s + "_" + c.id.to_s
end
def divid
"comment_" + id.to_s
end
def formid
"comment_form_" + commentable_type + "_" + commentable_id.to_s
end
def self.formid_for(c)
"comment_form_" + c.class.to_s + "_" + c.id.to_s
end
end

View File

@@ -33,5 +33,18 @@
</div>
</div>
<%= link_to "comment" , new_comment_path( commentable_type: "Beispiel", commentable_id: beispiel.id), remote:true if can? :comment, beispiel %>
<%= link_to "comments:.."+beispiel.comments.count().to_s, comments_path(commentable_type: "Beispiel", commentable_id: beispiel.id), remote:true, id: Comment.switchshowid_for(beispiel) %>
<div id="<%= Comment.formid_for(beispiel) %>">
</div>
<% unless beispiel.comments.roots.empty? %>
<div class="row-fluid">
<div class="span12">
<div id="<%= Comment.wrapid_for(beispiel)%>">
<%= render partial:"comments/comments", object: beispiel.comments.order(:created_at).roots.reverse_order if params[:show_comments] %>
</div>
</div>
</div>
<% end %>
</div>

View File

@@ -0,0 +1,19 @@
<div id="<%= comment.divid %>">
<a class="pull-left media-object" href="#"><%= image_tag comment.thumb_url %></a>
<div class="media-body">
<b><%= (!comment.anonym) ? comment.user.try(:email) : "Anonym" %></b> (<%= I18n.l(comment.created_at) %>) <%= link_to ffi1_icon("remove9"), comment, method: :delete, data: { confirm: 'Are you sure?' } %>:
<p><%= comment.text %>
<% if can?(:comment, comment.commentable) %>
<br><%= link_to "comment" , new_comment_path( commentable_type: "Comment", commentable_id: comment.id), remote:true %>
<% end %>
</p>
<div id="<%= Comment.formid_for(comment) %>">
</div>
<%= render partial:"comments/comments", object: comment.children.order(:created_at).reverse_order if comment.children.size >0 %>
</div>
</div>

View File

@@ -0,0 +1,12 @@
<% unless comments.empty? %>
<div class="contentbox" style="border-right:none;border-bottom:none; border-top:none">
<ul class="unstyled media-list">
<% comments.each do |c| %>
<li class="media"><%= render c %></li>
<% end %>
</ul>
</div>
<% if comments.first.root? %>
<%= paginate comments, :remote=>true , :theme=>'twitter-bootstrap'%>
<% end %>
<% end %>

View File

@@ -0,0 +1,14 @@
<div id="<%= form.formid %>">
<%= semantic_form_for form , remote:true, html: {class: "form-inline"} do |f| %>
<%= f.inputs do %>
<%= f.input :commentable_id, as: :hidden %>
<%= f.input :commentable_type, as: :hidden %>
<%= f.input :text, as: :string %>
<%= f.input :anonym %>
<% end %>
<%= f.actions do %>
<%= f.action :submit, :as => :input %>
<% end %>
<% end %>
</div>

View File

@@ -0,0 +1,6 @@
<h1>Editing comment</h1>
<%= render 'form', object: @comment %>
<%= link_to 'Show', @comment %> |
<%= link_to 'Back', comments_path %>

View File

@@ -0,0 +1,3 @@
$("#<%= Comment.wrapid_for(@commentable) %>").html("<%= escape_javascript "" %>")
$("#<%= Comment.switchshowid_for(@commentable) %>").attr("href","<%= escape_javascript comments_path(commentable_type: @commentable.class.to_s, commentable_id: @commentable.id) %>")

View File

@@ -0,0 +1,22 @@
<h1>Listing comments</h1>
<%= render partial:"comments/comments", object: @comments %>
<table>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
<% @comments.each do |comment| %>
<tr>
<td><%= link_to 'Show', comment %></td>
<td><%= link_to 'Edit', edit_comment_path(comment) %></td>
<td><%= link_to 'Destroy', comment, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Comment', new_comment_path %>

View File

@@ -0,0 +1,2 @@
$("#<%= Comment.wrapid_for(@commentable) %>").html("<%= escape_javascript render partial:"comments/comments", object: @comments %>")
$("#<%= Comment.switchshowid_for(@commentable) %>").attr("href","<%= escape_javascript hide_comments_path(commentable_type: @commentable.class.to_s, commentable_id: @commentable.id) %>")

View File

@@ -0,0 +1,5 @@
<h1>New comment</h1>
<%= render partial: 'form', object: @comment %>
<%= link_to 'Back', comments_path %>

View File

@@ -0,0 +1 @@
$("#<%= @comment.formid %>").replaceWith("<%= escape_javascript render partial: "form", object: @comment %>")

View File

@@ -0,0 +1,6 @@
<p id="notice"><%= notice %></p>
<%= render @comment %>
<%= link_to 'Edit', edit_comment_path(@comment) %> |
<%= link_to 'Back', comments_path %>

View File

@@ -2,7 +2,7 @@ require File.expand_path('../boot', __FILE__)
require 'rails/all'
require File.expand_path('lib/like_voteable.rb')
require File.expand_path('lib/is_commentable.rb')
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line

View File

@@ -1,5 +1,5 @@
Fetsite::Application.routes.draw do
resources :comments
themes_for_rails
@@ -126,7 +126,11 @@ Fetsite::Application.routes.draw do
end
end
end
resources :comments do
collection do
get 'hide'
end
end
resources :home, :only=>[:index] do
get :search, :on => :collection
collection do

View File

@@ -0,0 +1,19 @@
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.integer :user_id
t.integer :commentable_id
t.string :commentable_type
t.text :text
t.integer :parent_id
t.integer :lft
t.integer :rgt
t.integer :depth
t.boolean :hidden
t.boolean :official
t.boolean :intern
t.boolean :anonym
t.timestamps
end
end
end

20
lib/is_commentable.rb Normal file
View File

@@ -0,0 +1,20 @@
module IsCommentable
def self.included(base)
base.class_eval do
include InstanceMethods
has_many :comments, as: :commentable, dependent: :destroy
# extend ClassMethods
end
end
module InstanceMethods
def is_commentable?
true
end
def comment(user, text, attr={})
comments << Comment.build_for(self, user, text, attr)
end
end
end