Source for file Admin.class.php

Documentation is available at Admin.class.php

  1. <?php
  2. /**
  3.  * R.E. Login 2.0 - Admin - class/Admin.class.php
  4.  *
  5.  * Az adminisztrációs folyamatok megvalósítása egy osztályban<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.  * Admin
  21.  *
  22.  * Minden adminisztrációs művelet itt van definiálva.
  23.  * Egy runXXX metódus indítja az XXX-nek megfelelő műveletet.
  24.  * Majd az XXX osztály megvalósítja azt.
  25.  *
  26.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  27.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  28.  *
  29.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  30.  * @copyright Copyright (C) 2010, Takács Ákos
  31.  * @license http://www.gnu.org/licenses/gpl.html
  32.  * @package RELogin
  33.  */
  34. class Admin
  35. {
  36.     /**
  37.      * Meghívó elvétele
  38.      */
  39.     const INVITE_SUB 'invitesub';
  40.  
  41.     /**
  42.      * Meghívó adása
  43.      */
  44.     const INVITE_ADD 'inviteadd';
  45.  
  46.     /**
  47.      * Meghívó beállítása
  48.      */
  49.     const INVITE_SET 'inviteset';
  50.  
  51.     /**
  52.      * Meghívó admin
  53.      */
  54.     const METHOD_INVITE 'method_invite';
  55.  
  56.     /**
  57.      * Config admin
  58.      */
  59.     const METHOD_CONFIG 'method_config';
  60.  
  61.     /**
  62.      * Users admin
  63.      */
  64.     const METHOD_USERS 'method_users';
  65.  
  66.     /**
  67.      * Ranks admin
  68.      */
  69.     const METHOD_RANKS 'method_ranks';
  70.  
  71.     /**
  72.      * Hibaüzenetek tömbje
  73.      *
  74.      * @var array 
  75.      */
  76.     private static $errors array();
  77.  
  78.     /**
  79.      * Feldolgozandó beállítások tömbje
  80.      *
  81.      * @var array 
  82.      */
  83.     private static $values array();
  84.  
  85.     /**
  86.      * Űrlap inputok címe. Egyúttal a Config fájlba generálandó
  87.      * megjegyzések a megfelelő konstansok fölé.
  88.      *
  89.      * @var array 
  90.      */
  91.     private static $titles array();
  92.  
  93.     /**
  94.      * Maximálisan beállítható meghívók száma.
  95.      *
  96.      * @var int 
  97.      */
  98.     private static $maxInvitation 100;
  99.  
  100.     /**
  101.      * Config admin elindítása
  102.      *
  103.      * @param array $values {@link $values}
  104.      * @param array $titles {@link $titles}
  105.      * @return bool Sikeres volt-e a művelet
  106.      */
  107.     public static function runConfigAdmin(&$values&$titles)
  108.     {
  109.         return self::run($values$titles,self::METHOD_CONFIG);
  110.     }
  111.  
  112.     /**
  113.      * Users admin indítása
  114.      *
  115.      * @param array $values {@link $values}
  116.      * @return bool Sikeres volt-e a művelet
  117.      */
  118.     public static function runUserAdmin(&$values)
  119.     {
  120.         return self::run($valuesnull,self::METHOD_USERS);
  121.     }
  122.  
  123.     /**
  124.      * Invite admin indítása
  125.      *
  126.      * @param array $values {@link $values}
  127.      * @return bool Sikeres volt-e a művelet
  128.      */
  129.     public static function runInviteAdmin(&$values)
  130.     {
  131.         return self::run($valuesnull,self::METHOD_INVITE);
  132.     }
  133.  
  134.     /**
  135.      * Ranks admin indítása
  136.      *
  137.      * @param array $values {@link $values}
  138.      * @return bool Sikeres volt-e a művelet
  139.      */
  140.     public static function runRanksAdmin(&$values)
  141.     {
  142.         return self::run($valuesnull,self::METHOD_RANKS);
  143.     }
  144.  
  145.     /**
  146.      * Bármilyen admin indítása
  147.      *
  148.      * A $mode paraméterben várja melyik admint kell indítani.
  149.      * Ezt osztályszintű konstansok segítségével lehet megadni.
  150.      * Ha a $_POST['admin'] tömb nincs beállítva, akkor nem indul el.
  151.      *
  152.      *
  153.      * @param array $values {@link $values}
  154.      * @param array $titles {@link $titles}
  155.      * @param string $mode Melyik admint indítsa. Lehetséges értékek:
  156.      *                 {@link METHOD_INVITE}{@link METHOD_RANKS},
  157.      *                 {@link METHOD_USERS}{@link METHOD_CONFIG}
  158.      * @return bool Sikeres volt-e a művelet
  159.      */
  160.     private static function run($values$titles,$mode)
  161.     {
  162.         if (!isset($_POST['admin']or !is_array($_POST['admin']))
  163.         {
  164.             return false;
  165.         }
  166.         self::$values $values;
  167.         self::$titles $titles;
  168.  
  169.         switch ($mode{
  170.             case self::METHOD_INVITE:
  171.                 return self::inviteAdmin();
  172.  
  173.             case self::METHOD_USERS:
  174.                 return self::userAdmin();
  175.                 break;
  176.  
  177.             case self::METHOD_RANKS:
  178.                 return self::ranksAdmin();
  179.  
  180.             case self::METHOD_CONFIG:
  181.                 return self::writeConfigFile();
  182.  
  183.             default:
  184.                 return self::writeConfigFile();
  185.         }
  186.         
  187.         return true;
  188.     }
  189.  
  190.     /**
  191.      * Users admin megvalósítása
  192.      *
  193.      * Felhasználók jogainak beállítása, illetve felhasználó törlése.
  194.      * Törléskor törlődnek a felhasználó üzenetei, illetve a keresési
  195.      * naplója.
  196.      *
  197.      * @return bool Sikeres volt-e a művelet
  198.      */
  199.     private static function userAdmin()
  200.     {
  201.         $username trim(self::$values['username']);
  202.         require_once System::getIncLoginDir().'classes/UserList.class.php';
  203.         $ids array();
  204.         if(!($ids UserList::exists('username'$username,false)))
  205.         {
  206.             self::$errors['Nincs "'.$username.'" nevű felhasználó';
  207.             return false;
  208.         }
  209.         if ($ids[0== System::$user->T_users_userid)
  210.         {
  211.             self::$errors['Saját magad nem módosíthatod!';
  212.             return false;
  213.         }
  214.         $user new User((int)$ids[0]);
  215.  
  216.         $isAdmin $user->rank(array('admin','owner'));
  217.         if ($isAdmin and !System::$user->rank('owner'))
  218.         {
  219.             self::$errors['Adminokat csak '.Ranks::getNameByVar('owner').' rangú módosíthat!';
  220.             return false;
  221.         }
  222.  
  223.         if (self::$values['rankid'== 'x')
  224.         {
  225.             //user törlése
  226.             $userlist new UserList();
  227.             require_once System::getIncLoginDir().'classes/Messages.class.php';
  228.             Messages::deleteMsgsOfUser($ids[0]);
  229.             mysql_query('delete from '.Config::DBPREF.'searchlog where userid = '.$ids[0]);
  230.             $userlist->delete('userid'$ids[0]);
  231.         }
  232.  
  233.  
  234.         $user->rank self::$values['rankid'];
  235.         $user->update();
  236.         return true;
  237.     }
  238.  
  239.     /**
  240.      * Invite admin megvalósítása.
  241.      *
  242.      * Meghívók kiosztása, elvétele.
  243.      *
  244.      * @return bool Sikeres volt-e a művelet
  245.      */
  246.     private static function inviteAdmin()
  247.     {
  248.         $username trim(self::$values['username']);
  249.         require_once System::getIncLoginDir().'classes/UserList.class.php';
  250.         $ids array();
  251.         if (self::$values['allusers'=== null)
  252.         {
  253.             if(!($ids UserList::exists('username'$username,false)))
  254.             {
  255.                 self::$errors['Nincs "'.$username.'" nevű felhasználó';
  256.                 return false;
  257.             }
  258.         }
  259.         $userid count($ids$ids[00;
  260.         self::setInvitations($useridself::$values['invitations']self::$values['mode']);
  261.         return true;
  262.     }
  263.  
  264.     private static function ranksAdmin()
  265.     {
  266.         $valid_var preg_match('/^[a-z_]+[a-z0-9_]*$/i',self::$values['varname']);
  267.         $err_invalid_varname 'Érvénytelen változónév!
  268.                                 Érvényes: 0-9, a-z, _, ékezet nélkül  (Számmal nem kezdődhet)';
  269.         if (trim(self::$values['rankid']== "")
  270.         {
  271.             if (!$valid_var)
  272.             {
  273.                 self::$errors[$err_invalid_varname;
  274.                 return false;
  275.             }
  276.             Ranks::addRank(self::$values['varname']self::$values['rankname'],true);
  277.  
  278.         }
  279.         else if (self::$values['op'== "delete")
  280.         {
  281.             if (self::$values['rankid'5)
  282.             {
  283.                 self::$errors['Alapértelmezett rangok nem törölhetők';
  284.                 return false;
  285.             }
  286.             Ranks::getInstance()->delete('rankid',self::$values['rankid']);
  287.             header('Location: '.$_SERVER['REQUEST_URI']);
  288.         }
  289.         else if (self::$values['act'== 'mod')
  290.         {
  291.             if (!$valid_var)
  292.             {
  293.                 self::$errors[$err_invalid_varname;
  294.             }
  295.             $rank Ranks::getRank(null'rankid'self::$values['rankid']);
  296.             if ($rank->varname != self::$values['varname'])
  297.             {
  298.                 self::$errors['Alapértelmezett rangok változóneve nem módosítható!';
  299.             }
  300.             
  301.             if (count(self::$errors))
  302.             {
  303.                 return false;
  304.             }
  305.  
  306.             $rank->varname self::$values['varname'];
  307.             $rank->name self::$values['rankname'];
  308.             $rank->update();
  309.         }
  310.         return true;
  311.     }
  312.  
  313.     /**
  314.      * Meghívók módosítása
  315.      *
  316.      * A $mode paraméterben megadott művelet szerint elvesz, hozzáad, vagy
  317.      * beállít $invitations számű meghívót a $userid id-jű felhasználónak.
  318.      *
  319.      * @param int $userid Felhasználó azonosítója
  320.      * @param int $invitations Meghívók száma
  321.      * @param string $mode Meghívó módosítás módja. Értéke lehet:
  322.      *                 {@link INVITE_SET}{@link INVITE_ADD}{@link INVITE_SUB}
  323.      *             Alapértelmezetten beállítás történik.
  324.      */
  325.     public static function setInvitations($userid$invitations,$mode=self::INVITE_SET)
  326.     {
  327.         switch ($mode)
  328.         {
  329.             case self::INVITE_ADD:
  330.                 self::addInvitations($userid$invitations);
  331.                 return;
  332.             case self::INVITE_SUB:
  333.                 self::subInvitations($userid$invitations);
  334.                 return;
  335.             case self::INVITE_SET:
  336.                 self::invitationQuery($invitations,$userid);
  337.                 return;
  338.         }
  339.         self::invitationQuery($invitations,$userid);
  340.     }
  341.  
  342.     /**
  343.      * Meghívók elvétele
  344.      *
  345.      * @see setInvitations
  346.      *
  347.      * @param int $userid Felhasználó azonosítója
  348.      * @param int $invitations Elveendő meghívók száma
  349.      */
  350.     public static function subInvitations($userid$invitations)
  351.     {
  352.         $inv = (int)$invitations;
  353.         self::invitationQuery(" if(invitations > $inv, invitations-$inv, 0 ) "$userid);
  354.     }
  355.  
  356.     /**
  357.      * Meghívók adása
  358.      *
  359.      * @see setInvitations
  360.      *
  361.      * @param int $userid Felhasználó azonosítója
  362.      * @param int $invitations Elveendő meghívók száma
  363.      */
  364.     public static function addInvitations($userid$invitations)
  365.     {
  366.         $inv = (int)$invitations;
  367.         self::invitationQuery(" if(invitations < ".(self::maxInvitation()-$inv).",
  368.                                 invitations+$inv".self::maxInvitation()." ) ",
  369.                     $userid);
  370.     }
  371.  
  372.     /**
  373.      * Maximálisan kiosztható meghívók száma egy felhasználónak
  374.      *
  375.      * A $max paramétert megadva be is állítja új értékre.
  376.      * Mindenképpen visszatér az aktuális értékkel a beállítás után.
  377.      *
  378.      * @param int $max Maximális meghívók száma
  379.      * @return int 
  380.      */
  381.     public static function maxInvitation($max=null)
  382.     {
  383.         if ($max !== null)
  384.         {
  385.             self::$maxInvitation = (int)$max;
  386.         }
  387.         return self::$maxInvitation;
  388.     }
  389.  
  390.     /**
  391.      * Meghívók beállításának frissítése.
  392.      *
  393.      * Itt fut le a mysql_query() az összeállított sql kóddal.
  394.      *
  395.      * @param string $set Meghívók új számának sql kódja.
  396.      * @param int $userid Felhasználó azonosítója
  397.      */
  398.     private static function invitationQuery($set,$userid)
  399.     {
  400.         $uid = (int)$userid;
  401.         $sql 
  402.             "update ".Config::DBPREF."users set invitations = ".
  403.             $set;
  404.         if ($uid)
  405.         {
  406.             $sql .= " where  userid = $uid";
  407.         }
  408.         mysql_query($sql);
  409.     }
  410.  
  411.     /**
  412.      * Config fájl módosítása
  413.      *
  414.      * @return bool Sikeres volt-e a művelet
  415.      */
  416.     private static function writeConfigFile()
  417.     {
  418.         if (self::$values['SMTP_AUTH'and
  419.             (empty(self::$values['SMTP_HOST']or
  420.             empty(self::$values['SMTP_PORT']or
  421.             empty(self::$values['SMTP_USERNAME']or
  422.             empty(self::$values['SMTP_PASSWORD'])) )
  423.         {
  424.             self::$errors['Bejelölted az SMTP hitelesítést, ezért
  425.                                 minden SMTP beállítást meg kell adnod';
  426.             return false;
  427.         }
  428.  
  429.         $t "<?php".PHP_EOL.
  430.             "final class Config".PHP_EOL."{".PHP_EOL.
  431.             "\t const ";
  432.         foreach (self::$values as $key => $value)
  433.         {
  434.             $value (!is_bool($value))
  435.                     ? "'".$value."'" ($value 'true' 'false');
  436.             $title "";
  437.             if (isset (self::$titles[$key]))
  438.             {
  439.                 $title self::$titles[$key];
  440.             }
  441.             else if (isset(self::$titles['+'.$key]))
  442.             {
  443.                 $title self::$titles['+'.$key];
  444.             }
  445.             else if (isset(self::$titles['-'.$key]))
  446.             {
  447.                 $title self::$titles['-'.$key];
  448.             }
  449.  
  450.             $t .= PHP_EOL."\t\t/*".strip_tags($title)."*/";
  451.             $t .= PHP_EOL."\t\t".$key." = ".$value.",";
  452.         }
  453.         $t rtrim($t,',').';'.PHP_EOL;
  454.         $t .=
  455.         "\tprivate static \$instance;".PHP_EOL.
  456.         "\tprivate function __construct(){}".PHP_EOL.
  457.         "\tfunction __get(\$var)".PHP_EOL.
  458.         "\t{".PHP_EOL.
  459.         "\t\tif (!isset(\$this->\$var))".PHP_EOL.
  460.         "\t\t{".PHP_EOL.
  461.         "\t\t\teval('\$ret = self::'.\$var.';');".PHP_EOL.
  462.         "\t\t\treturn \$ret;".PHP_EOL.
  463.         "\t\t}".PHP_EOL.
  464.         "\t}".PHP_EOL.
  465.         "\tpublic static function getInstance()".PHP_EOL.
  466.         "\t{".PHP_EOL.
  467.         "\t\tif (!isset(self::\$instance)) {".PHP_EOL.
  468.         "\t\t\t\$c=__CLASS__;".PHP_EOL.
  469.         "\t\t\tself::\$instance = new \$c;".PHP_EOL.
  470.         "\t\t}".PHP_EOL.
  471.         "\t\treturn self::\$instance;".PHP_EOL.
  472.         "\t}".PHP_EOL.
  473.         "}".PHP_EOL."?>";
  474.  
  475.  
  476.         file_put_contents(System::getIncLoginDir().'classes/Config.class.php',$t);
  477.     }
  478.  
  479.     /**
  480.      * Hibaüzenetek tömbje
  481.      *
  482.      * @return array 
  483.      */
  484.     public static function errors()
  485.     {
  486.         return self::$errors;
  487.     }
  488. }
  489. ?>

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