Controle de versoes para noticias e eventos
This commit is contained in:
@@ -30,6 +30,7 @@ class EventsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@event.revert_to(params[:version]) if params[:version]
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.xml { render :xml => @event }
|
format.xml { render :xml => @event }
|
||||||
@@ -46,7 +47,7 @@ class EventsController < ApplicationController
|
|||||||
@event.save!
|
@event.save!
|
||||||
flash[:notice] = 'Event created'[]
|
flash[:notice] = 'Event created'[]
|
||||||
|
|
||||||
EventCreateLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course)
|
EventCreateLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course, :version => @event.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_event_path(@course, @event) }
|
format.html { redirect_to course_event_path(@course, @event) }
|
||||||
@@ -55,14 +56,16 @@ class EventsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@event.revert_to(params[:version]) if params[:version]
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@event.attributes = params[:event]
|
@event.attributes = params[:event]
|
||||||
|
dirty = @event.dirty?
|
||||||
@event.save!
|
@event.save!
|
||||||
flash[:notice] = 'Event updated'[]
|
flash[:notice] = 'Event updated'[]
|
||||||
|
|
||||||
EventEditLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course)
|
EventEditLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course, :version => @event.version) if dirty
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_event_path(@course, @event) }
|
format.html { redirect_to course_event_path(@course, @event) }
|
||||||
@@ -75,7 +78,7 @@ class EventsController < ApplicationController
|
|||||||
flash[:notice] = 'Event removed'[]
|
flash[:notice] = 'Event removed'[]
|
||||||
flash[:undo] = undelete_course_event_url(@course, @event)
|
flash[:undo] = undelete_course_event_url(@course, @event)
|
||||||
|
|
||||||
EventDeleteLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course)
|
EventDeleteLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @course, :version => @event.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_events_path(@course) }
|
format.html { redirect_to course_events_path(@course) }
|
||||||
@@ -97,10 +100,10 @@ class EventsController < ApplicationController
|
|||||||
|
|
||||||
def undelete
|
def undelete
|
||||||
@event = Event.find_with_deleted(params[:id])
|
@event = Event.find_with_deleted(params[:id])
|
||||||
@event.update_attribute(:deleted_at, nil)
|
@event.restore!
|
||||||
flash[:notice] = "Event restored"[]
|
|
||||||
|
|
||||||
EventRestoreLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @event.course)
|
flash[:notice] = "Event restored"[]
|
||||||
|
EventRestoreLogEntry.create!(:target_id => @event.id, :user => @current_user, :course => @event.course, :version => @event.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_event_url(@event.course, @event) }
|
format.html { redirect_to course_event_url(@event.course, @event) }
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class NewsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@news.revert_to(params[:version]) if params[:version]
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.xml { render :xml => @news }
|
format.xml { render :xml => @news }
|
||||||
@@ -49,7 +50,7 @@ class NewsController < ApplicationController
|
|||||||
@news.save!
|
@news.save!
|
||||||
flash[:notice] = 'News created'[]
|
flash[:notice] = 'News created'[]
|
||||||
|
|
||||||
NewsCreateLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course)
|
NewsCreateLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course, :version => @news.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_news_path(@course, @news) }
|
format.html { redirect_to course_news_path(@course, @news) }
|
||||||
@@ -58,14 +59,17 @@ class NewsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@news.revert_to(params[:version]) if params[:version]
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@news.attributes = params[:news]
|
@news.attributes = params[:news]
|
||||||
|
@news.timestamp = Time.now.utc
|
||||||
|
dirty = @news.dirty?
|
||||||
@news.save!
|
@news.save!
|
||||||
flash[:notice] = 'News updated'[]
|
flash[:notice] = 'News updated'[]
|
||||||
|
|
||||||
NewsEditLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course)
|
NewsEditLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course, :version => @news.version) if dirty
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_news_path(@course, @news) }
|
format.html { redirect_to course_news_path(@course, @news) }
|
||||||
@@ -78,7 +82,7 @@ class NewsController < ApplicationController
|
|||||||
flash[:notice] = 'News removed'[]
|
flash[:notice] = 'News removed'[]
|
||||||
flash[:undo] = undelete_course_news_url(@course, @news)
|
flash[:undo] = undelete_course_news_url(@course, @news)
|
||||||
|
|
||||||
NewsDeleteLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course)
|
NewsDeleteLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @course, :version => @news.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_news_index_path(@course) }
|
format.html { redirect_to course_news_index_path(@course) }
|
||||||
@@ -88,10 +92,10 @@ class NewsController < ApplicationController
|
|||||||
|
|
||||||
def undelete
|
def undelete
|
||||||
@news = News.find_with_deleted(params[:id])
|
@news = News.find_with_deleted(params[:id])
|
||||||
@news.update_attribute(:deleted_at, nil)
|
@news.restore!
|
||||||
flash[:notice] = "News restored"[]
|
|
||||||
|
|
||||||
NewsRestoreLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @news.course)
|
flash[:notice] = "News restored"[]
|
||||||
|
NewsRestoreLogEntry.create!(:target_id => @news.id, :user => @current_user, :course => @news.course, :version => @news.version)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to course_news_url(@news.course, @news) }
|
format.html { redirect_to course_news_url(@news.course, @news) }
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ class Event < ActiveRecord::Base
|
|||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
acts_as_paranoid
|
acts_as_paranoid
|
||||||
|
acts_as_versioned :if_changed => [ :title, :description, :time ]
|
||||||
|
self.non_versioned_fields << 'deleted_at'
|
||||||
|
|
||||||
# Associacoes
|
# Associacoes
|
||||||
belongs_to :course
|
belongs_to :course
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ class EventDeleteLogEntry < EventLogEntry
|
|||||||
event.deleted?
|
event.deleted?
|
||||||
end
|
end
|
||||||
def undo!(current_user)
|
def undo!(current_user)
|
||||||
event.update_attribute(:deleted_at, nil)
|
event.restore!
|
||||||
EventRestoreLogEntry.create!(:target_id => event.id, :user_id => current_user.id, :course => event.course)
|
EventRestoreLogEntry.create!(:target_id => event.id, :user_id => current_user.id, :course => event.course, :version => event.version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ class NewsDeleteLogEntry < NewsLogEntry
|
|||||||
news.deleted?
|
news.deleted?
|
||||||
end
|
end
|
||||||
def undo!(current_user)
|
def undo!(current_user)
|
||||||
news.update_attribute(:deleted_at, nil)
|
news.restore!
|
||||||
NewsRestoreLogEntry.create!(:target_id => news.id, :user_id => current_user.id, :course => news.course)
|
NewsRestoreLogEntry.create!(:target_id => news.id, :user_id => current_user.id, :course => news.course, :version => news.version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ class Message < ActiveRecord::Base
|
|||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
acts_as_paranoid
|
acts_as_paranoid
|
||||||
|
acts_as_versioned :if_changed => [ :title, :body ]
|
||||||
|
self.non_versioned_fields << 'deleted_at'
|
||||||
|
|
||||||
# Associacoes
|
# Associacoes
|
||||||
belongs_to :user,
|
belongs_to :user,
|
||||||
|
|||||||
@@ -14,6 +14,9 @@
|
|||||||
- if !@events.empty?
|
- if !@events.empty?
|
||||||
%table
|
%table
|
||||||
- @events.each do |event|
|
- @events.each do |event|
|
||||||
|
|
||||||
|
- event.revert_to(params[:version]) if (event.id == params[:id].to_i) and (params[:version])
|
||||||
|
|
||||||
%tr[event]
|
%tr[event]
|
||||||
%td.top.aright{:width => '1%'}
|
%td.top.aright{:width => '1%'}
|
||||||
= event.time.strftime("%d de %B") #unless event.time == last_date
|
= event.time.strftime("%d de %B") #unless event.time == last_date
|
||||||
@@ -23,7 +26,7 @@
|
|||||||
.title=link_to h(event.title), course_event_url(@course, event)
|
.title=link_to h(event.title), course_event_url(@course, event)
|
||||||
.description{:style => (event.id == params[:id].to_i ? '' : 'display: none')}
|
.description{:style => (event.id == params[:id].to_i ? '' : 'display: none')}
|
||||||
%div.cmd
|
%div.cmd
|
||||||
= action_icon 'edit', 'Editar', edit_course_event_url(@course, event)
|
= action_icon 'edit', 'Editar', edit_course_event_url(@course, event, :version => event.version)
|
||||||
= action_icon 'trash', 'Excluir', course_event_url(@course, event), :confirm => 'Tem certeza que deseja excluir?', :method => :delete
|
= action_icon 'trash', 'Excluir', course_event_url(@course, event), :confirm => 'Tem certeza que deseja excluir?', :method => :delete
|
||||||
= formatted(event.description)
|
= formatted(event.description)
|
||||||
= "Sem descrição" if event.description.empty?
|
= "Sem descrição" if event.description.empty?
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
= "Evento " + link_to(h(entry.event.title), course_event_url(entry.course, entry.event))
|
= "Evento " + link_to(h(entry.event.title), course_event_url(entry.course, entry.event, :version => entry.version))
|
||||||
|
|
||||||
= "criado " if entry.kind_of?(EventCreateLogEntry)
|
= "criado " if entry.kind_of?(EventCreateLogEntry)
|
||||||
= "editado " if entry.kind_of?(EventEditLogEntry)
|
= "editado " if entry.kind_of?(EventEditLogEntry)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
= "Notícia " + link_to(h(entry.news.title), course_news_url(entry.course, entry.news))
|
= "Notícia " + link_to(h(entry.news.title), course_news_url(entry.course, entry.news, :version => entry.version))
|
||||||
|
|
||||||
= "criada " if entry.kind_of?(NewsCreateLogEntry)
|
= "criada " if entry.kind_of?(NewsCreateLogEntry)
|
||||||
= "editada " if entry.kind_of?(NewsEditLogEntry)
|
= "editada " if entry.kind_of?(NewsEditLogEntry)
|
||||||
|
|||||||
@@ -14,6 +14,9 @@
|
|||||||
- if !@course.news.empty?
|
- if !@course.news.empty?
|
||||||
%table
|
%table
|
||||||
- @course.news.each do |n|
|
- @course.news.each do |n|
|
||||||
|
|
||||||
|
- n.revert_to(params[:version]) if (n.id == params[:id].to_i) and (params[:version])
|
||||||
|
|
||||||
%tr[n]
|
%tr[n]
|
||||||
%td.top.aright{:width => '1%'}
|
%td.top.aright{:width => '1%'}
|
||||||
= n.timestamp.strftime("%d de %B")
|
= n.timestamp.strftime("%d de %B")
|
||||||
@@ -21,7 +24,7 @@
|
|||||||
.title= link_to h(n.title), course_news_url(@course, n)
|
.title= link_to h(n.title), course_news_url(@course, n)
|
||||||
.description{:style => (n.id == params[:id].to_i ? '' : 'display: none')}
|
.description{:style => (n.id == params[:id].to_i ? '' : 'display: none')}
|
||||||
.cmd
|
.cmd
|
||||||
= action_icon 'edit', 'Editar', edit_course_news_url(@course, n)
|
= action_icon 'edit', 'Editar', edit_course_news_url(@course, n, :version => n.version)
|
||||||
= action_icon 'trash', 'Excluir', course_news_url(@course, n), :confirm => 'Tem certeza que deseja excluir?', :method => :delete
|
= action_icon 'trash', 'Excluir', course_news_url(@course, n), :confirm => 'Tem certeza que deseja excluir?', :method => :delete
|
||||||
= formatted(n.body)
|
= formatted(n.body)
|
||||||
= "Sem descrição" if n.body.empty?
|
= "Sem descrição" if n.body.empty?
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%h4.title= @course.full_name
|
%h4.title= @course.full_name
|
||||||
%h1.title Adicionar evento
|
%h1.title Adicionar notícia
|
||||||
|
|
||||||
- form_tag course_news_url(@course, @news), :method => :post do
|
- form_tag course_news_url(@course, @news), :method => :post do
|
||||||
= render :partial => 'form'
|
= render :partial => 'form'
|
||||||
|
|||||||
29
db/schema.rb
29
db/schema.rb
@@ -9,7 +9,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 33) do
|
ActiveRecord::Schema.define(:version => 34) do
|
||||||
|
|
||||||
create_table "attachments", :force => true do |t|
|
create_table "attachments", :force => true do |t|
|
||||||
t.string "file_name", :null => false
|
t.string "file_name", :null => false
|
||||||
@@ -37,6 +37,18 @@ ActiveRecord::Schema.define(:version => 33) do
|
|||||||
t.integer "course_id"
|
t.integer "course_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "event_versions", :force => true do |t|
|
||||||
|
t.integer "event_id"
|
||||||
|
t.integer "version"
|
||||||
|
t.string "title"
|
||||||
|
t.integer "created_by"
|
||||||
|
t.integer "course_id", :default => 0
|
||||||
|
t.text "description"
|
||||||
|
t.datetime "deleted_at"
|
||||||
|
t.datetime "time", :default => '2008-03-05 04:25:27'
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "events", :force => true do |t|
|
create_table "events", :force => true do |t|
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
t.integer "created_by", :null => false
|
t.integer "created_by", :null => false
|
||||||
@@ -44,6 +56,7 @@ ActiveRecord::Schema.define(:version => 33) do
|
|||||||
t.text "description"
|
t.text "description"
|
||||||
t.datetime "deleted_at"
|
t.datetime "deleted_at"
|
||||||
t.datetime "time", :default => '2008-03-05 04:25:27', :null => false
|
t.datetime "time", :default => '2008-03-05 04:25:27', :null => false
|
||||||
|
t.integer "version", :default => 1, :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "log_entries", :force => true do |t|
|
create_table "log_entries", :force => true do |t|
|
||||||
@@ -56,6 +69,19 @@ ActiveRecord::Schema.define(:version => 33) do
|
|||||||
t.datetime "deleted_at"
|
t.datetime "deleted_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "message_versions", :force => true do |t|
|
||||||
|
t.integer "message_id"
|
||||||
|
t.integer "version"
|
||||||
|
t.string "title"
|
||||||
|
t.text "body"
|
||||||
|
t.datetime "timestamp"
|
||||||
|
t.integer "receiver_id"
|
||||||
|
t.integer "sender_id"
|
||||||
|
t.datetime "deleted_at"
|
||||||
|
t.string "versioned_type"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "messages", :force => true do |t|
|
create_table "messages", :force => true do |t|
|
||||||
t.string "title"
|
t.string "title"
|
||||||
t.text "body", :null => false
|
t.text "body", :null => false
|
||||||
@@ -64,6 +90,7 @@ ActiveRecord::Schema.define(:version => 33) do
|
|||||||
t.integer "sender_id", :null => false
|
t.integer "sender_id", :null => false
|
||||||
t.string "type"
|
t.string "type"
|
||||||
t.datetime "deleted_at"
|
t.datetime "deleted_at"
|
||||||
|
t.integer "version", :default => 1, :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "sessions", :force => true do |t|
|
create_table "sessions", :force => true do |t|
|
||||||
|
|||||||
@@ -19,8 +19,12 @@ require File.dirname(__FILE__) + '/../test_helper'
|
|||||||
class MessageTest < Test::Unit::TestCase
|
class MessageTest < Test::Unit::TestCase
|
||||||
fixtures :messages
|
fixtures :messages
|
||||||
|
|
||||||
# Replace this with your real tests.
|
def test_should_not_create_new_version
|
||||||
def test_truth
|
news = News.find(1)
|
||||||
assert true
|
news.destroy
|
||||||
|
|
||||||
|
news = News.find_with_deleted(1)
|
||||||
|
news.restore!
|
||||||
|
assert !news.dirty?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -142,6 +142,12 @@ module Caboose #:nodoc:
|
|||||||
def deleted?
|
def deleted?
|
||||||
!!read_attribute(:deleted_at)
|
!!read_attribute(:deleted_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def restore!
|
||||||
|
self.deleted_at = nil
|
||||||
|
self.save!
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user