Guest User

Line87

a guest
Aug 7th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 119.65 KB | None | 0 0
  1. <?php
  2.  
  3. class pssys
  4.   {
  5.  
  6.   var $ipsclass;
  7.  
  8.   var $__PS_SIGNATURE_  ='VladMih PaySys';
  9.   var $__PS_VERSION_    ='1.0.0';
  10.   var $__PS_USER_       ='fx-vladmih.ru';
  11.   var $__PS_DISTRIBUTOR_=''; //дистрибьютор
  12.  
  13.  
  14.     function pssys()
  15.         {
  16.             global $ipsclass;          
  17.             $this->ipsclass=& $ipsclass;
  18.            
  19.             define('__PSSYS_LOAD',1);
  20.            
  21.             //==========================================
  22.             //Отладка
  23.             //==========================================
  24.             //error_reporting(E_ALL);
  25.            
  26.                        
  27.             //==========================================
  28.             //Получаем путь до модуля установки
  29.             //==========================================
  30.             $this->Path=DirName(RealPath(__FILE__));
  31.            
  32.             if (!$this->ModIsInstall() && file_exists($this->Path."/install/install.php"))
  33.                 {
  34.                     require_once($this->Path."/install/install.php");
  35.                     $this->install=new pssys_install;
  36.                 }
  37.                
  38.             $this->PsInit();
  39.            
  40.         }
  41.    
  42.     function init()
  43.         {
  44.             //Заглушка для совместимости с 1.3.1 alpha 4
  45.         }    
  46.        
  47.     function PsInit()
  48.         {              
  49.             if (!$this->ModIsEnable()) return;
  50.            
  51.             //==========================================
  52.             //Подключаем smarty
  53.             //==========================================
  54.             require_once($this->Path."/smarty/class.Smarty.php");
  55.             $this->smarty=new Smarty();
  56.                        
  57.             $this->smarty->compile_check = true;                    //проверять изменения в шаблонах
  58.             $this->smarty->debugging = 0;                           //отключить режим дебага
  59.             $this->smarty->template_dir = $this->Path."/template";  //директория шаблона
  60.             $this->smarty->compile_dir = $this->Path."/tmp";            //директория для откомпилированных шаблонов
  61.        
  62.             //==========================================
  63.             //Загрузка основных настроек из БД
  64.             //==========================================
  65.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."paysys WHERE name='settings'");
  66.             $row=$this->ipsclass->DB->fetch_row();         
  67.             $this->Settings=unserialize($row['data']);         
  68.             $this->Settings['Currency']= base64_decode($this->Settings['Currency']);
  69.  
  70.             //==========================================
  71.             //передача требуемых переменных в шаблон
  72.             //==========================================
  73.             $this->smarty->assign('___Currency', $this->Settings['Currency']);
  74.  
  75.             //==========================================
  76.             //Инициализация кнопки
  77.             //==========================================
  78.             $this->openerlink=$this->smarty->fetch('memberbar.tpl');
  79.            
  80.             //==========================================
  81.             //Загрузка настроек рефсистемы из БД
  82.             //==========================================            
  83.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."paysys WHERE name='refsys' ORDER BY id DESC");
  84.             $row=$this->ipsclass->DB->fetch_row();
  85.             $row['data']=unserialize($row['data']);
  86.  
  87.             $this->RefSys->RefLevels= base64_decode($row['data']['reflevels']);
  88.             $this->RefSys->WriteDate= $row['data']['record_time'];
  89.  
  90.         }
  91.  
  92.     function AutoRun()
  93.         {
  94.             if (!$this->ModIsEnable()) return;
  95.            
  96.             define('__PSSYS_AUTORUN',1);
  97.             //==========================================
  98.             //Нужно для нормальной алгебры
  99.             //==========================================
  100.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  101.            
  102.             if (!$this->ipsclass->member['id'])
  103.             {
  104.                 $this->ipsclass->load_template('skin_global');
  105.                 $this->ipsclass->print->pop_up_window( "Ошибка доступа", "Для доступа к панели требуется авторизация на форуме");
  106.                 return;
  107.             }
  108.  
  109.            
  110.             $this->smarty->assign('___baseurl', $this->ipsclass->base_url);
  111.             $this->smarty->assign('is_mod', $this->ipsclass->member['is_mod']);
  112.             $this->smarty->assign('is_adm', ($this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group'])?1:0);
  113.            
  114.             if ($this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group'])
  115.                 {
  116.                     $this->ipsclass->DB->query("SELECT COUNT(*) as cnt FROM ".SQL_PREFIX."pay_history WHERE type='withdrawal_r' ORDER BY id");
  117.                     $row=$this->ipsclass->DB->fetch_row();
  118.                     $this->smarty->assign('wr', intval($row['cnt']));
  119.                    
  120.                 }
  121.            
  122.             $out=$this->RenderCopyright();
  123.            
  124.             switch ($this->ipsclass->input['code'])
  125.               {
  126.                   case 'showp':
  127.                     $this->ShowPenalty();
  128.                     break;
  129.                   case 'showh':
  130.                     $this->ShowHistory();
  131.                     break;
  132.                   case 'showrefs':
  133.                     $this->ShowReferals();
  134.                     break;
  135.                   case 'cashout':
  136.                     $this->Cashout();
  137.                     break;
  138.                   case 'adm':
  139.                     $this->Adm_Start();
  140.                     break;
  141.                   case 'mod':
  142.                     $this->Mod_Start();
  143.                     break;
  144.                   case 'test':
  145.                     $this->test();
  146.                     break;
  147.                   default:
  148.                     $this->LoadAccount();                  
  149.               }
  150.                          
  151.              
  152.              $out.=$this->smarty->fetch('main.tpl');
  153.            
  154.              $out.=$this->RenderCopyright2();
  155.                        
  156.              $this->ipsclass->load_template('skin_global');
  157.              $this->ipsclass->print->pop_up_window( "IPB PaySys::".$this->smarty->_smarty_vars["capture"]["title"], $out);
  158.         }
  159.  
  160.     function ModIsInstall()
  161.         {
  162.             if (file_exists($this->Path."/install_lock.php"))
  163.                 {
  164.                     return 1;
  165.                 }
  166.         }
  167.        
  168.        
  169.     function ModIsEnable()
  170.         {
  171.             if (!$this->ModIsInstall() || !defined('__PSSYS_LOAD')) return 0;
  172.             return 1;              
  173.         }
  174.        
  175.     function AddLogLine($line=array())
  176.         {
  177.             if (!$this->ModIsEnable()) return;
  178.            
  179.             $this->ipsclass->DB->do_insert("pay_history",$line);
  180.         }
  181.      
  182.     function ShowReferals()
  183.         {
  184.             if (!$this->ModIsEnable()) return;
  185.            
  186.             if ($this->Settings['RefEnable'])   $this->smarty->assign('reflevels', split(",", $this->RefSys->RefLevels));
  187.            
  188.             $this->smarty->assign('uid', $this->ipsclass->member['id']);
  189.             $this->smarty->assign('referals', $this->GetAllReferals());
  190.             $this->smarty->assign('___Data', $this->smarty->fetch('showrefs.tpl'));
  191.         }  
  192.        
  193.        
  194.            
  195.     function GetAllReferals()
  196.         {
  197.             if (!$this->ModIsEnable()) return;
  198.             $i=1;  
  199.             $ids=$this->ipsclass->member['id'];
  200.             while (1)
  201.                 {
  202.                     $refs[$i]=$this->GetReferals($ids);
  203.                        
  204.                     if (sizeof($refs[$i]))
  205.                         {                          
  206.                             $ids=implode(",",$refs[$i]);
  207.                            
  208.                             foreach ($refs[$i] as $key=>$ref)  
  209.                             {
  210.                                 $refs[$i][$key]=array();
  211.                                 $refs[$i][$key]=$this->GetMemberInfoById($ref);
  212.  
  213.                                 $refs[$i][$key]['joined']=date("j.n.Y, G:i",$refs[$i][$key]['joined']);
  214.  
  215.                             }
  216.                            
  217.                             $i++;
  218.                         }
  219.                     else
  220.                         {
  221.                             unset($refs[$i]);
  222.                             break;                 
  223.                         }
  224.                 }
  225.            
  226.                
  227.             return $refs;
  228.         }
  229.        
  230.        
  231.     function GetReferals($uid=0)
  232.         {      
  233.             if (!$this->ModIsEnable()) return;
  234.                
  235.             $q=$this->ipsclass->DB->query("SELECT id FROM ".SQL_PREFIX."members WHERE pay_referer IN($uid)");
  236.                 while ($row=$this->ipsclass->DB->fetch_row($q))
  237.                     {
  238.                         $refs[]=$row['id'];
  239.                     }
  240.             return $refs;
  241.         }
  242.        
  243.     function Cashout()
  244.         {
  245.             if (!$this->ModIsEnable()) return;
  246.            
  247.             $cash=$this->GetMemberCash();
  248.            
  249.            
  250.             if (isset($this->ipsclass->input['spend']))
  251.                 {
  252.                     if ($this->ipsclass->input['to']=="to_user" && !$this->Settings['TransactionEnable']) $error['notrans']=1;
  253.                    
  254.                     if (($cash['balans']<$this->Settings['MinCashOut'] || $cash['balans']<floatval($this->ipsclass->input['spend'])) && $this->ipsclass->input['to']!="to_user")
  255.                         {                            
  256.                              $error['mincashout']=1;
  257.                         }
  258.                     elseif (
  259.                                 (
  260.                                 $cash['balans']<$this->Settings['MinSpend'] ||
  261.                                 (floatval($this->ipsclass->input['spend']+$this->ipsclass->input['spend']*$this->Settings['TransactionCom']/100)>$cash['balans'])                  
  262.                                 )
  263.                                 && $this->ipsclass->input['to']=="to_user")
  264.                         {
  265.                              $error['minspend']=1;
  266.                         }
  267.                     elseif (floatval($this->ipsclass->input['spend'])<$this->Settings['MinCashOut'] && $this->ipsclass->input['to']!="to_user")
  268.                         {
  269.                             $error['nomincashout']=1;
  270.                         }
  271.                     elseif (floatval($this->ipsclass->input['spend'])<$this->Settings['MinSpend'] && $this->ipsclass->input['to']=="to_user")
  272.                         {
  273.                             $error['nominspend']=1;
  274.                         }
  275.                        
  276.                        
  277.                     if (!preg_match("/^[a-zA-Z0-9]{1,254}$/", $this->ipsclass->input['acc']))
  278.                         {
  279.                              $error['acc']=1;
  280.                         }                  
  281.                     elseif ($this->ipsclass->input['to']=="to_user" && $this->ipsclass->member['id']==intval($this->ipsclass->input['acc']))
  282.                         {
  283.                             $error['acce']=1;
  284.                         }
  285.                        
  286.                    
  287.                        
  288.                     if ($error)
  289.                         {
  290.                             $this->smarty->assign('settings', $this->Settings);
  291.                             $this->smarty->assign('errors', $error);
  292.                         }
  293.                     else
  294.                         {      
  295.                             $data=array("value"=>floatval($this->ipsclass->input['spend']),"comment"=>base64_encode($this->ipsclass->input['comments']));
  296.                             if ($this->ipsclass->input['to']!="to_user")
  297.                                 {
  298.                                     $data['acc_type']=base64_encode($this->ipsclass->input['to']);
  299.                                     $data['acc']=base64_encode($this->ipsclass->input['acc']);
  300.                                 }
  301.                             $line=array(
  302.                            
  303.                                         "date"      =>      mktime(),
  304.                                         "user"      =>      $this->ipsclass->member['id'],
  305.                                         "to_user"   =>      $this->ipsclass->input['to']=="to_user" ? intval($this->ipsclass->input['acc']) : $this->ipsclass->member['id'],
  306.                                         "type"      =>      $this->ipsclass->input['to']=="to_user" ? "spend" : "withdrawal_r",
  307.                                         "data"      =>      serialize($data),
  308.                                         "post"      =>      0,                         
  309.                             );
  310.                            
  311.                             $this->AddLogLine($line);
  312.  
  313.                             if (floatval($this->Settings['TransactionCom']) && $this->ipsclass->input['to']=="to_user")
  314.                                 {
  315.                                     $data=array("value"=>floatval($this->ipsclass->input['spend']*$this->Settings['TransactionCom']/100),"comment"=>base64_encode("Комиссия за перевод"));
  316.                                     $line=array(
  317.                                    
  318.                                                 "date"      =>      mktime(),
  319.                                                 "user"      =>      0,
  320.                                                 "to_user"   =>      $this->ipsclass->member['id'],
  321.                                                 "type"      =>      "spend_com",
  322.                                                 "data"      =>      serialize($data),
  323.                                                 "post"      =>      0,                         
  324.                                     );
  325.                                    
  326.                                     $this->AddLogLine($line);
  327.                                 }
  328.                                
  329.                             header("Location: {$this->ipsclass->base_url}act=ps&code=cashout&ok");
  330.                             exit();    
  331.                         }
  332.                 }
  333.  
  334.             if (isset($this->ipsclass->input['ok'])) $this->smarty->assign('ok', 1);
  335.             $this->smarty->assign('___Data', $this->smarty->fetch('cashout.tpl'));
  336.         }
  337.        
  338.        
  339.     function RenderCopyright()
  340.         {
  341.             $out=<<<HTML
  342.             <table width="100%" bgcolor="#FFFFFF" style="border-bottom:1px solid #000000">
  343.                 <tr>
  344.                     <td width="50%">
  345.                         <font style="font-size:10px;"><b>IPB PaySys v2.0.0</b>
  346.                     </td>
  347.                     <td align="right">
  348.                         <font style="font-size:10px;"><b>AllForums</b>
  349.                     </td>
  350.                 </tr>          
  351.             </table>
  352. HTML;
  353.             return $out;
  354.         }
  355.        
  356.     function RenderCopyright2()
  357.         {
  358.             $out=<<<HTML
  359.             <table width="100%" bgcolor="#FFFFFF" style="border-top:1px solid #000000">
  360.                 <tr>
  361.                     <td align="center" style="padding-left:45px;">
  362.                     <font style="font-size:9px;">
  363.                         <b>License #00-000-0001 (fx-vladmih.ru)</b><br>                    
  364.                     </td>
  365.                 </tr>          
  366.             </table>
  367. HTML;
  368.             return $out;
  369.         }
  370.        
  371.     function LoadAccount()
  372.         {
  373.             if (!$this->ModIsEnable()) return;
  374.            
  375.             $this->smarty->assign('___MemberCash', $this->GetMemberCash());
  376.             $this->smarty->assign('___Data', $this->smarty->fetch('account.tpl'));
  377.         }
  378.        
  379.     function GetMemberCash($uid=0)
  380.         {
  381.             if (!$this->ModIsEnable()) return;
  382.            
  383.             if (!$uid) $uid=$this->ipsclass->member['id'];
  384.             $this->ipsclass->DB->query("SELECT pay_cash FROM ".SQL_PREFIX."members WHERE id=$uid");
  385.             $row=$this->ipsclass->DB->fetch_row();
  386.            
  387.             $ret['paid']=round($row['pay_cash'],3);
  388.            
  389.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history WHERE user=$uid OR to_user=$uid ORDER BY ID");
  390.             while ($row=$this->ipsclass->DB->fetch_row())
  391.                 {
  392.                     if ($row['type']=="spend" && $row['to_user']==$uid)
  393.                         {
  394.                             $row['data']=unserialize($row['data']);
  395.                             $ret['addition']=round($ret['addition']+$row['data']['value'],3);
  396.                         }
  397.                     elseif ($row['to_user']==$uid || ($row['type']=="spend" && $row['user']==$uid))
  398.                         {
  399.                             $row['data']=unserialize($row['data']);
  400.                             $ret[$row['type']]=round($ret[$row['type']]+$row['data']['value'],3);
  401.                         }
  402.                 }
  403.                
  404.             $this->ipsclass->DB->query("SELECT SUM(pay) as paid FROM ".SQL_PREFIX."posts WHERE author_id=$uid");
  405.             $row=$this->ipsclass->DB->fetch_row();
  406.             $ret['paid']=round($row['paid']+$ret['paid'],3);
  407.                
  408.            
  409.            
  410.             $ret['balans']=round($ret['paid']-$ret['penalty']-$ret['withdrawal']-$ret['withdrawal_r']+$ret['addition']-$ret['spend']-$ret['spend_com'],3);
  411.            
  412.             return $ret;
  413.            
  414.            
  415.         }  
  416.        
  417.        
  418.     function GetGroupNameById($id)
  419.         {
  420.             if (!$id) return 0;
  421.             $this->ipsclass->DB->query("SELECT g_title FROM ".SQL_PREFIX."groups WHERE g_id='$id'");
  422.             $row=$this->ipsclass->DB->fetch_row();
  423.             return $row['g_title'];
  424.         }
  425.        
  426.     function GetGroupIdByMemberId($id)
  427.         {
  428.             if (!$id) return 0;
  429.             $this->ipsclass->DB->query("SELECT mgroup FROM ".SQL_PREFIX."members WHERE id='$id'");
  430.             $row=$this->ipsclass->DB->fetch_row();
  431.             return $row['mgroup'];
  432.         }
  433.        
  434.     function GetMemberNameById($id)
  435.         {
  436.             if (!$id) return 0;
  437.             $this->ipsclass->DB->query("SELECT members_display_name FROM ".SQL_PREFIX."members WHERE id='$id'");
  438.             $row=$this->ipsclass->DB->fetch_row();
  439.             return $row['members_display_name'];
  440.         }
  441.        
  442.     function GetMemberInfoById($id)
  443.         {
  444.             if (!$id) return 0;
  445.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."members WHERE id='$id'");
  446.             $row=$this->ipsclass->DB->fetch_row();
  447.             return $row;
  448.         }
  449.        
  450.  
  451.     function ShowHistory()
  452.         {
  453.             if (!$this->ModIsEnable()) return;
  454.  
  455.             //адаптировать для просотра админами
  456.  
  457.             $uid=$this->ipsclass->member['id'];
  458.  
  459.            
  460.             /*******************************************************
  461.             *                   Постраничный вывод
  462.             *******************************************************/
  463.             $this->ipsclass->DB->query("SELECT COUNT(*) as cnt FROM ".SQL_PREFIX."pay_history WHERE (to_user=$uid OR (user=$uid AND type ='spend')) AND type!='penalty' AND ( data NOT LIKE '%s:5:\"value\";s:1:\"0\";s:6:\"value2\";N;%' OR data NOT LIKE '%s:5:\"value\";s:1:\"0\";s:6:\"value2\";s:1:\"0\";%'    OR (data NOT LIKE '%s:5:\"value\";s:1:\"0\";%' AND data NOT LIKE '%s:6:\"value2\";%'))");
  464.             $cnt=$this->ipsclass->DB->fetch_row();
  465.             $pager['per_page']=$this->Settings['RowCount'];
  466.  
  467.             $pager['from']= abs(intval($this->ipsclass->input['sp'])) ? abs(intval($this->ipsclass->input['sp'])-1)*$pager['per_page'] : 0;
  468.            
  469.             $pager['cur_page']=$pager['from']/$pager['per_page']+1;
  470.            
  471.             $pager['total']=$cnt['cnt'];
  472.             $pager['page_count']=ceil($pager['total']/$pager['per_page']);
  473.                
  474.             $this->smarty->assign("pager",$pager);
  475.             /*******************************************************/
  476.  
  477.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history  WHERE (to_user=$uid OR (user=$uid AND type ='spend')) AND type!='penalty' AND ( data NOT LIKE '%s:5:\"value\";s:1:\"0\";s:6:\"value2\";N;%' OR data NOT LIKE '%s:5:\"value\";s:1:\"0\";s:6:\"value2\";s:1:\"0\";%'  OR (data NOT LIKE '%s:5:\"value\";s:1:\"0\";%' AND data NOT LIKE '%s:6:\"value2\";%')) ORDER BY id DESC LIMIT {$pager['from']},{$this->Settings['RowCount']}");
  478.  
  479.             while ($row=$this->ipsclass->DB->fetch_row($q))
  480.                 {
  481.                     $row['data']=unserialize($row['data']);
  482.                     $row['data']['comment']=base64_decode($row['data']['comment']);
  483.                     $row['date']=date("j.n.Y, G:i",$row['date']);
  484.                     $row['data']['amount']  = round($row['data']['value'], 4);
  485.  
  486.                     switch ($row['type'])
  487.                         {
  488.                             case 'spend':
  489.                                 if($row['to_user'] == $uid)
  490.                                 {
  491.                                     $row['data']['descr']   ="Получен перевод со счета ". $this->GetMemberNameById($row['user']);
  492.                                     $row['data']['amount']  =round($row['data']['value'], 4);
  493.                                 }
  494.                                 else
  495.                                 {
  496.                                     $row['data']['descr']   ="Произведен перевод на счет ". $this->GetMemberNameById($row['to_user']);
  497.                                     $row['data']['amount']  =round(-$row['data']['value'], 4);
  498.                                 }
  499.                                 break;
  500.                             case 'spend_com':
  501.                                 $row['data']['descr']   ="";
  502.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  503.                                 break;
  504.                             case 'null_pay':
  505.                                 $row['data']['descr']   ="Омена оплаты";
  506.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  507.                                 break;
  508.                             case 'add_pay_for_post':
  509.                                 $row['data']['descr']   ="Оплата засчитана";
  510.                                 $row['data']['amount']  =round($row['data']['value'], 4);
  511.                                 break;
  512.                             case 'repay_post':
  513.                                 $row['data']['descr']   ="Перерасчет стоимости сообщения";
  514.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  515.                                 break;
  516.                             case 'del_post_on_del_topic':
  517.                                 $row['data']['descr']   ="Тема удалена";
  518.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  519.                                 break;
  520.                             case 'move_post_on_move_topic':
  521.                                 $row['data']['descr']   ="Перерасчет стоимости (тема перенесена)";
  522.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  523.                                 break;
  524.                             case 'split_topic':
  525.                                 $row['data']['descr']   ="Перерасчет стоимости (тема разделена)";
  526.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  527.                                 break;
  528.                             case 'union_post':
  529.                                 $row['data']['descr']   ="Перерасчет стоимости (объединение сообщений)";
  530.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  531.                                 break;
  532.                             case 'union_topic':
  533.                                 $row['data']['descr']   ="Перерасчет стоимости (объединение тем)";
  534.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  535.                                 break;
  536.                             case 'null_pay':
  537.                                 $row['data']['descr']   ="Омена оплаты";
  538.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  539.                                 break;
  540.                             case 'del_post':
  541.                                 $row['data']['descr']   ="Сообщение удалено";
  542.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  543.                                 break;
  544.                             case 'edit_post':
  545.                                 $row['data']['descr']   ="Перерасчет стоимости (сообщение изменено)";
  546.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  547.                                 break;
  548.                             case 'move_post':
  549.                                 $row['data']['descr']   ="Перерасчет стоимости (сообщение перенесено)";
  550.                                 $row['data']['amount']  =round($row['data']['value2']-$row['data']['value'], 4);
  551.                                 break;
  552.                             case 'ref_comp':
  553.                                 $row['data']['descr']   ="Реф. начисление (".$this->GetMemberNameById($row['user']).")";
  554.                                 $row['data']['amount']  =round($row['data']['value'], 4);
  555.                                 break;
  556.                             case 'change_ref_comp':
  557.                                 $row['data']['descr']   ="Изменение реф. начисления (".$this->GetMemberNameById($row['user']).")";
  558.                                 $row['data']['amount']  =round($row['data']['value'], 4);
  559.                                 break;
  560.                             case 'withdrawal_r':
  561.                                 $row['data']['descr']   ="Заказ выплаты";
  562.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  563.                                 break;
  564.                             case 'withdrawal':
  565.                                 $row['data']['descr']="Произведена выплата ".date("j.n.Y, G:i",$row['data']['update_date'])." на счет ".base64_decode($row['data']['acc_type']).":".base64_decode($row['data']['acc']). "<br>Исполнитель ".$this->GetMemberNameById($row['data']['by_user'])."<br>";
  566.                                 $row['data']['amount']  =round(-$row['data']['value'], 4);
  567.                                 break;}
  568.                     if($row['data']['amount'] >= 0)
  569.                     {
  570.                         $row['data']['color']  =  "#008000";
  571.                     }
  572.                     else
  573.                     {
  574.                         $row['data']['color']  =  "#FF0000";
  575.                     }
  576.  
  577.                     $this->smarty->append('lines', $row);
  578.                 }
  579.  
  580.             $this->smarty->assign('username', $this->GetMemberNameById($uid));
  581.             //$this->smarty->assign('___Data', $this->smarty->fetch('showp.tpl'));
  582.             $this->smarty->assign('___Data', $this->smarty->fetch('showh.tpl'));
  583.         }
  584.        
  585.     function ShowPenalty()
  586.         {
  587.             if (!$this->ModIsEnable()) return;
  588.            
  589.             $uid=$this->ipsclass->member['id'];
  590.             $this->smarty->assign("___url",$this->ipsclass->base_url."act=ps&code=showp");
  591.            
  592.             if (intval($this->ipsclass->input['uid']) && $this->ipsclass->member['is_mod'])
  593.                 {
  594.                     $uid=intval($this->ipsclass->input['uid']);
  595.                     if (    $this->ipsclass->member['mgroup']!=$this->ipsclass->vars['admin_group'] &&
  596.                             !$this->Settings['ModSeeOtherPenalty']
  597.                         ) $a="user=".$this->ipsclass->member['id']." AND ";
  598.                     $this->smarty->assign("___url",$this->ipsclass->base_url."act=ps&code=showp&uid=".intval($this->ipsclass->input['uid']));
  599.                 }
  600.  
  601.            
  602.             /*******************************************************
  603.             *                   Постраничный вывод
  604.             *******************************************************/
  605.             $this->ipsclass->DB->query("SELECT COUNT(*) as cnt FROM ".SQL_PREFIX."pay_history WHERE $a to_user=$uid AND type='penalty'");
  606.             $cnt=$this->ipsclass->DB->fetch_row();
  607.             $pager['per_page']=$this->Settings['RowCount'];
  608.                        
  609.             $pager['from']= abs(intval($this->ipsclass->input['sp'])) ? abs(intval($this->ipsclass->input['sp'])-1)*$pager['per_page'] : 0;
  610.            
  611.             $pager['cur_page']=$pager['from']/$pager['per_page']+1;
  612.            
  613.             $pager['total']=$cnt['cnt'];
  614.             $pager['page_count']=ceil($pager['total']/$pager['per_page']);
  615.                
  616.             $this->smarty->assign("pager",$pager);
  617.             /*******************************************************/
  618.  
  619.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history  WHERE $a to_user=$uid AND type='penalty' ORDER BY id LIMIT {$pager['from']},{$this->Settings['RowCount']}");
  620.            
  621.             while ($row=$this->ipsclass->DB->fetch_row($q))
  622.                 {
  623.                     $row['topic_name']=$this->GetTopicNameByPostId($row['post']);
  624.                     $row['topic_id']=$this->GetTopicIdByPostId($row['post']);
  625.                    
  626.                     $row['data']=unserialize($row['data']);
  627.                     $row['data']['comment']=base64_decode($row['data']['comment']);
  628.                    
  629.                     $row['user_name']=$this->GetMemberNameById($row['user']);
  630.                    
  631.                     $row['date']=date("j.n.Y, G:i",$row['date']);
  632.                    
  633.                     //==========================================
  634.                     //Имеет ли пользователь права на удаление штрафа.
  635.                     //==========================================
  636.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($row['post'])) && $row['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  637.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModCancelOtherPenalty']) ||          //или другой модератор, но модерам разрешено отменять другие штрафы                        
  638.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  639.                         )    
  640.                         {
  641.                             $row['Cancel']=1;
  642.                         }
  643.                    
  644.                     //==========================================
  645.                     //Имеет ли пользовател права на изменение штрафа.
  646.                     //==========================================
  647.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($row['post'])) && $row['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  648.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModEditOtherPenalty']) ||            //или другой модератор, но модерам разрешено редактировать другие штрафы                          
  649.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  650.                         )
  651.                         {
  652.                             $row['Edit']=1;
  653.                         }
  654.                        
  655.                     $this->smarty->append('pens', $row);
  656.                 }
  657.              
  658.             $this->smarty->assign('username', $this->GetMemberNameById($uid));
  659.             $this->smarty->assign('___Data', $this->smarty->fetch('showp.tpl'));
  660.         }
  661.        
  662.        
  663.     function Mod_ShowPenalty()
  664.         {
  665.             if (!$this->ModIsEnable()) return;
  666.            
  667.             $uid=$this->ipsclass->member['id'];
  668.             $this->smarty->assign("___url",$this->ipsclass->base_url."act=ps&code=mod&show=ph");
  669.             $this->smarty->assign("inmod",1);
  670.            
  671.             /*******************************************************
  672.             *                   Постраничный вывод
  673.             *******************************************************/
  674.             $this->ipsclass->DB->query("SELECT COUNT(*) as cnt FROM ".SQL_PREFIX."pay_history WHERE user={$this->ipsclass->member['id']} AND type='penalty'");
  675.             $cnt=$this->ipsclass->DB->fetch_row();
  676.             $pager['per_page']=$this->Settings['RowCount'];
  677.                        
  678.             $pager['from']= abs(intval($this->ipsclass->input['sp'])) ? abs(intval($this->ipsclass->input['sp'])-1)*$pager['per_page'] : 0;
  679.            
  680.             $pager['cur_page']=$pager['from']/$pager['per_page']+1;
  681.            
  682.             $pager['total']=$cnt['cnt'];
  683.             $pager['page_count']=ceil($pager['total']/$pager['per_page']);
  684.                
  685.             $this->smarty->assign("pager",$pager);
  686.             /*******************************************************/
  687.  
  688.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history  WHERE user={$this->ipsclass->member['id']} AND type='penalty' ORDER BY id LIMIT {$pager['from']},{$this->Settings['RowCount']}");
  689.            
  690.             while ($row=$this->ipsclass->DB->fetch_row($q))
  691.                 {
  692.                     $row['topic_name']=$this->GetTopicNameByPostId($row['post']);
  693.                     $row['topic_id']=$this->GetTopicIdByPostId($row['post']);
  694.                    
  695.                     $row['data']=unserialize($row['data']);
  696.                     $row['data']['comment']=base64_decode($row['data']['comment']);
  697.                    
  698.                     $row['user_name']=$this->GetMemberNameById($row['user']);
  699.                    
  700.                     $row['date']=date("j.n.Y, G:i",$row['date']);
  701.                    
  702.                     //==========================================
  703.                     //Имеет ли пользователь права на удаление штрафа.
  704.                     //==========================================
  705.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($row['post'])) && $row['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  706.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModCancelOtherPenalty']) ||          //или другой модератор, но модерам разрешено отменять другие штрафы                        
  707.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  708.                         )    
  709.                         {
  710.                             $row['Cancel']=1;
  711.                         }
  712.                    
  713.                     //==========================================
  714.                     //Имеет ли пользовател права на изменение штрафа.
  715.                     //==========================================
  716.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($row['post'])) && $row['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  717.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModEditOtherPenalty']) ||            //или другой модератор, но модерам разрешено редактировать другие штрафы                          
  718.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  719.                         )
  720.                         {
  721.                             $row['Edit']=1;
  722.                         }
  723.                        
  724.                     $this->smarty->append('pens', $row);
  725.                 }
  726.              
  727.             $this->smarty->assign('___Data', $this->smarty->fetch('showp.tpl'));
  728.         }
  729.        
  730.     function Mod_Start()
  731.         {  
  732.             if (!$this->ModIsEnable()) return;
  733.            
  734.             //==========================================
  735.             //Проверка - является ли пользователь админом.
  736.             //==========================================
  737.             if (!$this->ipsclass->member['is_mod'])
  738.               {
  739.                    $this->smarty->assign('___ERROR', "У Вас нет доступа к данной функции");
  740.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  741.                    return;     
  742.               }
  743.              
  744.             switch ($this->ipsclass->input['t'])
  745.             {
  746.                 case 'p':
  747.                     $this->Mod_SetPenalty();
  748.                     break;
  749.                 case 'ph':
  750.                     $this->Mod_ShowPenalty();
  751.                     break;
  752.                 case 'nulled':
  753.                     $this->Mod_ToNullPayForPost();
  754.                     break;
  755.                 case 'added':
  756.                     $this->Mod_AddPayForPost();
  757.                     break;
  758.                 case 'repay':
  759.                     $this->Mod_RePayForPost();
  760.                     break;
  761.                 case 'dp':
  762.                     $this->Mod_DeletePenalty();
  763.                     break;
  764.                 case 'ep':
  765.                     $this->Mod_EditPenalty();
  766.                     break;
  767.                 default:
  768.                    $this->smarty->assign('___ERROR', "Ошибка выполнения программы");
  769.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  770.                    return; 
  771.             }
  772.         }
  773.        
  774.        
  775.        
  776.     function Mod_ToNullPayForPost()
  777.         {
  778.             if (!$this->ModIsEnable()) return;
  779.                     //==========================================
  780.                     //Имеет ли пользователь права на модерирование раздела.
  781.                     //==========================================
  782.                     if  (   $this->IsModInForum($this->GetForumIdByPostId(intval($this->ipsclass->input['pid'])))  ||   //если просматривает модератор раздела
  783.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  784.                         )
  785.                             {
  786.                                 $this->ipsclass->DB->query("SELECT pay,author_id,post_date FROM ".SQL_PREFIX."posts WHERE pid=".intval($this->ipsclass->input['pid']));
  787.                                 $row=$this->ipsclass->DB->fetch_row();
  788.                                
  789.                                 if (floatval($row['pay']))
  790.                                     {
  791.                                         //==========================================
  792.                                         //Заносим информацию в историю
  793.                                         //==========================================
  794.                                         $line=array(
  795.                                                         "date"      =>  mktime(),
  796.                                                         "user"      =>  $this->ipsclass->member['id'],
  797.                                                         "to_user"   =>  $row['author_id'],
  798.                                                         "type"      =>  "null_pay",
  799.                                                         "data"      =>  serialize(array("value"=>$row['pay'])),
  800.                                                         "post"      =>  $row['post'],
  801.                                                     );
  802.                                         $this->AddLogLine($line);
  803.                                                    
  804.                                                    
  805.                                         $this->RefCharges(-$row['pay'],$row['author_id'],$row['post_date']);
  806.                                        
  807.                                         $this->ipsclass->DB->do_update("posts",array('pay'=>0),"pid=".intval($this->ipsclass->input['pid']));
  808.                                        
  809.                                        
  810.                                                
  811.                                        
  812.                                         $this->smarty->assign('___Data', "<center><br>Оплата отменена<br><br>");
  813.                                     }  
  814.                                 else
  815.                                     {
  816.                                         $this->smarty->assign('___Data', "<center><br>Данное сообщение не оплачено<br><br>");
  817.                                     }
  818.                             }
  819.         }  
  820.        
  821.     function Mod_AddPayForPost()
  822.         {
  823.             if (!$this->ModIsEnable()) return;
  824.                     //==========================================
  825.                     //Имеет ли пользователь права на модерирование раздела.
  826.                     //==========================================
  827.                     if  (   $this->IsModInForum($this->GetForumIdByPostId(intval($this->ipsclass->input['pid'])))  ||   //если просматривает модератор раздела
  828.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  829.                         )
  830.                             {
  831.                                 $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."posts WHERE pid=".intval($this->ipsclass->input['pid']));
  832.                                 $row=$this->ipsclass->DB->fetch_row();
  833.                                
  834.                                 if (!floatval($row['pay']))
  835.                                     {
  836.                                         $newpay=$this->GetPayForPost($this->GetForumIdByPostId(intval($this->ipsclass->input['pid'])),$row['new_topic'],$row['post'],0,$row['author_id']);
  837.                                         $this->ipsclass->DB->do_update("posts",array('pay'=>$newpay),"pid=".intval($this->ipsclass->input['pid']));
  838.                                        
  839.                                         //==========================================
  840.                                         //Заносим информацию в историю
  841.                                         //==========================================
  842.                                             $line=array(
  843.                                                             "date"      =>  mktime(),
  844.                                                             "user"      =>  $this->ipsclass->member['id'],
  845.                                                             "to_user"   =>  $row['author_id'],
  846.                                                             "type"      =>  "add_pay_for_post",
  847.                                                             "data"      =>  serialize(array("value"=>$newpay)),
  848.                                                             "post"      =>  $row['pid'],
  849.                                                         );
  850.                                             $this->AddLogLine($line);
  851.                                        
  852.                                         $this->RefCharges($newpay,$row['author_id'],$row['post_date'],0);
  853.                                            
  854.                                         $this->smarty->assign('___Data', "<center><br>Засчитана оплата {$this->Settings['Currency']}$newpay<br><br>");  
  855.                                     }
  856.                                 else
  857.                                     {
  858.                                         $this->smarty->assign('___Data', "<center><br>оплата за данное сообщение уже была засчитана.<br><br>"); 
  859.                                     }
  860.                             }
  861.         }
  862.        
  863.        
  864.     function Mod_RePayForPost()
  865.         {
  866.             if (!$this->ModIsEnable()) return;
  867.                     //==========================================
  868.                     //Имеет ли пользователь права на модерирование раздела.
  869.                     //==========================================
  870.                     if  (   $this->IsModInForum($this->GetForumIdByPostId(intval($this->ipsclass->input['pid'])))  ||   //если просматривает модератор раздела
  871.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  872.                         )
  873.                             {
  874.                                 $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."posts WHERE pid=".intval($this->ipsclass->input['pid']));
  875.                                 $row=$this->ipsclass->DB->fetch_row();
  876.                                
  877.                                 $newpay=$this->GetPayForPost($this->GetForumIdByPostId(intval($this->ipsclass->input['pid'])),$row['new_topic'],$row['post'],1,$row['author_id']);
  878.                                
  879.                                 if (round($row['pay'],7)!=round($newpay,7))
  880.                                     {
  881.                                         //==========================================
  882.                                         //Заносим информацию в историю
  883.                                         //==========================================
  884.                                         $line=array(
  885.                                                         "date"      =>  mktime(),
  886.                                                         "user"      =>  $this->ipsclass->member['id'],
  887.                                                         "to_user"   =>  $row['author_id'],
  888.                                                         "type"      =>  "repay_post",
  889.                                                         "data"      =>  serialize(array("value"=>$row['pay'],"value2"=>$newpay)),
  890.                                                         "post"      =>  $row['pid'],
  891.                                                     );
  892.                                         $this->AddLogLine($line);
  893.                                         $this->RefCharges($newpay-$row['pay'],$row['author_id'],$row['post_date'],1);  
  894.                                         $this->ipsclass->DB->do_update("posts",array('pay'=>$newpay),"pid=".intval($this->ipsclass->input['pid']));
  895.                                     }
  896.                                    
  897.                                        
  898.                                 $this->smarty->assign('___Data', "<center><br>Произведен перерасчет оплаты с {$this->Settings['Currency']}{$row['pay']} на {$this->Settings['Currency']}$newpay<br><br>");
  899.  
  900.                             }
  901.         }  
  902.        
  903.        
  904.     function Mod_EditPenalty()
  905.         {
  906.             if (!$this->ModIsEnable()) return;
  907.             //==========================================
  908.             //Есть ли данный штраф в таблице, если да
  909.             //получаем информацию о нем.
  910.             //==========================================
  911.             if (intval($this->ipsclass->input['pid']) && $pen=$this->GetPenaltyInfo(intval($this->ipsclass->input['pid'])))
  912.                 {
  913.                     //==========================================
  914.                     //Имеет ли пользовател права на изменение штрафа.
  915.                     //==========================================
  916.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($pen['post'])) && $pen['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  917.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModEditOtherPenalty']) ||            //или другой модератор, но модерам разрешено редактировать другие штрафы                          
  918.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  919.                         )  
  920.                             {
  921.                                 //==========================================
  922.                                 //передан ли флаг сохранения штрафа
  923.                                 //и не занулена величина штрафа
  924.                                 //==========================================
  925.                                 if (isset($this->ipsclass->input['save']) && abs(floatval($this->ipsclass->input['pen'])))
  926.                                     {
  927.                                        
  928.                                         if (round($pen['data']['value'],7)!=round(abs(floatval($this->ipsclass->input['pen'])),7))
  929.                                             {
  930.                                                
  931.                                                 //==========================================
  932.                                                 //Заносим информацию в историю
  933.                                                 //==========================================
  934.                                                     $line=array(
  935.                                                                     "date"      =>  mktime(),
  936.                                                                     "user"      =>  $this->ipsclass->member['id'],
  937.                                                                     "to_user"   =>  $pen['to_user'],
  938.                                                                     "type"      =>  "penalty_edit",
  939.                                                                     "data"      =>  serialize(array("pid"=>$pen['id'],"value"=>$pen['data']['value'],"value2"=>abs(floatval($this->ipsclass->input['pen'])))),
  940.                                                                     "post"      =>  $pen['post'],
  941.                                                                 );
  942.                                                     $this->AddLogLine($line);
  943.                                             }
  944.  
  945.                                        
  946.                                        
  947.                                         //==========================================
  948.                                         //обновляем запись в таблице
  949.                                         //==========================================   
  950.                                         $pen['data']['comment']=$_POST['com'];
  951.                                         $pen['data']['value']=abs(floatval($this->ipsclass->input['pen']));
  952.                                            
  953.                                         $pen_line['comment']=base64_encode($_POST['com']);
  954.                                         $pen_line['value']=floatval($this->ipsclass->input['pen']);
  955.                                         $pen_line=serialize($pen_line);
  956.                                         $this->ipsclass->DB->do_update("pay_history",array('data'=>$pen_line),"id=".$pen['id']);
  957.                                        
  958.                                        
  959.                                    
  960.                                         //==========================================
  961.                                         //готовим переменные для вывода отчета
  962.                                         //==========================================       
  963.                                         $this->smarty->assign('pok', 1);
  964.                                        
  965.                                         $pen['date']=date("j.n.Y, G:i",$pen['date']);
  966.                                         $pen['user_name']=$this->GetMemberNameById($pen['user']);
  967.                                         $pen['to_user_name']=$this->GetMemberNameById($pen['to_user']);
  968.                                        
  969.                                         $pen['topic']=$this->GetTopicIdByPostId($pen['post']);
  970.                                         $pen['topic_name']=$this->GetTopicNameByPostId($pen['post']);
  971.  
  972.                                        
  973.                                         $this->smarty->assign('report', $pen);
  974.                                         $this->smarty->assign('___Data', $this->smarty->fetch('editpenalty.tpl'));
  975.                                     }
  976.                                 //==========================================
  977.                                 //если нет, то выводим форму для редактирования
  978.                                 //==========================================
  979.                                 else
  980.                                     {
  981.                                        $this->smarty->assign('membername', $this->GetMemberNameById($pen['to_user']));
  982.                                        $this->smarty->assign('penid', $pen['id']);
  983.                                        $this->smarty->assign('topicname', $this->GetTopicNameByPostId($pen['post']));
  984.                                        $this->smarty->assign('pid', $pen['post']);
  985.                                        $this->smarty->assign('date', date("j.n.Y, G:i",$pen['date']));
  986.                                        $this->smarty->assign('pen', $pen['data']['value']);
  987.                                        $this->smarty->assign('com', $pen['data']['comment']);
  988.                                        
  989.                                        $this->smarty->assign('___Data', $this->smarty->fetch('editpenalty.tpl'));
  990.                                     }
  991.    
  992.                             }
  993.                     else
  994.                             {
  995.                                $this->smarty->assign('___ERROR', "Вы не имеете достаточных полномочий для редактирования штрафа №".$pen['id']);
  996.                                $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  997.                             }
  998.                 }
  999.             else
  1000.                 {
  1001.                    $this->smarty->assign('___ERROR', "Запись о штрафе не обнаружена в таблице.");
  1002.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  1003.                 }
  1004.            
  1005.         }
  1006.        
  1007.     function Mod_DeletePenalty()
  1008.         {
  1009.             if (!$this->ModIsEnable()) return;
  1010.             //==========================================
  1011.             //Есть ли данный штраф в таблице, если да
  1012.             //получаем информацию о нем.
  1013.             //==========================================
  1014.             if (intval($this->ipsclass->input['pid']) && $pen=$this->GetPenaltyInfo(intval($this->ipsclass->input['pid'])))
  1015.                 {
  1016.                     //==========================================
  1017.                     //Имеет ли пользователь права на удаление штрафа.
  1018.                     //==========================================
  1019.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($pen['post'])) && $pen['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  1020.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModCancelOtherPenalty']) ||          //или другой модератор, но модерам разрешено отменять другие штрафы                        
  1021.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  1022.                         )  
  1023.                             {
  1024.                                 //==========================================
  1025.                                 //Передан флаг удаления.
  1026.                                 //==========================================
  1027.                                 if (isset($this->ipsclass->input['del']))
  1028.                                     {
  1029.                                         $pen['type']="penalty_del";
  1030.                                         $pen['data']['by_user']=$this->ipsclass->member['id'];
  1031.                                         $pen['data']=serialize($pen['data']);
  1032.                                        
  1033.                                         $this->ipsclass->DB->do_update("pay_history",$pen,"id=".$pen['id']);   
  1034.                                         header("Location: {$this->ipsclass->base_url}act=ps");
  1035.                                         exit();                        
  1036.                                     }
  1037.                                 //==========================================
  1038.                                 //не передан флаг удаления.
  1039.                                 //==========================================
  1040.                                 else
  1041.                                     {
  1042.                                         $pen['date']=date("j.n.Y, G:i",$pen['date']);
  1043.                                         $pen['user_name']=$this->GetMemberNameById($pen['user']);
  1044.                                         $pen['to_user_name']=$this->GetMemberNameById($pen['to_user']);
  1045.                                                
  1046.                                         $pen['topic']=$this->GetTopicIdByPostId($pen['post']);
  1047.                                         $pen['topic_name']=$this->GetTopicNameByPostId($pen['post']);
  1048.                                                
  1049.                                         $this->smarty->assign('report', $pen);
  1050.                                         $this->smarty->assign('___Data', $this->smarty->fetch('deletepenalty.tpl'));
  1051.                                     }
  1052.                                
  1053.                             }
  1054.                     else
  1055.                             {
  1056.                                $this->smarty->assign('___ERROR', "Вы не имеете достаточных полномочий для удаления штрафа №".$pen['id']);
  1057.                                $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  1058.                             }
  1059.                 }
  1060.             else
  1061.                 {
  1062.                    $this->smarty->assign('___ERROR', "Запись о штрафе не обнаружена в таблице.");
  1063.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  1064.                 }
  1065.         }
  1066.        
  1067.     function Mod_SetPenalty()
  1068.         {
  1069.             if (!$this->ModIsEnable()) return;
  1070.            
  1071.             if (!intval($this->ipsclass->input['pid']) || !$this->IsValidPost(intval($this->ipsclass->input['pid'])))
  1072.                 {
  1073.                     $this->smarty->assign('___ERROR', "Не верные параметры");
  1074.                     $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));   
  1075.                     return;
  1076.                 }
  1077.                
  1078.             if (isset($this->ipsclass->input['add']) && floatval($this->ipsclass->input['pen']))
  1079.                 {
  1080.                     $log_line['date']=mktime();
  1081.                     $log_line['user']=$this->ipsclass->member['id'];
  1082.                     $log_line['to_user']=$this->GetAuthorIdByPost(intval($this->ipsclass->input['pid']));
  1083.                     $log_line['type']="penalty";
  1084.                     $log_line['data']=serialize(array("value"=>floatval($this->ipsclass->input['pen']),"comment"=>base64_encode($_POST['com'])));
  1085.                     $log_line['post']=intval($this->ipsclass->input['pid']);                   
  1086.                    
  1087.                     $this->AddLogLine($log_line);
  1088.                    
  1089.                     /* function of PM notification is disabled. Silen ----------------                 
  1090.                     if ($this->Settings['MailOnPenalty'])
  1091.                         {
  1092.                             require_once( ROOT_PATH.'sources/lib/func_msg.php' );
  1093.                    
  1094.                             $this->lib = new func_msg();
  1095.                             $this->lib->ipsclass =& $this->ipsclass;
  1096.                            
  1097.                             $this->lib->init();                        
  1098.                            
  1099.                             $this->lib->to_by_id    = 5;
  1100.                             $this->lib->from_member = $this->GetMemberInfoById(1);
  1101.                            
  1102.                             $p=$this->GetPenaltyInfo($this->ipsclass->DB->get_insert_id());
  1103.                             $p['user_name']=$this->GetMemberNameById($p['user']);
  1104.                             $p['topic']=$this->GetTopicIdByPostId($p['post']);
  1105.                             $p['topic_name']=$this->GetTopicNameByPostId($p['post']);
  1106.                             $this->smarty->assign('pen',$p);
  1107.                            
  1108.                             $this->lib->msg_post    = $this->smarty->fetch('penalty_pm.tpl');                          
  1109.                             $this->lib->msg_title   = $this->smarty->_smarty_vars["capture"]["title"];
  1110.                             $this->lib->force_pm    = 0;
  1111.                            
  1112.                             $this->lib->send_pm();
  1113.                            
  1114.                         }
  1115.                     --------------------------------------------------------------- */                 
  1116.                    
  1117.                     header("Location: {$this->ipsclass->base_url}act=ps&code=mod&t=p&ok&pid=".intval($this->ipsclass->input['pid']));
  1118.                     exit();
  1119.                 }
  1120.             elseif (isset($this->ipsclass->input['ok']) && $this->IsValidPost(intval($this->ipsclass->input['pid'])))
  1121.                 {
  1122.                     $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history WHERE user='{$this->ipsclass->member['id']}' AND post=".intval($this->ipsclass->input['pid'])." ORDER BY id DESC");
  1123.                     $row=$this->ipsclass->DB->fetch_row();
  1124.                    
  1125.                     $row['date']=date("j.n.Y, G:i",$row['date']);
  1126.                     $row['user_name']=$this->GetMemberNameById($row['user']);
  1127.                     $row['to_user_name']=$this->GetMemberNameById($row['to_user']);
  1128.                    
  1129.                     $row['topic']=$this->GetTopicIdByPostId($row['post']);
  1130.                     $row['topic_name']=$this->GetTopicNameByPostId($row['post']);
  1131.                     $row['data']=unserialize($row['data']);
  1132.                     $row['data']['comment']=base64_decode($row['data']['comment']);
  1133.                    
  1134.                     $this->smarty->assign('report', $row);
  1135.                     $this->smarty->assign('pok', 1);
  1136.                    
  1137.                     $this->smarty->assign('___Data', $this->smarty->fetch('setpenalty.tpl'));
  1138.                 }
  1139.             else
  1140.                 {
  1141.                     $this->smarty->assign('membername', $this->GetMemberNameById($this->GetAuthorIdByPost(intval($this->ipsclass->input['pid']))));
  1142.                     $this->smarty->assign('topicname', $this->GetTopicNameByPostId(intval($this->ipsclass->input['pid'])));
  1143.                     $this->smarty->assign('pid', intval($this->ipsclass->input['pid']));
  1144.                     $this->smarty->assign('date', date("j.n.Y, G:i",mktime()));
  1145.        
  1146.                     $this->smarty->assign('___Data', $this->smarty->fetch('setpenalty.tpl'));
  1147.                 }
  1148.         }
  1149.        
  1150.        
  1151.        
  1152.     function Adm_Start()
  1153.         {  
  1154.             if (!$this->ModIsEnable()) return;
  1155.                        
  1156.            
  1157.             //==========================================
  1158.             //Проверка - является ли пользователь админом.
  1159.             //==========================================
  1160.             if ($this->ipsclass->member['mgroup']!=$this->ipsclass->vars['admin_group'])
  1161.               {
  1162.                    $this->smarty->assign('___ERROR', "У Вас нет доступа к данной функции");
  1163.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  1164.                    return;     
  1165.               }
  1166.              
  1167.             switch ($this->ipsclass->input['t'])
  1168.             {
  1169.                 case 'setup':
  1170.                     $this->Adm_Setup();
  1171.                     break;
  1172.                 case 'pay_rules':
  1173.                     $this->Adm_RulesSetup();
  1174.                     break;
  1175.                 case 'pay_forums':
  1176.                     $this->Adm_ForumsSetup();
  1177.                     break;
  1178.                 case 'sponsors':
  1179.                     $this->Adm_SponsorsSetup();
  1180.                     break;
  1181.                 case 'users':
  1182.                     $this->Adm_Users();
  1183.                     break;
  1184.                 case 'wr':
  1185.                     $this->Adm_WithdrawalRequest();
  1186.                     break;
  1187.                 default:
  1188.                    $this->smarty->assign('___ERROR', "Ошибка выполнения программы");
  1189.                    $this->smarty->assign('___Data', $this->smarty->fetch('error.tpl'));
  1190.                    return; 
  1191.             }
  1192.         }
  1193.        
  1194.        
  1195.        
  1196.        
  1197.     function Adm_WithdrawalRequest()
  1198.         {
  1199.             if (!$this->ModIsEnable()) return;
  1200.            
  1201.             if (intval($this->ipsclass->input['w']))
  1202.                 {
  1203.                     $this->ipsclass->DB->query("SELECT type,data FROM ".SQL_PREFIX."pay_history WHERE type='withdrawal_r' AND id=".intval($this->ipsclass->input['w']));
  1204.                     $row=$this->ipsclass->DB->fetch_row();
  1205.                     $row['type']="withdrawal";
  1206.                     $row['data']=unserialize($row['data']);
  1207.                     $row['data']['by_user']=$this->ipsclass->member['id'];
  1208.                     $row['data']['update_date']=mktime();
  1209.                     $row['data']=serialize($row['data']);
  1210.                    
  1211.                     $this->ipsclass->DB->do_update("pay_history",$row,"id=".intval($this->ipsclass->input['w']));
  1212.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=wr");
  1213.                     exit();
  1214.                 }
  1215.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history WHERE type='withdrawal_r' ORDER BY id");
  1216.             while ($row=$this->ipsclass->DB->fetch_row($q))
  1217.                 {
  1218.                     $row['date']=date("j.n.Y, G:i",$row['date']);
  1219.                     $row['username']=$this->GetMemberNameById($row['user']);
  1220.                     $row['data']=unserialize($row['data']);
  1221.                     $row['data']['acc']=base64_decode($row['data']['acc']);
  1222.                     $row['data']['acc_type']=base64_decode($row['data']['acc_type']);
  1223.                     $row['data']['comment']=base64_decode($row['data']['comment']);
  1224.                    
  1225.                     $this->smarty->append('lines', $row);
  1226.                 }
  1227.            
  1228.             $this->smarty->assign('___Data', $this->smarty->fetch('wr.tpl'));  
  1229.         }
  1230. //==========================================
  1231. //Обработка работы с настройками мода
  1232. //(админ. панель) v.2
  1233. //==========================================    
  1234.     function Adm_Setup()
  1235.         {  
  1236.             if (!$this->ModIsEnable()) return;
  1237.             //==========================================
  1238.             //Нужно для нормальной алгебры
  1239.             //==========================================
  1240.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1241.            
  1242.             if (isset($this->ipsclass->input['save']))
  1243.                 {
  1244.                     $this->Settings['Currency']=base64_encode($this->ipsclass->input['Currency']);
  1245.                     $this->Settings['ShowForumPay']=intval($this->ipsclass->input['ShowForumPay']);
  1246.                     $this->Settings['ShowNullForumPay']=intval($this->ipsclass->input['ShowNullForumPay']);
  1247.                     $this->Settings['PostLenghtEnable']=intval($this->ipsclass->input['PostLenghtEnable']);
  1248.                     $this->Settings['RowCount']=intval($this->ipsclass->input['RowCount']);
  1249.                     $this->Settings['ModSeeOtherPenalty']=intval($this->ipsclass->input['ModSeeOtherPenalty']);
  1250.                     $this->Settings['ModCancelOtherPenalty']=intval($this->ipsclass->input['ModCancelOtherPenalty']);
  1251.                     $this->Settings['MinCashOut']=abs(floatval($this->ipsclass->input['MinCashOut']));
  1252.                     $this->Settings['RulesEnable']=intval($this->ipsclass->input['RulesEnable']);
  1253.                     $this->Settings['RefEnable']=intval($this->ipsclass->input['RefEnable']);
  1254.                     $this->Settings['AutoPostPay']=intval($this->ipsclass->input['AutoPostPay']);
  1255.                     $this->Settings['Sponsors']=intval($this->ipsclass->input['Sponsors']);
  1256.                     $this->Settings['UsersMaySeeOtherPenalty']=intval($this->ipsclass->input['UsersMaySeeOtherPenalty']);
  1257.                     $this->Settings['UsersMaySeeValueOtherPenalty']=intval($this->ipsclass->input['UsersMaySeeValueOtherPenalty']);
  1258.                     $this->Settings['ModEditOtherPenalty']=intval($this->ipsclass->input['ModEditOtherPenalty']);
  1259.                     $this->Settings['MailOnPenalty']=intval($this->ipsclass->input['MailOnPenalty']);
  1260.                     $this->Settings['MinSpend']=abs(floatval($this->ipsclass->input['MinSpend']));
  1261.                     $this->Settings['TransactionEnable']=abs(intval($this->ipsclass->input['TransactionEnable']));
  1262.                     $this->Settings['TransactionCom']=abs(floatval($this->ipsclass->input['TransactionCom']));
  1263.                     $this->Settings['FreezeAfterDays']=intval($this->ipsclass->input['FreezeAfterDays']);
  1264.  
  1265.                     $data=serialize($this->Settings);
  1266.                     $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."paysys SET data='$data' WHERE name='settings';");
  1267.                    
  1268.                     if ($this->RefSys->RefLevels!=$this->ipsclass->input['reflevels'])
  1269.                         {
  1270.                             $this->RefSys->RefLevels=$this->ipsclass->input['reflevels'];
  1271.                             $data=serialize(array('reflevels'=>base64_encode($this->RefSys->RefLevels),'record_time'=>mktime()));
  1272.                             $this->ipsclass->DB->query("INSERT INTO ".SQL_PREFIX."paysys(name,data) VALUES('refsys','$data');");
  1273.                         }
  1274.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=setup");
  1275.                     exit();
  1276.                 }
  1277.             $this->smarty->assign('___Settings', $this->Settings);
  1278.             $this->smarty->assign('___RefLevels', $this->RefSys->RefLevels);
  1279.             $this->smarty->assign('___Data', $this->smarty->fetch('setup.tpl'));
  1280.         }  
  1281.  
  1282. //==========================================
  1283. //Обработка работы с правилами начисления
  1284. //(админ. панель) v.2
  1285. //==========================================
  1286.     function Adm_RulesSetup()
  1287.         {  
  1288.             if (!$this->ModIsEnable()) return;
  1289.             //==========================================
  1290.             //Нужно для нормальной алгебры
  1291.             //==========================================
  1292.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1293.            
  1294.             //==========================================
  1295.             //Добавление правила
  1296.             //==========================================
  1297.             if (isset($this->ipsclass->input['add']))
  1298.                 {                  
  1299.  
  1300.                     foreach ($this->ipsclass->input['who'] as $who)
  1301.                         {                          
  1302.                             $rule=array(
  1303.                                     'type'  => ($this->ipsclass->input['value']=="v") ? "Pay" : "PayEnable",
  1304.                                     'value' => ($this->ipsclass->input['value']=="y") ? 1 : (($this->ipsclass->input['value']=="n") ? 0 : floatval($this->ipsclass->input['value2'])),
  1305.                                     'value2'    => floatval($this->ipsclass->input['value3']),
  1306.                                     'area'  => ($this->ipsclass->input['area']=="global") ? "global" : floatval($this->ipsclass->input['area']),
  1307.                                     'acts'  => ($who=="all") ? "*" : $who[0].intval(substr($who,1)),
  1308.                             );
  1309.                             $this->ipsclass->DB->do_insert("pay_rules",$rule);
  1310.                         }
  1311.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=pay_rules");
  1312.                     exit();
  1313.                 }
  1314.            
  1315.             //==========================================
  1316.             //Удаление правила
  1317.             //==========================================
  1318.             if (intval($this->ipsclass->input['del']))
  1319.                 {
  1320.                     $this->ipsclass->DB->do_delete("pay_rules","id=".intval($this->ipsclass->input['del']));
  1321.                                            
  1322.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=pay_rules");
  1323.                     exit();
  1324.                 }
  1325.                
  1326.             //==========================================
  1327.             //Подъем правила
  1328.             //==========================================
  1329.             if (intval($this->ipsclass->input['move_up']))
  1330.                 {
  1331.                     $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_rules WHERE id<".intval($this->ipsclass->input['move_up'])." ORDER BY id DESC");
  1332.                     $row=$this->ipsclass->DB->fetch_row();
  1333.                     if (intval($row['id']))
  1334.                         {
  1335.                             $this->ipsclass->DB->do_delete("pay_rules","id=".intval($row['id']));
  1336.                             $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."pay_rules SET id=".intval($row['id'])." WHERE id=".intval($this->ipsclass->input['move_up']));
  1337.                             $row['id']=intval($this->ipsclass->input['move_up']);
  1338.                             $this->ipsclass->DB->do_insert("pay_rules",$row);
  1339.                         }
  1340.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=pay_rules");
  1341.                     exit();
  1342.                 }
  1343.                
  1344.             //==========================================
  1345.             //Спуск правила
  1346.             //==========================================
  1347.             if (intval($this->ipsclass->input['move_down']))
  1348.                 {
  1349.                     $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_rules WHERE id>".intval($this->ipsclass->input['move_down'])." ORDER BY id");
  1350.                     $row=$this->ipsclass->DB->fetch_row();
  1351.                     if (intval($row['id']))
  1352.                         {
  1353.                             $this->ipsclass->DB->do_delete("pay_rules","id=".intval($row['id']));
  1354.                             $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."pay_rules SET id=".intval($row['id'])." WHERE id=".intval($this->ipsclass->input['move_down']));
  1355.                             $row['id']=intval($this->ipsclass->input['move_down']);
  1356.                             $this->ipsclass->DB->do_insert("pay_rules",$row);
  1357.                         }
  1358.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=pay_rules");
  1359.                     exit();
  1360.                 }
  1361.                    
  1362.             //==========================================
  1363.             //Разбор существующих правил для их
  1364.             //отображения
  1365.             //==========================================
  1366.                    
  1367.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_rules ORDER BY id");
  1368.             while ($row0=$this->ipsclass->DB->fetch_row($q))
  1369.                 {
  1370.                     $row=$row0;
  1371.                     if ($row['area']!="global") $row['area']=$this->GetForumNameById(intval($row['area']));
  1372.                    
  1373.                     if ($row['acts']!="*")
  1374.                         {
  1375.                             $row['acts']=array("type" => $row['acts'][0], "value" => substr($row['acts'],1));
  1376.                        
  1377.                             switch ($row['acts']['type'])
  1378.                                 {
  1379.                                     case "g":
  1380.                                         $row['acts']['value']=$this->GetGroupNameById($row['acts']['value']);
  1381.                                         break;
  1382.                                     case "m":
  1383.                                         $row['acts']['value']=$this->GetMemberNameById($row['acts']['value']);
  1384.                                         break;
  1385.                                 }
  1386.                         }
  1387.                     else $row['acts']['value']=$row['acts'];
  1388.                    
  1389.                     $this->smarty->append('rules',$row);
  1390.                 }
  1391.                
  1392.             //==========================================
  1393.             //Информация для формы добавления правил
  1394.             //==========================================
  1395.             $this->ipsclass->DB->query("SELECT id,name FROM ".SQL_PREFIX."forums");
  1396.             while ($row=$this->ipsclass->DB->fetch_row())
  1397.                 {
  1398.                     $this->smarty->append('area',$row);
  1399.                 }
  1400.             $this->ipsclass->DB->query("SELECT g_id,g_title FROM ".SQL_PREFIX."groups");
  1401.             while ($row=$this->ipsclass->DB->fetch_row())
  1402.                 {
  1403.                     $this->smarty->append('groups',$row);                  
  1404.                 }
  1405.             $this->ipsclass->DB->query("SELECT id,members_l_display_name FROM ".SQL_PREFIX."members ORDER BY id");
  1406.             while ($row=$this->ipsclass->DB->fetch_row())
  1407.                 {
  1408.                     $this->smarty->append('members',$row);
  1409.                 }
  1410.            
  1411.             $this->smarty->assign('___Data', $this->smarty->fetch('rules.tpl'));
  1412.         }
  1413.        
  1414.        
  1415.        
  1416. //==========================================
  1417. //настройка оплаты сообщений в форумах.
  1418. //==========================================   
  1419.     function Adm_ForumsSetup()
  1420.         {  
  1421.             if (!$this->ModIsEnable()) return;
  1422.             //==========================================
  1423.             //Нужно для нормальной алгебры
  1424.             //==========================================
  1425.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1426.  
  1427.            
  1428.             if (isset($this->ipsclass->input['save']))
  1429.                 {
  1430.                     foreach ($this->ipsclass->input['psn'] as $key => $psn)
  1431.                         {                          
  1432.                             if ($this->Settings['AutoPostPay'] && !floatval($this->ipsclass->input['psr'][$key])) $this->ipsclass->input['psr'][$key]=floatval($psn);
  1433.                            
  1434.                             $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."forums SET pay_new_topic='".floatval($psn)."',pay_new_post='".floatval($this->ipsclass->input['psr'][$key])."',pay_mess_lenght='".floatval($this->ipsclass->input['psl'][$key])."' WHERE id='".intval($key)."';");
  1435.                         }
  1436.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=pay_forums");
  1437.                     exit();
  1438.                 }
  1439.                    
  1440.             require_once(ROOT_PATH.'sources/lib/admin_forum_functions.php');
  1441.             $this->forumfunc = new admin_forum_functions();
  1442.             $this->forumfunc->ipsclass =& $this->ipsclass;
  1443.  
  1444.             $forumslist=$this->forumfunc->ad_forums_forum_list();
  1445.            
  1446.             foreach ($forumslist as $key=>$forum)
  1447.                 {
  1448.                     $forumslist[$key][2]=0; //intval(strrpos($forum[1],"-"));
  1449.                     while (substr($forum[1], $forumslist[$key][2], 1) == '-')
  1450.                     {
  1451.                        $forumslist[$key][2]++;
  1452.                     }
  1453.  
  1454.                     if ($forumslist[$key][2] > 0) $forumslist[$key][1]=substr($forumslist[$key][1],$forumslist[$key][2]);
  1455.                     //if ($forumslist[$key][2]) $forumslist[$key][1]=substr($forumslist[$key][1],$forumslist[$key][2]+1);
  1456.                    
  1457.                     $this->ipsclass->DB->query("SELECT pay_new_topic,pay_new_post,pay_mess_lenght FROM ".SQL_PREFIX."forums WHERE id='{$forumslist[$key][0]}'");
  1458.                     $row=$this->ipsclass->DB->fetch_row();
  1459.                    
  1460.                     $forumslist[$key][3]=floatval($row['pay_new_topic']);
  1461.                     $forumslist[$key][4]=floatval($row['pay_new_post']);
  1462.                     $forumslist[$key][5]=floatval($row['pay_mess_lenght']);
  1463.                 }
  1464.            
  1465.             $this->smarty->assign('forumslist', $forumslist);
  1466.             $this->smarty->assign('___Data', $this->smarty->fetch('forums.tpl'));
  1467.            
  1468.             unset($this->forumfunc);
  1469.  
  1470.         }
  1471.        
  1472.        
  1473. //==========================================
  1474. //настройка банеров спонсоров разделов.
  1475. //==========================================   
  1476.     function Adm_SponsorsSetup()
  1477.         {  
  1478.             if (!$this->ModIsEnable()) return;
  1479.             //==========================================
  1480.             //Нужно для нормальной алгебры
  1481.             //==========================================
  1482.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1483.  
  1484.            
  1485.             if (isset($this->ipsclass->input['save']))
  1486.                 {
  1487.                     foreach ($_POST['pss'] as $key => $pss)
  1488.                         {                              
  1489.                             if (!function_exists('get_magic_quotes_gpc') || !get_magic_quotes_gpc())
  1490.                                 {
  1491.                                     $pss = mysql_escape_string($pss);  
  1492.                                 }
  1493.                            
  1494.                             $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."forums SET pay_sponsor='".$pss."' WHERE id='".intval($key)."';");
  1495.                         }
  1496.                        
  1497.                     header("Location: {$this->ipsclass->base_url}act=ps&code=adm&t=sponsors");
  1498.                     exit();
  1499.                 }
  1500.                    
  1501.             require_once(ROOT_PATH.'sources/lib/admin_forum_functions.php');
  1502.             $this->forumfunc = new admin_forum_functions();
  1503.             $this->forumfunc->ipsclass =& $this->ipsclass;
  1504.  
  1505.             $forumslist=$this->forumfunc->ad_forums_forum_list();
  1506.            
  1507.             foreach ($forumslist as $key=>$forum)
  1508.                 {
  1509.                     $forumslist[$key][2]=intval(strrpos($forum[1],"-"));
  1510.                     if ($forumslist[$key][2]) $forumslist[$key][1]=substr($forumslist[$key][1],$forumslist[$key][2]+1);
  1511.                    
  1512.                     $this->ipsclass->DB->query("SELECT pay_sponsor FROM ".SQL_PREFIX."forums WHERE id='{$forumslist[$key][0]}'");
  1513.                     $row=$this->ipsclass->DB->fetch_row();
  1514.                    
  1515.                     $forumslist[$key][3]=$this->StripSlashesDeep($row['pay_sponsor']);
  1516.                 }
  1517.            
  1518.             $this->smarty->assign('forumslist', $forumslist);
  1519.             $this->smarty->assign('___Data', $this->smarty->fetch('sponsors.tpl'));
  1520.            
  1521.             unset($this->forumfunc);
  1522.  
  1523.         }
  1524.                
  1525.        
  1526. //==========================================
  1527. //Управление счетами пользователей.
  1528. //==========================================   
  1529.     function Adm_Users()
  1530.         {
  1531.             if (!$this->ModIsEnable()) return;
  1532.            
  1533.             if (intval($this->ipsclass->input['uid']))
  1534.                 {
  1535.                     $this->Adm_UserEdit();
  1536.                     return;
  1537.                 }
  1538.                
  1539.             /*******************************************************
  1540.             *                   Сортировка
  1541.             *******************************************************/
  1542.             switch ($this->ipsclass->input['sort'])
  1543.                 {
  1544.                     case "name":
  1545.                         $sort="members_display_name";
  1546.                         break;
  1547.                     case "group":
  1548.                         $sort="mgroup";
  1549.                         break;
  1550.                     default:
  1551.                         $sort="id";
  1552.                 }
  1553.                
  1554.             if (intval($this->ipsclass->input['desc']))  $sort.=" DESC";
  1555.            
  1556.             /*******************************************************/
  1557.            
  1558.             /*******************************************************
  1559.             *                   Постраничный вывод
  1560.             *******************************************************/
  1561.             $this->ipsclass->DB->query("SELECT COUNT(*) as cnt FROM ".SQL_PREFIX."members");
  1562.             $cnt=$this->ipsclass->DB->fetch_row();
  1563.             $pager['per_page']=$this->Settings['RowCount'];
  1564.                        
  1565.             $pager['from']= abs(intval($this->ipsclass->input['sp'])) ? abs(intval($this->ipsclass->input['sp'])-1)*$pager['per_page'] : 0;
  1566.            
  1567.             $pager['cur_page']=$pager['from']/$pager['per_page']+1;
  1568.            
  1569.             $pager['total']=$cnt['cnt'];
  1570.             $pager['page_count']=ceil($pager['total']/$pager['per_page']);
  1571.            
  1572.             if ($this->ipsclass->input['sort']) $pager['link'].="&sort=".$this->ipsclass->input['sort'];
  1573.            
  1574.             $this->smarty->assign("pager",$pager);
  1575.             /*******************************************************/
  1576.            
  1577.             $q=$this->ipsclass->DB->query("SELECT id,members_display_name,mgroup FROM ".SQL_PREFIX."members ORDER BY $sort LIMIT {$pager['from']},{$this->Settings['RowCount']}");
  1578.  
  1579.              while ($row=$this->ipsclass->DB->fetch_row($q))
  1580.                 {
  1581.                     $row['group']=$this->GetGroupNameById($row['mgroup']);
  1582.                     $row['stats']=$this->GetMemberCash($row['id']);
  1583.                     $this->smarty->append('users', $row);
  1584.                 }
  1585.            
  1586.            
  1587.             if ($this->ipsclass->input['sort']=="balans")
  1588.                 {
  1589.                     if (intval($this->ipsclass->input['desc']))  
  1590.                         {
  1591.                             usort ($this->smarty->_tpl_vars['users'], array("pssys","BalansSortForUsers2"));
  1592.                         }
  1593.                     else
  1594.                         {
  1595.                             usort ($this->smarty->_tpl_vars['users'], array("pssys","BalansSortForUsers1"));
  1596.                         }
  1597.                 }
  1598.            
  1599.            
  1600.             $this->smarty->assign('___Data', $this->smarty->fetch('users.tpl'));
  1601.         }
  1602.            
  1603.     function BalansSortForUsers1($a, $b)
  1604.         {
  1605.             if ($a['stats']['balans'] == $b['stats']['balans']) return 0;
  1606.             return ($a['stats']['balans'] > $b['stats']['balans']) ? -1 : 1;
  1607.         }
  1608.        
  1609.     function BalansSortForUsers2($a, $b)
  1610.         {
  1611.             if ($a['stats']['balans'] == $b['stats']['balans']) return 0;
  1612.             return ($a['stats']['balans'] > $b['stats']['balans']) ? 1 : -1;
  1613.         }
  1614.  
  1615.  
  1616.    
  1617. //==========================================
  1618. //редактирование счета пользователя.
  1619. //==========================================    
  1620.     function Adm_UserEdit()
  1621.         {
  1622.             if (!$this->ModIsEnable()) return;
  1623.            
  1624.             $this->smarty->assign('___Data', "Эта функция недоступна в данной версии");
  1625.         }
  1626.  
  1627.  
  1628. //----------------------------------------------------------------------------------------------------------------------------//
  1629. //------------------------------------------------------GET-------------------------------------------------------------------//
  1630. //----------------------------------------------------------------------------------------------------------------------------//
  1631.    
  1632. //==========================================
  1633. //Возращает название форума.
  1634. //==========================================        
  1635.     function GetForumNameById($forum_id=0)
  1636.         {
  1637.             if (!$forum_id) return;
  1638.             $this->ipsclass->DB->query("SELECT name FROM ".SQL_PREFIX."forums WHERE id='$forum_id'");
  1639.             $row=$this->ipsclass->DB->fetch_row();
  1640.             return $row['name'];
  1641.         }
  1642.      
  1643.        
  1644.     function GetAuthorIdByPost($pid=0)
  1645.         {
  1646.             if (!$pid) return 0;
  1647.             $this->ipsclass->DB->query("SELECT author_id FROM ".SQL_PREFIX."posts WHERE pid='$pid'");
  1648.             $row=$this->ipsclass->DB->fetch_row();
  1649.             return $row['author_id'];
  1650.         }
  1651.        
  1652.     function GetTopicNameByPostId($post_id=0)
  1653.         {
  1654.             if (!$post_id) return;
  1655.             return $this->GetTopicNameById($this->GetTopicIdByPostId($post_id));
  1656.         }
  1657.        
  1658.     function GetPenaltyInfo($id=0)
  1659.         {
  1660.             if (!$this->ModIsEnable()) return;
  1661.            
  1662.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history WHERE id='$id' AND type='penalty'");
  1663.             $row=$this->ipsclass->DB->fetch_row();
  1664.            
  1665.             if (!intval($row['id'])) return 0;
  1666.            
  1667.             $row['data']=unserialize($row['data']);
  1668.             $row['data']['comment']=base64_decode($row['data']['comment']);
  1669.             return $row;
  1670.         }
  1671.        
  1672.     function GetTopicIdByPostId($post_id=0)
  1673.         {
  1674.             if (!$post_id) return;
  1675.            
  1676.             $this->ipsclass->DB->query("SELECT topic_id FROM ".SQL_PREFIX."posts WHERE pid='$post_id'");
  1677.             $row=$this->ipsclass->DB->fetch_row();
  1678.        
  1679.             return $row['topic_id'];
  1680.         }
  1681.        
  1682.     function GetForumIdByPostId($post_id=0)
  1683.         {
  1684.             if (!$post_id) return;
  1685.            
  1686.             $this->ipsclass->DB->query("SELECT forum_id FROM ".SQL_PREFIX."topics WHERE tid=".$this->GetTopicIdByPostId($post_id));
  1687.             $row=$this->ipsclass->DB->fetch_row();
  1688.        
  1689.             return $row['forum_id'];
  1690.         }
  1691.        
  1692.     function GetTopicNameById($id=0)
  1693.         {
  1694.             if (!$id) return;
  1695.            
  1696.             $this->ipsclass->DB->query("SELECT title FROM ".SQL_PREFIX."topics WHERE tid='$id'");
  1697.             $row=$this->ipsclass->DB->fetch_row();
  1698.             return $row['title'];
  1699.         }
  1700.        
  1701.  
  1702.  
  1703. //----------------------------------------------------------------------------------------------------------------------------//
  1704. //-----------------------------------------------------#GET-------------------------------------------------------------------//
  1705. //----------------------------------------------------------------------------------------------------------------------------//
  1706.          
  1707.     function IsModInForum($forum_id)
  1708.         {
  1709.             if (!isset($this->ipsclass->member['_moderator'])) return 0;
  1710.             foreach ($this->ipsclass->member['_moderator'] as $modline)
  1711.                 {
  1712.                     if ($modline['forum_id']==$forum_id) return 1;
  1713.                 }
  1714.             return 0;
  1715.         }  
  1716.        
  1717.     function IsValidPost($id)
  1718.         {
  1719.             if (!intval($id)) return 0;
  1720.             $this->ipsclass->DB->query("SELECT pid FROM ".SQL_PREFIX."posts WHERE pid=".intval($id));
  1721.             $row=$this->ipsclass->DB->fetch_row();
  1722.            
  1723.             return intval($row['pid']);
  1724.         }  
  1725.        
  1726.     function StripSlashesDeep($value)
  1727.         {
  1728.             if (!empty($value) && is_string($value))
  1729.                 {
  1730.                     $value = stripslashes($value);
  1731.                 }
  1732.             return $value;
  1733.         }
  1734.        
  1735.        
  1736. //----------------------------------------------------------------------------------------------------------------------------//
  1737. //----------------------------------------Функции - реакции на изменения сообщений--------------------------------------------//
  1738. //----------------------------------------------------------------------------------------------------------------------------//
  1739.     function OnDeleteTopic($ids)
  1740.         {
  1741.             if (!$this->ModIsEnable()) return;
  1742.             //==========================================
  1743.             //перебор идов переданных топиков
  1744.             //==========================================
  1745.             foreach ($ids as $id)
  1746.                 {
  1747.                    
  1748.                     //==========================================
  1749.                     //получаем данные о всех постах в текущем топике:
  1750.                     //автор поста и кол-во начисленных денег
  1751.                     //==========================================
  1752.                     $SQL = "SELECT author_id,pay,post_date FROM ".SQL_PREFIX."posts WHERE topic_id=".$id." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays'];
  1753.                     $db_id=$this->ipsclass->DB->query($SQL);
  1754.                    
  1755.                     //==========================================
  1756.                     //перебор постов
  1757.                     //==========================================
  1758.                     while ($del_post=$this->ipsclass->DB->fetch_row($db_id))
  1759.                     {
  1760.                        
  1761.                         if ($del_post['pay'])
  1762.                             {
  1763.                                 //==========================================
  1764.                                 //Заносим информацию в историю
  1765.                                 //==========================================
  1766.                                 $line=array(
  1767.                                                 "date"      =>  mktime(),
  1768.                                                 "user"      =>  $this->ipsclass->member['id'],
  1769.                                                 "to_user"   =>  $del_post['author_id'],
  1770.                                                 "type"      =>  "del_post_on_del_topic",
  1771.                                                 "data"      =>  serialize(array("value"=>$del_post['pay'])),
  1772.                                                 "post"      =>  0,
  1773.                                 );
  1774.                                 $this->AddLogLine($line);
  1775.                                
  1776.                                 //==========================================
  1777.                                 //пересчитываем рефпроцент
  1778.                                 //==========================================
  1779.                                 $this->RefCharges(-1*$del_post['pay'],$del_post['author_id'],$del_post['post_date'],1);                        
  1780.                             }
  1781.  
  1782.                     }
  1783.                        
  1784.                 }
  1785.         }
  1786.        
  1787.     function OnMoveTopic($tids=array(),$source_id,$dest_id)
  1788.         {  
  1789.             if (!$this->ModIsEnable()) return;
  1790.             //==========================================
  1791.             //Нужно для нормальной алгебры
  1792.             //==========================================
  1793.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1794.            
  1795.             //==========================================
  1796.             //формируем базовый запрос
  1797.             //==========================================
  1798.             $query['select']="pid,author_id,pay,new_topic,post,post_date";
  1799.             $query['from']="posts";
  1800.            
  1801.             //==========================================
  1802.             //Начинаем перебор перемещаемых топиков
  1803.             //==========================================
  1804.             foreach ($tids as $tid)
  1805.                 {
  1806.                     $query['where']="topic_id=".$tid." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays'];;
  1807.                    
  1808.                     //==========================================
  1809.                     //Выполняем запрос к базе и перебираем посты
  1810.                     //==========================================
  1811.                     $this->ipsclass->DB->simple_construct($query);
  1812.                     $q_id=$this->ipsclass->DB->simple_exec();
  1813.                             while ($move_post=$this->ipsclass->DB->fetch_row($q_id))
  1814.                             {
  1815.                              
  1816.                               //==========================================
  1817.                               //расчитать новую стоимость поста, с условием new_topic
  1818.                               //==========================================                           
  1819.                              
  1820.                               if ($move_post['new_topic']==1)   $newpay=$this->GetPayForPost($dest_id,1,$move_post['post'],1,$move_post['author_id']);
  1821.                               else                              $newpay=$this->GetPayForPost($dest_id,0,$move_post['post'],1,$move_post['author_id']);  
  1822.                            
  1823.                               //==========================================
  1824.                               //если стоимость рассматриваемого поста равна
  1825.                               //стоимости в форуме куда перемещаем то не трогаем ряды
  1826.                               //==========================================
  1827.                               if ($newpay!=$move_post['pay'])
  1828.                                   {
  1829.                                    
  1830.                                     //==========================================
  1831.                                     //Заносим информацию в историю
  1832.                                     //==========================================
  1833.                                     $line=array(
  1834.                                                         "date"      =>  mktime(),
  1835.                                                         "user"      =>  $this->ipsclass->member['id'],
  1836.                                                         "to_user"   =>  $move_post['author_id'],
  1837.                                                         "type"      =>  "move_post_on_move_topic",
  1838.                                                         "data"      =>  serialize(array("value"=>$move_post['pay'],"value2"=>$newpay)),
  1839.                                                         "post"      =>  $move_post['pid'],
  1840.                                                 );
  1841.                                     $this->AddLogLine($line);  
  1842.                                    
  1843.                                    
  1844.                                   //==========================================
  1845.                                   //пересчитать рефначисления
  1846.                                   //==========================================
  1847.                                   $this->RefCharges($newpay-$move_post['pay'],$move_post['author_id'],$move_post['post_date']);
  1848.  
  1849.                                   //==========================================
  1850.                                   //обновить запись поста
  1851.                                   //==========================================                               
  1852.                                  
  1853.                                   $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."posts SET pay='$newpay' WHERE pid='{$move_post['pid']}';");
  1854.                                  
  1855.                                   }
  1856.                             }
  1857.                            
  1858.                    
  1859.                 }
  1860.         }
  1861.        
  1862.        
  1863. //==========================================
  1864. //Реакция на разделение темы
  1865. //==========================================
  1866.     function OnSplitTopic($forum_id,$post_ids,$from_topic_id)
  1867.         {
  1868.             if (!$this->ModIsEnable()) return;
  1869.             //==========================================
  1870.             //Нужно для нормальной алгебры
  1871.             //==========================================
  1872.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  1873.            
  1874.             //==========================================
  1875.             //Производим выборку перемещаемых постов
  1876.             //==========================================
  1877.             $q=$this->ipsclass->DB->query("SELECT pid,post,author_id,post_date,pay FROM ".SQL_PREFIX."posts WHERE pid IN ($post_ids) AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays']." ORDER BY pid");
  1878.            
  1879.             //==========================================
  1880.             //Получаем первое сообщение из выборки, которое
  1881.             //является первым сообщением новой темы
  1882.             //==========================================
  1883.             $first_post=$this->ipsclass->DB->fetch_row($q);
  1884.            
  1885.             //==========================================
  1886.             //Пересчитываем стоимость этого сообщения и
  1887.             //обновляем оплату и рефские если стоимость отличается
  1888.             //==========================================
  1889.             $new_pay=$this->GetPayForPost($forum_id,1,$first_post['post'],1,$first_post['author_id']);
  1890.                
  1891.            
  1892.             if (round($new_pay,10)!=round($first_post['pay'],10))
  1893.                 {              
  1894.                     //==========================================
  1895.                     //Заносим информацию в историю
  1896.                     //==========================================
  1897.                         $line=array(
  1898.                                         "date"      =>  mktime(),
  1899.                                         "user"      =>  $this->ipsclass->member['id'],
  1900.                                         "to_user"   =>  $first_post['author_id'],
  1901.                                         "type"      =>  "split_topic",
  1902.                                         "data"      =>  serialize(array("value"=>$first_post['pay'],"value2"=>$new_pay,"parent_topic" => $from_topic_id)),
  1903.                                         "post"      =>  $first_post['pid'],
  1904.                                     );
  1905.                         $this->AddLogLine($line);  
  1906.                    
  1907.                     $this->ipsclass->DB->do_update("posts",array("pay"=>$new_pay),"pid=".$first_post['pid']);              
  1908.                     $this->RefCharges($new_pay-$first_post['pay'],$first_post['author_id'],$first_post['post_date'],1);
  1909.                 }
  1910.  
  1911.             //==========================================
  1912.             //Уходим в перебор остальных сообщений
  1913.             //новой темы
  1914.             //==========================================
  1915.             while ($posts=$this->ipsclass->DB->fetch_row($q))
  1916.                 {
  1917.                     //==========================================
  1918.                     //Пересчитываем стоимость сообщения и
  1919.                     //обновляем оплату и рефские если стоимость отличается
  1920.                     //==========================================
  1921.                     $new_pay=$this->GetPayForPost($forum_id,0,$posts['post'],1,$posts['author_id']);
  1922.                    
  1923.                     if (round($new_pay,10)!=round($posts['pay'],10))
  1924.                         {
  1925.                                 //==========================================
  1926.                                 //Заносим информацию в историю
  1927.                                 //==========================================
  1928.                                 $line=array(
  1929.                                                 "date"      =>  mktime(),
  1930.                                                 "user"      =>  $this->ipsclass->member['id'],
  1931.                                                 "to_user"   =>  $posts['author_id'],
  1932.                                                 "type"      =>  "split_topic",
  1933.                                                 "data"      =>  serialize(array("value"=>$posts['pay'],"value2"=>$new_pay,"parent_topic" => $from_topic_id)),
  1934.                                                 "post"      =>  $posts['pid'],
  1935.                                             );
  1936.                                 $this->AddLogLine($line);  
  1937.                        
  1938.                        
  1939.                             $this->ipsclass->DB->do_update("posts",array("pay"=>$new_pay),"pid=".$posts['pid']);
  1940.                             $this->RefCharges($new_pay-$posts['pay'],$posts['author_id'],$posts['post_date']);
  1941.                         }
  1942.                 }
  1943.            
  1944.             //==========================================
  1945.             //Получаем первое сообщение в теме откуда
  1946.             //перемещались посты и если надо пересчитываем
  1947.             //стоимость данного сообщения
  1948.             //==========================================
  1949.             $this->ipsclass->DB->query("SELECT pid,post,author_id,post_date,pay FROM ".SQL_PREFIX."posts WHERE topic_id=".$from_topic_id." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays']." ORDER BY pid");
  1950.            
  1951.             $first_post_in_old_topic=$this->ipsclass->DB->fetch_row();
  1952.            
  1953.             $new_pay=$this->GetPayForPost($this->GetForumIdByPostId($first_post_in_old_topic['pid']),1,$first_post_in_old_topic['post'],1,$first_post_in_old_topic['author_id']);          
  1954.            
  1955.             if (round($new_pay,10)!=round($first_post_in_old_topic['pay'],10))
  1956.                 {
  1957.                     $this->ipsclass->DB->do_update("posts",array("pay"=>$new_pay),"pid=".$first_post_in_old_topic['pid']);
  1958.                     $this->RefCharges($new_pay-$first_post_in_old_topic['pay'],$first_post_in_old_topic['author_id'],$first_post_in_old_topic['post_date']);
  1959.                 }
  1960.         }
  1961.  
  1962.        
  1963. //==========================================
  1964. //Функция пересчитывает стоимость сообщения и рефские
  1965. //==========================================
  1966.     function OnUnionPosts($main_post)
  1967.         {
  1968.             if (!$this->ModIsEnable()) return;
  1969.            
  1970.             $this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."posts WHERE pid=".$main_post['pid']." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays']);
  1971.             $old_post=$this->ipsclass->DB->fetch_row();
  1972.            
  1973.             //==========================================
  1974.             //Получить новую оплату и обновить поле
  1975.             //==========================================
  1976.            
  1977.             $new_pay=$this->GetPayForPost($this->GetForumIdByPostId($main_post['pid']),$old_post['new_topic'],$main_post['post'],1,$old_post['author_id']);
  1978.  
  1979.            
  1980.                     //==========================================
  1981.                     //Заносим информацию в историю
  1982.                     //==========================================
  1983.                         $line=array(
  1984.                                         "date"      =>  mktime(),
  1985.                                         "user"      =>  $this->ipsclass->member['id'],
  1986.                                         "to_user"   =>  $old_post['author_id'],
  1987.                                         "type"      =>  "union_post",
  1988.                                         "data"      =>  serialize(array("value"=>$old_post['pay'],"value2"=>$new_pay)),
  1989.                                         "post"      =>  $main_post['pid'],
  1990.                                     );
  1991.                         $this->AddLogLine($line);              
  1992.            
  1993.             $this->ipsclass->DB->do_update("posts",array("pay"=>$new_pay),"pid=".$main_post['pid']);
  1994.             //==========================================
  1995.             //Пересчитать реферальские
  1996.             //==========================================
  1997.  
  1998.             $this->RefCharges(($new_pay-$old_post['pay']),$old_post['author_id'],$old_post['post_date'],1);
  1999.  
  2000.         }
  2001.      
  2002.        
  2003. //==========================================
  2004. //Функция пересчитывает стоимость сообщений
  2005. //и рефские. Написана с учетом того, что
  2006. //объединяемые темы находятся в одном разделе(форуме)
  2007. //==========================================    
  2008.     function OnUnionTopics($mids,$main_topic_id)
  2009.         {
  2010.             if (!$this->ModIsEnable()) return;
  2011.            
  2012.             $mids=implode(",",$mids);
  2013.             $q=$this->ipsclass->DB->query("SELECT pid,pay,topic_id,post,author_id,post_date FROM ".SQL_PREFIX."posts WHERE topic_id IN ($mids) AND new_topic=1 AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays']);
  2014.             while ($post=$this->ipsclass->DB->fetch_row($q))
  2015.                 {
  2016.                     //==========================================
  2017.                     //Заносим информацию в историю
  2018.                     //==========================================
  2019.                         $line=array(
  2020.                                         "date"      =>  mktime(),
  2021.                                         "user"      =>  $this->ipsclass->member['id'],
  2022.                                         "to_user"   =>  $post['author_id'],
  2023.                                         "type"      =>  "union_topic",
  2024.                                         "data"      =>  serialize(array("value"=>$post['pay'],"value2"=>$new_pay)),
  2025.                                         "post"      =>  $post['pid'],
  2026.                                     );
  2027.                         $this->AddLogLine($line);  
  2028.                        
  2029.                        
  2030.                     $new_pay=$this->GetPayForPost($this->GetForumIdByPostId($post['pid']),0,$post['post'],1,$post['author_id']);
  2031.                     $this->ipsclass->DB->do_update("posts",array("pay"=>$new_pay),"pid=".$post['pid']);
  2032.                     $this->RefCharges(($new_pay-$post['pay']),$post['author_id'],$post['post_date']);
  2033.                 }          
  2034.         }
  2035.        
  2036.        
  2037.     function OnDeletePost($ids)
  2038.         {
  2039.             if (!$this->ModIsEnable()) return;
  2040.             //==========================================
  2041.             //Нужно для нормальной алгебры
  2042.             //==========================================
  2043.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2044.            
  2045.             foreach ($ids as $id)
  2046.                 {
  2047.  
  2048.                     //==========================================
  2049.                     //получаем данные о постах:
  2050.                     //автор поста и кол-во начисленных денег
  2051.                     //==========================================
  2052.                     $SQL = "SELECT author_id,pay,post_date,topic_id FROM ".SQL_PREFIX."posts WHERE pid=".$id." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays'];
  2053.                     $db_id=$this->ipsclass->DB->query($SQL);
  2054.  
  2055.                     //==========================================
  2056.                     //перебор постов
  2057.                     //==========================================
  2058.                     while ($del_post=$this->ipsclass->DB->fetch_row($db_id))
  2059.                     {
  2060.                         //==========================================
  2061.                         //Если сообзение было оплачено, то
  2062.                         //==========================================
  2063.                         if ($del_post['pay'])
  2064.                             {
  2065.                                 //==========================================
  2066.                                 //Заносим информацию в историю
  2067.                                 //==========================================
  2068.                                 $line=array(
  2069.                                                 "date"      =>  mktime(),
  2070.                                                 "user"      =>  $this->ipsclass->member['id'],
  2071.                                                 "to_user"   =>  $del_post['author_id'],
  2072.                                                 "type"      =>  "del_post",
  2073.                                                 "data"      =>  serialize(array("value"=>$del_post['pay'],"topic_id"=>$del_post['topic_id'])),
  2074.                                                 "post"      =>  0,
  2075.                                 );
  2076.                                 $this->AddLogLine($line);
  2077.                                
  2078.                                
  2079.                                 //==========================================
  2080.                                 //пересчитываем рефпроцент
  2081.                                 //==========================================
  2082.                                 $this->RefCharges(-1*$del_post['pay'],$del_post['author_id'],$del_post['post_date'],1);
  2083.                             }
  2084.  
  2085.                     }
  2086.                        
  2087.                 }
  2088.         }
  2089.        
  2090.     function OnEditPost($new_post,$orig_post)
  2091.         {
  2092.             if (!$this->ModIsEnable()) return;
  2093.             //==========================================
  2094.             //Если пост редактирует не автор, то не производим перерасчет
  2095.             //==========================================
  2096.  
  2097.             if ($new_post['author_id']!=$this->ipsclass->member['id'])
  2098.                 {
  2099.                     return $new_post;
  2100.                 }
  2101.  
  2102.             $SQL = "SELECT COUNT(*) cnt FROM ".SQL_PREFIX."posts WHERE pid=".$orig_post['pid']." AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays'];
  2103.             $db_id=$this->ipsclass->DB->query($SQL);
  2104.             $ed_post=$this->ipsclass->DB->fetch_row($db_id);
  2105.  
  2106.             if ($ed_post['cnt'] == 0)
  2107.             {
  2108.                 return $new_post;
  2109.             }
  2110.  
  2111.             //==========================================
  2112.             //Нужно для нормальной алгебры
  2113.             //==========================================
  2114.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2115.            
  2116.             //==========================================
  2117.             //Расчитываем новую стоимость сообщения
  2118.             //при этом не зачисляем рефские
  2119.             //==========================================
  2120.             $new_post['pay']=$this->GetPayForPost($this->GetForumIdByPostId($orig_post['pid']),$orig_post['new_topic'],$new_post['post'],1);
  2121.            
  2122.             if ($new_post['pay']!=$orig_post['pay'])
  2123.                 {
  2124.                     //==========================================
  2125.                     //Заносим информацию в историю
  2126.                     //==========================================
  2127.                     $line=array(
  2128.                                         "date"      =>  mktime(),
  2129.                                         "user"      =>  0,
  2130.                                         "to_user"   =>  $this->ipsclass->member['id'],
  2131.                                         "type"      =>  "edit_post",
  2132.                                         "data"      =>  serialize(array("value"=>$orig_post['pay'],"value2"=>$new_post['pay'])),
  2133.                                         "post"      =>  $orig_post['pid'],
  2134.                                 );
  2135.                     $this->AddLogLine($line);
  2136.                                        
  2137.                     //==========================================
  2138.                     //Расчитываем рефские от разницы стоимости сообщения
  2139.                     //и пересчитываем рефские.
  2140.                     //==========================================
  2141.                    
  2142.                     $this->RefCharges($new_post['pay']-$orig_post['pay'],$orig_post['author_id'],$orig_post['post_date']);
  2143.                 }
  2144.            
  2145.             return $new_post;
  2146.         }
  2147.        
  2148.  
  2149.        
  2150.  
  2151.        
  2152.     function OnMovePost($pid_string, $move_to_topic=array(),$from_topic=array())
  2153.         {
  2154.             if (!$this->ModIsEnable()) return;
  2155.             //==========================================
  2156.             //Если перемещаем внутри форума то выходим
  2157.             //из функции
  2158.             //==========================================
  2159.             if ($from_topic['forum_id']==$move_to_topic['forum_id']) return 0;
  2160.            
  2161.             //==========================================
  2162.             //Нужно для нормальной алгебры
  2163.             //==========================================
  2164.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2165.            
  2166.             //==========================================
  2167.             //Получаем переменные постов для дальнейшего
  2168.             //расчета
  2169.             //==========================================
  2170.             $move_posts_db_id=$this->ipsclass->DB->query("SELECT pid,author_id,pay,post,post_date FROM ".SQL_PREFIX."posts WHERE pid IN($pid_string) AND DATEDIFF(NOW(), DATE_ADD('1970-01-01', INTERVAL post_date SECOND)) <= ".$this->Settings['FreezeAfterDays']);
  2171.  
  2172.             //==========================================
  2173.             //перебераем посты
  2174.             //==========================================
  2175.             while ($move_post=$this->ipsclass->DB->fetch_row($move_posts_db_id))
  2176.                 {
  2177.                    
  2178.                   //==========================================
  2179.                   //расчитываем новую стоимость
  2180.                   //==========================================
  2181.                     $newpay=$this->GetPayForPost($move_to_topic['forum_id'],0,$move_post['post'],1,$move_post['author_id']);
  2182.  
  2183.                   //==========================================
  2184.                   //Если стоимоть остается прежней то не производим
  2185.                   //изменений в счетах пользователя и не делаем
  2186.                   //пересчет реф начислений.
  2187.                   //==========================================
  2188.                     if ($newpay!=$move_post['pay'])
  2189.                     {
  2190.                             //==========================================
  2191.                             //Заносим информацию в историю
  2192.                             //==========================================
  2193.                             $line=array(
  2194.                                                 "date"      =>  mktime(),
  2195.                                                 "user"      =>  $this->ipsclass->member['id'],
  2196.                                                 "to_user"   =>  $move_post['author_id'],
  2197.                                                 "type"      =>  "move_post",
  2198.                                                 "data"      =>  serialize(array("value"=>$move_post['pay'],"value2"=>$newpay)),
  2199.                                                 "post"      =>  $move_post['pid'],
  2200.                                         );
  2201.                             $this->AddLogLine($line);
  2202.                            
  2203.                           //==========================================
  2204.                           //пересчитать рефначисления
  2205.                           //==========================================
  2206.  
  2207.                             $this->RefCharges($newpay-$move_post['pay'],$move_post['author_id'],$move_post['post_date'],1);                                                    
  2208.                            
  2209.                           //==========================================
  2210.                           //Записать данные:
  2211.                           //обновить запись поста
  2212.                           //==========================================
  2213.                          
  2214.                           $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."posts SET pay='$newpay' WHERE pid='{$move_post['pid']}';");
  2215.                     }
  2216.                  
  2217.                 }
  2218.  
  2219.                
  2220.  
  2221.         }  
  2222.        
  2223. //----------------------------------------------------------------------------------------------------------------------------//
  2224. //---------------------------------------#Функции - реакции на изменения сообщений--------------------------------------------//
  2225. //----------------------------------------------------------------------------------------------------------------------------//
  2226.        
  2227. //==========================================
  2228. //v.2
  2229. //==========================================
  2230. //Возращает значение, которое записывается в БД
  2231. //в таблицу с постами. Начисляет реферальные и
  2232. //изменяет счет пользователя при условии
  2233. //передачи переменной $ref_no_charge=1, в противном
  2234. //случае возращает только цену за пост
  2235. //==========================================
  2236. //Учесть флаг $ref_no_charge, чтоб не распределялись рефские
  2237. //==========================================
  2238.  
  2239.     function GetPayForPost($forum_id,$newtopic=0,$post="",$ref_no_charge=0,$uid=0)
  2240.         {
  2241.             if (!$this->ModIsEnable()) return;
  2242.             //==========================================
  2243.             //Нужно для нормальной алгебры
  2244.             //==========================================
  2245.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2246.            
  2247.            
  2248.             //==========================================
  2249.             //Проверяем, включена ли система правил начисления,
  2250.             //и если да, то получаем данные из парсера,
  2251.             //а именно платить/неплатить или стоимость
  2252.             //==========================================  
  2253.             if ($this->Settings['RulesEnable'])
  2254.                 {
  2255.                     $pay=$this->PayRulesParser($forum_id,$uid,$newtopic);          
  2256.                    
  2257.                     if (floatval($pay)==-2) return 0; //-2 означает не платить
  2258.                     elseif (floatval($pay)==-1)       //-1 платить по основной стоимости
  2259.                         {
  2260.                             $pay=$this->GetForumPay($forum_id,$newtopic);
  2261.                            
  2262.                         }          
  2263.                     //==========================================
  2264.                     //В остальных случаях возращается либо стоимость оплаты, либо нуль
  2265.                     //==========================================
  2266.                 }
  2267.                else $pay=$this->GetForumPay($forum_id,$newtopic);
  2268.  
  2269.             //==========================================
  2270.             //Если включена опция расчета оплаты по длинне сообщения
  2271.             //==========================================
  2272.             if ($this->Settings['PostLenghtEnable'])
  2273.                 {
  2274.                         //==========================================
  2275.                         //Вырезаем цитаты
  2276.                         //==========================================
  2277.                         $post = preg_replace("#<!--quoteo(.+?)>(.+?)QuoteEEnd-->#is", "", $post);                  
  2278.  
  2279.                         //==========================================
  2280.                         //Обрезаем html теги (из-за формата ipb)
  2281.                         //==========================================
  2282.                         $post=strip_tags($post);
  2283.                        
  2284.                         //==========================================
  2285.                         //Обрезаем символы пробела
  2286.                         //==========================================
  2287.                         $post = str_replace(chr(0x20), "", $post);
  2288.                         //print "<textarea cols=40 rows=20>$post</textarea>";
  2289.                         //exit();
  2290.                         //==========================================
  2291.                         //Вычисляем длинну сообщения и расчитываем окончательнный ценник
  2292.                         //==========================================
  2293.                         $strlen=$this->GetForumStrlen($forum_id);
  2294.            
  2295.                         //==========================================
  2296.                         //если сообщение меньше нормы делаем расчет
  2297.                         //==========================================
  2298.  
  2299.                         if (strlen($post)>=0)
  2300.                           {
  2301.                                if ($strlen && (strlen($post)<$strlen))
  2302.                                  {
  2303.                                         //==========================================
  2304.                                         //Расчет и округление до установленного разряда
  2305.                                         //==========================================
  2306.                                         $pay=round(($pay*strlen($post)/$strlen),7);
  2307.                                  }
  2308.                                
  2309.                           }
  2310.                 }
  2311.            
  2312.                        
  2313.             //==========================================
  2314.             //Производим зачисление рефпроцентов если рефсистема включена
  2315.             //и передан флаг начисления, т.е. $ref_no_charge=0
  2316.             //==========================================
  2317.             if ($this->Settings['RefEnable'] && $ref_no_charge==0)
  2318.             {
  2319.                 $this->RefCharges($pay,$uid);
  2320.             }
  2321.            
  2322.            
  2323.            
  2324.             //==========================================
  2325.             //возращаем полную стоимость
  2326.             //==========================================
  2327.             return "$pay";
  2328.  
  2329.         }
  2330.  
  2331.        
  2332. //==========================================
  2333. //Возращает установленную для форума длинну сообщения.
  2334. //==========================================   
  2335.    
  2336.     function GetForumStrlen($forum_id)
  2337.         {
  2338.             if (!$this->ModIsEnable()) return;
  2339.             //==========================================
  2340.             //Получаем необходимую длинну сообщений рекурсивным методом:
  2341.             //если длина установлена в 0 смотрим длинну форума-родителя.
  2342.             //Для отключения функции в настройках требуется указать значение -1
  2343.             //==========================================
  2344.  
  2345.             while (true)
  2346.               {
  2347.                   $this->ipsclass->DB->query("SELECT pay_mess_lenght,parent_id FROM ".SQL_PREFIX."forums WHERE id='$forum_id'");
  2348.                   $row=$this->ipsclass->DB->fetch_row();
  2349.  
  2350.                   switch ($row["pay_mess_lenght"])
  2351.                     {
  2352.                          case "-1":
  2353.                             return "0";
  2354.                             break;
  2355.                          case "0":
  2356.                               //==========================================
  2357.                               //Повтор цикла с родительским идом
  2358.                               //==========================================
  2359.                               if ($row["parent_id"]=="-1") return "0";
  2360.                               $forum_id=$row["parent_id"];
  2361.                               break;
  2362.                     }
  2363.  
  2364.                   //==========================================
  2365.                   //Если необходимая длинна сообщения определена, то возращаем значение
  2366.                   //==========================================
  2367.                   if ($row["pay_mess_lenght"]) return "{$row["pay_mess_lenght"]}";
  2368.  
  2369.  
  2370.               }
  2371.  
  2372.         }
  2373.        
  2374.        
  2375.     function GetReferer($id=0)
  2376.         {
  2377.             if (!$this->ModIsEnable()) return;
  2378.            
  2379.             $this->ipsclass->DB->query("SELECT pay_referer FROM ".SQL_PREFIX."members WHERE id='$id'");
  2380.             $row=$this->ipsclass->DB->fetch_row();
  2381.             return $row['pay_referer'];
  2382.         }
  2383.        
  2384. //==========================================
  2385. //Производит начисление реф. процента
  2386. //по всем уровням рефералов
  2387. //==========================================
  2388. //==========================================
  2389. //Переписать распределение рефских
  2390. //в случае переброски постов - закоментировано
  2391. //==========================================           
  2392.     function RefCharges($pay=0,$uid=0,$date=0,$change=0)
  2393.         {
  2394.             if (!$this->ModIsEnable()) return;
  2395.            
  2396.             if (!$uid) $uid=$this->ipsclass->member['id'];
  2397.            
  2398.                     if ($pay==0) return;
  2399.                     //=======================================================
  2400.                     //Проверяем валидна ли процентная ставка, т.е. по ней начислялся рефпроцент или нет,
  2401.                     //в противном случае грузим из базы требуемые ставки
  2402.                     //=======================================================
  2403.                     if ($date && ($this->RefSys->WriteDate>$date))
  2404.                     {
  2405.                         $this->ipsclass->DB->query("SELECT data FROM ".SQL_PREFIX."paysys WHERE name='refsys' ORDER BY id DESC");
  2406.                         //=======================================================
  2407.                         //Перебираем изменение процентных ставок по рефсистеме
  2408.                         //=======================================================
  2409.                         while ($row=$this->ipsclass->DB->fetch_row())
  2410.                             {
  2411.                                 $refsys_parse =unserialize($row['data']);                              
  2412.                                
  2413.                                 if ($refsys_parse['record_time']<=$date)
  2414.                                     {
  2415.                                         $reflevels_str=$refsys_parse['reflevels'];
  2416.                                         break;
  2417.                                     }
  2418.                             }
  2419.                     }
  2420.                     else $reflevels_str=$this->RefSys->RefLevels;
  2421.                    
  2422.                    
  2423.                     //=======================================================
  2424.                     //Создаем массив состоящий из значений процентных ставок.
  2425.                     //=======================================================
  2426.                         $reflevels=split(",", $reflevels_str);
  2427.                     //=======================================================
  2428.                     //Определяем есть ли у мембера реферер, и если есть
  2429.                     //уходим в перебор ставок
  2430.                     //=======================================================
  2431.                         $pay_referer=intval($this->GetReferer($uid));
  2432.                         if ($pay_referer)
  2433.                             {
  2434.                                 foreach($reflevels as $reflevel)
  2435.                                     {
  2436.                                         //=======================================================
  2437.                                         //Начисляем деньги за реферала соотвествующего уровня
  2438.                                         //=======================================================
  2439.                                         $this->ipsclass->DB->query("SELECT pay_cash as paid FROM ".SQL_PREFIX."members WHERE id='$pay_referer';");
  2440.                                         $mem=$this->ipsclass->DB->fetch_row();
  2441.                                        
  2442.                                         $total=round($mem['paid']+$pay*($reflevel/100),7); 
  2443.                                         $this->ipsclass->DB->query("UPDATE ".SQL_PREFIX."members SET pay_cash='$total' WHERE id='$pay_referer';");
  2444.  
  2445.                                        
  2446.                                         //==========================================
  2447.                                         //Заносим информацию в историю
  2448.                                         //==========================================
  2449.                                         $line=array(
  2450.                                                         "date"      =>  mktime(),
  2451.                                                         "user"      =>  $uid,
  2452.                                                         "to_user"   =>  $pay_referer,
  2453.                                                         "type"      =>  $change ? "change_ref_comp" : "ref_comp",
  2454.                                                         "data"      =>  serialize(array("value"=>round($pay*($reflevel/100),7))),
  2455.                                                         "post"      =>  0,
  2456.                                         );
  2457.                                         $this->AddLogLine($line);
  2458.                                        
  2459.                                        
  2460.                                        
  2461.                                         //=======================================================
  2462.                                         //Определяем реферера стоящего на уровне выше и повторяем
  2463.                                         //процедуру,а если его нет выходим из цикла.
  2464.                                         //=======================================================
  2465.                                         $pay_referer=intval($this->GetReferer($pay_referer));
  2466.                                         if (!$pay_referer) break;                                      
  2467.                                     }
  2468.                             }
  2469.         }      
  2470.        
  2471.        
  2472. //==========================================
  2473. //Возращает стоимость/платить или нет.
  2474. //Запрограммирована для текущего пользователя.
  2475. //==========================================       
  2476.     function PayRulesParser($forum_id=0,$uid=0,$new_topic=0)
  2477.         {
  2478.         if (!$this->ModIsEnable()) return;
  2479.            
  2480.             if (!$forum_id) return 0;
  2481.             $ret=-1;
  2482.            
  2483.        
  2484.             if (!$uid) $uid=$this->ipsclass->member['id'];
  2485.            
  2486.             $gid=$this->GetGroupIdByMemberId($uid);
  2487.            
  2488.             $q=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_rules WHERE (acts='*' OR acts='m".$uid."' OR acts='g".$gid."') AND (area='global' OR area='$forum_id') ORDER BY id");
  2489.             while ($row=$this->ipsclass->DB->fetch_row($q))
  2490.                 {
  2491.                     switch ($row['type'])
  2492.                         {
  2493.                             case 'PayEnable':
  2494.                                  if ($row['value']==1) $ret=-1;
  2495.                                  if ($row['value']==0) $ret=-2;
  2496.                                 break;
  2497.                             case 'Pay':
  2498.                                  if ($new_topic)
  2499.                                      {
  2500.                                         $ret=$row['value'];                          
  2501.                                      }
  2502.                                  else
  2503.                                      {
  2504.                                         $ret=$row['value2'];                             
  2505.                                      }
  2506.                                 break;
  2507.                         }
  2508.                 }
  2509.            
  2510.                            
  2511.             return $ret;   
  2512.            
  2513.         }  
  2514.        
  2515. //==========================================
  2516. //Менюшка в топиках.
  2517. //!!!внешняя функция!!!
  2518. //==========================================       
  2519.     function RenderTopic($row=array())
  2520.         {  
  2521.             if (!$this->ModIsEnable()) return;
  2522.  
  2523.        
  2524.  
  2525.         if ($row['author_id']>0) { //-- не показывать PaySys для гостей
  2526.            
  2527.             //==========================================
  2528.             //Нужно для нормальной алгебры
  2529.             //==========================================
  2530.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2531.            
  2532.             if ($this->ipsclass->member['is_mod'])
  2533.                 {
  2534.                     $this->smarty->assign('user', $row['author_id']);
  2535.                     $this->smarty->assign('postid', $row['pid']);
  2536.                     $this->smarty->assign('___baseurl', $this->ipsclass->base_url);
  2537.                    
  2538.                     $this->ipsclass->DB->query("SELECT pay FROM ".SQL_PREFIX."posts WHERE pid='{$row['pid']}'");
  2539.                     $pay=$this->ipsclass->DB->fetch_row();
  2540.                     if (floatval($pay['pay'])) $this->smarty->assign('pay',1);
  2541.                     else $this->smarty->assign('pay',0);
  2542.                    
  2543.                     $row['ps_t_menu']=$this->smarty->fetch('topicmenu.tpl');
  2544.                    
  2545.                                        
  2546.                 }
  2547.                
  2548.             $this->smarty->assign('membercash',$this->GetMemberCash($row['author_id']));   
  2549.             $row['ps_info']=$this->smarty->fetch('topicinfo.tpl');
  2550.            
  2551.                    
  2552.             $pq=$this->ipsclass->DB->query("SELECT * FROM ".SQL_PREFIX."pay_history WHERE post='{$row['pid']}' AND to_user='{$row['id']}' AND type='penalty'");
  2553.            
  2554.            
  2555.             while ($pen=$this->ipsclass->DB->fetch_row($pq))
  2556.                 {
  2557.                     $this->smarty->assign('moder', $this->GetMemberNameById($pen['user']));
  2558.                     $this->smarty->assign('date', date("j.n.Y, G:i",$pen['date']));
  2559.                    
  2560.                     $pen['data']=unserialize($pen['data']);
  2561.                     $pen['data']['comment']=base64_decode($pen['data']['comment']);
  2562.                     $pen['data']['id']=$pen['id'];  
  2563.                          
  2564.                     if (
  2565.                             (!$this->Settings['UsersMaySeeValueOtherPenalty'] && $this->ipsclass->member['mgroup']!=$this->ipsclass->vars['admin_group']) &&
  2566.                             !($this->ipsclass->member['is_mod'] && $pen['user']==$this->ipsclass->member['id'])
  2567.                         )
  2568.                         {
  2569.                             unset($pen['data']['value']);
  2570.                         }
  2571.                        
  2572.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($pen['post'])) && $pen['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  2573.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModCancelOtherPenalty']) ||          //или другой модератор, но модерам разрешено отменять другие штрафы                        
  2574.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  2575.                         )  
  2576.                             {
  2577.                                 $pen['data']['Cancel']=1; //разрешено отменить штраф
  2578.                             }
  2579.                            
  2580.                     if  (   ($this->IsModInForum($this->GetForumIdByPostId($pen['post'])) && $pen['user']==$this->ipsclass->member['id']) ||    //если просматривает модератор выставивший штраф
  2581.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModEditOtherPenalty']) ||            //или другой модератор, но модерам разрешено редактировать другие штрафы                          
  2582.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это главный админ
  2583.                         )  
  2584.                             {
  2585.                                 $pen['data']['Edit']=1; //разрешено редактировать штраф
  2586.                             }
  2587.                        
  2588.                     $this->smarty->assign('data', $pen['data']);            
  2589.        
  2590.                    
  2591.                    
  2592.                     if  (   ($this->ipsclass->member['is_mod'] && $pen['user']==$this->ipsclass->member['id']) ||   //если просматривает модератор выставивший штраф
  2593.                             ($this->ipsclass->member['is_mod'] && $this->Settings['ModSeeOtherPenalty']) ||         //или другой модератор, но модерам разрешено просматривать другие штрафы
  2594.                             $this->Settings['UsersMaySeeOtherPenalty']                                   ||         //или пользователям разршено просматривать чужие штрафы
  2595.                             $this->ipsclass->member['mgroup']==$this->ipsclass->vars['admin_group']                 //или это админ
  2596.                         )  
  2597.                             {
  2598.                                 $row['post'].=$this->smarty->fetch('penalty.tpl');
  2599.                             }
  2600.                
  2601.                    
  2602.                 }
  2603.            
  2604.           }  return $row;
  2605.         }
  2606.        
  2607. //==========================================
  2608. //Возращает текс спонсора раздела.
  2609. //==========================================   
  2610.     function GetSponsor($forum_id=0)
  2611.         {
  2612.             if (!$this->ModIsEnable()) return;
  2613.            
  2614.             if (intval($forum_id) && $this->Settings['Sponsors'])
  2615.             {
  2616.                     $this->ipsclass->DB->query("SELECT pay_sponsor FROM ".SQL_PREFIX."forums WHERE id='$forum_id'");
  2617.                     $row=$this->ipsclass->DB->fetch_row();
  2618.                     return $this->StripSlashesDeep($row['pay_sponsor']);
  2619.             }
  2620.         }
  2621.      
  2622.          
  2623. //==========================================
  2624. //Возращает ценник для форума.
  2625. //!!!внешняя функция!!!
  2626. //==========================================    
  2627.     function RenderForumPay($forum_id=0)
  2628.         {
  2629.             if (!$this->ModIsEnable()) return;
  2630.            
  2631.             //==========================================
  2632.             //Нужно для нормальной алгебры
  2633.             //==========================================
  2634.             if (!setlocale(LC_ALL, "en_US")) setlocale(LC_ALL, "US");
  2635.            
  2636.             if ($forum_id && $this->Settings['ShowForumPay'])
  2637.                 {
  2638.                     $pay_new_post=$this->GetForumPay($forum_id,0);
  2639.                     $pay_new_topic=$this->GetForumPay($forum_id,1);
  2640.  
  2641.                     if ( (!$pay_new_post && !$pay_new_topic) && !$this->ipsclass->ps->Settings['ShowNullForumPay'])
  2642.                       {
  2643.                           return;
  2644.                       }
  2645.                      
  2646.                     $this->smarty->assign('new', $pay_new_topic);  
  2647.                     $this->smarty->assign('reply', $pay_new_post);  
  2648.                     return $this->smarty->fetch("forumpay.tpl"); ;
  2649.                 }
  2650.         }
  2651.        
  2652.    
  2653.        
  2654. //==========================================
  2655. //Возращает стоимость поста в форуме.
  2656. //==========================================        
  2657.     function GetForumPay($forum_id,$newtopic=0)
  2658.         {
  2659.             if (!$this->ModIsEnable()) return;
  2660.            
  2661.             //==========================================
  2662.             //Получаем размер оплаты за пост рекурсивным методом: если оплата установлена в 0 смотрим ценник форума-родителя.
  2663.             //Для отключения оплаты сообщений в настройках требуется указать цену -1
  2664.             //==========================================
  2665.  
  2666.             while (true)
  2667.               {
  2668.                   //==========================================
  2669.                   //Определяем часть запроса к БД для выяснения новый топик или просто пост
  2670.                   //==========================================
  2671.                   $pay="pay_new_post";
  2672.                   if ($newtopic) $pay="pay_new_topic";
  2673.  
  2674.                   $q_id=$this->ipsclass->DB->query("SELECT $pay,parent_id FROM ".SQL_PREFIX."forums WHERE id='$forum_id'");
  2675.                   $row=$this->ipsclass->DB->fetch_row($q_id);
  2676.  
  2677.                   switch ($row["$pay"])
  2678.                     {
  2679.                          case "-1":
  2680.                             return "0";
  2681.                             break;
  2682.                          case "0":
  2683.                               //==========================================
  2684.                               //Повтор цикла с родительским идом
  2685.                               //==========================================
  2686.                               if ($row["parent_id"]=="-1") return "0";
  2687.                               $forum_id=$row["parent_id"];
  2688.                               break;
  2689.                     }
  2690.  
  2691.                   //==========================================
  2692.                   //Если ценник определен, то возращаем значение
  2693.                   //==========================================
  2694.                   if ($row["$pay"]) return "{$row["$pay"]}";
  2695.  
  2696.  
  2697.               }
  2698.  
  2699.         }  
  2700.        
  2701.            
  2702.   }
  2703.  
  2704. ?>
Add Comment
Please, Sign In to add comment