Source for file Register.class.php

Documentation is available at Register.class.php

  1. <?php
  2. /**
  3.  * R.E. Login 2.0 - Regisztráció - class/Register.class.php
  4.  *
  5.  * Regisztráció és aktiváció.<br />
  6.  * <br />
  7.  * <b>Dátum:</b> 2010.04.02.
  8.  *
  9.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  10.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  11.  *
  12.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  13.  * @copyright Copyright (C) 2010, Takács Ákos
  14.  * @license http://www.gnu.org/licenses/gpl.html
  15.  * @package RELogin
  16.  * @version 2.0
  17.  */
  18.  
  19. /**
  20.  * @ignore
  21.  */
  22. require_once System::getIncLoginDir().'classes/Login.class.php';
  23.  
  24. /**
  25.  * @ignore
  26.  */
  27. require_once System::getIncLoginDir().'classes/UserList.class.php';
  28.  
  29.  
  30. /**
  31.  * Regisztráció, és aktiváció
  32.  *
  33.  * Csak egy kérelmet kell indítani. A többi automatikus.
  34.  * A kérelem visszaadja sikeres volt-e vagy sem.
  35.  *
  36.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  37.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  38.  *
  39.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  40.  * @copyright Copyright (C) 2010, Takács Ákos
  41.  * @license http://www.gnu.org/licenses/gpl.html
  42.  * @package RELogin
  43.  */
  44. class Register 
  45. {
  46.     /**
  47.      * Hibák tömbje
  48.      *
  49.      * @var array 
  50.      */
  51.     private static $errors array();
  52.  
  53.     /**
  54.      * Űrlapmezők neveit kulcsként tartalmazó asszociatív tömb
  55.      * 
  56.      * @var array 
  57.      */
  58.     private static $values array(
  59.         'username'=>'','userpass'=>'','reuserpass'=>'','useremail'=>'','reuseremail'=>'',
  60.         'bdyear'=>'','bdmonth'=>'','bdday'=>'','sex'=>'','public_mail'=>''
  61.     );
  62.  
  63.     /**
  64.      *
  65.      * @return array Lekérdezendő táblák+mezők
  66.      */
  67.     public static function getRecord()
  68.     {
  69.         return array(
  70.             Config::DBPREF.'users as users' => array(
  71.                 'username','userpass','rank','invitations','useremail','regtime','newsreadtime'
  72.             ),
  73.             Config::DBPREF.'profiles as profiles' => array(
  74.                 'birthdate','sex','useremail','public_mail',
  75.             )
  76.         );
  77.     }
  78.  
  79.     /**
  80.      * Űrlapmezők neveit kulcsként tartalmazó tömb visszaadása
  81.      * 
  82.      * @return array 
  83.      */
  84.     public static function getValues()
  85.     {
  86.         return self::$values;
  87.     }
  88.  
  89.     /**
  90.      * Megvizsgálja, érvényesek-e a megadott adatok
  91.      *
  92.      * @param User $user Példányosított User objektum
  93.      * @return boolean True, ha nincs hiba. És false, ha hibásak az adatok
  94.      */
  95.     public static function isValidInput($user)
  96.     {
  97.         $pref Config::DBPREF;
  98.         require_once System::getIncLoginDir().'libs/PHPMailer/class.phpmailer.php';
  99.         //felhasználó név hossza
  100.         if (($len strlen($user->username)) < (int)Config::MINLENGTH_USERNAME
  101.         or $len > (int)Config::MAXLENGTH_USERNAME)
  102.         {
  103.             self::$errors["A név ".Config::MINLENGTH_USERNAME.
  104.                 "-".Config::MAXLENGTH_USERNAME." karakter hosszú lehet!";
  105.         }
  106.         else if (!preg_match('/'.Config::USERNAME_PATTERN.'/i',$user->username)
  107.             or preg_match_all('/[0-9]{1}/i',$user->username,$result4
  108.             or preg_match_all('/_{1}/',$user->username,$result1){
  109.             self::$errors["A felhasználónév nem megfelelő formátumú!<br />
  110.                         (0-9: max 2db, a-z karakterek és 1 darab '_' karakter)";
  111.         }
  112.         else if (UserList::exists('username',$user->username,false))
  113.         {
  114.             self::$errors["Foglalt felhasználó név!";
  115.         
  116.         //emailcím elenőrzése
  117.         if (!PHPMailer::ValidateAddress($user->T_profiles_useremail))
  118.         {
  119.             self::$errors["Az e-mail cím érvénytelen!";
  120.         }
  121.         else if (UserList::exists('useremail'$user->T_profiles_useremail))
  122.         {
  123.             self::$errors["Van már ilyen e-mail cím az adatbázisban! ";
  124.         }
  125.         else if (trim($user->T_profiles_useremail!= trim($_POST['register']['reuseremail']))
  126.         {
  127.             self::$errors["A két e-mail cím nem egyezik!";
  128.         }
  129.         
  130.  
  131.         //jelszó vizsgálata
  132.         if (mb_strlen($user->userpass,Config::DBCHARSET($min Config::MINLENGTH_PASSWORD)) {
  133.             self::$errors[=  "A jelszó minimum $min karakter lehet!";
  134.         else if ($user->userpass != Login::getPasswordHash($_POST['register']['reuserpass'])){
  135.             self::$errors["A két jelszó nem egyezik!";
  136.         }
  137.  
  138.         foreach(self::$values as $key => $rec)
  139.         {
  140.             $tmp (!isset($_POST['register'][$key])) '' trim($_POST['register'][$key]);
  141.             if (empty($tmp))
  142.             {
  143.                 self::$errors["Minden mező kitöltése kötelező!";
  144.                 break;
  145.             }
  146.         }
  147.  
  148.         if (!isset($_POST['code']or !isset($_SESSION['captcha_code']or
  149.                 strtolower($_POST['code']!= strtolower($_SESSION['captcha_code']))
  150.         {
  151.             self::$errors["Érvénytelen ellenőrzőkód!";
  152.         }
  153.  
  154.         if (count(self::$errors) )
  155.         {
  156.             return false;
  157.         }
  158.         return true;
  159.     }
  160.  
  161.     /**
  162.      * Aktivációs link létrehozása
  163.      * 
  164.      * @param int $id User id-je
  165.      * @param string $email User email címe
  166.      * @param string $file Fájlnév, ahova az aktivációs link mutat
  167.      * @return string Aktivációs link
  168.      */
  169.     public static function createLink($id,$email,$file=null)
  170.     {
  171.         if ($file === null)
  172.         {
  173.             $file basename($_SERVER['PHP_SELF']);
  174.             $get $_GET;
  175.         }
  176.         else
  177.         {
  178.             $url parse_url($file);
  179.             $file $url['path'];
  180.             if (isset($url['query']))
  181.             {
  182.                 parse_str($url['query'],$get);
  183.             }
  184.         }
  185.     
  186.         $get['id'$id;
  187.         $get['code'self::createHash($id$email);
  188.         return
  189.             'http://'.$_SERVER['HTTP_HOST'].System::getSitedir().$file.
  190.             '?'.http_build_query($get'''&amp;');
  191.     }
  192.  
  193.     /**
  194.      * Az aktivációs linkhez a code hash létrehozása
  195.      * 
  196.      * @param int $id User id-je
  197.       * @param string $email User email címe
  198.      * @return string Code hash Base64 formában
  199.      */
  200.     public static function createHash($id,$email)
  201.     {
  202.         return base64_encode(sha1($id.md5($email)));
  203.     }
  204.  
  205.     /**
  206.      * Regisztráció kérelem
  207.      *
  208.      * @return mixed False, ha nem sikerült a regisztráció. Egyébként az új
  209.      *             felhasználó azonosítója.
  210.      */
  211.     public static function request()
  212.     {
  213.         if (!self::isValidInput(($user self::createUser()))) {
  214.             return false;
  215.         
  216.         $userid self::addUser($user);
  217.         //Ha az email aktiválás ki van kapcsolva, nem küldi ki az aktiváló emailt
  218.         //de akkor sem, ha admin regisztrált
  219.         if (!Config::EMAIL_ACTIVATION)
  220.         {
  221.             return $userid;
  222.         }
  223.  
  224.         $link self::createLink($userid,$user->T_profiles_useremail);
  225.         $body 
  226.             "Kedves ".$user->username."!<br /><br />".PHP_EOL.
  227.             "Valaki regisztrált a nevedben az oldalunkra. ".
  228.             "Amennyiben nem te voltál, nyugodtan hagyd figyelmen kívül a levelet.<br /><br />".PHP_EOL.
  229.             "A következő linkre kattintva aktiválhatod a hozzáférésedet:<br />".PHP_EOL.
  230.             "<a href='$link'>$link</a>";
  231.         System::sendEmail($user->T_profiles_useremail"Regisztráció"$body);
  232.  
  233.         return $userid;
  234.     }
  235.  
  236.     /**
  237.      * User felvétele adatbázisba
  238.      *
  239.      * Az {@link IsMySQLListClass} osztály gondoskodik az objektumként kapott user adatbázisba viteléről
  240.      *
  241.      * @param User $user Példányosított User objektum
  242.      * @return int User id-je
  243.      */
  244.     public static function addUser($user
  245.     {
  246.         $DB new IsMySQLListClass(self::getRecord(),'User');
  247.         $user->keyName 'userid';
  248.         return $DB->add($user);
  249.     }
  250.  
  251.     /**
  252.      * Egy új User létrehozása
  253.      * 
  254.      * @return User Már az elészült User objektum
  255.      */
  256.     protected static function createUser()
  257.     {
  258.         $rank UserList::countUsers()
  259.             ? Ranks::getIdByVar('user')
  260.             : Ranks::getIdByVar('owner');
  261.  
  262.         $system System::getInstance();
  263.  
  264.         $user new User(self::getRecord());
  265.         
  266.         
  267.         foreach (self::getRecord(as $_record)
  268.         {
  269.             foreach ($_record as $key => $field)
  270.             {
  271.                 if ($field == 'useremail'continue;
  272.                 $user->$field (isset($_POST['register'][$field])) $_POST['register'][$field'';
  273.             }
  274.         
  275.         $email $_POST['register']['useremail'];
  276.         if (Config::EMAIL_ACTIVATION)
  277.         {
  278.             $user->T_profiles_useremail $email;
  279.         }
  280.         else
  281.         {
  282.             $user->useremail $email;
  283.         
  284.         $user->birthdate =
  285.                 mysql_real_escape_string($_POST['register']['bdyear']).'-'.
  286.                 mysql_real_escape_string($_POST['register']['bdmonth']).'-'.
  287.                 mysql_real_Escape_string($_POST['register']['bdday']);
  288.         $user->public_mail ($_POST['register']['public_mail'== 'yes'0;
  289.         $user->update(false);
  290.         $user->userpass Login::getPasswordHash($user->userpass);
  291.         $user->regtime $ts System::getTimeStamp();
  292.         $user->newsreadtime $ts;
  293.  
  294.         $user->rank $rank;
  295.  
  296.         $user->update(false);
  297.         return $user;
  298.     }
  299.  
  300.     /**
  301.      * User aktiválása
  302.      * 
  303.      * @param int $id User id-je
  304.      * @param string $code code Hash ($_GET['code'])
  305.      * @return boolean True, ha sikeres volt, false, ha sikertelen
  306.      */
  307.     public static function activate($id,$code)
  308.     {
  309.         $pref Config::DBPREF;
  310.         $user new IsMySQLClass(array(
  311.             $pref.'users as users'=>array("userid",'useremail'),
  312.             $pref.'profiles as profiles'=>array("useremail")
  313.         ));
  314.         $user->keyName "userid";
  315.         $user->init($id)
  316.         if (empty($user->useridor
  317.             self::createHash($user->userid$user->T_profiles_useremail!= $code or
  318.             array_shift(mysql_fetch_row(mysql_query(
  319.                     "select count(useremail) from ".$pref."users where useremail = '".$user->T_profiles_useremail."'"))) 0
  320.             )
  321.         {
  322.             return false;
  323.         
  324.         if ($user->T_users_useremail != $user->T_profiles_useremail)
  325.         {
  326.             $user->T_users_useremail $user->T_profiles_useremail;
  327.             $user->update();
  328.         }
  329.         return true;
  330.     }
  331.  
  332.     /**
  333.      * Hibaüzenetek tömbje
  334.      *
  335.      * @return array 
  336.      */
  337.     public static function errors()
  338.     {
  339.         return self::$errors;
  340.     }
  341. }
  342.  
  343. ?>

Documentation generated on Sun, 04 Apr 2010 22:43:50 +0200 by phpDocumentor 1.4.1