recup du plugin gamuCompte - inscription + connexion d'un auteur

This commit is contained in:
Christophe 2020-08-11 18:28:57 +02:00
parent 8cffaa805f
commit 16a83fa421
15 changed files with 756 additions and 0 deletions

View file

@ -0,0 +1,34 @@
<?php
/**
* Définit les autorisations du plugin GamuCompte
*
* @plugin GamuCompte
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamucompte\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function comptespip_autoriser() {
}
/*
* surcharge de la fonction native de SPIP
* return true si le champ statut de la config du plugin est renseigné
*/
function autoriser_inscrireauteur($faire, $quoi, $id, $qui, $opt) {
$mode = lire_config('comptespip/statut');
if ($mode) {
return true;
}
return false;
}

14
comptespip_fonctions.php Normal file
View file

@ -0,0 +1,14 @@
<?php
/**
* Fonctions utiles au plugin GamuCompte
*
* @plugin GamuCompte
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamucompte\Fonctions
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

14
comptespip_options.php Normal file
View file

@ -0,0 +1,14 @@
<?php
/**
* Options au chargement du plugin GamuCompte
*
* @plugin GamuCompte
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamucompte\Options
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

14
comptespip_pipelines.php Normal file
View file

@ -0,0 +1,14 @@
<?php
/**
* Utilisations de pipelines par GamuCompte
*
* @plugin GamuCompte
* @copyright 2020
* @author tofulm
* @licence GNU/GPL
* @package SPIP\Gamucompte\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

26
content/connect.html Normal file
View file

@ -0,0 +1,26 @@
[(#SESSION{id_auteur}|non|sinon_interdire_acces{#URL_SITE_SPIP})]
<div id="connect" class="inner">
<B_presentation>
<div class="presentation">
<BOUCLE_presentation(ARTICLES){id_article=#CONFIG{comptespip/id_presentation}}{tout}>
[<h1 class="#EDIT{titre} txtcenter">(#TITRE)</h1>]
[<div class="chapo #EDIT{descriptif}">(#DESCRIPTIF)</div>]
[<div class="chapo #EDIT{chapo}">(#CHAPO)</div>]
[<div class="#EDIT{texte}">(#TEXTE)</div>]
</BOUCLE_presentation>
</div>
</B_presentation>
<div class="se_connecter inner">
<div class="grid-2">
<div class="sinscrire">
[(#FORMULAIRE_INSCRIPTION{})]
</div>
<div class="login">
<h3 class="mlm">Se connecter</h3>
[(#LOGIN_PUBLIC{#URL_PAGE{#CONFIG{comptespip/page_redirection_connexion}}})]
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,115 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:comptespip:cfg_titre_parametrages:/></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE
<fieldset>
<div class="editer_groupe">
#SET{name,id_presentation}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">id_article de présentation</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text id_presentation" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
</div>
</div>
<div class="editer_groupe">
#SET{name,statut}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Statut du compte</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text statut" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
<p class="explication">Si pas renseigné, inscription impossible</p>
</div>
</div>
<div class="editer_groupe">
#SET{name,unicite_email}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<label>Unicité des emails lors de l'inscription</label>
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" value="non" id="#GET{name}_non"[ (#ENV{#GET{name}}|=={non}|?{checked="checked"})] >
<label for="#GET{name}_non">Non</label>
</div>
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" value="oui" id="#GET{name}_oui"[ (#ENV{#GET{name}}|non|?{checked="checked"})] >
<label for="#GET{name}_oui">Oui</label>
</div>
</div>
</div>
[(#PLUGIN{auted}|oui)
<div class="editer_groupe">
#SET{name,aut_modele}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Nom du modèle d'autorisations</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text aut_modele" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
</div>
</div>
]
</fieldset>
<fieldset>
<div class="editer_groupe">
#SET{name,mail_inscription_sujet}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Sujet du mail</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text mail_inscription_sujet" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
<p class="explication">Si pas renseigné, récupère celui par defaut de SPIP</p>
</div>
</div>
</fieldset>
<fieldset>
<div class="editer_groupe">
#SET{name,connexion_auto}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<label>Connexion automatique après l'inscription</label>
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" value="non" id="#GET{name}_non"[ (#ENV{#GET{name}}|non|?{checked="checked"})] >
<label for="#GET{name}_non">Non</label>
</div>
<div class="choix">
<input type="radio" class="radio" name="#GET{name}" value="oui" id="#GET{name}_oui"[ (#ENV{#GET{name}}|=={oui}|?{checked="checked"})] >
<label for="#GET{name}_oui">Oui</label>
</div>
</div>
</div>
<div class="editer_groupe">
#SET{name,page_redirection_connexion}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Nom de la page de redirection</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text page_redirection_connexion" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
<p class="explication">Si vide, page sommaire</p>
</div>
</div>
</fieldset>
<input type="hidden" name="_meta_casier" value="comptespip" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer|attribut_html:/>" /></p>
</div>
</form>
</div>

View file

@ -0,0 +1,80 @@
<div class="formulaire_spip formulaire_inscription ajax" id="formulaire_inscription">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV{editable})
<form method="post" action="#ENV{action}">
#ACTION_FORMULAIRE
<fieldset>
#INCLURE{fond=formulaires/inc-inscription-explication,env}
<legend><:form_forum_identifiants:></legend>
<p class='explication'><:form_forum_indiquer_nom_email:></p>
<div class="editer-groupe">
<div class='editer saisie_nom_inscription obligatoire[ (#ENV*{erreurs}|table_valeur{nom_inscription}|oui)erreur]'>
<label for="nom_inscription">Votre nom <em class="obligatoire"><:info_obligatoire_02:></em></label>
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{nom_inscription})</span>]
<input type="text" class="text" name="nom_inscription" id="nom_inscription" value="#ENV{nom_inscription}" size="30" [(#HTML5) [(#ENV{focus}|=={nom_inscription}|oui)autofocus="autofocus" ] ]required="required" autocapitalize="off" autocorrect="off" />
</div>
#SET{name,prenom}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Votre prénom</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" class="text prenom" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" size="30" autocapitalize="off" autocorrect="off" >
</div>
<div class='editer saisie_mail_inscription obligatoire[ (#ENV*{erreurs}|table_valeur{mail_inscription}|oui)erreur]'>
<label for="mail_inscription"><:entree_adresse_email:> <em class="obligatoire"><:info_obligatoire_02:></em></label>
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{mail_inscription})</span>]
<input required="required" type="email" class="text email" name="mail_inscription" id="mail_inscription" value="#ENV{mail_inscription}" size="30"[(#ENV{focus}|=={mail_inscription}|et{#HTML5}|oui) autofocus="autofocus"] autocapitalize="off" autocorrect="off" />
</div>
<div class="editer_groupe">
#SET{name,password}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Votre mot de passe</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="password" class="text pass" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" size="30" autocapitalize="off" autocorrect="off" >
</div>
</div>
<div class="editer_groupe">
#SET{name,password_confirmation}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}">Confirmer votre mot de passe</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="password" class="text pass_conf" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" size="30" autocapitalize="off" autocorrect="off" >
</div>
</div>
</div>
</fieldset>
[(#REM) Piege a robots spammeurs ]
<p style="display: none;">
<label for="nobot"><:antispam_champ_vide:></label>
<input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" />
</p>
<p class="boutons"><input type="submit" class="btn submit" value="<:bouton_valider:>" /></p>
</form>
[<script type="text/javascript"><!--
document.getElementById('(#ENV{focus})').focus();
--></script>]
]
</div>
[(#ENV{focus,''}|?{' '})
<div style="text-align: #LANG_RIGHT;">
<script type="text/javascript">/*<!\[CDATA\[*/
document.write("<a style='color: #e86519' href='")
document.write((window.opener) ? "javascript:close()" : "./")
document.write("'><:pass_quitter_fenetre:><" + "/a>");
/*\]\]>*/</script>
<noscript>
&#91;<a href='./'><:pass_retour_public:></a>&#93;
</noscript>
</div>]

220
formulaires/inscription.php Normal file
View file

@ -0,0 +1,220 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2020 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_inscription_charger_dist($mode = '', $id = 0, $retour = '') {
global $visiteur_session;
// il faut avoir renseigné le statut dans la conf du plugin
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
return false;
}
// pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
//if (isset($visiteur_session['statut']) && ($visiteur_session['statut'] <= $mode)) {
if (isset($visiteur_session['statut'])) {
return false;
}
$valeurs = array(
'nom_inscription' => '',
'mail_inscription' => '',
'prenom' => '',
'password' => '',
'password_confirmation' => '',
'id' => $id,
'_mode' => $mode,
'cle'
);
return $valeurs;
}
// Si inscriptions pas autorisees, retourner une chaine d'avertissement
function formulaires_inscription_verifier_dist($mode = '', $id = 0, $retour = '') {
include_spip('inc/filtres');
$erreurs = array();
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
}
if (!$nom = _request('nom_inscription')) {
$erreurs['nom_inscription'] = _T('info_obligatoire');
} elseif (!nom_acceptable(_request('nom_inscription'))) {
$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
}
if (!$mail = strval(_request('mail_inscription'))) {
$erreurs['mail_inscription'] = _T('info_obligatoire');
} else {
include_spip('inc/filtres');
if (!email_valide($mail)) {
$erreurs['mail_inscription'] = _T('info_email_invalide');
}
}
if (_request('password') != _request('password_confirmation')){
$erreurs['password_confirmation'] = _T('info_passes_identiques');
}
if ( strlen(_request('password')) < _PASS_LONGUEUR_MINI ){
$erreurs['password'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI));
}
// Mais si l'un des deux champs n'est pas rempli, cette erreur prend le dessus
if (!_request('password')){
$erreurs['password'] = _T('info_obligatoire');
}
if (!_request('password_confirmation')){
$erreurs['password_confirmation'] = _T('info_obligatoire');
}
$unicite_email = lire_config('comptespip/unicite_email');
if (!count($erreurs) and $unicite_email !== "non") {
include_spip('action/inscrire_auteur');
if (function_exists('test_inscription')) {
$f = 'test_inscription';
} else {
$f = 'test_inscription_dist';
}
$declaration = $f($mode, $mail, $nom, $id);
if (is_string($declaration)) {
$k = (strpos($declaration, 'mail') !== false) ?
'mail_inscription' : 'nom_inscription';
$erreurs[$k] = _T($declaration);
} else {
include_spip('base/abstract_sql');
if ($row = sql_fetsel(
'statut, id_auteur, login, email',
'spip_auteurs',
'email=' . sql_quote($declaration['email'])
)) {
if (($row['statut'] == '5poubelle') and empty($declaration['pass'])) {
// irrecuperable
$erreurs['message_erreur'] = _T('form_forum_access_refuse');
} else {
if (($row['statut'] != 'nouveau') and empty($declaration['pass'])) {
if (intval($row['statut']) > intval($mode)) {
set_request('_upgrade_auteur', $row['id_auteur']);
} else {
// deja inscrit
$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
}
}
}
spip_log($row['id_auteur'] . ' veut se resinscrire');
}
}
}
return $erreurs;
}
function formulaires_inscription_traiter_dist($mode = '', $id = 0, $retour = '') {
include_spip('inc/filtres');
include_spip('inc/autoriser');
include_spip('action/editer_auteur');
//if (!autoriser('inscrireauteur', $mode, $id)) {
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
$desc = 'rien a faire ici';
} else {
$nom = _request('nom_inscription');
$mail_complet = _request('mail_inscription');
$prenom = _request('prenom');
$set_auteurs = [
'nom' => $nom,
'email' => $mail_complet,
'statut' => '1comite',
'login' => 'login_'.time(),
'prenom' => $prenom,
];
// associer un modele d'autorisations
$aut_modele = lire_config('comptespip/aut_modele');
if ($aut_modele) {
$autorisations = sql_getfetsel('aut_modele','spip_aut_modeles','nom='.sql_quote($aut_modele));
$set_auteurs['autorisations'] = $autorisations;
$set_auteurs['aut_nom'] = $aut_modele;
}
$set_auteurs = pipeline('comptespip_pre_inscription',[
'args' => [],
'data' => $set_auteurs
]);
$id_auteur = auteur_inserer(null, $set_auteurs);
$desc['id_auteur'] = $id_auteur;
if ($id_auteur) {
$search = [ ' ', "'", 'é' ];
$replace = [ '_', '_', 'e' ];
$login = strtolower(str_replace($search, $replace, $nom));
$login .= '_'.$id_auteur;
$pass = _request('password');
$data = pipeline('comptespip_pre_login',[
'args' => ['id_auteur' => $id_auteur],
'data' => [ 'login' => $login]
]);
if (isset($data['login'])) {
$login = $data['login'];
}
if (isset($data['pass'])) {
$pass = $data['pass'];
}
$set_instituer = [
'pass' => $pass,
'login' => $login
];
auteur_instituer($id_auteur, $set_instituer);
}
$f = charger_fonction('comptespip_mail_inscription','inc');
$f($id_auteur,compact('pass'));
if (lire_config('comptespip/connexion_auto')) {
// loguer le compte créé (on a vérifié par SMS)
$auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur));
include_spip('inc/auth');
auth_loger($auteur);
$retour = parametre_url(generer_url_public(lire_config('comptespip/page_redirection_connexion'),'',true),'id_auteur',intval($id_auteur));
if (lire_config('comptespip/page_redirection_connexion')) {
$retour = parametre_url(generer_url_public(lire_config('comptespip/page_redirection_connexion'),'',true),'id_auteur',intval($id_auteur));
}
return array('message_ok' => _T('form_forum_identifiant_mail'), 'redirect' => $retour);
}
}
// erreur ?
if (is_string($desc)) {
return array('message_erreur' => $desc);
} // OK
else {
return array('message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']);
}
}

View file

@ -0,0 +1,28 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')){
return;
}
/**
* envoi un mail apres nouvelle inscription
*
* @param int $id_auteur
* @param array $options (optional)
*
* @return void
*/
function inc_comptespip_mail_inscription_dist(int $id_auteur, array $options = []) :void{
$contexte = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
if (isset($options['pass'])) {
$contexte['pass'] = $options['pass'];
}
$mail_complet = $contexte['email'];
$message = recuperer_fond('modeles/mail_inscription',$contexte);
$sujet = lire_config('comptespip/mail_inscription_sujet');
include_spip('inc/notifications');
notifications_envoyer_mails($mail_complet, $message, $sujet);
}

24
lang/comptespip_fr.php Normal file
View file

@ -0,0 +1,24 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// G
'comptespip_titre' => 'CompteSPIP',
// C
'cfg_exemple' => 'Exemple',
'cfg_exemple_explication' => 'Explication de cet exemple',
'cfg_titre_parametrages' => 'Paramétrages',
// MM
'message_mail' => 'Voici vos identifiants pour vous connecter sur le site "@nom_site_spip@" (@adresse_login@) :',
// T
'titre_page_configurer_comptespip' => 'CompteSPIP',
);

View file

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// G
'comptespip_description' => '',
'comptespip_nom' => 'CompteSPIP',
'comptespip_slogan' => '',
);

View file

@ -0,0 +1,25 @@
[(#REM)
FORK deu modèle de SPIP
][(#HTTP_HEADER{Content-type: text/plain[; charset=(#CHARSET)]})]
[\[(#NOM_SITE_SPIP|concat{'\] : ',<:form_forum_identifiants:>}|nettoyer_titre_email)]
[(#SET{url_confirm, [(#ENV{url_confirm}|parametre_url{redirect,#ENV{redirect}})]})]
<:form_forum_message_auto:>
<:form_forum_bonjour{nom=#ENV{nom}}:>
#SET{url_site,#URL_SITE_SPIP/}
[(#SET{url_login,#URL_PAGE{connect}|url_absolue})]
<:comptespip:message_mail{nom_site_spip=#NOM_SITE_SPIP,adresse_site=#GET{url_site},adresse_login=#GET{url_login}}:>
[(#CONFIG{comptespip/unicite_email}|=={non}|oui)
<:form_forum_login:>[ (#ENV{login})]
]
[(#CONFIG{comptespip/unicite_email}|non)
<:form_forum_login:>[ (#ENV{email})]
]
#FILTRE{supprimer_tags|filtrer_entites|trim}

24
paquet.xml Normal file
View file

@ -0,0 +1,24 @@
<paquet
prefix="comptespip"
categorie="edition"
version="1.0.0"
etat="dev"
compatibilite="[3.3.0-dev;3.3.*]"
logo="prive/themes/spip/images/comptespip-xx.svg"
documentation=""
>
<nom>CompteSPIP</nom>
<auteur lien='https://gamuza.fr'>tofulm</auteur>
<licence>GNU/GPL</licence>
<pipeline nom="autoriser" inclure="comptespip_autorisations.php" />
<pipeline nom="comptespip_pre_inscription" action="" />
<pipeline nom="comptespip_pre_login" action="" />
</paquet>

View file

@ -0,0 +1,7 @@
[(#AUTORISER{configurer,_comptespip}|sinon_interdire_acces)]
<h1 class="grostitre"><:comptespip:titre_page_configurer_comptespip:/></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_COMPTESPIP
</div>

View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="558.54553"
inkscape:export-xdpi="558.54553"
inkscape:export-filename="/home/tof/Documents/professionnel/gamuza/modeles/icones/gamuCompte.png"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
height="21.999996"
width="22"
sodipodi:docname="gamuCompte.svg"
id="svg883"
xml:space="preserve"
enable-background="new 0 0 24 24"
viewBox="0 0 22.000002 21.999996"
y="0px"
x="0px"
version="1.1"><metadata
id="metadata889"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs887"><marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart"><path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1251" /></marker></defs><sodipodi:namedview
fit-margin-bottom="1"
fit-margin-right="1"
fit-margin-left="1"
fit-margin-top="1"
inkscape:current-layer="svg883"
inkscape:window-maximized="1"
inkscape:window-y="20"
inkscape:window-x="0"
inkscape:cy="13.816372"
inkscape:cx="6.0688435"
inkscape:zoom="22.627417"
inkscape:pagecheckerboard="true"
showgrid="true"
id="namedview885"
inkscape:window-height="1416"
inkscape:window-width="2556"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff"><inkscape:grid
originy="-0.3278344"
originx="-9.4409339"
id="grid1203"
type="xygrid" /></sodipodi:namedview><path
style="stroke-width:0.438072"
d="m 2377.8692,1055.6122 v -0.8474 c 0,-1.1863 -2.2647,-1.6947 -4.3936,-1.6947 -2.1288,0 -4.3936,0.5508 -4.3936,1.6947 v 0.8474 c 0,0.7626 0.3171,1.5252 0.9059,2.076 l 2.2647,2.0761 c 0.1359,0.1271 0.1812,0.2542 0.1812,0.4237 v 2.7116 c 0,0.1694 0.091,0.2965 0.2718,0.3389 l 1.3135,0.3813 c 0.2265,0.042 0.453,-0.085 0.453,-0.3389 v -3.0506 c 0,-0.1694 0.091,-0.2965 0.1812,-0.4236 l 2.31,-2.1185 c 0.5888,-0.5508 0.9059,-1.3134 0.9059,-2.076 z m -4.3936,-0.042 c -2.1741,0 -3.3518,-0.5508 -3.3971,-0.7626 v 0 c 0.045,-0.2119 1.223,-0.7627 3.3971,-0.7627 2.1742,0 3.3065,0.5508 3.3971,0.7627 -0.091,0.2118 -1.2229,0.7626 -3.3971,0.7626 z"
id="path979" /><path
style="stroke-width:0.438072"
d="m 2375.7404,1059.9338 c -0.2718,0 -0.453,0.1694 -0.453,0.4236 0,0.2543 0.1812,0.4237 0.453,0.4237 h 1.9476 c 0.2718,0 0.453,-0.1694 0.453,-0.4237 0,-0.2542 -0.1812,-0.4236 -0.453,-0.4236 z"
id="path981" /><path
style="stroke-width:0.438072"
d="m 2377.688,1061.3743 h -1.9476 c -0.2718,0 -0.453,0.1695 -0.453,0.4237 0,0.2542 0.1812,0.4237 0.453,0.4237 h 1.9476 c 0.2718,0 0.453,-0.1695 0.453,-0.4237 0,-0.2542 -0.1812,-0.4237 -0.453,-0.4237 z"
id="path983" /><path
style="stroke-width:0.438072"
d="m 2377.688,1062.7725 h -1.9476 c -0.2718,0 -0.453,0.1694 -0.453,0.4236 0,0.2542 0.1812,0.4237 0.453,0.4237 h 1.9476 c 0.2718,0 0.453,-0.1695 0.453,-0.4237 0,-0.2118 -0.1812,-0.4236 -0.453,-0.4236 z"
id="path985" /><g
transform="translate(0.55806,0.1161166)"
id="g1540"><path
d="m 13.341396,12.528925 c 0.640696,-0.807698 1.04113,-1.866022 1.04113,-3.0371256 0,-2.5130939 -1.79595,-4.5568339 -4.004348,-4.5568339 -2.2083949,0 -4.0043446,2.04374 -4.0043446,4.5568339 0,1.1711036 0.4004347,2.2294276 1.0411302,3.0371256 -2.3855898,1.273635 -4.0443902,4.024824 -4.0443902,7.215747 V 20.88388 H 17.385787 v -1.139208 c 0,-3.190923 -1.658801,-5.942112 -4.044391,-7.215747 z M 8.3760069,9.4917994 c 0,-1.2565469 0.8979751,-2.2784169 2.0021711,-2.2784169 1.1042,0 2.002175,1.02187 2.002175,2.2784169 0,1.2565436 -0.897975,2.2784126 -2.002175,2.2784126 -1.104196,0 -2.0021711,-1.021869 -2.0021711,-2.2784126 z M 5.4738563,18.605464 c 0.4645043,-2.596257 2.4877007,-4.556835 4.9043217,-4.556835 2.416624,0 4.439821,1.960578 4.904325,4.556835 z"
id="path871"
style="stroke-width:1.06792"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><polygon
points="19,5 19,3 17,3 17,5 15,5 15,7 17,7 17,9 19,9 19,7 21,7 21,5 "
id="polygon873"
transform="matrix(1.0010868,0,0,1.1392085,-14.574362,-1.960042)"
style="fill:#c19753;fill-opacity:1"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><path
id="path989"
d="M 18.655535,4.6994801 16.859901,2.6497064 C 16.733448,2.5077308 16.543768,2.6319594 16.543768,2.8626699 v 0.9405887 h -1.978991 c -0.107484,0 -0.196001,0.1242288 -0.196001,0.2750781 v 1.6948345 c 0,0.1508492 0.08851,0.2750778 0.196001,0.2750778 h 1.978991 v 0.9405889 c 0,0.2307105 0.18968,0.3549392 0.316133,0.2129635 l 1.801956,-2.0586473 c 0.09484,-0.1242288 0.09484,-0.3371921 -0.0063,-0.443674 z"
style="fill:#c19753;fill-opacity:1;stroke-width:0.0749025"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><path
id="path991"
d="m 19.748206,0.8838834 h -2.77492 c -0.208119,0 -0.366052,0.1508502 -0.366685,0.3283189 l -0.003,0.8413211 c -6.65e-4,0.1863417 0.162985,0.2790406 0.361191,0.2798209 l 2.084239,0.00821 -0.02666,5.0983826 -2.200483,-0.00769 c -0.208131,-7.28e-4 -0.215291,0.2797228 -0.215291,0.4571924 v 0.7055023 c 0,0.186343 0.168477,0.3283186 0.366685,0.3283186 h 2.77492 c 0.386516,0 0.693738,-0.2750779 0.693738,-0.6211434 V 1.5050272 c -5e-6,-0.3460658 -0.307227,-0.6211438 -0.693734,-0.6211438 z"
style="fill:#c19753;fill-opacity:1;stroke-width:0.0937763"
sodipodi:nodetypes="sssssccssssssss"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><path
style="fill:none;fill-opacity:1;stroke:#008d00;stroke-width:0.00346924;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 10.002251,11.720163 C 9.188191,11.533677 8.556782,10.790796 8.4154413,9.853213 8.3235663,9.2437581 8.4655923,8.610896 8.809701,8.0964027 8.934134,7.9103585 9.252984,7.6049937 9.434665,7.4978714 9.778128,7.2953598 10.113332,7.2090948 10.471292,7.2310941 c 0.278128,0.017093 0.433965,0.058069 0.685412,0.180222 0.587206,0.2852656 1.014548,0.8668667 1.160947,1.5800186 0.04103,0.1998869 0.04609,0.2809833 0.0365,0.5855728 -0.0131,0.4161622 -0.06627,0.6477545 -0.224312,0.9771355 -0.137103,0.285737 -0.255603,0.453629 -0.464455,0.658045 -0.217576,0.212954 -0.456606,0.359918 -0.740699,0.455407 -0.185523,0.06236 -0.24331,0.07136 -0.497185,0.07742 -0.193101,0.0046 -0.332489,-0.0035 -0.425248,-0.02475 z"
id="path1521"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><path
style="fill:none;fill-opacity:1;stroke:#008d00;stroke-width:0.00346924;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 9.90822,11.678098 C 9.687052,11.610168 9.59353,11.567458 9.419382,11.454868 8.979205,11.170287 8.630415,10.669258 8.477805,10.102317 8.42515,9.9067054 8.419649,9.8486391 8.419649,9.4885192 8.419649,9.1305757 8.425339,9.069652 8.476534,8.8797318 8.597496,8.4309712 8.772953,8.1169614 9.067095,7.8228189 9.366797,7.5231171 9.621513,7.3754618 9.991984,7.2866741 c 0.252652,-0.060551 0.667105,-0.048589 0.887779,0.025624 0.712898,0.2397478 1.200421,0.7973997 1.406155,1.6084274 0.04326,0.1705384 0.05298,0.2648052 0.05298,0.5137857 0,0.5183206 -0.05278,0.7664828 -0.24712,1.1620038 -0.273677,0.556979 -0.740288,0.950419 -1.295623,1.092449 -0.245758,0.06285 -0.664611,0.05773 -0.887936,-0.01087 z"
id="path1523"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /><path
style="fill:none;fill-opacity:1;stroke:#008d00;stroke-width:0.00346924;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 5.5014409,18.520699 c 0.031629,-0.179014 0.1650059,-0.66917 0.2417508,-0.888426 0.425943,-1.216895 1.2520171,-2.265107 2.2867761,-2.901709 0.4130862,-0.254138 0.9955602,-0.484063 1.4689842,-0.579866 1.870137,-0.378443 3.75071,0.475264 4.89262,2.22106 0.388597,0.594101 0.680534,1.300826 0.837492,2.027407 l 0.04415,0.204399 H 10.380008 5.4868002 Z"
id="path1525"
inkscape:export-xdpi="609.60999"
inkscape:export-ydpi="609.60999" /></g></svg>

After

Width:  |  Height:  |  Size: 9 KiB