Advertisement
Guest User

Untitled

a guest
Apr 30th, 2014
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 24.40 KB | None | 0 0
  1. <?php
  2.  
  3. /*
  4.   @author     : Surdeanu Mihai ;
  5.   @date       : 8 august 2012 ;
  6.   @version    : 1.1.1 ;
  7.   @mybb       : compatibilitate cu MyBB 1.6 (orice versiuni) ;
  8.   @description: Modificare permite introducerea unui sistem de invitatii pe forumul tau!
  9.   @homepage   : http://mybb.ro ! Te rugam sa ne vizitezi pentru ca nu ai ce pierde!
  10.   @copyright  : Licenta speciala. Pentru mai multe detalii te rugam sa citesti sectiunea Licenta din cadrul fisierului
  11.   ReadME.pdf care poate fi gasit in acest pachet. Iti multumim pentru intelegere!
  12.   ====================================
  13.   Ultima modificare a codului : 08.08.2012 10:59
  14.  */
  15.  
  16. class AISDevelop
  17. {
  18.     const AUTO_SEARCH_GROUPID = -1;
  19.     const DISPLAY_ORDER_END = -1;
  20.     const DISPLAY_ORDER_BEGIN = 1;
  21.    
  22.     // lista cu metode care au fost dezvoltate si pot fi folosite
  23.     protected $methods = array();
  24.     // setari implicite
  25.     protected $setting = array(
  26.         'DAY_SECONDS' => 86400,
  27.         'NR_OF_DECS' => 2,
  28.         'INV_EXPR_DAYS' => 7,
  29.         'TEMP_VERS' => '1600'
  30.     );
  31.     // lista de date pe care le verificam
  32.     protected $listchk = array(
  33.         'cid' => 'is_numeric',
  34.         'uid' => 'is_numeric',
  35.         'username' => 'is_string'
  36.     );
  37.  
  38.    
  39.     /**
  40.      * Constructorul implicit al acestei clase
  41.      **/
  42.     function __construct($methods = array())
  43.     {
  44.         // se adauga metodele pe care dezvoltatorul le va putea utiliza
  45.         $default = array(
  46.             'alterColumn',
  47.             'addTemplates', 'addSettings',
  48.             'addLog', 'removeLog',
  49.             'addInvitations', 'checkInvitations', 'checkInvitationSent', 'checkInvitationExpired',
  50.             'generateInvitation',
  51.             'parseBody',
  52.             'sendPM',
  53.             'truncNumber',
  54.             'versionChange'
  55.         );
  56.         $this->registerMethod($default);
  57.        
  58.         // se adauga metodele secundare
  59.         $this->registerMethod($methods);
  60.     }
  61.    
  62.     /**
  63.      * Toate functiile care se apeleaza trec prin aceasta metoda...
  64.      **/
  65.     public function __call($method, $args)
  66.     {
  67.         // verificam daca metoda se afla in lista noastra?!
  68.         if (in_array($method, $this->methods))
  69.             return call_user_method_array($method, $this, $args);
  70.         else
  71.             return false;
  72.     }
  73.    
  74.     /**
  75.      * Metoda seteaza o proprietate data pentru un membru
  76.      **/
  77.     public function __set($property, $value)
  78.     {
  79.         $this->setting[$property] = $value;
  80.     }
  81.    
  82.     /**
  83.      * Metoda inregistreaza noi functii care pot fi rulate de catre un
  84.      * plugin...
  85.      **/
  86.     private function registerMethod($method)
  87.     {
  88.         if (is_array($method))
  89.             $this->methods = array_merge($this->methods, $method);
  90.         else
  91.             $this->methods[] = $method;
  92.     }
  93.    
  94.     /**
  95.      * Metoda verifica ca o anumita valoare se aiba un anumit tip
  96.      **/
  97.     protected function checkType($type, $value)
  98.     {
  99.         // verificam daca tipul si valoarea sunt corecte
  100.         if (!isset($this->listchk[$type]) ||
  101.                 !call_user_func($this->listchk[$type], $value))
  102.             return false;
  103.         else
  104.             return true;
  105.     }
  106.    
  107.     /**
  108.      * Metoda primeste ca si argument un numar si returneaza numarul
  109.      * cu doar X zecimale.
  110.      **/
  111.     protected function truncNumber($number)
  112.     {
  113.         return number_format(floatval($number), $this->setting['NR_OF_DECS']);
  114.     }
  115.    
  116.     // DE AICI MAI JOS SUNT DEFINITE FUNCTIILE IMPLICITE
  117.    
  118.     /**
  119.      * Metoda altereaza sau insereaza daca nu exista o coloana intr-o
  120.      * tabela a bazei de date
  121.      **/
  122.     protected function alterColumn($table, $column, $data, $insert = false)
  123.     {
  124.         global $db;
  125.        
  126.         try {
  127.             if($db->field_exists($column, $table)) {
  128.                 // se face o trunchiere
  129.                 $db->write_query("
  130.                    ALTER TABLE `" . TABLE_PREFIX . "{$table}`
  131.                    CHANGE `{$column}` {$column}
  132.                    {$data};
  133.                ");
  134.             } else if($insert) {
  135.                 // daca nu exista se adauga in baza de date
  136.                 $db->write_query("
  137.                    ALTER TABLE `" . TABLE_PREFIX . "{$table}`
  138.                    ADD `{$column}` {$data};
  139.                ");
  140.             }
  141.             return true;
  142.         } catch(Exception $e) {
  143.             return false;
  144.         }
  145.     }
  146.    
  147.     /**
  148.      * Metoda insereaza un sablon in baza de date...
  149.      **/
  150.     protected function addTemplates($templates, $ids = false)
  151.     {
  152.     global $db;
  153.         // daca se insereaza id-uri pentru actualizari
  154.         if ($ids) {
  155.             if (!function_exists('advinvsys_get_templates'))
  156.                 return false;
  157.            
  158.             $temps = advinvsys_get_templates($templates);
  159.            
  160.             foreach ($temps as $template) {
  161.                 $insert = array(
  162.                     "title" => $template['title'],
  163.                     "template" => $db->escape_string($template['template']),
  164.                     "sid" => "-2",
  165.                     "version" => $this->setting['TEMP_VERS'],
  166.                     "status" => "",
  167.                     "dateline" => TIME_NOW
  168.                 );
  169.                 $db->insert_query("templates", $insert);
  170.             }
  171.            
  172.             return true;
  173.         } else if (is_array($templates)) {
  174.             foreach ($templates as $template) {
  175.                 $insert = array(
  176.                     "title" => 'advinvsys_' . $template['title'],
  177.                     "template" => $db->escape_string($template['template']),
  178.                     "sid" => "-2",
  179.                     "version" => $this->setting['TEMP_VERS'],
  180.                     "status" => "",
  181.                     "dateline" => TIME_NOW
  182.                 );
  183.                 $db->insert_query("templates", $insert);
  184.             }
  185.            
  186.             return true;
  187.         }
  188.        
  189.         // $templates trebuie neaparat sa fie vector...
  190.         return false;
  191.     }
  192.    
  193.     /**
  194.      * Metoda permite adaugarea unor setari in sistem...
  195.      */
  196.     protected function addSettings($module, $settings, $gid = -1, $disporder = 1)
  197.     {
  198.     global $db, $mybb;
  199.  
  200.         if (!is_array($settings))
  201.             return false;
  202.    
  203.         if ($disporder >= 0)
  204.             $position = $disporder;
  205.         else {
  206.             $select = ($gid == -1) ? ', gid' : '';
  207.             // se va cauta pozitia pe care facem afisarea
  208.             $query = $db->write_query("
  209.                SELECT MAX(disporder) AS disp {$select}
  210.                FROM " . TABLE_PREFIX . "settings
  211.                WHERE name LIKE 'advinvsys_setting_%'
  212.            ");
  213.             if ($row = $db->fetch_array($query)) {
  214.                 $position = (int)$row['disp'] + 1;
  215.                 $gid = ($gid == -1) ? (int)$row['gid'] : $gid;
  216.             } else {
  217.                 $position = 0;
  218.             }
  219.         }
  220.        
  221.         // se creaza un nume preferential pentru setare
  222.         if ($module == "")
  223.             $path = "";
  224.         else
  225.             $path = $module . "_";
  226.        
  227.         // se introduce fiecare setare in baza de date
  228.         foreach ($settings as $setting)
  229.         {
  230.             // daca setarea exista deja in baza de date atunci ea este updatata
  231.             if (array_key_exists('advinvsys_' . $path . $setting['name'], $mybb->settings)) {
  232.                 $update_setting = array(
  233.                     "title" => $db->escape_string($setting['title']),
  234.                     "description" => $db->escape_string($setting['description']),
  235.                     "optionscode" => $db->escape_string($setting['optionscode']),
  236.                     "value" => $db->escape_string($setting['value']),
  237.                     "disporder" => $position++
  238.                 );
  239.            
  240.             // se realizeaza procesul de actualizare
  241.             $db->update_query("settings", $update_setting,
  242.                 "name = 'advinvsys_" . $path . $db->escape_string($setting['name']) . "'");
  243.             } else {
  244.                 if ($gid == -1) {
  245.                     // cautam automat
  246.                     $query = $db->simple_select('settinggroups', 'gid',
  247.                         "name = 'advinvsys_group'", array('limit' => 1));
  248.                     if ($row = $db->fetch_array($query))
  249.                         $gid = (int)$row['gid'];
  250.                 }
  251.            
  252.                 // daca nu exista in baza de date atunci se insereaza setarea
  253.                 $insert_setting = array(
  254.                     "name" => 'advinvsys_' . $path . $db->escape_string($setting['name']),
  255.                     "title" => $db->escape_string($setting['title']),
  256.                     "description" => $db->escape_string($setting['description']),
  257.                     "optionscode" => $db->escape_string($setting['optionscode']),
  258.                     "value" => $db->escape_string($setting['value']),
  259.                     "disporder" => $position++,
  260.                     "gid" => (int)$gid,
  261.                 );
  262.            
  263.                 // se realizeaza procesul de inserare a unei setari in baza de date
  264.                 $db->insert_query("settings", $insert_setting);
  265.             }
  266.         }
  267.        
  268.         // se reconstruiesc toate setarile
  269.         rebuild_settings();
  270.     }
  271.    
  272.     /**
  273.      * Functia de mai jos introduce un log in sistem
  274.      **/
  275.     protected function addLog($type, $data, $user = 0, $now = false)
  276.     {
  277.         global $db;
  278.        
  279.         // se creaza randul care va fi introdus in baza de date
  280.         $log = array(
  281.             "uid" => intval($user),
  282.             "type" => $db->escape_string($type),
  283.             "data" => $db->escape_string($data),
  284.             "date" => TIME_NOW,
  285.         );
  286.  
  287.         // este adaugat acum log-ul in sistem?
  288.         if ($now)
  289.             return $db->insert_query('advinvsys_logs', $log);
  290.         else {
  291.             // inserarea nu se face la apelul functiei
  292.             // in acest fel creste viteza de executie scriptului
  293.             $db->shutdown_query("
  294.                INSERT INTO " . TABLE_PREFIX . "advinvsys_logs (`uid`,`type`,`data`,`date`)
  295.                VALUES('" . @implode("','", array_values($log)) . "')
  296.            ");
  297.         }
  298.     }
  299.  
  300.     /**
  301.      * Functia sterge toate jurnalele din sistem ce au id-urile specificate.
  302.      **/
  303.     protected function removeLog($ids = array(), $now = false)
  304.     {
  305.         global $db;
  306.        
  307.         // daca id-urile nu exista sau nu formeaza un vector
  308.         if (empty($ids) || !is_array($ids))
  309.             return false;
  310.  
  311.         // cand are loc stergerea propriu-zisa?!
  312.         if ($now)
  313.             $db->write_query("
  314.                DELETE FROM " . TABLE_PREFIX . "advinvsys_logs
  315.                WHERE lid IN (" . join(',', $ids) . ")
  316.            ");
  317.         else
  318.             $db->shutdown_query("
  319.                DELETE FROM " . TABLE_PREFIX . "advinvsys_logs
  320.                WHERE lid IN (" . join(',', $ids) . ")
  321.            ");
  322.  
  323.         return true;
  324.     }
  325.    
  326.     // Functia adauga sau ia un numar de invitatii pentru un utilizator primit
  327.     // ca si parametru. De asemenea ea adauga si un log in sistem (daca e cazul).
  328.     protected function addInvitations($type, $value, $number, $reset = false, $log = true, $now = false)
  329.     {
  330.         global $db, $lang, $plugins;
  331.        
  332.         // se fac cateva teste
  333.         if (!is_numeric($number) || floatval($number) == 0)
  334.             return false;
  335.  
  336.         // verificari amanuntite
  337.         if (!$this->checkType($type, $value))
  338.             return false;
  339.  
  340.         $plugins->run_hooks('advinvsys_invitations_do_add_start');
  341.  
  342.         // se trunchiaza numarul de invitatii
  343.         $nr = $this->truncNumber($number);
  344.         // se aduna sau se scade numarul de invitatii
  345.         $sign = (floatval($number) > 0) ? '+' : '-';
  346.  
  347.         // se reseteaza numarul de invitatii sau se adauga / scade acest numar?!
  348.         if ($reset)
  349.             $action = $nr;
  350.         else {
  351.             // care este actiunea?
  352.             $action = "invitations {$sign} " . abs($nr);
  353.         }
  354.  
  355.         // verificam care este numarul maxim de invitatii permise pe grup
  356.         $max_invites = -1; // numar infinit
  357.        
  358.         $query = $db->write_query("
  359.            SELECT g.max_invitations AS max
  360.            FROM " . TABLE_PREFIX . "usergroups g
  361.            LEFT JOIN " . TABLE_PREFIX . "users u ON (u.usergroup = g.gid)
  362.            WHERE {$type} = '" . $value . "' LIMIT 1
  363.        ");
  364.  
  365.         if ($row === $db->fetch_array($query))
  366.             $max_invites = $this->truncNumber($row['max']);
  367.  
  368.         $set = '';
  369.        
  370.         // in functie de baza de date se fac prelucrari
  371.         switch($db->type)
  372.         {
  373.             case "sqlite":
  374.                 if ($max_invites >= 0)
  375.                     $set = "MIN(MAX(0, $action), $max_invites)";
  376.                 else
  377.                     $set = "MIN(0, $action)";
  378.                 break;
  379.             default:
  380.                 if ($max_invites >= 0)
  381.                     $set = "LEAST(GREATEST(0, $action), $max_invites)";
  382.                 else
  383.                     $set = "GREATEST(0, $action)";
  384.         }
  385.  
  386.         // se introduce acum in sistem?
  387.         if ($now) {
  388.             // ne asiguram ca numarul de invitatii este intre marginile stabilite
  389.             $db->write_query("
  390.                UPDATE " . TABLE_PREFIX . "users
  391.                SET invitations = {$set}
  392.                WHERE {$type} = '" . $value . "'"
  393.             );
  394.         } else {
  395.             // se va executa mai tarziu
  396.             $db->shutdown_query(
  397.                 "UPDATE " . TABLE_PREFIX . "users
  398.                SET invitations = {$set}
  399.                WHERE {$type} = '" . $value . "'"
  400.             );
  401.         }
  402.  
  403.         // se scrie un log in sistem?
  404.         if ($log) {
  405.             // se incarca fisierul de limba
  406.             $lang->load("advinvsys");
  407.  
  408.             // i s-au luat sau a primit invitatii
  409.             if ($sign == '+')
  410.                 $data = $lang->sprintf($lang->advinvsys_income_log0,
  411.                     "{$type} = {$value}",
  412.                     $lang->advinvsys_income_log0_r,
  413.                     abs($nr)
  414.                 );
  415.             else
  416.                 $data = $lang->sprintf($lang->advinvsys_income_log0,
  417.                     "{$type} = {$value}",
  418.                     $lang->advinvsys_income_log0_t,
  419.                     abs($nr)
  420.                 );
  421.  
  422.             // se adauga log-ul
  423.             $this->addLog($lang->advinvsys_income_logt, $data, 0);
  424.         }
  425.  
  426.         $plugins->run_hooks('advinvsys_invitations_do_add_end');
  427.  
  428.         // se returneaza raspunsul "true"
  429.         return true;
  430.     }
  431.  
  432.     // Functia verifica daca o anumita persoana are un anumit numar de invitatii
  433.     // Daca are functia va returna numarul de invitatii pe care le are, altfel
  434.     // va returna "false"
  435.     protected function checkInvitations($type, $value, $amount)
  436.     {
  437.         global $db, $plugins;
  438.      
  439.         // daca nu e valoare numerica
  440.         if (!is_numeric($amount))
  441.             return false;
  442.    
  443.         // verificari amanuntite
  444.         if (!$this->checkType($type, $value))
  445.             return false;  
  446.  
  447.         $plugins->run_hooks('advinvsys_invitations_do_check_start');
  448.  
  449.         // daca se cere determinarea numarului de invitatii ale utilizatorului curent
  450.         // nu vom mai face o interogare a bazei de date ci pur si simplu testam
  451.         // cu ceea ce avem deja...
  452.         if ($mybb->user[$type] == $value)
  453.             return ($mybb->user['invitations'] >= $this->truncNumber($amount))
  454.                 ? $mybb->user['invitations']
  455.                 : false;  
  456.            
  457.         // se realizeaza o noua interogare
  458.         $query = $db->simple_select('users', 'invitations', $type . ' = \'' . $value . '\'
  459.            AND invitations >= ' . $this->truncNumber($amount), array('limit' => 1));
  460.  
  461.         $plugins->run_hooks('advinvsys_invitations_do_check_end');
  462.  
  463.         if ($row = $db->fetch_array($query))
  464.             return $this->truncNumber($row['invitations']);
  465.          else
  466.             return false;
  467.     }
  468.    
  469.     // Functia verifica daca nu cumva s-a trimis deja o invitatie catre un anumit
  470.     // email. In acest fel se evita trimiterea a doua sau mai multe invitatii pe
  471.     // aceeasi adresa de email!
  472.     protected function checkInvitationSent($type, $value)
  473.     {
  474.         global $db, $mybb;
  475.        
  476.         // verificari amanuntite
  477.         if (!$this->checkType($type, $value))
  478.             return false;
  479.  
  480.         // dupa cate zile o invitatie este considerata expirata?
  481.         $expdays = (is_numeric($mybb->settings['advinvsys_setting_dateexpr']))
  482.             ? abs($mybb->settings['advinvsys_setting_dateexpr'])
  483.             : $this->setting['INV_EXPR_DAYS'];
  484.         $expr = $expdays * intval($this->setting['DAY_SECONDS']);
  485.  
  486.         $query = $db->simple_select('advinvsys_codes', 'cid', 'date > ' .
  487.             intval(TIME_NOW - $expr) . ' AND ' . $type . ' = \'' . $value . '\'',
  488.             array('limit' => 1));
  489.  
  490.         return ($db->num_rows($query) == 1) ? true : false;
  491.     }
  492.    
  493.     // Functia verifica daca exista invitatii expirate si le sterge din baza,
  494.     // acordand credite (invitatii) celor care le-au creat
  495.     protected function checkInvitationExpired()
  496.     {
  497.         global $db, $mybb, $plugins;
  498.        
  499.         // dupa cate zile o invitatie este considerata expirata?
  500.         $expdays = (is_numeric($mybb->settings['advinvsys_setting_dateexpr']))
  501.             ? abs($mybb->settings['advinvsys_setting_dateexpr'])
  502.             : $this->setting['INV_EXPR_DAYS'];
  503.         $expr = $expdays * intval($this->setting['DAY_SECONDS']);
  504.  
  505.         $limit = 50; // se va putea schimba printr-o modificare
  506.  
  507.         $this->plugins->run_hooks('advinvsys_invitations_do_expire_start');
  508.  
  509.         $query = $db->simple_select('advinvsys_codes', 'cid,did', 'date <= ' .
  510.             intval(TIME_NOW - $expr), array('limit' => $limit));
  511.  
  512.         $cids = array();
  513.         while ($row = $db->fetch_array($query)) {
  514.             array_push($cids, $row['cid']);
  515.  
  516.             // o primeste doar daca e utilizator si setarea e coresp.
  517.             if ($mybb->settings['advinvsys_setting_giveexpr'] == 1 &&
  518.                     intval($row['did']) > 0) {
  519.  
  520.                 $plugins->run_hooks('advinvsys_invitations_do_expire_middle');
  521.  
  522.                 // utilizatorul care a trimis invitatia o va primi inapoi
  523.                 $this->addInvitations('uid', $row['did'], 1, false, false);
  524.             }
  525.         }
  526.  
  527.         $plugins->run_hooks('advinvsys_invitations_do_expire_end');
  528.  
  529.         // verificam daca exista invitatii de sters
  530.         if (count($cids) > 0) {
  531.             // se sterg toate intrarile
  532.             $db->delete_query('advinvsys_codes',
  533.                 'cid IN (' . implode(',', $cids) . ')');
  534.         }
  535.     }
  536.    
  537.     /**
  538.      * Functia urmatoare are rolul de a genera o invitatie pentru cineva...
  539.      **/
  540.     protected function generateInvitation($uid = 0, $email = '', $save_to_db = false, $crypt = '')
  541.     {
  542.         global $db, $plugins;
  543.        
  544.         // sunt incluse si cateva caractere speciale
  545.         $length = mt_rand(1, 10);
  546.  
  547.         // caractere speciale
  548.         $chars = '!@#$%^&*()';
  549.         $size = strlen($chars);
  550.  
  551.         $string = '';
  552.         // se creaza string-ul aditional
  553.         for ($i = 0; $i < $length; ++$i)
  554.             $string .= $chars[rand(0, $size - 1)];
  555.  
  556.         // cheia finala
  557.         if ($crypt == '' || !function_exists($crypt))
  558.             $key = md5(TIME_NOW . mt_rand(10000, 99999) . $string);
  559.         else
  560.             $key = call_user_func($crypt, TIME_NOW . mt_rand(10000, 99999) . $string);
  561.  
  562.         $plugins->run_hooks('advinvsys_invitations_do_generate');
  563.  
  564.         // realizam si o salvare a invitatiei in baza de date?
  565.         if ($save_to_db) {
  566.             // ce se va introduce in baza de date?
  567.             $insert_array = array(
  568.                 'did' => intval($uid),
  569.                 'code' => $key,
  570.                 'date' => TIME_NOW
  571.             );
  572.            
  573.             // adresa de email e buna?
  574.             if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL))
  575.                 $insert_array['email'] = '';
  576.             else
  577.                 $insert_array['email'] = $email;
  578.  
  579.             // se introduce invitatia in baza de date
  580.             $id = $db->insert_query('advinvsys_codes', $insert_array);
  581.         }
  582.  
  583.         // se returneaza rezultatul cryptat
  584.         return $key;
  585.     }
  586.    
  587.     /**
  588.      * Functia parseaza un mesaj ce urmeaza a fi trimis prin email!
  589.      **/
  590.     function parseBody($text, $key, $message = '')
  591.     {
  592.         global $mybb, $plugins;
  593.  
  594.         // ce inlocuiri vom efectua?
  595.         $replaces = array(
  596.             '{INVITER_USERNAME}' => $mybb->user['username'],
  597.             '{INVITATION_CODE}' => $key,
  598.             '{REGISTRATION_URL}' => $mybb->settings['bburl'] . '/member.php?action=register&code=' . $key,
  599.             '{BOARD_URL}' => $mybb->settings['bburl'],
  600.             '{BOARD_NAME}' => $mybb->settings['bbname'],
  601.             '{USER_MESSAGE}' => $message
  602.         );
  603.  
  604.         $replaces = $plugins->run_hooks('advinvsys_parsemail_do_replace', $replaces);
  605.  
  606.         // se fac inlocuirile
  607.         foreach ($replaces as $key => $value)
  608.             $text = str_replace($key, $value, $text);
  609.  
  610.         // se returneaza varianta finala a text-ului
  611.         return $text;
  612.     }
  613.    
  614.     /**
  615.      * Metoda permite verificarea existentei unui plugin in cadrul unui forum
  616.      **/
  617.     function isInstalled($plugin)
  618.     {
  619.         global $db;
  620.        
  621.         $funcname = $plugin . '_settings';
  622.         if ($db->table_exists($funcname)) {
  623.             return true;
  624.         } else {
  625.             return false;
  626.         }
  627.     }
  628.    
  629.     /**
  630.      * Functia permite realizarea schimbarii unei versiuni a modificarii...
  631.      **/
  632.     protected function versionChange($ais, $php)
  633.     {
  634.         try {
  635.             $file = fopen(MYBB_ROOT . 'inc/plugins/advinvsys/system_version.php', 'w');
  636.             // ce se va scrie in fisier?
  637.             $data = "<?php\nif (!defined('IN_MYBB'))\n\tdie('This file cannot be accessed directly.');\ndefine('AIS_VERSION', '{$ais}');\ndefine('AIS_MIN_PHP', '{$php}');\n?>";
  638.             // se scrie efectiv in fisier
  639.             fwrite($file, $data);
  640.             // se inchide fisierul
  641.             fclose($file);
  642.             // daca s-a putut scrie atunci se intoarce "true"
  643.             return true;
  644.         } catch (Exception $e) {
  645.             // la aparitia unei erori se intoarce "false"
  646.             return false;
  647.         }
  648.     }
  649.    
  650.     /**
  651.      * Prin intermediul acestei functii se poate trimite un mesaj privat
  652.      * unui utilizator de pe forum.
  653.      **/
  654.     private function sendPM($pm, $fromid = 0)
  655.     {
  656.         global $db, $lang, $mybb;
  657.        
  658.         if ($mybb->settings['enablepms'] == 0)
  659.             return false;
  660.  
  661.         if (!is_array($pm))
  662.             return false;
  663.  
  664.         if (!$pm['subject'] || !$pm['message'] || !$pm['touid'] || !$pm['receivepms'])
  665.             return false;
  666.  
  667.         // se incarca fisierul de limba cu mesaje
  668.         $lang->load('messages');
  669.  
  670.         // se include datahandler-ul necesar trimiterii unui mesaj privat
  671.         require_once MYBB_ROOT . "inc/datahandlers/pm.php";
  672.         $pmhandler = new PMDataHandler();
  673.  
  674.         $subject = $pm['subject'];
  675.         $message = $pm['message'];
  676.         $toid = $pm['touid'];
  677.  
  678.         if (is_array($toid))
  679.             $recipients_to = $toid;
  680.         else
  681.             $recipients_to = array($toid);
  682.  
  683.         $recipients_bcc = array();
  684.  
  685.         if (intval($fromid) == 0)
  686.             $fromid = intval($mybb->user['uid']);
  687.         elseif (intval($fromid) < 0)
  688.             $fromid = 0;
  689.  
  690.         $pm = array(
  691.             "subject" => $subject,
  692.             "message" => $message,
  693.             "icon" => -1,
  694.             "fromid" => $fromid,
  695.             "toid" => $recipients_to,
  696.             "bccid" => $recipients_bcc,
  697.             "do" => '',
  698.             "pmid" => ''
  699.         );
  700.  
  701.         $pm['options'] = array(
  702.             "signature" => 0,
  703.             "disablesmilies" => 0,
  704.             "savecopy" => 0,
  705.             "readreceipt" => 0
  706.         );
  707.  
  708.         $pm['saveasdraft'] = 0;
  709.         $pmhandler->admin_override = 1;
  710.         $pmhandler->set_data($pm);
  711.  
  712.         if ($pmhandler->validate_pm()) {
  713.             $pmhandler->insert_pm();
  714.         } else {
  715.             return false;
  716.         }
  717.         return true;
  718.     }
  719. }
  720. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement