Skip to content
4 changes: 3 additions & 1 deletion app/controllers/bookmarks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ def create
redirect_to [@bookmark.owner, @bookmark], notice: "Votre lien a bien été partagé"
else
@bookmark.node = Node.new(user_id: current_user.id, cc_licensed: false)
@bookmark.node.preview_tags = params[:tags]
if params.include?(:tags)
@bookmark.node.preview_tags = params[:tags]
end
@bookmark.valid?
flash.now[:alert] = "Votre lien semble invalide. Le confimez‑vous ?" unless @bookmark.link =~ /\A#{URI::regexp(['http', 'https'])}\z/
render :new
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/diaries_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ def create
redirect_to [@diary.owner, @diary], notice: "Votre journal a bien été créé"
else
@diary.node = Node.new(user_id: current_user.id, cc_licensed: @diary.cc_licensed)
@diary.node.preview_tags = params[:tags]
if params.include?(:tags)
@diary.node.preview_tags = params[:tags]
end
@diary.valid?
flash.now[:alert] = "Votre journal ne contient pas de liens. Confirmez‑vous que cela est normal ?" unless @diary.body =~ /<a /
render :new
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/news_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ def create
redirect_to news_index_url, notice: "Votre proposition de dépêche a bien été soumise, et sera modérée dans les heures ou les jours à venir"
else
@news.node = Node.new(cc_licensed: @news.cc_licensed)
@news.node.preview_tags = params[:tags]
if params.include?(:tags)
@news.node.preview_tags = params[:tags]
end
@news.valid?
render :new
end
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/posts_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ def create
redirect_to forum_posts_url(forum_id: @post.forum), notice: "Votre message a bien été créé"
else
@post.node = Node.new
@post.node.preview_tags = params[:tags]
if params.include?(:tags)
@post.node.preview_tags = params[:tags]
end
@post.valid?
render :new
end
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/wiki_pages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ def show

def new
@wiki_page = WikiPage.new
@wiki_page.title = params[:title]
if params.include?(:title)
@wiki_page.title = params[:title]
end
return not_enough_karma('pages de wiki') unless @wiki_page.creatable_by?(current_account)
enforce_create_permission(@wiki_page)
end
Expand Down
14 changes: 11 additions & 3 deletions app/models/bookmark.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,17 @@ class Bookmark < Content
belongs_to :owner, class_name: 'User'

validates :title, presence: { message: "Le titre est obligatoire" },
length: { maximum: 100, message: "Le titre est trop long" }
length: { maximum: 160, message: "Le titre est trop long" },
uniqueness: { message: "Un lien avec le même titre a déjà été proposé" }
validates :link, presence: { message: "Vous ne pouvez pas poster un lien vide" },
http_url: { message: "Le lien n'est pas valide" },
length: { maximum: 255, message: "Le lien est trop long" }
length: { maximum: 255, message: "Le lien est trop long" },
uniqueness: { message: "Cette adresse de lien a déjà été proposée" }
validates :lang, inclusion: { in: Lang.valid_codes, allow_nil: false, message: "La langue du lien doit être définie" }

def link=(raw)
raw.strip!
return write_attribute :url, nil if raw.blank?
return write_attribute :link, nil if raw.blank?
uri = URI.parse(raw)
# Default to HTTP link if neither scheme nor host is found
if uri.scheme.blank? && uri.host.blank?
Expand All @@ -44,6 +47,11 @@ def link=(raw)
write_attribute :link, raw
end

def title=(raw)
raw.strip!
write_attribute :title, raw
end

def create_node(attrs={})
attrs[:cc_licensed] = false
super
Expand Down
5 changes: 5 additions & 0 deletions app/models/comment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ def wikify_body
self.body = wikify(wiki_body, nofollow: nofollow)
end

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### Reading status ###

# Returns true if this comment has been read by the given user,
Expand Down
2 changes: 1 addition & 1 deletion app/models/diary.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class Diary < Content
belongs_to :converted_news, class_name: 'News'

validates :title, presence: { message: "Le titre est obligatoire" },
length: { maximum: 100, message: "Le titre est trop long" }
length: { maximum: 160, message: "Le titre est trop long" }
validates :wiki_body, presence: { message: "Vous ne pouvez pas poster un journal vide" }

validate :convert_only_cc_licensed_diary, on: :convert
Expand Down
5 changes: 5 additions & 0 deletions app/models/forum.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class Forum < ActiveRecord::Base
extend FriendlyId
friendly_id

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### Workflow ###

state_machine :state, initial: :active do
Expand Down
4 changes: 4 additions & 0 deletions app/models/lang.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ def self.all
vals.zip(keys)
end

def self.valid_codes
$redis.lrange("lang", 0, -1) - ["xx"]
end

def self.[]=(key, value)
$redis.set("lang/#{key}", value)
$redis.rpush("lang", key)
Expand Down
8 changes: 7 additions & 1 deletion app/models/link.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ class Link < ActiveRecord::Base
Accessible = [:id, :user, :title, :url, :lang]

validates :title, presence: { message: "Un lien doit obligatoirement avoir un titre" },
length: { maximum: 100, message: "Le titre est trop long" }
length: { maximum: 100, message: "Le titre du lien est trop long" }
validates :url, http_url: { protocols: PROTOCOLS, message: "L'adresse n'est pas valide" },
presence: { message: "Un lien doit obligatoirement avoir une adresse" },
length: { maximum: 255, message: "L’adresse est trop longue" }
validates :lang, inclusion: { in: Lang.valid_codes, allow_nil: false, message: "La langue du lien doit être définie" }

def url=(raw)
raw.strip!
Expand All @@ -44,6 +45,11 @@ def url=(raw)
write_attribute :url, raw
end

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### Behaviour ###

def self.hit(id)
Expand Down
9 changes: 8 additions & 1 deletion app/models/news.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,28 @@ class News < Content
dependent: :destroy,
inverse_of: :news

validates_associated :section, message: "Veuillez choisir une section pour cette dépêche"

scope :sorted, -> { order(updated_at: :desc) }
scope :draft, -> { where(state: "draft").includes(node: :user) }
scope :candidate, -> { where(state: "candidate") }
scope :refused, -> { where(state: "refused") }
scope :with_node_ordered_by, ->(order) { joins(:node).where("nodes.public = 1").order("nodes.#{order} DESC") }

validates :title, presence: { message: "Le titre est obligatoire" },
length: { maximum: 100, message: "Le titre est trop long" }
length: { maximum: 160, message: "Le titre est trop long" }
validates :body, presence: { message: "Nous n’acceptons pas les dépêches vides" }
validates :section, presence: { message: "Veuillez choisir une section pour cette dépêche" }
validates :author_name, presence: { message: "Veuillez entrer votre nom" },
length: { maximum: 32, message: "Le nom de l’auteur est trop long" }
validates :author_email, presence: { message: "Veuillez entrer votre adresse de courriel" },
length: { maximum: 64, message: "L’adresse de courriel de l’auteur est trop longue" }

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### SEO ###

extend FriendlyId
Expand Down
6 changes: 5 additions & 1 deletion app/models/node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,11 @@ def board_status(account)
attr_reader :preview_tags

def preview_tags=(list)
@preview_tags = TagList.new(list)
if list.nil?
@preview_tags = TagList.new
else
@preview_tags = TagList.new(list)
end
end

def set_taglist(list, user_id)
Expand Down
5 changes: 5 additions & 0 deletions app/models/poll.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ def mark_answers_for_destruction
end
end

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### Associated node ###

def create_node(attrs={})
Expand Down
9 changes: 8 additions & 1 deletion app/models/post.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,23 @@ class Post < Content

belongs_to :forum

validates_associated :forum, message: "Vous devez choisir un forum"

scope :with_node_ordered_by, ->(order) { joins(:node).where("nodes.public = 1").order("nodes.#{order} DESC") }

validates :forum, presence: { message: "Vous devez choisir un forum" }
validates :title, presence: { message: "Le titre est obligatoire" },
length: { maximum: 100, message: "Le titre est trop long" }
length: { maximum: 160, message: "Le titre est trop long" }
validates :wiki_body, presence: { message: "Vous ne pouvez pas poster une entrée de forum vide" }

wikify_attr :body
truncate_attr :body

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### SEO ###

extend FriendlyId
Expand Down
8 changes: 8 additions & 0 deletions app/models/tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,25 @@ class Tracker < Content
belongs_to :assigned_to_user, class_name: "User"
belongs_to :category

validates_associated :category, message: "Veuillez choisir une catégorie pour cette entrée de suivi"

attr_accessor :pot_de_miel

validates :title, presence: { message: "Le titre est obligatoire" },
length: { maximum: 100, message: "Le titre est trop long" }
validates :category, presence: { message: "Veuillez choisir une catégorie pour cette entrée de suivi" }
validates :wiki_body, presence: { message: "Veuillez décrire cette entrée du suivi" }

scope :opened, -> { where(state: "opened") }

wikify_attr :body
truncate_attr :body

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### SEO ###

extend FriendlyId
Expand Down
5 changes: 5 additions & 0 deletions app/models/wiki_page.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class WikiPage < Content
exclusion: { in: reserved, message: "Ce titre est réservé pour une page spéciale" }
validates :body, presence: { message: "Le corps est obligatoire" }

def title=(raw)
raw.strip!
write_attribute :title, raw
end

### SEO ###

extend FriendlyId
Expand Down
5 changes: 5 additions & 0 deletions app/models/wiki_version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ class WikiVersion < ActiveRecord::Base

validates :message, length: { maximum: 255, message: "Le message est trop long" }

def message=(raw)
raw.strip!
write_attribute :message, raw
end

### Append-only ###

before_update :raise_on_update
Expand Down
6 changes: 3 additions & 3 deletions app/views/bookmarks/_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

%p
= form.label :title, "Sujet du lien"
= form.text_field :title, autocomplete: 'off', required: 'required', spellcheck: 'true', maxlength: 100
= form.text_field :title, autocomplete: 'off', required: 'required', spellcheck: 'true', maxlength: 160
%p
= form.label :link, "Lien à partager"
= form.text_field :link, autocomplete: 'off', required: 'required', spellcheck: 'false', maxlength: 1024
%p
= form.label :lang, "Langue"
= form.select :lang, Lang.all
= form.select :lang, Lang.all, { include_blank: true }, { required: "required" }
%p
- if form.object.new_record?
%p
= label_tag :tags
= text_field_tag :tags, nil, class: 'autocomplete', 'data-url' => autocomplete_tags_path, value: params[:tags], size: 100
%p
= form.submit "Prévisualiser", id: "bookmark_preview"
= form.submit "Poster le lien", 'data-disable-with' => "Enregistrement en cours" if @preview_mode
= form.submit "Poster le lien", 'data-disable-with' => "Enregistrement en cours" if @preview_mode and @bookmark.valid?
2 changes: 1 addition & 1 deletion app/views/bookmarks/edit.html.haml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%main#contents(role="main")
=h1 "Éditer un lien"

= render "preview", preview: @bookmark if @preview_mode
= render "preview", preview: @bookmark if @preview_mode and @bookmark.valid?

%h2 Édition
= form_for [@bookmark.owner, @bookmark] do |form|
Expand Down
2 changes: 1 addition & 1 deletion app/views/bookmarks/new.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
%p
Les <a href="/regles_de_moderation">règles de modération</a> sont applicables aux liens comme au reste du site.

= render "preview", preview: @bookmark if @preview_mode
= render "preview", preview: @bookmark if @preview_mode and @bookmark.valid?

= form_for @bookmark do |form|
= render form
2 changes: 1 addition & 1 deletion app/views/comments/_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
= form.text_area :wiki_body, required: 'required', spellcheck: 'true', class: 'markItUp', placeholder: "Vous pouvez écrire votre commentaire ici.\n\nMerci de rester poli et courtois, on compte sur vous !"
%p
= form.submit "Prévisualiser", id: "comment_preview"
= form.submit "Poster le commentaire", 'data-disable-with' => "Enregistrement en cours" if @preview_mode
= form.submit "Poster le commentaire", 'data-disable-with' => "Enregistrement en cours" if @preview_mode and @comment.valid?
2 changes: 1 addition & 1 deletion app/views/comments/edit.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
=h1 "Éditer un commentaire"

%div#comments
= render "preview", preview: @comment if @preview_mode
= render "preview", preview: @comment if @preview_mode and @comment.valid?

= form_for [@comment.node, @comment] do |form|
= render form
Expand Down
2 changes: 1 addition & 1 deletion app/views/comments/new.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
- else
= render @comment.node.content
%div#comments
= render "preview", preview: @comment if @preview_mode
= render "preview", preview: @comment if @preview_mode and @comment.valid?

= form_for [@node, @comment], url: "/nodes/#{@node.id}/comments#comment_new" do |form|
= form.hidden_field :parent_id
Expand Down
4 changes: 2 additions & 2 deletions app/views/diaries/_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

%p
= form.label :title, "Sujet du journal"
= form.text_field :title, autocomplete: 'off', required: 'required', spellcheck: 'true', maxlength: 100
= form.text_field :title, autocomplete: 'off', required: 'required', spellcheck: 'true', maxlength: 160
%p
= form.label :wiki_body, "Journal complet"
= form.text_area :wiki_body, required: 'required', spellcheck: 'true', class: 'markItUp'
Expand All @@ -15,4 +15,4 @@
= form.label :cc_licensed, 'Je place ce document sous licence Creative Commons Attribution et Partage dans les mêmes conditions, version 4.0 (<a href="http://creativecommons.org/licenses/by-sa/4.0/deed.fr">licence CC By‑SA 4.0</a>)'.html_safe
%p
= form.submit "Prévisualiser", id: "diary_preview"
= form.submit "Poster le journal", 'data-disable-with' => "Enregistrement en cours" if @preview_mode
= form.submit "Poster le journal", 'data-disable-with' => "Enregistrement en cours" if @preview_mode and @diary.valid?
2 changes: 1 addition & 1 deletion app/views/diaries/edit.html.haml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%main#contents(role="main")
=h1 "Éditer un journal"

= render "preview", preview: @diary if @preview_mode
= render "preview", preview: @diary if @preview_mode and @diary.valid?

%h2 Édition
= form_for [@diary.owner, @diary] do |form|
Expand Down
2 changes: 1 addition & 1 deletion app/views/diaries/new.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
%p
Des <a href="/regles_de_moderation">règles de modération</a> sont applicables aux journaux (et au reste du site).

= render "preview", preview: @diary if @preview_mode
= render "preview", preview: @diary if @preview_mode and @diary.valid?

= form_for @diary do |form|
= render form
Expand Down
Loading