mot_de_passe.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. include_spip('base/abstract_sql');
  13. function retrouve_auteur($id_auteur,$jeton=''){
  14. if ($id_auteur=intval($id_auteur)) {
  15. return sql_fetsel('*','spip_auteurs',array('id_auteur='.intval($id_auteur),"statut<>'5poubelle'","pass<>''"));
  16. }
  17. elseif ($jeton) {
  18. include_spip('action/inscrire_auteur');
  19. if ($auteur = auteur_verifier_jeton($jeton)
  20. AND $auteur['statut']<>'5poubelle'
  21. AND $auteur['pass']<>''){
  22. return $auteur;
  23. }
  24. }
  25. return false;
  26. }
  27. // chargement des valeurs par defaut des champs du formulaire
  28. /**
  29. * Chargement de l'auteur qui peut changer son mot de passe.
  30. * Soit un cookie d'oubli fourni par #FORMULAIRE_OUBLI est passe dans l'url par &p=
  31. * Soit un id_auteur est passe en parametre #FORMULAIRE_MOT_DE_PASSE{#ID_AUTEUR}
  32. * Dans les deux cas on verifie que l'auteur est autorise
  33. *
  34. * @param int $id_auteur
  35. * @return array
  36. */
  37. function formulaires_mot_de_passe_charger_dist($id_auteur=null, $jeton=null){
  38. $valeurs = array();
  39. // compatibilite anciens appels du formulaire
  40. if (is_null($jeton)) $jeton = _request('p');
  41. $auteur = retrouve_auteur($id_auteur,$jeton);
  42. if ($auteur){
  43. $valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire
  44. if ($jeton)
  45. $valeurs['_hidden'] = '<input type="hidden" name="p" value="'.$jeton.'" />';
  46. }
  47. else {
  48. $valeurs['message_erreur'] = _T('pass_erreur_code_inconnu');
  49. $valeurs['editable'] = false; // pas de saisie
  50. }
  51. $valeurs['oubli']='';
  52. $valeurs['nobot']='';
  53. return $valeurs;
  54. }
  55. /**
  56. * Verification de la saisie du mot de passe.
  57. * On verifie qu'un mot de passe est saisi, et que sa longuer est suffisante
  58. * Ce serait le lieu pour verifier sa qualite (caracteres speciaux ...)
  59. *
  60. * @param int $id_auteur
  61. */
  62. function formulaires_mot_de_passe_verifier_dist($id_auteur=null, $jeton=null){
  63. $erreurs = array();
  64. if (!_request('oubli'))
  65. $erreurs['oubli'] = _T('info_obligatoire');
  66. else if (strlen($p=_request('oubli')) < _PASS_LONGUEUR_MINI)
  67. $erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel',array('nb'=>_PASS_LONGUEUR_MINI));
  68. else {
  69. if (!is_null($c = _request('oubli_confirm'))){
  70. if (!$c)
  71. $erreurs['oubli_confirm'] = _T('info_obligatoire');
  72. elseif ($c!==$p)
  73. $erreurs['oubli'] = _T('info_passes_identiques');
  74. }
  75. }
  76. if (isset($erreurs['oubli'])){
  77. set_request('oubli');
  78. set_request('oubli_confirm');
  79. }
  80. if (_request('nobot'))
  81. $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
  82. return $erreurs;
  83. }
  84. /**
  85. * Modification du mot de passe d'un auteur.
  86. * Utilise le cookie d'oubli fourni en url ou l'argument du formulaire pour identifier l'auteur
  87. *
  88. * @param int $id_auteur
  89. */
  90. function formulaires_mot_de_passe_traiter_dist($id_auteur=null, $jeton=null){
  91. $res = array('message_ok'=>'');
  92. refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus)
  93. // compatibilite anciens appels du formulaire
  94. if (is_null($jeton)) $jeton = _request('p');
  95. $row = retrouve_auteur($id_auteur,$jeton);
  96. if ($row
  97. && ($id_auteur = $row['id_auteur'])
  98. && ($oubli = _request('oubli'))) {
  99. include_spip('action/editer_auteur');
  100. include_spip('action/inscrire_auteur');
  101. if ($err = auteur_modifier($id_auteur, array('pass'=>$oubli))){
  102. $res = array('message_erreur'=>$err);
  103. }
  104. else {
  105. auteur_effacer_jeton($id_auteur);
  106. $login = $row['login'];
  107. $res['message_ok'] = "<b>" . _T('pass_nouveau_enregistre') . "</b>".
  108. "<br />" . _T('pass_rappel_login', array('login' => $login));
  109. include_spip('inc/auth');
  110. $row = sql_fetsel("*","spip_auteurs","id_auteur=".intval($id_auteur));
  111. auth_loger($row);
  112. }
  113. }
  114. return $res;
  115. }
  116. ?>