136 lines
3.8 KiB
Ruby
136 lines
3.8 KiB
Ruby
class Netig
|
|
private
|
|
|
|
# Enregistrement d'une décision d'adhésion
|
|
def record_membership_decision!(r, membership_id, status)
|
|
member_id = DB[:members]
|
|
.where(account_id: rodauth.session_value)
|
|
.get(:id)
|
|
|
|
unless member_id
|
|
r.halt [403, {}, ["Accès interdit."]]
|
|
end
|
|
|
|
message = case status
|
|
when "accepted"
|
|
"La demande d'adhésion a été acceptée."
|
|
when "rejected"
|
|
"La demande d'adhésion a été refusée."
|
|
end
|
|
|
|
updated = DB[:memberships]
|
|
.where(id: membership_id, status: "pending")
|
|
.update(
|
|
status: status,
|
|
decided_at: Sequel::CURRENT_TIMESTAMP,
|
|
recorded_by: member_id
|
|
)
|
|
|
|
if updated == 1
|
|
flash["notice"] = message
|
|
else
|
|
flash["error"] = "Cette demande n'est plus en attente ou n'existe pas."
|
|
end
|
|
|
|
r.redirect "/noyau/memberships"
|
|
end
|
|
|
|
hash_branch "noyau" do |r|
|
|
require_core_member!(r)
|
|
|
|
@page_title = "Gestion de l'association — NETig"
|
|
@page_description = "Gestion collective de l'association NETig par le Noyau."
|
|
@canonical_url = "https://netig.net/noyau"
|
|
|
|
# Accueil
|
|
r.is do
|
|
r.get do
|
|
view "noyau"
|
|
end
|
|
end
|
|
|
|
# Demandes d'adhésion
|
|
r.on "memberships" do
|
|
r.is do
|
|
r.get do
|
|
@page_title = "Demandes d'adhésion — NETig"
|
|
@page_description = "Examen des demandes d'adhésion à NETig."
|
|
@canonical_url = "https://netig.net/noyau/memberships"
|
|
|
|
@memberships = DB[:memberships]
|
|
.join(:members, id: :member_id)
|
|
.join(:accounts, id: Sequel[:members][:account_id])
|
|
.where(
|
|
Sequel[:memberships][:status] => "pending",
|
|
Sequel[:accounts][:status_id] => 2
|
|
)
|
|
.select_all(:memberships)
|
|
.select_append(
|
|
Sequel[:members][:kind].as(:member_kind),
|
|
Sequel[:members][:first_name].as(:member_first_name),
|
|
Sequel[:members][:last_name].as(:member_last_name),
|
|
Sequel[:members][:organization_name].as(:member_organization_name),
|
|
Sequel[:accounts][:email].as(:account_email)
|
|
)
|
|
.order(
|
|
Sequel.asc(Sequel[:memberships][:requested_at]),
|
|
Sequel.asc(Sequel[:memberships][:id])
|
|
)
|
|
.all
|
|
|
|
view "noyau/memberships"
|
|
end
|
|
end
|
|
|
|
# Décision sur une demande
|
|
r.on Integer do |membership_id|
|
|
r.post "accept" do
|
|
record_membership_decision!(r, membership_id, "accepted")
|
|
end
|
|
|
|
r.post "reject" do
|
|
record_membership_decision!(r, membership_id, "rejected")
|
|
end
|
|
end
|
|
end
|
|
|
|
# Gestion des comptes
|
|
r.on "members" do
|
|
r.is do
|
|
r.get do
|
|
@page_title = "Comptes — NETig"
|
|
@page_description = "Consultation des comptes de l'association NETig."
|
|
@canonical_url = "https://netig.net/noyau/members"
|
|
|
|
@members = DB[:members]
|
|
.join(:accounts, id: :account_id)
|
|
.where(Sequel[:accounts][:status_id] => 2)
|
|
.select_all(:members)
|
|
.select_append(Sequel[:accounts][:email].as(:email))
|
|
.order(Sequel[:members][:id])
|
|
.all
|
|
|
|
memberships_by_member = DB[:memberships]
|
|
.order(Sequel.desc(:requested_at), Sequel.desc(:id))
|
|
.all
|
|
.group_by { |membership| membership[:member_id] }
|
|
|
|
@members.each do |member|
|
|
memberships = memberships_by_member.fetch(member[:id], [])
|
|
|
|
membership = memberships.find do |item|
|
|
%w[pending accepted].include?(item[:status])
|
|
end
|
|
|
|
membership ||= memberships.first
|
|
|
|
member[:membership_status] = membership && membership[:status]
|
|
end
|
|
|
|
view "noyau/members"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|