Source for file UserFilter.class.php

Documentation is available at UserFilter.class.php

  1. <?php
  2. /**
  3.  * R.E. Login 2.0 - Filter - class/UserFilter.class.php
  4.  *
  5.  * Felhasználólista szűrő<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.  * Felhasználólista szűrő
  21.  *
  22.  * Megadhatók filterek, ami alapján szűri a felhasználókat a listában.
  23.  * Például online van-e, mi egy mező értéke illetve érvényes-e az e-mail címe.
  24.  *
  25.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  26.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  27.  *
  28.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  29.  * @copyright Copyright (C) 2010, Takács Ákos
  30.  * @license http://www.gnu.org/licenses/gpl.html
  31.  * @package RELogin
  32.  */
  33. class UserFilter
  34. {
  35.     /**
  36.      * Érvényes email cím
  37.      */
  38.     const EMAIL_VALID 'email_valid';
  39.  
  40.     /**
  41.      * Érvénytelen email cím
  42.      */
  43.     const EMAIL_INVALID 'email_invalid';
  44.  
  45.     /**
  46.      * Minden email cím
  47.      */
  48.     const EMAIL_ALL 'email_all';
  49.  
  50.     /**
  51.      * field like 'value%'
  52.      */
  53.     const LIKE_LEFT 'like_left';
  54.  
  55.     /**
  56.      * field like '%value'
  57.      */
  58.     const LIKE_RIGHT 'like_right';
  59.  
  60.     /**
  61.      * field like '%value%'
  62.      */
  63.     const LIKE_BOTH 'like_both';
  64.  
  65.     /**
  66.      * field = 'value'
  67.      */
  68.     const LIKE_EQUAL 'like_equal';
  69.  
  70.     /**
  71.      * Online felhasználók
  72.      */
  73.     const ONLINE_YES 'online_yes';
  74.  
  75.     /**
  76.      * Offline felhasználók
  77.      */
  78.     const ONLINE_NO 'online_no';
  79.  
  80.     /**
  81.      * Online és offline felhazsnálók is.
  82.      */
  83.     const ONLINE_YES_NO 'online_yes_no';
  84.  
  85.  
  86.     /**
  87.      * Filterek tömbje
  88.      *
  89.      * @var array 
  90.      */
  91.     private $filters array();
  92.  
  93.     /**
  94.      * @ignore
  95.      */
  96.     public function  __construct()
  97.     {
  98.  
  99.     }
  100.  
  101.     /**
  102.      * Online filter felvétele
  103.      *
  104.      * @param string $online Értéke lehet {@link UserFilter::ONLINE_YES},
  105.      *                 {@link UserFilter::ONLINE_NO}{@link UserFilter::ONLINE_YES_NO}
  106.      */
  107.     public function addOnlineFilter($online=self::ONLINE_YES_NO)
  108.     {
  109.         switch ($online)
  110.         {
  111.             case self::ONLINE_YES:
  112.                 $this->filters['online'=
  113.                     " (users.onlinestatus = 1 and
  114.                         users.refreshtime is not null and
  115.                         timestampdiff(SECOND, users.refreshtime, '".
  116.                         System::getTimeStamp()."') < ".Config::MAX_ONLINE_TIME.") ";
  117.                 return;
  118.             case self::ONLINE_NO:
  119.                 $this->filters['online'=
  120.                     " (users.onlinestatus = 0 or
  121.                         users.refreshtime is null or
  122.                         timestampdiff(SECOND, users.refreshtime, '".
  123.                         System::getTimeStamp()."') >= ".Config::MAX_ONLINE_TIME.") ";
  124.                 return;
  125.         }
  126.         unset($this->filters['online']);
  127.  
  128.     }
  129.  
  130.     /**
  131.      * Like filter felvétele
  132.      *
  133.      * Mező értéke szerint szűri a felhasználót
  134.      *
  135.      * @param string $field Mező neve
  136.      * @param mixed $value Mező értéke
  137.      * @param string $like Összehasonlítás módja Lehet
  138.      *         {@link UserFilter::LIKE_LEFT}{@link UserFilter::LIKE_RIGHT},
  139.      *         {@link UserFilter::LIKE_BOTH}{@link UserFilter::LIKE_EQUAL}
  140.      */
  141.     public function addLikeFilter($field$value,$like=self::LIKE_BOTH)
  142.     {
  143.         $this->filters['like'][array(
  144.             'field' => $field,
  145.             'value' => mysql_real_escape_string($value),
  146.             'like' => $like
  147.         );
  148.     }
  149.  
  150.     /**
  151.      * Equal filter
  152.      *
  153.      * @see UserFilter::addLikeFilter()
  154.      *
  155.      * @param string $field Mező neve
  156.      * @param mixed $value Mező értéke
  157.      */
  158.     public function addEqualFilter($field$value)
  159.     {
  160.         $this->addLikeFilter($field$valueself::LIKE_EQUAL);
  161.     }
  162.  
  163.     /**
  164.      * Email érvényesség szerinti szűrés
  165.      *
  166.      * @param string $type {@link UserFilter::EMAIL_VALID},    {@link UserFilter::EMAIL_INVALID}
  167.      */
  168.     public function addValidEmailFilter($type=self::EMAIL_VALID)
  169.     {
  170.         if ($type == self::EMAIL_VALID)
  171.         {
  172.             $this->filters['valid_email'" profiles.useremail = users.useremail ";
  173.         }
  174.         else if ($type == self::EMAIL_INVALID)
  175.         {
  176.             $this->filters['valid_email'" profiles.useremail != users.useremail ";
  177.         }
  178.     }
  179.  
  180.     /**
  181.      * Filter sztring
  182.      *
  183.      * Visszaadja az sql where -t. A where kulcsszóval együtt, ha szükséges.
  184.      *
  185.      * @return string 
  186.      */
  187.     public function filterString()
  188.     {
  189.         if (!count($this->filters)) return '';
  190.         $sql " where ";
  191.         foreach ($this->filters as $name => &$filter)
  192.         {
  193.             switch ($name)
  194.             {
  195.                 case 'valid_email':
  196.                     $sql .= $filter;
  197.                     break;
  198.                 case 'like':
  199.                     $like_filter array();
  200.                     foreach ($filter as $item)
  201.                     {
  202.                         $like $item['like'];
  203.                         $field $item['field'];
  204.                         $value $item['value'];
  205.                         $left ($like == self::LIKE_BOTH or $like == self::LIKE_LEFT
  206.                             ? '%' '';
  207.                         $right ($like == self::LIKE_BOTH or $like == self::LIKE_RIGHT)
  208.                             ? '%' '';
  209.  
  210.                         $op ($like == self::LIKE_EQUAL)
  211.                             ? ' = ' ' like ';
  212.  
  213.                         $like_filter[$field.$op."'".$left.$value.$right."'";
  214.                         
  215.                     }
  216.                     $sql .= " ".implode(' and ',$like_filter)." ";
  217.                     break;
  218.                 case 'online':
  219.                     $sql .= $filter;
  220.                     break;
  221.             }
  222.         }
  223.         return $sql;
  224.     }
  225. }
  226. ?>

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