It is now possible to follow events' and organisations' versions. Refs #15
This commit is contained in:
parent
a51e7cf8fc
commit
b0fe24ca4b
15
app/controllers/versions_controller.rb
Normal file
15
app/controllers/versions_controller.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Supervise all the actions done
|
||||||
|
class VersionsController < ApplicationController
|
||||||
|
def index
|
||||||
|
respond_to do |format|
|
||||||
|
format.html do
|
||||||
|
@search = PaperTrail::Version.search params[:q]
|
||||||
|
@search.sorts = 'created_at desc' if @search.sorts.empty?
|
||||||
|
@versions = @search.result.page params[:page]
|
||||||
|
end
|
||||||
|
format.rss do
|
||||||
|
@versions = PaperTrail::Version.order('created_at desc').limit(20)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -4,7 +4,7 @@
|
|||||||
class Event < ActiveRecord::Base
|
class Event < ActiveRecord::Base
|
||||||
extend SimpleCalendar
|
extend SimpleCalendar
|
||||||
strip_attributes
|
strip_attributes
|
||||||
has_paper_trail
|
has_paper_trail ignore: [:last_updated, :secret, :submitter]
|
||||||
|
|
||||||
belongs_to :region
|
belongs_to :region
|
||||||
has_many :notes, dependent: :destroy
|
has_many :notes, dependent: :destroy
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Groups related to this agenda
|
# Organisations related to this agenda
|
||||||
class Orga < ActiveRecord::Base
|
class Orga < ActiveRecord::Base
|
||||||
has_paper_trail
|
strip_attributes
|
||||||
|
has_paper_trail ignore: [:last_updated, :secret, :submitter]
|
||||||
|
|
||||||
belongs_to :region
|
belongs_to :region
|
||||||
belongs_to :kind
|
belongs_to :kind
|
||||||
@ -54,4 +55,8 @@ class Orga < ActiveRecord::Base
|
|||||||
def name_as_tag
|
def name_as_tag
|
||||||
name.gsub(/\AL'/, '').gsub(/[\s\*']/, '-').delete ':'
|
name.gsub(/\AL'/, '').gsub(/[\s\*']/, '-').delete ':'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
"[#{kind.name}] #{name}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -62,6 +62,9 @@
|
|||||||
= link_to orgas_path do
|
= link_to orgas_path do
|
||||||
%em.fa.fa-users
|
%em.fa.fa-users
|
||||||
= Orga.model_name.human.pluralize
|
= Orga.model_name.human.pluralize
|
||||||
|
= link_to versions_path do
|
||||||
|
%em.fa.fa-exchange
|
||||||
|
= t 'versions.index.title'
|
||||||
= link_to application_infos_path do
|
= link_to application_infos_path do
|
||||||
%em.fa.fa-info
|
%em.fa.fa-info
|
||||||
= t '.infos'
|
= t '.infos'
|
||||||
|
49
app/views/versions/index.haml
Normal file
49
app/views/versions/index.haml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
%h2
|
||||||
|
%em.fa.fa-exchange
|
||||||
|
= title t '.title'
|
||||||
|
|
||||||
|
%table.list.autopagerize_page_element
|
||||||
|
%thead
|
||||||
|
%th.event= sort_link @search, :event
|
||||||
|
%th.whodunnit= sort_link @search, :whodunnit
|
||||||
|
%th.object= sort_link @search, :object_id
|
||||||
|
%th.created_at= sort_link @search, :created_at
|
||||||
|
%th.view/
|
||||||
|
|
||||||
|
%tbody
|
||||||
|
- @versions.each do |version|
|
||||||
|
:ruby
|
||||||
|
if version.event == 'create'
|
||||||
|
object = version.item_type.constantize.find version.item_id
|
||||||
|
else
|
||||||
|
object = version.reify
|
||||||
|
end
|
||||||
|
next unless object.moderated?
|
||||||
|
|
||||||
|
changes = ''
|
||||||
|
if version.event == 'update'
|
||||||
|
version.changeset.each do |key, val|
|
||||||
|
changes += version.item_type.constantize.human_attribute_name(key)
|
||||||
|
changes += ': '
|
||||||
|
if key == 'description'
|
||||||
|
changes += Differ.diff(val[1], val[0]).to_s
|
||||||
|
else
|
||||||
|
changes += "#{val[0]} -> #{val[1]}"
|
||||||
|
end
|
||||||
|
changes += '
|
||||||
|
'
|
||||||
|
end
|
||||||
|
changes = strip_tags(changes).gsub(/^\s*/, '')
|
||||||
|
end
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%td{ title: changes }= t ".#{version.event}_html"
|
||||||
|
%td= User.find version.whodunnit if version.whodunnit
|
||||||
|
%td= object
|
||||||
|
%td= l version.created_at
|
||||||
|
%td
|
||||||
|
%a{ href: polymorphic_path(version.item_type.tableize.singularize,
|
||||||
|
id: version.item_id) }
|
||||||
|
%em.fa.fa-eye
|
||||||
|
|
||||||
|
= paginate @versions
|
78
app/views/versions/index.rss.builder
Normal file
78
app/views/versions/index.rss.builder
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
require 'differ/format/patch'
|
||||||
|
Differ.format = Differ::Format::Patch
|
||||||
|
|
||||||
|
xml.instruct!
|
||||||
|
|
||||||
|
xml.rdf :RDF,
|
||||||
|
'xmlns:rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
||||||
|
'xmlns' => 'http://purl.org/rss/1.0/',
|
||||||
|
'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
|
||||||
|
'xmlns:sy' => 'http://purl.org/rss/1.0/modules/syndication/',
|
||||||
|
'xmlns:admin' => 'http://webns.net/mvcb/',
|
||||||
|
'xmlns:cc' => 'http://web.resource.org/cc/',
|
||||||
|
'xmlns:content' => 'http://purl.org/rss/1.0/modules/content/',
|
||||||
|
'xmlns:georss' => 'http://www.georss.org/georss' do
|
||||||
|
xml.channel 'rdf:about' => root_url do
|
||||||
|
title = t 'layouts.application.title'
|
||||||
|
if params[:region].present? && params[:region] != 'all'
|
||||||
|
region = Region.find(params[:region]).name
|
||||||
|
title += " [#{region}]"
|
||||||
|
end
|
||||||
|
xml.title title
|
||||||
|
xml.description t 'layouts.application.subtitle'
|
||||||
|
xml.link root_url
|
||||||
|
xml.dc :language, 'fr'
|
||||||
|
xml.dc :creator, root_url
|
||||||
|
|
||||||
|
xml.items do
|
||||||
|
xml.rdf :Seq do
|
||||||
|
@versions.each do |version|
|
||||||
|
xml.rdf :li, 'rdf:resource' =>
|
||||||
|
polymorphic_url(version.item_type.tableize.singularize,
|
||||||
|
id: version.item_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@versions.each do |version|
|
||||||
|
if version.event == 'create'
|
||||||
|
object = version.item_type.constantize.find version.item_id
|
||||||
|
else
|
||||||
|
object = version.reify
|
||||||
|
end
|
||||||
|
next unless object.moderated?
|
||||||
|
url = polymorphic_url(version.item_type.tableize.singularize,
|
||||||
|
id: version.item_id)
|
||||||
|
|
||||||
|
xml.item 'rdf:about' => url do
|
||||||
|
xml.title "#{version.event} - #{object}"
|
||||||
|
xml.link url
|
||||||
|
domain = root_url.gsub(/www/, '').gsub(/http.?:../, '').gsub(/:.*/, '')
|
||||||
|
xml.dc :identifier, "version_#{version.id}@#{domain}"
|
||||||
|
xml.dc :date, version.created_at.iso8601
|
||||||
|
|
||||||
|
if object.try(:description)
|
||||||
|
if version.event == 'create'
|
||||||
|
xml.description strip_tags object.description
|
||||||
|
xml.content(:encoded) { xml.cdata! object.description }
|
||||||
|
elsif version.event == 'update'
|
||||||
|
changes = ''
|
||||||
|
version.changeset.each do |key, val|
|
||||||
|
changes += version.item_type.constantize.human_attribute_name(key)
|
||||||
|
changes += ': '
|
||||||
|
if key == 'description'
|
||||||
|
changes += Differ.diff(val[1], val[0]).to_s
|
||||||
|
else
|
||||||
|
changes += "#{val[0]} -> #{val[1]}"
|
||||||
|
end
|
||||||
|
changes += '
|
||||||
|
'
|
||||||
|
end
|
||||||
|
xml.description changes
|
||||||
|
xml.content(:encoded) { xml.cdata! changes }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -380,15 +380,7 @@ reason:
|
|||||||
signature: Have a good day!
|
signature: Have a good day!
|
||||||
accept:
|
accept:
|
||||||
subject: "Organisation '%{subject}' moderated"
|
subject: "Organisation '%{subject}' moderated"
|
||||||
body: "Organisation has been modérée by %{moderator}.
|
body: The organisation has been moderated by %{author}.
|
||||||
\nYou can acces it here:"
|
|
||||||
edit_link: "Vous pouvez modifier cette organisation ultérieurement pour y ajouter des
|
|
||||||
\nprécisions en vous rendant à l'adresse:"
|
|
||||||
delete_link: "You can also delete it using the address:"
|
|
||||||
signature: Thank you for your contribution and see you soon!
|
|
||||||
accept:
|
|
||||||
subject: "Organisation '%{subject}' moderated"
|
|
||||||
body: The orgnisation has been moderated by %{author}.
|
|
||||||
access: "You can consult it here:"
|
access: "You can consult it here:"
|
||||||
signature: Thanks for your contribution!
|
signature: Thanks for your contribution!
|
||||||
destroy:
|
destroy:
|
||||||
@ -399,3 +391,10 @@ reason:
|
|||||||
moderation team.
|
moderation team.
|
||||||
reminder: "Reminder, here is your organisation's content:"
|
reminder: "Reminder, here is your organisation's content:"
|
||||||
signature: With all our thanks for your contribution
|
signature: With all our thanks for your contribution
|
||||||
|
|
||||||
|
versions:
|
||||||
|
index:
|
||||||
|
title: Versions
|
||||||
|
create_html: <em class='fa fa-plus-circle'></em>
|
||||||
|
update_html: <em class='fa fa-exchange'></em>
|
||||||
|
destroy_html: <em class='fa fa-trash'></em>
|
||||||
|
@ -391,3 +391,10 @@ l'adresse:"
|
|||||||
de modérateurs.
|
de modérateurs.
|
||||||
reminder: "Pour rappel, voici le contenu de l'organisation:"
|
reminder: "Pour rappel, voici le contenu de l'organisation:"
|
||||||
signature: Avec tous nos remerciements pour votre contribution
|
signature: Avec tous nos remerciements pour votre contribution
|
||||||
|
|
||||||
|
versions:
|
||||||
|
index:
|
||||||
|
title: Versions
|
||||||
|
create_html: <em class='fa fa-plus-circle'></em>
|
||||||
|
update_html: <em class='fa fa-exchange'></em>
|
||||||
|
destroy_html: <em class='fa fa-trash'></em>
|
||||||
|
@ -3,6 +3,7 @@ Rails.application.routes.draw do
|
|||||||
get 'application/contact'
|
get 'application/contact'
|
||||||
get 'application/rules'
|
get 'application/rules'
|
||||||
get 'stats', to: 'stats#index'
|
get 'stats', to: 'stats#index'
|
||||||
|
get 'versions', to: 'versions#index'
|
||||||
|
|
||||||
resources :users
|
resources :users
|
||||||
resources :events do
|
resources :events do
|
||||||
|
10
db/migrate/20160109203136_add_object_changes_to_versions.rb
Normal file
10
db/migrate/20160109203136_add_object_changes_to_versions.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Can trace the exact changes to paper trailed objects
|
||||||
|
class AddObjectChangesToVersions < ActiveRecord::Migration
|
||||||
|
# The largest text column available in all supported RDBMS.
|
||||||
|
# See `create_versions.rb` for details.
|
||||||
|
TEXT_BYTES = 1_073_741_823
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_column :versions, :object_changes, :text, limit: TEXT_BYTES
|
||||||
|
end
|
||||||
|
end
|
10
db/schema.rb
10
db/schema.rb
@ -11,7 +11,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20160107203117) do
|
ActiveRecord::Schema.define(version: 20160109203136) do
|
||||||
|
|
||||||
create_table "active_admin_comments", force: :cascade do |t|
|
create_table "active_admin_comments", force: :cascade do |t|
|
||||||
t.string "namespace", limit: 255
|
t.string "namespace", limit: 255
|
||||||
@ -121,6 +121,7 @@ ActiveRecord::Schema.define(version: 20160107203117) do
|
|||||||
t.text "tag"
|
t.text "tag"
|
||||||
t.text "tags", default: ""
|
t.text "tags", default: ""
|
||||||
t.text "diaspora"
|
t.text "diaspora"
|
||||||
|
t.text "object_changes"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "orgas", ["kind_id"], name: "index_orgas_on_kind_id"
|
add_index "orgas", ["kind_id"], name: "index_orgas_on_kind_id"
|
||||||
@ -166,12 +167,13 @@ ActiveRecord::Schema.define(version: 20160107203117) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
create_table "versions", force: :cascade do |t|
|
create_table "versions", force: :cascade do |t|
|
||||||
t.string "item_type", null: false
|
t.string "item_type", null: false
|
||||||
t.integer "item_id", null: false
|
t.integer "item_id", null: false
|
||||||
t.string "event", null: false
|
t.string "event", null: false
|
||||||
t.string "whodunnit"
|
t.string "whodunnit"
|
||||||
t.text "object"
|
t.text "object"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
|
t.text "object_changes", limit: 1073741823
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
||||||
|
Loading…
Reference in New Issue
Block a user