Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/assets/stylesheets/contrib/grayscale.scss
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 2 additions & 0 deletions app/controllers/admin/accounts_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)}")
Expand All @@ -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)}")
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions app/helpers/node_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down
8 changes: 8 additions & 0 deletions app/helpers/users_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions app/models/statistics/users.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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;"
Expand Down
2 changes: 2 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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" }
Expand Down
3 changes: 3 additions & 0 deletions app/views/admin/accounts/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions app/views/devise/registrations/_preferences.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 27 additions & 0 deletions app/views/statistics/users.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 :
Expand Down
2 changes: 2 additions & 0 deletions app/views/users/_recent.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down
3 changes: 3 additions & 0 deletions app/views/users/_user.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -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'}
5 changes: 5 additions & 0 deletions db/migrate/20260814121540_add_deltachat_id_to_users.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddDeltachatIdToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :deltachat_id, :string
end
end
15 changes: 9 additions & 6 deletions db/pages/aide.html
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ <h2 id="aide-authentification">Visite (non) authentifiée, ou pourquoi ouvrir un
<li>accéder à ses dépêches en modération ou en rédaction dans son <a href="/tableau-de-bord">tableau de bord</a> ;</li>
<li>choisir un avatar ;</li>
<li>publier l’adresse de courriel associée à son compte (sous condition de <a href="#aide-karma">karma</a>) ;</li>
<li>afficher l’adresse d’un site personnel, une adresse XMPP et/ou une adresse Mastodon (sous condition de <a href="#aide-karma">karma</a>) ;</li>
<li>afficher l’adresse d’un site personnel, une adresse XMPP, une adresse Delta Chat et/ou une adresse Mastodon (sous condition de <a href="#aide-karma">karma</a>) ;</li>
<li>choisir quels types de contenus sont affichés en page d’accueil ;</li>
<li>afficher ou non les signatures ou les avatars ;</li>
<li>afficher par défaut les contenus notés négativement ;</li>
Expand Down Expand Up @@ -574,8 +574,8 @@ <h2 id="aide-karma">Système de karma <a href="#aide-karma" class="anchor">¶</a
etC.).</p>

<p>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
(<a href="https://github.com/linuxfrorg/linuxfr.org/blob/main/app/helpers/users_helper.rb">source</a>).</p>

<p>Le karma a un effet sur les <a href="#aide-moteursderecherche">indications données aux moteurs de recherche externes</a> et un faible karma conduit à des commentaires et contenus non indexés.</p>
Expand Down Expand Up @@ -1094,6 +1094,9 @@ <h2 id="aide-dcp">Quelles sont les données à caractère personnel (DCP) trait
moment tant que le compte est ouvert ;</li>
<li>une adresse de messagerie instantanée XMPP : la personne utilisant
le compte peut y associer une telle adresse et peut la modifier à tout
moment tant que le compte est ouvert ;</li>
<li>une adresse de messagerie instantanée Delta Chat: la personne utilisant
le compte peut y associer une telle adresse et peut la modifier à tout
moment tant que le compte est ouvert ;</li>
<li>une adresse de compte Mastodon : la personne utilisant le compte
peut y associer une telle adresse et peut la modifier à tout moment tant
Expand Down Expand Up @@ -1146,8 +1149,8 @@ <h2 id="aide-donneesinutiles">Quelles sont les données inutiles au service qui
<li>seront supprimées de la base le mot de passe, les dates et
adresses IP des deux dernières connexions du compte, l’image éventuelle
d’avatar, les éventuelles adresses de site web personnel, de messagerie
instantanée XMPP et/ou de compte Mastodon, l’éventuelle feuille de style
personnelle, l’éventuel choix de publier son adresse de courriel ;</li>
instantanée XMPP, de messagerie instantanée Delta Chat et/ou de compte Mastodon,
l’éventuelle feuille de style personnelle, l’éventuel choix de publier son adresse de courriel ;</li>
<li>seront supprimées les applications utilisant l’API du site
reliées au compte, ainsi que les accès et tokens reliés à ces
applications ou au compte.</li>
Expand All @@ -1173,7 +1176,7 @@ <h2 id="aide-donneesinutiles">Quelles sont les données inutiles au service qui
<li>seront supprimées de la base active l’adresse de courriel, le
mot de passe, les dates et adresses IP des deux dernières connexions du
compte, l’image éventuelle d’avatar, les éventuelles adresses de site
web personnel, de messagerie instantanée XMPP et/ou de compte Mastodon,
web personnel, de messagerie instantanée XMPP, de messagerie instantanée Delta Chat et/ou de compte Mastodon,
l’éventuelle feuille de style personnelle ;</li>
<li>seront supprimées les applications utilisant l’API du site
reliées au compte, ainsi que les accès et tokens reliés à ces
Expand Down
2 changes: 1 addition & 1 deletion db/pages/regles_de_moderation_du_problematique.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ <h3>Les rappels aux règles via un commentaire</h3>
<h3>Signalements au reste de l’équipe</h3>
<p>Les signalements au reste de l’équipe pour discussion sont :</p>
<ul>
<li>peu pratiqués (et pas de voie privilégiée : par courriel ? par IRC ? par XMPP ?) ;</li>
<li>peu pratiqués (et pas de voie privilégiée : par courriel ? par IRC ? par XMPP ? par Delta Chat ?) ;</li>
<li>souvent effectués uniquement en petit groupe (oui, plutôt, ou temporairement via la tribune de modération) ;</li>
<li>ponctuels, par quelques membres de l’équipe via courriel ; peu de réponses a priori, pas de consensus (ou difficulté à l’atteindre) ;
cette méthode est assez lente, si des réponses ont été effectuées sous l’entrée litigieuse, c’est déjà un peu trop tard
Expand Down
2 changes: 1 addition & 1 deletion db/schema.drawio
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@
<mxCell id="4iPdTcg1eZaAQi2mh2z5-145" parent="1" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" value="&lt;p style=&quot;margin: 0px ; margin-top: 4px ; text-align: center ; text-decoration: underline&quot;&gt;&lt;strong&gt;wiki_versions&lt;/strong&gt;&lt;/p&gt;&lt;hr&gt;I &quot;id&quot;&lt;br&gt;I &quot;wiki_page_id&quot;, null: false&lt;br&gt;I &quot;user_id&quot;, IDX [&quot;&lt;b&gt;fk_wiki_versions_on_user_id&lt;/b&gt;&quot;]&lt;br&gt;I &quot;version&quot;&lt;br&gt;VC(255) &quot;message&quot;&lt;br&gt;LT &quot;body&quot;&lt;br&gt;DT &quot;created_at&quot;&lt;br&gt;IDX [&quot;wiki_page_id&quot;, &quot;version&quot;], name: &quot;index_wiki_versions_on_wiki_page_id_and_version&quot;" vertex="1">
<mxGeometry height="160" width="520" x="2760.5" y="900" as="geometry" />
</mxCell>
<mxCell id="4iPdTcg1eZaAQi2mh2z5-147" parent="1" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" value="&lt;p style=&quot;margin: 0px ; margin-top: 4px ; text-align: center ; text-decoration: underline&quot;&gt;&lt;strong&gt;users&lt;/strong&gt;&lt;/p&gt;&lt;hr&gt;I &quot;id&quot;&lt;br&gt;VC(40) &quot;name&quot;&lt;br&gt;&lt;div&gt;VC(100) &quot;homesite&quot;&lt;/div&gt;&lt;div&gt;VC(100) &quot;mastodon_url&quot;&lt;/div&gt;VC(32) &quot;jabber_id&quot;&lt;br&gt;VC(32) &quot;cached_slug&quot;&amp;nbsp; null: false, IDX [&quot;index_users_on_cached_slug&quot;]&lt;br&gt;DT &quot;created_at&quot;&lt;br&gt;DT &quot;updated_at&quot;&lt;br&gt;VC(255) &quot;avatar&quot;&lt;br&gt;VC(255) &quot;signature&quot;&lt;br&gt;VC(255) &quot;custom_avatar_url&quot;" vertex="1">
<mxCell id="4iPdTcg1eZaAQi2mh2z5-147" parent="1" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" value="&lt;p style=&quot;margin: 0px ; margin-top: 4px ; text-align: center ; text-decoration: underline&quot;&gt;&lt;strong&gt;users&lt;/strong&gt;&lt;/p&gt;&lt;hr&gt;I &quot;id&quot;&lt;br&gt;VC(40) &quot;name&quot;&lt;br&gt;&lt;div&gt;VC(100) &quot;homesite&quot;&lt;/div&gt;&lt;div&gt;VC(100) &quot;mastodon_url&quot;&lt;/div&gt;VC(32) &quot;jabber_id&quot;&lt;div&gt;VC(32) &quot;deltachat_id&quot;&lt;br&gt;VC(32) &quot;cached_slug&quot;&amp;nbsp; null: false, IDX [&quot;index_users_on_cached_slug&quot;]&lt;br&gt;DT &quot;created_at&quot;&lt;br&gt;DT &quot;updated_at&quot;&lt;br&gt;VC(255) &quot;avatar&quot;&lt;br&gt;VC(255) &quot;signature&quot;&lt;br&gt;VC(255) &quot;custom_avatar_url&quot;&lt;/div&gt;" vertex="1">
<mxGeometry height="210" width="452.5" x="70" y="180" as="geometry" />
</mxCell>
<mxCell id="4iPdTcg1eZaAQi2mh2z5-164" parent="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" value="fk_accounts_on_user_id" vertex="1">
Expand Down
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2026_07_14_144200) do
ActiveRecord::Schema.define(version: 2026_08_14_121540) do

create_table "accounts", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
t.integer "user_id"
Expand Down Expand Up @@ -357,6 +357,7 @@
t.string "name", limit: 40
t.string "homesite", limit: 100
t.string "jabber_id", limit: 32
t.string "deltachat_id", limit: 32
t.string "cached_slug", limit: 32, null: false
t.datetime "created_at"
t.datetime "updated_at"
Expand Down