Source for file Messages.class.php

Documentation is available at Messages.class.php

  1. <?php
  2. /**
  3.  * R.E. Login 2.0 - Üzenetlista - class/Messages.class.php
  4.  *
  5.  * Különböző üzenetlisták lekérdezése<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/Message.class.php';
  23.  
  24. /**
  25.  * Üzenetlisták
  26.  *
  27.  * Kimenő / Bejövő / Hírek
  28.  *
  29.  * Egy üzenetet megvalósító osztály.<br />
  30.  * <br />
  31.  *
  32.  * <b>Szerző weboldala:</b> {@link http://rimelek.hu/}<br />
  33.  * <b>Login weblapja:</b> {@link http://rimelek.hu/meghivos-loginrendszer-r-e-login-v2-0 R.E. Login v2.0}
  34.  *
  35.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  36.  * @copyright Copyright (C) 2010, Takács Ákos
  37.  * @license http://www.gnu.org/licenses/gpl.html
  38.  * @package RELogin
  39.  */
  40. class Messages extends IsMySQLListClass
  41. {
  42.     /**
  43.      * Bejövő üzenetek
  44.      */
  45.     const INBOX = 'inbox';
  46.  
  47.     /**
  48.      * Kimenő üzenetek
  49.      */
  50.     const OUTBOX = 'outbox';
  51.  
  52.     /**
  53.      * Hírek
  54.      */
  55.     const NEWS = 'news';
  56.  
  57.     private static $errors array();
  58.  
  59.     /**
  60.      *
  61.      * @param string $func Választott lista. Lehetséges értékei:
  62.      *                 {@link INBOX}, {@ link OUTBOX}, {@link NEWS}
  63.      */
  64.     public function  __construct($func)
  65.     {
  66.         parent::__construct(Message::getTables(),'Message');
  67.  
  68.  
  69.         if ($func == self::NEWS)
  70.         {
  71.             $this->page(
  72.                 Config::DBPREF.'messages as messages left join '.
  73.                 Config::DBPREF.'users as `from` on
  74.                     `from`.userid = messages.fromid left join '.
  75.                 Config::DBPREF.'users as `to` on
  76.                     `to`.userid = messages.toid where messages.toid = 0 '.
  77.                     ' order by sendtime desc',10);
  78.             return;
  79.         }
  80.  
  81.         $msg_uid 'fromid';
  82.  
  83.         if ($func == self::INBOX)
  84.         {
  85.             $msg_uid 'toid';
  86.         }
  87.  
  88.         $this->page(
  89.                 Config::DBPREF.'messages as messages left join '.
  90.                 Config::DBPREF.'users as `from` on
  91.                     `from`.userid = messages.fromid left join '.
  92.                 Config::DBPREF.'users as `to` on
  93.                     `to`.userid = messages.toid where messages.'.$msg_uid.' = '.
  94.                     System::$user->T_users_userid.' and '.
  95.                     'deleted != messages.'.$msg_uid.' order by sendtime desc',10);
  96.     }
  97.  
  98.     /**
  99.      * Statisztika az üzenetekről
  100.      *
  101.      * Visszaadja asszociatív tömbben a belépett user üzeneteinek számát
  102.      * különböző kategóriákra vonatkozóan.
  103.      *
  104.      * <ul>
  105.      *    <li><b>unread:</b> Olvasatlan bejövő üzenetek száma</li>
  106.      *    <li><b>unreadout:</b> Olvasatlan kimenő üzenetek száma</li>
  107.      *    <li><b>inbox:</b> Összes bejövő üzenet</li>
  108.      *    <li><b>outbox:</b> Összes kimenő üzenet</li>
  109.      *    <li><b>news:</b> Összes hír</li>
  110.      *    <li><b>unreadnews:</b> Utolsó olvasás óta írt hírek száma. </li>
  111.      * </ul>
  112.      *
  113.      * @return array 
  114.      */
  115.     public static function msgStat()
  116.     {
  117.         $uid = (int)System::$user->T_users_userid;
  118.         $time System::$user->newsreadtime;
  119.         $query mysql_query("
  120.             select
  121.                 sum(if(toid = $uid and readtime is null, 1, 0)) as unread,
  122.                 sum(if(fromid=$uid and readtime is null, 1, 0)) as unreadout,
  123.                 sum(if(toid=$uid, 1, 0)) as inbox,
  124.                 sum(if(fromid=$uid, 1, 0)) as outbox,
  125.                 sum(if(toid=0, 1, 0)) as news,
  126.                 sum(if(toid !=0 or timestampdiff(SECOND, sendtime, '$time') >= 0, 0, 1)) as unreadnews
  127.             from ".Config::DBPREF."messages where 
  128.                 ($uid in (toid, fromid) and deleted != $uid) or toid = 0
  129.         ");
  130.         $stat mysql_fetch_assoc($query);
  131.         foreach ($stat as &$item)
  132.         {
  133.             $item = (int)$item;
  134.         }
  135.         return $stat;
  136.     }
  137.  
  138.     /**
  139.      * Üzenet elküldésének kérése.
  140.      *
  141.      * @param string $toname Címzett felhazsnáló neve
  142.      * @param string $subject Üzenet tárgya
  143.      * @param string $body Üzenet tartalma
  144.      * @param bool $news True, ha hír ( Ekkor mindegy mi a $toname ), egyébként false
  145.      * @return bool Sikerült-e elküldeni az üzenetet
  146.      */
  147.     public static function sendRequest($toname$subject$body,$news=false)
  148.     {
  149.         $toname mysql_real_escape_string($toname);
  150.         if ($news)
  151.         {
  152.             $toid 0;
  153.         }
  154.         else
  155.         {
  156.             $toid ($result mysql_fetch_row(mysql_query(
  157.                 "select userid from ".Config::DBPREF."users where username = '$toname'"))) ? (int)$result[00;
  158.             if (!$toid)
  159.             {
  160.                 self::$errors['Nincs ilyen felhasználó!';
  161.                 return false;
  162.             }
  163.         }
  164.         if (trim($body== "")
  165.         {
  166.             self::$errors['Üres üzenetet nem küldhetsz!';
  167.         }
  168.  
  169.         if ($toid == System::$user->T_users_userid)
  170.         {
  171.             self::$errors['Magadnak nem küldhetsz üzenetet!';
  172.         }
  173.  
  174.         if (count(self::$errors)) return false;
  175.         self::send($toid$subject$body);
  176.         return true;
  177.     }
  178.  
  179.     /**
  180.      * Üzenet elküldése.
  181.      *
  182.      * @param int $toid Címzett id-je. Ha 0, akkor hír lesz.
  183.      * @param string $subject Üzenet tárgya
  184.      * @param string $body Üzenet tartalma
  185.      */
  186.     private static function send($toid$subject$body)
  187.     {
  188.         $query mysql_query("insert into ".
  189.                 Config::DBPREF."messages(`fromid`, `toid`, `subject`, `body`, `sendtime`)
  190.                 values (".System::$user->T_users_userid.",
  191.                 ".((int)$toid).",'$subject','$body','".System::getTimeStamp()."')");
  192.     }
  193.  
  194.     /**
  195.      * Hibaüzenetek tömbje
  196.      *
  197.      * @return array 
  198.      */
  199.     public static function errors()
  200.     {
  201.         return self::$errors;
  202.     }
  203.  
  204.     /**
  205.      * Üzenetek törlése.
  206.      *
  207.      * @param mixed $id Üzenet azonosítója, ha integer. Ha tömb, akkor több
  208.      *             azonosító tömbje.
  209.      * @param bool $del True, ha azonnal törölni kell a rekordot is. False,
  210.      *             ha csak akkor kell törölni a rekordot, ha már a másik fél
  211.      *             töröltnek jelölte az üzenetet.
  212.      *
  213.      */
  214.     public static function deleteMsgs($id,$del=false)
  215.     {
  216.         if(is_array($id))
  217.         {
  218.             array_walk($id,create_function('&$id','$id = (int)$id;'));
  219.             $id "'".implode("','",$id)."'";
  220.         }
  221.         else
  222.         {
  223.             $id = (int)$id;
  224.         }
  225.  
  226.         $pref Config::DBPREF;
  227.         $uid System::$user->T_users_userid;
  228.  
  229.         $sql =     "delete from ".$pref."messages where messageid in ($id";
  230.         if ($del)
  231.         {
  232.             mysql_query($sql);
  233.             return;
  234.         }
  235.         $sql .= " and ".$uid" in (toid, fromid) and
  236.                 deleted != 0 and deleted != ".$uid;
  237.         mysql_query($sql);
  238.  
  239.         $sql 
  240.             "update ".$pref."messages set
  241.                 deleted = ".$uid." where ".$uid." in (toid, fromid) and
  242.                 messageid in (".$id.")";
  243.         mysql_query($sql);
  244.     }
  245.  
  246.     /**
  247.      * Egy felhasználó összes üzenetének törlése, vagy töröltnek jelölése.
  248.      *
  249.      * @param int $userid Felhasználó azonosítója
  250.      */
  251.     public static function deleteMsgsOfUser($userid)
  252.     {
  253.         $uid = (int)$userid;
  254.  
  255.         $pref Config::DBPREF;
  256.  
  257.         $sql =     "delete from ".$pref."messages where  ";
  258.         $sql .= " and ".$uid" in (toid, fromid) and
  259.                 deleted != 0 and deleted != ".$uid;
  260.         mysql_query($sql);
  261.  
  262.         $sql =
  263.             "update ".$pref."messages set
  264.                 deleted = ".$uid." where ".$uid." in (toid, fromid)";
  265.         mysql_query($sql);
  266.     }
  267.  
  268.     /**
  269.      * Hírek törlése
  270.      *
  271.      * Csak admin, vagy tulajdonos törölhet hírt.
  272.      *
  273.      * @param mixed $id Hír azonosítója, vagy azonosítók tömbje.
  274.      */
  275.     public static function deleteNews($id)
  276.     
  277.         if (!System::$user->rank(array('admin','owner'))) return;
  278.         self::deleteMsgs($id,true);
  279.     }
  280.  
  281.     /**
  282.      *
  283.      * @param string $box Kimenő, vagy bejövö üzenet
  284.      *             {@link MESSAGES::INBOX}{@link MESSAGES::OUTBOX}
  285.      * @return string 
  286.      */
  287.     public static function url($box self::INBOX)
  288.     {
  289.         switch ($box)
  290.         {
  291.             case self::OUTBOX:
  292.                 $file Config::FILE_MESSAGES_OUTBOX;
  293.                 break;
  294.             case self::INBOX:
  295.                 $file Config::FILE_MESSAGES_INBOX;
  296.                 break;
  297.             case self::NEWS:
  298.                 $file Config::FILE_MESSAGES_NEWS;
  299.                 break;
  300.             default:
  301.                 $file Config::FILE_MESSAGES_INBOX;
  302.         }
  303.         return System::getSitedir().$file;
  304.     }
  305.  
  306.     /**
  307.      * Bejövő üzenetek url-je
  308.      *
  309.      * @return string 
  310.      */
  311.     public static function inboxUrl()
  312.     {
  313.         return self::url(Messages::INBOX);
  314.     }
  315.  
  316.  
  317.     /**
  318.      * Kimenő üzenetek url-je
  319.      *
  320.      * @return string 
  321.      */
  322.     public static function outboxUrl()
  323.     {
  324.         return self::url(Messages::OUTBOX);
  325.     }
  326.  
  327.     /**
  328.      * Hírek listájának url-je
  329.      *
  330.      * @return string 
  331.      */
  332.     public static function newsUrl()
  333.     {
  334.         return self::url(Messages::NEWS);
  335.     }
  336. }
  337. ?>

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