Source for file System.class.php

Documentation is available at System.class.php

  1. <?php
  2. /**
  3.  * R.E. Login 2.0 - A rendszer magja - class/System.class.php
  4.  *
  5.  * A rendszerrel összefüggő műveletek itt történnek. Itt inicializálja a
  6.  * login rendszerváltozókat, amikre bármelyik osztályban szükség lehet,
  7.  * és mindig beállítottnak kell lenniük addigra már. <br />
  8.  * <br />
  9.  * <b>Dátum:</b> 2010.04.02.
  10.  *
  11.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  12.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  13.  *
  14.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  15.  * @copyright Copyright (C) 2010, Takács Ákos
  16.  * @license http://www.gnu.org/licenses/gpl.html
  17.  * @package RELogin
  18.  * @version 2.0
  19.  */
  20.  
  21.  
  22. /**
  23.  * A rendszer magja
  24.  *
  25.  * Egyke osztály. Példányosítás:
  26.  * <code>$system = System::getInstance();</code>
  27.  *
  28.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  29.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  30.  *
  31.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  32.  * @copyright Copyright (C) 2010, Takács Ákos
  33.  * @license http://www.gnu.org/licenses/gpl.html
  34.  * @package RELogin
  35.  */
  36. final class System
  37. {
  38.     public static
  39.         /**
  40.          * Konfig adatokat tartalmazó objektum
  41.          * 
  42.          * @var Config 
  43.          */
  44.         $config,
  45.  
  46.         /**
  47.          * User be van-e lépve
  48.          *
  49.          * @var bool 
  50.          */
  51.         $logged=false,
  52.  
  53.         /**
  54.          * Belépés után a user maga, lekérhető adataival
  55.          *
  56.          * @var User 
  57.          */
  58.         $user,
  59.  
  60.         /**
  61.          * Session
  62.          *
  63.          * @var Session 
  64.          */
  65.         $session;
  66.  
  67.     private static
  68.  
  69.         /**
  70.          * A weboldal gyökérmappája. include-hoz / jellel végződik
  71.          *
  72.          * @var string 
  73.          */
  74.         $INC_SITEDIR './',
  75.  
  76.         /**
  77.          * A Login gyökérmappája. include-hoz / jellel végződik
  78.          *
  79.          * @var string 
  80.          */
  81.         $INC_LOGINDIR './',
  82.  
  83.         /**
  84.          * A szerver gyökér mappája
  85.          *
  86.          * @var string 
  87.          */
  88.         $BASEDIR='./',
  89.  
  90.         /**
  91.          * A weboldal gyökere a doc root-tól
  92.          *
  93.          * @var string 
  94.          */
  95.         $SITEDIR='./',
  96.  
  97.         /**
  98.          * Időbélyeg. Szerveridőtől különbözhet
  99.          *
  100.          * @var int 
  101.          */
  102.         $TIME;
  103.     
  104.     private static
  105.  
  106.         /**
  107.          * System instancia
  108.          *
  109.          * @var System 
  110.          */
  111.         $instance;
  112.  
  113.     /**
  114.      * Üres konstruktor
  115.      * 
  116.      * @ignore
  117.      */
  118.     private function __construct(
  119.     {
  120.         
  121.     }
  122.  
  123.     /**
  124.      * Rendszer inicializálása
  125.      *
  126.      * Adatbázis kapcsolat létrehozás, szükséges osztályok beemelése, nyelv beállítás, stb
  127.      */
  128.     public function init()
  129.     {
  130.         self::setSlashes($_POST,false);
  131.         //self::setSlashes($_GET, false);
  132.  
  133.         self::setIncSiteDir();
  134.         require_once self::$INC_LOGINDIR."classes/Config.class.php";
  135.         self::setBaseDir();
  136.         self::setSitedir();
  137.  
  138.         require_once self::$INC_LOGINDIR.'libs/REDBObjects/REDBObjects.class.php';
  139.         REDBObjects::uses('mysql');
  140.  
  141.         require_once self::$INC_LOGINDIR.'classes/Session.class.php';
  142.         require_once self::$INC_LOGINDIR."classes/Login.class.php";
  143.         require_once self::$INC_LOGINDIR.'classes/Url.class.php';
  144.  
  145.         self::$TIME time();
  146.  
  147.         self::$config Config::getInstance();
  148.  
  149.         self::dbconnect();
  150.         self::dbselect();
  151.  
  152.         self::$session Session::getInstance();
  153.  
  154.         try
  155.         {
  156.             self::$logged Login::authUser('username','userpass');
  157.         }
  158.         catch (LoginException $e)
  159.         {
  160.             self::$logged false;
  161.             Login::addError($e->getMessage());
  162.             Login::logout();
  163.         }
  164.  
  165.         if (isset($_GET['logout'])) self::logout();
  166.         self::runIfLogged();
  167.  
  168.     }
  169.  
  170.     /**
  171.      * Adatbázisszerver kapcsolat létrehozása
  172.      */
  173.     private static function dbconnect()
  174.     {
  175.         mysql_connect(
  176.             self::$config->DBHOST,
  177.             self::$config->DBUSER,
  178.             self::$config->DBPASS);
  179.         mysql_query("set names '".self::$config->DBCHARSET."' collate '".self::$config->DBCOLLATE."'");        
  180.     }
  181.  
  182.     /**
  183.      * Adatbázis kiválasztása
  184.      */
  185.     private static function dbselect()
  186.     {
  187.         mysql_select_db(self::$config->DBNAME);
  188.     }
  189.  
  190.     /**
  191.      * Idő lekérdezése
  192.      *
  193.      * A time() függvényhez hasonlóan működik. Csak rosszul működő szerveróra esetén
  194.      * már a módosított időt tartalmazza.
  195.      *
  196.      * @return int 
  197.      */
  198.     public static function getTime()
  199.     {
  200.         return self::$TIME;
  201.     }
  202.  
  203.     /**
  204.      * TimeStamp lekérdezése. Y-m-d H:i:s formátumban
  205.      *
  206.      * @return string 
  207.      */
  208.     public static function  getTimeStamp()
  209.     {
  210.         return date('Y-m-d H:i:s',System::getTime());
  211.     }
  212.  
  213.     /**
  214.      * Login gyökér beállítása az includehoz
  215.      */
  216.     private static function setIncLoginDir()
  217.     {
  218.         //változó definiálása az oldal könyvtárához, az include használata esetén
  219.         self::$INC_LOGINDIR str_replace('\\''/'dirname(dirname(__FILE__)) '/');
  220.     }
  221.  
  222.     /**
  223.      * Login gyökér lekérdezése az includehoz
  224.      *
  225.      * @return string Login gyökér az includehoz
  226.      */
  227.     public static function getIncLoginDir()
  228.     {
  229.         return self::$INC_LOGINDIR;
  230.     }
  231.  
  232.     /**
  233.      * Weboldal gyökér beállítása szerver gyökértől
  234.      */
  235.     private static function setIncSiteDir()
  236.     {
  237.         self::setIncLoginDir();
  238.         //változó definiálása az oldal könyvtárához, az include használata esetén
  239.         self::$INC_SITEDIR dirname(self::getIncLoginDir()).'/';
  240.     }    
  241.  
  242.  
  243.     /**
  244.      * Weblap gyökér lekérdezése a szerver gyökértől
  245.      *
  246.      * @return string Weblap gyökér az includehoz
  247.      */
  248.     public static function getIncSitedir()
  249.     {
  250.         return self::$INC_SITEDIR;
  251.     }
  252.  
  253.     /**
  254.      * Tárhely gyökér beállítása
  255.      */
  256.     private static function setBaseDir()
  257.     {
  258.         //Könyvtárak száma a gyökértől
  259.         $dir_count substr_count($_SERVER['PHP_SELF']'/'1;
  260.         //Konstans definiálása gyökérkönyvtárra
  261.         $symlink trim(Config::SYMLINK== '' '' trim(Config::SYMLINK,'/').'/';
  262.         self::$BASEDIR str_repeat('../'$dir_count).$symlink;
  263.     }
  264.  
  265.     /**
  266.      * Tárhelygyökér lekérdezése
  267.      * 
  268.      * @return string tárhely gyökér
  269.      */
  270.     public static function getBasedir()
  271.     {
  272.         return self::$BASEDIR;
  273.     }
  274.  
  275.     /**
  276.      * Weblap gyökér beállítása linkekhez
  277.      *
  278.      * Tárhely gyökértől számított útvonal
  279.      *
  280.      */
  281.     private static function setSitedir()
  282.     {
  283.         $explode_fn explode('/'str_replace("\\\\","/",$_SERVER['SCRIPT_FILENAME']));
  284.         for ($i 0$i substr_count($_SERVER['PHP_SELF']'/')$i++)
  285.         
  286.             array_pop($explode_fn);
  287.         }
  288.  
  289.         $fn_count count($explode_fn);
  290.         $explode_isd array_reverse(explode('/'self::$INC_SITEDIR));
  291.         for ($i 0$i $fn_count$i++)
  292.         {
  293.                 array_pop($explode_isd);
  294.         }
  295.         
  296.         $explode_isd array_reverse($explode_isd);
  297.         $symlink trim(Config::SYMLINK== '' '' trim(Config::SYMLINK,'/').'/';
  298.         $sitedir '/'.$symlink implode('/'$explode_isd);
  299.  
  300.         $sitedir $sitedir '/';
  301.         self::$SITEDIR str_replace('//''/'$sitedir);
  302.     
  303.  
  304.     /**
  305.      * Weblap gyökér a tárhely gyökértől számítva
  306.      *
  307.      * @return string Weblap gyökér linkekhez
  308.      */
  309.     public static function getSitedir()
  310.     {
  311.         return self::$SITEDIR;
  312.     }
  313.  
  314.     /**
  315.      * Login mappa útvonala a tárhely gyökértől
  316.      *
  317.      * @return string Login gyökér linkekhez
  318.      */
  319.     public static function getLogindir()
  320.     {
  321.         return self::getSitedir().basename(self::getIncLoginDir()).'/';
  322.     }
  323.  
  324.     /**
  325.      * Weblap gyökér url-je HTTP-vel
  326.      * 
  327.      * @return string 
  328.      */
  329.     public static function getSitedirWithHTTP()
  330.     {
  331.         return "http://".$_SERVER['HTTP_HOST'].self::getSitedir();
  332.     }
  333.  
  334.     /**
  335.      * Login mappa url-je HTTP-vel
  336.      *
  337.      * @return string 
  338.      */
  339.     public static function getLoginDirWithHTTP()
  340.     {
  341.         return "http://".$_SERVER['HTTP_HOST'].self::getLogindir();
  342.     }
  343.  
  344.     /**
  345.      * URL a sitedir-től számítva
  346.      * 
  347.      * @return string 
  348.      */
  349.     public static function getURIFromSitedir()
  350.     {
  351.         $sitedir self::$SITEDIR;
  352.         $uri $_SERVER['REQUEST_URI'];
  353.         $ret substr($uristrlen($sitedir));
  354.     
  355.         if (isset($_GET['lang']))
  356.         {
  357.             $ret (($pos strpos($ret,'/')) !== false?
  358.                     substr($ret,strpos($ret,'/')) '';
  359.         }
  360.         return trim($ret,'/');
  361.     }
  362.  
  363.     /**
  364.      * Tömb elemeinek backslashelt vagy nem backslashelt verzióra állítása
  365.      *
  366.      * @param mixed $string array vagy string. Tömb esetén rekurzivan működik
  367.      * @param boolean $bool true, ha a felhasználói adatbeviteleket backslashelni akarjuk. Amúgy false
  368.      */
  369.     public static function setSlashes(&$string,$bool=false)
  370.     {
  371.         if (!is_array($string))
  372.         {
  373.             if ($bool{
  374.                 if (!get_magic_quotes_gpc())
  375.                 {
  376.                     $string addslashes($string);
  377.                 
  378.             }
  379.             else
  380.             
  381.                 if (get_magic_quotes_gpc())
  382.                 {
  383.                     $string stripslashes($string);
  384.                 }
  385.             }
  386.             return;
  387.         }
  388.         foreach ($string as $key => &$str{
  389.             self::setSlashes($str$bool);
  390.         }
  391.     }
  392.  
  393.     /**
  394.      * Példány lekérése
  395.      * 
  396.      * @return System 
  397.      */
  398.     public static function getInstance()
  399.     {
  400.         if (!isset(self::$instance)) {
  401.             $c=__CLASS__;
  402.             self::$instance new $c
  403.             self::$instance->init();
  404.         }
  405.         return self::$instance;
  406.     }
  407.  
  408.     /**
  409.      * Statikus tulajdonságok elérhetővé tétele nem statikusan
  410.      *
  411.      * @ignore
  412.      * @param string $var 
  413.      * @return mixed 
  414.      */
  415.     function __get($var)
  416.     {
  417.         if (!isset($this->$var)) 
  418.         {
  419.             $ret self::$$var;
  420.             return $ret;
  421.         }
  422.     }
  423.  
  424.     /**
  425.      * Kiléptetés
  426.      *
  427.      * Csak akkor, ha $_GET['relogin_logout'] létezik, és értéke 1
  428.      * Utána eltünteti az url-ből ezt a változót.
  429.      */
  430.     public static function logout()
  431.     {
  432.         if (!isset($_GET['relogin_logout']or $_GET['relogin_logout'!= 1)
  433.         {
  434.             return;
  435.         }
  436.         Login::logout();
  437.         self::$logged false;
  438.         $url Url::set(array(
  439.             'relogin_logout' => null
  440.         )Config::FILE_LOGOUT'&amp;');
  441.          self::redirect($url);
  442.     }
  443.  
  444.     /**
  445.      * Kijelentkező link
  446.      *
  447.      * @return string 
  448.      */
  449.     public static function logoutLink()
  450.     {
  451.         return Url::set(array(
  452.             'relogin_logout'=>1
  453.         ),System::getSitedir().Config::FILE_LOGOUT,'&amp;');
  454.     }
  455.  
  456.     /**
  457.      * Átirányítás egy oldalra
  458.      * 
  459.      * @param string $site Erre az oldalra irányít át
  460.      */
  461.     public static function redirect($site=null)
  462.     {
  463.         if (!$site)
  464.         {
  465.             $site $_SERVER['REQUEST_URI'];
  466.         }
  467.         header('Location: '.$site);        
  468.     }
  469.  
  470.     /**
  471.      * Ha a felhasználó nem jogosult az oldal megtekintésére, átirányítja az
  472.      * index oldalra.
  473.      *
  474.      * @param mixed $rank Az oldalt megtekinthető felhasználók rangja, ha string.
  475.      *         Ha tömb, akkor több rang engedélyezhető.
  476.      *         Ha nincs megadva ez a paraméter, akkor csak belépett felhasználók
  477.      *         nézhetik az oldalt.
  478.      */
  479.     public static function protectedSite($rank=null)
  480.     {
  481.         
  482.         if (!$rank and System::$loggedreturn;
  483.         require_once System::getIncLoginDir().'classes/Ranks.class.php';
  484.  
  485.         if (System::$user->rank($rank))
  486.         {
  487.             return;
  488.         }
  489.  
  490.         $site Config::FILE_PROTECTED_SITE;
  491.         if (!file_exists($site))
  492.         {
  493.             $site = isset($_SERVER['HTTP_REFERER'])
  494.                 ? $_SERVER['HTTP_REFERER']
  495.                 : null;
  496.         }
  497.         
  498.         if (!is_null($site))
  499.         {
  500.             if (!isset($_SESSION['redirected']))
  501.             {
  502.                 $_SESSION['redirected'true;
  503.                 self::redirect($site);
  504.                 exit;
  505.             }
  506.             else
  507.             {
  508.                 self::redirect(System::getSitedir());
  509.             }
  510.         }
  511.         ob_end_clean();
  512.         exit('Protected site');
  513.     }
  514.     
  515.     /**
  516.      * E-mail küldése
  517.      *
  518.      * @see http://phpmailer.worxware.com/
  519.      * @see PHPMailer
  520.      *
  521.      * @param string $to címzett, ha $params['toadmin] = false, egyébként válaszcím
  522.      * @param string $subject Tárgy
  523.      * @param string $body Tartalom
  524.      * @param array $params Egyéb paraméterek tömbje:<br />
  525.      *             boolean $html True, ha html levél, false, ha szöveges<br />
  526.      *             boolean $toadmin True, ha adminnak megy a levél a usertől. Egyébként false. default: false
  527.      */
  528.     public static function sendEmail($to,$subject,$body,$params=array())
  529.     {
  530.         $html = isset($params['html']? (bool)$params['html'true;
  531.         $toadmin = isset($params['toadmin']$params['toadmin'false;
  532.  
  533.         require_once self::getIncLoginDir().'libs/PHPMailer/class.phpmailer.php';
  534.         $mailer new PHPMailer();
  535.  
  536.         if (Config::SMTP_ON)
  537.         {
  538.             $mailer->IsSMTP();
  539.  
  540.             $mailer->Host Config::SMTP_HOST.':'.Config::SMTP_PORT;
  541.             if ($mailer->SMTPAuth Config::SMTP_AUTH{
  542.                 $mailer->Username Config::SMTP_USERNAME;
  543.                 $mailer->Password Config::SMTP_PASSWORD;
  544.             }
  545.         }
  546.         $mailer->Subject "=?UTF-8?B?".base64_encode($subject)."?=";
  547.  
  548.  
  549.         $from Config::MAIL_FROM;
  550.         $http_host $_SERVER['HTTP_HOST'];
  551.         if (substr($http_host,0,4== 'www.')
  552.         {
  553.             $http_host substr($http_host4);
  554.         }
  555.         $http_host "=?UTF-8?B?".base64_encode($http_host)."?=";
  556.  
  557.         $mailer->SetFrom($from$http_host);
  558.         if ($toadmin !== true)
  559.         {
  560.             $mailer->AddAddress($to);
  561.         }
  562.         else
  563.         
  564.             $mailer->AddAddress(Config::MAIL_TO);
  565.             $mailer->AddReplyTo($to);
  566.         }
  567.         
  568.         
  569.         $type ($html'html' 'plain';
  570.         $footer @file_get_contents(self::getIncLoginDir().'includes/email/email_footer-'.$type.'.html');
  571.         $footer str_replace(array(
  572.             '{website}''{email}'
  573.         ),array(
  574.             self::getSitedirWithHTTP(),
  575.             Config::MAIL_TO
  576.         )$footer);
  577.         $mailer->CharSet 'UTF-8';
  578.         $mailer->Body $body.$footer;
  579.         $mailer->IsHTML($html);
  580.  
  581.         if (($err $mailer->send()) !== true{
  582.             ob_end_clean();
  583.             exit('Hiba az email küldésnél');
  584.         }
  585.     }
  586.  
  587.     /**
  588.      * Akkor fut le, ha be van jelentkezve a felhasználó.
  589.      *
  590.      * Online idő állítása, frissítési idő módosítása
  591.      */
  592.     private static function runIfLogged()
  593.     {
  594.         if (!self::$loggedreturn;
  595.  
  596.         if (self::$user->refreshtime and
  597.             ($refreshtime strtotime(self::$user->refreshtime)) >= self::getTime(Config::MAX_ONLINE_TIME)
  598.         {
  599.             self::$user->onlinetime += self::getTime($refreshtime;
  600.         }
  601.         self::$user->refreshtime self::getTimeStamp();
  602.         self::$user->update();
  603.     }
  604.  
  605.  
  606.     /**
  607.      * Üzenetek statisztika
  608.      *
  609.      * @see Messages::msgStat()
  610.      *
  611.      * @return array 
  612.      */
  613.     public static function msgStat()
  614.     {
  615.         require_once self::getIncLoginDir().'classes/Messages.class.php';
  616.         return Messages::msgStat();
  617.     }
  618. }
  619.  
  620. ?>

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