Skip to content

Commit 82d265e

Browse files
authored
Merge pull request #384 from linuxfrorg/3186_admin_blocked_images
List blocked images
2 parents 8a582a0 + ac07ad5 commit 82d265e

File tree

8 files changed

+59
-16
lines changed

8 files changed

+59
-16
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# encoding: UTF-8
2+
class Admin::ImagesController < AdminController
3+
4+
def index
5+
@images = Image.blocked(100)
6+
end
7+
end

app/controllers/moderation/images_controller.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ def index
66
end
77

88
def destroy
9-
Board.amr_notification("Une image #{moderation_images_url} a été bloquée par #{current_user.name} #{user_url(current_user)}")
10-
Image.destroy params[:id] unless params[:id].blank?
9+
unless params[:id].blank?
10+
Board.amr_notification("Une image récente de #{moderation_images_url} a été bloquée par #{current_user.name} #{user_url(current_user)}")
11+
Image.destroy params[:id]
12+
end
1113
redirect_to moderation_images_url
1214
end
1315
end

app/models/image.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,31 @@
44
# When a user use an image from an external domain on LinuxFr.org, we keep some
55
# infos about this image in redis, so it can served by our proxy/cache daemon, img.
66
#
7-
class Image < Struct.new(:link, :title, :alt_text)
7+
class Image < Struct.new(:link, :title, :alt_text, :blocked)
88
LATEST_KEY = "img/latest"
99
NB_IMG_IN_LATEST = 100
10+
BLOCKED_KEY = "img/blocked"
1011
E403 = "/images/403.png"
1112

1213
def self.latest(nb=NB_IMG_IN_LATEST)
1314
links = $redis.lrange LATEST_KEY, 0, nb
14-
links.map {|l| Image.new(l, l, l) }
15+
links.map {|l| Image.new(l, l, l, ($redis.hget "img/#{l}", "status") == "Blocked") }
16+
end
17+
18+
def self.blocked(nb)
19+
links = $redis.lrange BLOCKED_KEY, 0, nb
20+
links.map {|l| Image.new(l, l, l, ($redis.hget "img/#{l}", "status") == "Blocked") }
1521
end
1622

1723
def self.decoded_link(encoded_link)
1824
[encoded_link].pack('H*')
1925
end
2026

2127
def self.destroy(encoded_link)
22-
$redis.hset "img/#{decoded_link encoded_link}", "status", "Blocked"
28+
link = decoded_link(encoded_link)
29+
if $redis.hset "img/#{link}", "status", "Blocked"
30+
$redis.lpush BLOCKED_KEY, link
31+
end
2332
end
2433

2534
def self.original_link(link)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# encoding: utf-8
2+
%h1 Images externes bloquées
3+
4+
- if @images.any?
5+
%p Liste des images externes bloquées :
6+
- else
7+
%p Aucune image externe bloquée actuellement
8+
9+
%ul
10+
- @images.each do |image|
11+
%li
12+
%pre
13+
= "#{image.link.html_safe} #{'⚠ image non bloquée' unless image.blocked}"

app/views/admin/index.html.haml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
=h1 "Administration"
22
%ul
3+
%li= link_to "Applications de l’API", admin_applications_path
4+
%li= link_to "Bannières", admin_banners_path
5+
%li= link_to "Débogage", "/admin/debug"
36
%li= link_to "Derniers comptes", admin_accounts_path
4-
%li= link_to "Réponses de refus (pour les dépêches)", admin_responses_path
5-
%li= link_to "Sections (pour les dépêches)", admin_sections_path
6-
%li= link_to "Forums", admin_forums_path
77
%li= link_to "Catégories (pour le suivi)", admin_categories_path
8-
%li= link_to "Bannières", admin_banners_path
9-
%li= link_to "Logo", admin_logo_path
108
%li= link_to "Feuilles de style", admin_stylesheet_path
9+
%li= link_to "Forums", admin_forums_path
10+
%li= link_to "Images", admin_images_path
11+
%li= link_to "Logo", admin_logo_path
12+
%li= link_to "Réponses de refus (pour les dépêches)", admin_responses_path
13+
%li= link_to "Sections (pour les dépêches)", admin_sections_path
1114
%li= link_to "Sites amis", admin_friend_sites_path
1215
%li= link_to "Pages statiques", admin_pages_path
13-
%li= link_to "Applications de l’API", admin_applications_path
14-
%li= link_to "Débogage", "/admin/debug"
Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
%h1 Images externes les plus récentes
22

3-
- @images.each do |image|
4-
.image
5-
= image.to_html.html_safe
6-
= button_to "Bloquer", moderation_image_path(image.encoded_link), method: :delete, data: { confirm: "Confirmez‑vous vouloir bloquer cette image ?" }
3+
- if @images.any?
4+
%p Images externes les plus récentes
5+
%ul
6+
- @images.each do |image|
7+
%li.image
8+
- if image.blocked
9+
%pre #{image.link.html_safe}
10+
= "⛔ Bloquée"
11+
- else
12+
= image.to_html.html_safe
13+
= button_to "Bloquer", moderation_image_path(image.encoded_link), method: :delete, data: { confirm: "Confirmez‑vous vouloir bloquer cette image ?" }
14+
- else
15+
%p Aucune image externe actuellement

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@
209209
end
210210
resources :pages, except: [:show]
211211
resources :applications, except: [:new, :create]
212+
resources :images, except: [:show]
212213
end
213214

214215
# Search

db/redis.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Key | Type | Value
1111
`convert/<news_id>` | string | `<diary_id>` | no | Conversions from diary to news
1212
`dashboard/<account_id>` | set | `<node_id>` | 1 week | Notifications from answers
1313
`img/<uri>` | hash | | no | Images, with fields 'created_at': seconds since Epoch, 'status': 'Blocked' if administratively blocked (by moderation), 'type': content-type like 'image/jpeg' (set by `img` daemon), 'checksum': SHA1 (set by `img` daemon), and 'etag': etag (set by `img` daemon)
14+
`img/blocked` | list | URIs | no | Images blocked by moderation team
1415
`img/err/<uri>` | string | error | no | Images in error, like "Invalid content-type", created by `img` daemon but removed by `dlfp`
1516
`img/latest` | list | URIs | no, limited| Last images, limited to NB_IMG_IN_LATEST = 100
1617
`img/updated/<uri>` | string | modtime | 1h | Cached images, created by `img` daemon, value like "Thu, 12 Dec 2013 12:28:47 GMT"

0 commit comments

Comments
 (0)