diff --git a/app/assets/stylesheets/contrib/grayscale.scss b/app/assets/stylesheets/contrib/grayscale.scss index a7b76022f..56a2a7743 100644 --- a/app/assets/stylesheets/contrib/grayscale.scss +++ b/app/assets/stylesheets/contrib/grayscale.scss @@ -1810,6 +1810,9 @@ body:not(#tags-new) input[value="Tagger"] { .edit_account #account_user_attributes_jabber_id { width: 210px; } +.edit_account #account_user_attributes_deltachat_id { + width: 210px; +} button.remove { padding-bottom: 2px; } diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 1dee5e84e..d0cc08200 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -51,6 +51,7 @@ def update user = @account.user user.homesite = nil user.jabber_id = nil + user.deltachat_id = nil user.mastodon_url = nil user.save Board.amr_notification("Le compte #{@account.login} #{user_url @account.login} a été désactivé par #{current_user.name} #{user_url(current_user)}") @@ -64,6 +65,7 @@ def destroy user = @account.user user.homesite = nil user.jabber_id = nil + user.deltachat_id = nil user.mastodon_url = nil user.save Board.amr_notification("Le compte #{@account.login} #{user_url @account.login} a été désactivé par #{current_user.name} #{user_url(current_user)}") diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b47f42c1c..4dbcc0069 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -67,7 +67,7 @@ def configure_permitted_parameters :sort_by_date_on_home, :hide_signature, :show_negative_nodes, :totoz_style, :totoz_source, :board_in_sidebar, - user_attributes: [:id, :name, :homesite, :jabber_id, :mastodon_url, :signature, :avatar, :custom_avatar_url] + user_attributes: [:id, :name, :homesite, :jabber_id, :deltachat_id, :mastodon_url, :signature, :avatar, :custom_avatar_url] ]) end diff --git a/app/helpers/node_helper.rb b/app/helpers/node_helper.rb index ef50a5da1..421b677b6 100644 --- a/app/helpers/node_helper.rb +++ b/app/helpers/node_helper.rb @@ -112,6 +112,7 @@ def posted_by(content, user_link='Anonyme') user_infos << email_link(user) user_infos << homesite_link(user) user_infos << jabber_link(user) + user_infos << deltachat_link(user) user_infos << mastodon_link(user) user_infos.compact! user_link += (" (" + user_infos.join(', ') + ")").html_safe if user_infos.any? diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index ab7c1ab0b..af5fcc5d9 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -51,6 +51,14 @@ def jabber_link(user) link_to("adresse XMPP", "xmpp:" + user.jabber_id) end + def deltachat_link(user) + return unless current_account + return if user.deltachat_id.blank? + karma = user.account.try(:karma).to_i + return unless karma > 0 + link_to("adresse Delta Chat", "mailto:" + user.deltachat_id) + end + def mastodon_link(user) return if user.mastodon_url.blank? karma = user.account.try(:karma).to_i diff --git a/app/models/statistics/users.rb b/app/models/statistics/users.rb index b30e5b53f..24ef0b566 100644 --- a/app/models/statistics/users.rb +++ b/app/models/statistics/users.rb @@ -114,6 +114,10 @@ def top_xmpp_domains select_all "SELECT SUBSTRING_INDEX(jabber_id,'@', -1) AS domain, COUNT(*) AS cnt FROM accounts LEFT JOIN users ON accounts.user_id=users.id WHERE jabber_id LIKE '%@%' AND last_seen_on > DATE_SUB(CURDATE(),INTERVAL 90 DAY) AND role<>'inactive' GROUP BY domain HAVING cnt > 3 ORDER BY cnt DESC LIMIT 10;" end + def top_deltachat_domains + select_all "SELECT SUBSTRING_INDEX(deltachat_id,'@', -1) AS domain, COUNT(*) AS cnt FROM accounts LEFT JOIN users ON accounts.user_id=users.id WHERE deltachat_id LIKE '%@%' AND last_seen_on > DATE_SUB(CURDATE(),INTERVAL 90 DAY) AND role<>'inactive' GROUP BY domain HAVING cnt > 3 ORDER BY cnt DESC LIMIT 10;" + end + def top_mastodon_domains # We assume Mastodon URLs will always start with "https://" select_all "SELECT SUBSTRING_INDEX(SUBSTRING(mastodon_url, 9),'/', 1) AS domain, COUNT(*) AS cnt FROM accounts LEFT JOIN users ON accounts.user_id=users.id WHERE mastodon_url LIKE 'https://%/%' AND last_seen_on > DATE_SUB(CURDATE(),INTERVAL 90 DAY) AND role<>'inactive' GROUP BY domain HAVING cnt > 3 ORDER BY cnt DESC LIMIT 10;" diff --git a/app/models/user.rb b/app/models/user.rb index 708c6d1a6..89c0e74c8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,6 +7,7 @@ # name :string(40) # homesite :string(100) # jabber_id :string(32) +# deltachat_id :string(32) # mastodon_url :string(100) # cached_slug :string(32) not null # created_at :datetime @@ -34,6 +35,7 @@ class User < ActiveRecord::Base length: { maximum: 100, message: "L’adresse du site Web personnel est trop longue" } validates :name, length: { maximum: 40, message: "Le nom affiché est trop long" } validates :jabber_id, length: { maximum: 32, message: "L’adresse XMPP est trop longue" } + validates :deltachat_id, length: { maximum: 32, message: "L’adresse Delta Chat est trop longue" } validates :mastodon_url, uri: { protocols: ["https"], message: "L’adresse du compte Mastodon n’est pas valide" }, length: { maximum: 255, message: "L’adresse du compte Mastodon est trop longue" } validates :signature, length: { maximum: 255, message: "La signature est trop longue" } diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index e840d7729..ceec759a4 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -39,6 +39,9 @@ - if account.user.jabber_id.present? %br = account.user.jabber_id + - if account.user.deltachat_id.present? + %br + = account.user.deltachat_id - if account.user.mastodon_url.present? %br = account.user.mastodon_url diff --git a/app/views/devise/registrations/_preferences.html.haml b/app/views/devise/registrations/_preferences.html.haml index b9c2d8d74..4765cd1ba 100644 --- a/app/views/devise/registrations/_preferences.html.haml +++ b/app/views/devise/registrations/_preferences.html.haml @@ -11,6 +11,10 @@ = u.label :jabber_id, 'Adresse XMPP' %span.prefix xmpp: = u.text_field :jabber_id, placeholder: "me@example.net", maxlength: 32 + %p + = u.label :deltachat_id, 'Adresse Delta Chat' + %span.prefix mailto: + = u.text_field :deltachat_id, placeholder: "monchat@example.net", maxlength: 32 %p = u.label :mastodon_url, 'Adresse du compte Mastodon' = u.url_field :mastodon_url, placeholder: "https://mastodon.example/@me", maxlength: 100 diff --git a/app/views/statistics/users.html.haml b/app/views/statistics/users.html.haml index c43341b1f..9fd9aacf5 100644 --- a/app/views/statistics/users.html.haml +++ b/app/views/statistics/users.html.haml @@ -19,6 +19,7 @@ %li= link_to("Informations personnelles", "#stats_infosperso") %li= link_to("Domaines des courriels", "#stats_courriel") %li= link_to("Domaines XMPP", "#stats_xmpp") + %li= link_to("Domaines Delta Chat", "#stats_deltachat") %li= link_to("Domaines Mastodon", "#stats_mastodon") %li= link_to("Utilisation des fonctionnalités", "#stats_fonctionnalites") %li= link_to("Style (CSS)", "#stats_css") @@ -206,6 +207,11 @@ %td .stat.misc(style="width: #{(width_stats * @stats.filled("jabber_id") / maxval).to_i}px;")= @stats.filled("jabber_id") %td #{@stats.pctrecent(@stats.filled("jabber_id"))} + %tr + %td.stat Adresse Delta Chat + %td + .stat.misc(style="width: #{(width_stats * @stats.filled("deltachat_id") / maxval).to_i}px;")= @stats.filled("deltachat_id") + %td #{@stats.pctrecent(@stats.filled("deltachat_id"))} %tr %td.stat Adresse Mastodon %td @@ -261,6 +267,27 @@ %td #{@stats.pctrecent_filled(domain["cnt"],"jabber_id")} + %h2#stats_deltachat Domaines Delta Chat + %p + Sur #{pluralize @stats.nb_recently_seen_accounts, "compte utilisé", "comptes utilisés"} sur le site au cours des trois derniers mois : + %table + - maxval = @stats.nb_recently_seen_accounts + %tr + %th Domaines à plus de trois comptes + %th Nombre de comptes + %th Actifs + %th Déclarés + - @stats.top_deltachat_domains.each do |domain| + %tr + %td.stat + = domain["domain"] + %td + .stat.misc(style="width: #{(width_stats * domain["cnt"] / maxval).to_i}px;")= domain["cnt"] + %td + #{@stats.pctrecent(domain["cnt"])} + %td + #{@stats.pctrecent_filled(domain["cnt"],"deltachat_id")} + %h2#stats_mastodon Domaines Mastodon %p Sur #{pluralize @stats.nb_recently_seen_accounts, "compte utilisé", "comptes utilisés"} sur le site au cours des trois derniers mois : diff --git a/app/views/users/_recent.html.haml b/app/views/users/_recent.html.haml index cb11bef48..d3ef411ea 100644 --- a/app/views/users/_recent.html.haml +++ b/app/views/users/_recent.html.haml @@ -16,6 +16,8 @@ %li Site perso : #{@user.homesite} - if @user.jabber_id.present? %li XMPP : #{@user.jabber_id} + - if @user.deltachat_id.present? + %li Delta Chat: #{@user.deltachat_id} - if @user.mastodon_url.present? %li Mastodon : #{@user.mastodon_url} - if current_account.admin? diff --git a/app/views/users/_user.html.haml b/app/views/users/_user.html.haml index d392c23ba..3709a3d4d 100644 --- a/app/views/users/_user.html.haml +++ b/app/views/users/_user.html.haml @@ -12,6 +12,9 @@ - if current_account && user.jabber_id.present? %p Adresse XMPP : #{link_to 'xmpp:' + user.jabber_id, 'xmpp:' + user.jabber_id, class: 'url'} + - if current_account && user.deltachat_id.present? + %p + Adresse Delta Chat: #{link_to 'mailto:' + user.deltachat_id, 'mailto:' + user.deltachat_id, class: 'url'} - if current_account && user.mastodon_url.present? %p Adresse Mastodon : #{link_to 'Mastodon', user.mastodon_url, class: 'url'} diff --git a/db/migrate/20260814121540_add_deltachat_id_to_users.rb b/db/migrate/20260814121540_add_deltachat_id_to_users.rb new file mode 100644 index 000000000..59a1fb055 --- /dev/null +++ b/db/migrate/20260814121540_add_deltachat_id_to_users.rb @@ -0,0 +1,5 @@ +class AddDeltachatIdToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :deltachat_id, :string + end +end diff --git a/db/pages/aide.html b/db/pages/aide.html index cccd12cb8..622231cb6 100644 --- a/db/pages/aide.html +++ b/db/pages/aide.html @@ -233,7 +233,7 @@
Pour pouvoir afficher l’adresse de courriel associée à son compte ou -l’adresse de son site personnel ou de son compte Mastodon ou son adresse -XMPP, il faut avoir un karma strictement supérieur à 0 +l’adresse de son site personnel ou de son compte Mastodon, son adresse Delta Chat +ou son adresse XMPP, il faut avoir un karma strictement supérieur à 0 (source).
Le karma a un effet sur les indications données aux moteurs de recherche externes et un faible karma conduit à des commentaires et contenus non indexés.
@@ -1094,6 +1094,9 @@Les signalements au reste de l’équipe pour discussion sont :