Guest User

Untitled

a guest
Mar 3rd, 2016
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. //Параметры работы скрипта
  3. $mysql_host = 'localhost';
  4. $mysql_user = 'root';
  5. $mysql_password = '1394pt';
  6. $mysql_dbase = 'mikbill';
  7. $log_file = $_SERVER['DOCUMENT_ROOT'].'/script_log_1.log';
  8. //параметры исходящей почты
  9. $config['smtp_username'] = 'iptv@pautina-ltd.ru';
  10. $config['smtp_port']     = '465';
  11. $config['smtp_host']     = 'ssl://smtp.yandex.ru';
  12. $config['smtp_password'] = '123456789';
  13. $config['smtp_debug']   = false;
  14. $config['smtp_charset']  = 'UTF-8';
  15. $config['smtp_from']     = 'IPTVPORTAL SCRIPT';
  16. //параметры отправляемого письма
  17. $mail_to_admin = true;
  18. $mail_to = 'iptv@pautina-ltd.ru';
  19. $mail_subj = 'Отчёт о работе скрипта';
  20. $mail_headers = 'Content-type: text/html; charset="UTF-8"'."\r\n";
  21. $mail_headers .= 'From: '.$config['smtp_from'].' <'.$config['smtp_username'].'>'."\r\n";
  22. //параметры iptvportal.ru
  23. $_auth_uri = 'http://91.236.103.198/api/jsonrpc/';
  24. $_username = 'CartMan';
  25. $_password = '2119632654d';
  26. $_jsonsql_uri = 'http://91.236.103.198/api/jsonsql/';
  27. $_iptvportal_header = null;
  28. //Системный профиль добавляемых пользователей
  29. $_system_profile = '63'; //pautina
  30. //Группы синхронизируемых пользователей
  31. $_users_groups = "1"; //(список групп - через запятую+пробел, ХЗ - сейчас стоит группа 8, но функционал оставляю на будущее...)
  32. $_include_groups = false; //(для субпровайдеров - true), когда true - включать только пользователей указанных групп, false - включать только пользователей ВНЕ указанных групп
  33. //Тут приведу соответствие пакетов микбиловских и мидлваровских...
  34. $default_packets = array('1');      // Базовый
  35. $mikbill_packets[115] = array('1','2'); // 11|Пакет Видео по Запросу
  36. $mikbill_packets[114] = array('1','1049'); // 10|Пакет Управление Просмотром
  37. $mikbill_packets[113] = array('1','506'); // 09|Пакет HD
  38. $mikbill_packets[107] = array('1','495'); // 03|Пакет Спорт
  39. $mikbill_packets[110] = array('1','503'); // 06|Пакет А-Медиа
  40. $mikbill_packets[123] = array('1','504'); // 12|Пакет Виртуальный Кинозал
  41. $mikbill_packets[112] = array('1','502'); // 08|Пакет Взрослый
  42. $mikbill_packets[117] = array('1','501'); // 13|Пакет Все Включено
  43. $mikbill_packets[105] = array('1','496'); // 01|Пакет Детский
  44. $mikbill_packets[106] = array('1','500'); // 02|Пакет Кино
  45. $mikbill_packets[111] = array('1','499'); // 07|Пакет Наш Футбол
  46. $mikbill_packets[108] = array('1','498'); // 04|Пакет Познавательный
  47. $mikbill_packets[109] = array('1','497'); // 05|Пакет Развлекательный
  48. $mikbill_packets[119] = array('1','505','496'); // Пакет Стандарт + Детский
  49. $mikbill_packets[116] = array('1','505','495'); // Пакет Стандарт + Спорт
  50. $mikbill_packets[120] = array('1','505','500'); // Пакет Стандарт + Кино
  51. $mikbill_packets[121] = array('1','505','498'); // Пакет Стандарт + Познавательный
  52. $mikbill_packets[122] = array('1','505','497'); // Пакет Стандарт + Развлекательный
  53. $mikbill_packets[118] = array('1','501'); // 20|Пакет "Все Включено"
  54. //$mikbill_packets[124] = array('1','1387'); // 20|Пакет "Все Включено" - free
  55. //$mikbill_packets[125] = array('1','1387'); // 20|Пакет "Все Включено" - free   ПРОСТО ПЕРЕБИТ ID
  56. //$mikbill_packets[126] = array('1','1387'); // 20|Пакет "Все Включено" - free   ПРОСТО ПЕРЕБИТ ID
  57. //параметры работы скрипта закончены, дальше чисто код
  58. header('Content-Type: text/html; charset=utf-8');
  59. setlocale(LC_ALL,'ru_RU.UTF-8');
  60. setlocale(LC_NUMERIC,'en_US.UTF-8');
  61. date_default_timezone_set('Europe/Moscow');
  62. //Для начала очищу файл логов
  63. if(!$handle = fopen($log_file, 'w')) {
  64.     if($mail_to_admin){smtpmail($mail_to,$mail_subj,'FATAL ERROR: Не могу произвести запись логов',$mail_headers);}
  65.     die('Не могу произвести запись логов');}
  66. ftruncate($handle,0);
  67. fclose($handle);
  68. ob_start();
  69. //проверяю соединение с базой данных MySQL
  70. $link=mysql_connect($mysql_host,$mysql_user,$mysql_password);
  71. if(!$link){
  72.     $message = 'Ошибка соединения: ' . mysql_error();
  73.     fatal_error($message);
  74. }
  75. log_save('1) Успешно соединился с сервером БД;',$log_file);
  76. //проверяю соединение с базой данных
  77. $db_selected = mysql_select_db($mysql_dbase,$link);
  78. if (!$db_selected) {
  79.     $message = 'Не удалось выбрать базу '.$mysql_dbase.' : '.mysql_error();
  80.     fatal_error($message);
  81. }
  82. log_save('2) Успешно выбрал базу данных;',$log_file);
  83. //Вычисляю для начала список БАЗОВЫХ услуг
  84. $query = "SELECT serviceid FROM services WHERE service_activation=0 AND suspended=0";
  85. trigger_error($query,E_USER_NOTICE);
  86. mysql_query('SET NAMES utf8');
  87. $result = mysql_query($query);
  88. while ($row = mysql_fetch_assoc($result)) {
  89.     $BaseServices[] = $row['serviceid'];
  90. }
  91. //Затем выясняю, на каких тарифах доступны указанные базовые услуги
  92. for($i=0;$i<count($BaseServices);$i++){
  93.     $query = "SELECT gid FROM services_packets_pairs WHERE serviceid=".$BaseServices[$i];
  94.     trigger_error($query,E_USER_NOTICE);
  95.     mysql_query('SET NAMES utf8');
  96.     $result = mysql_query($query);
  97.     while ($row = mysql_fetch_assoc($result)) {
  98.        $BaseGids[] = $row['gid'];
  99.        $GidServices[$row['gid']][] = $BaseServices[$i];
  100.     }
  101. }
  102. //Список услуг доступных для подключения (НЕ БАЗОВЫХ)
  103. $query = "SELECT serviceid FROM services WHERE service_activation=1 AND suspended=0";
  104. trigger_error($query,E_USER_NOTICE);
  105. mysql_query('SET NAMES utf8');
  106. $result = mysql_query($query);
  107. while ($row = mysql_fetch_assoc($result)) {
  108.     $AllServices[] = $row['serviceid'];
  109. }
  110. //Затем выясняю, на каких тарифах доступны указанные услуги
  111. for($i=0;$i<count($AllServices);$i++){
  112.     $query = "SELECT gid FROM services_packets_pairs WHERE serviceid=".$AllServices[$i];
  113.     trigger_error($query,E_USER_NOTICE);
  114.     mysql_query('SET NAMES utf8');
  115.     $result = mysql_query($query);
  116.     while ($row = mysql_fetch_assoc($result)) {
  117.        $AllGids[] = $row['gid'];
  118.        $AllGidServices[$row['gid']][] = $AllServices[$i];
  119.     }
  120. }
  121. //Первый запрос к БД, выборка пользователей
  122. $query = "SELECT uid, user, password, fio, address, prim, blocked, gid FROM users";
  123. //$query = "SELECT * FROM users";
  124. trigger_error($query,E_USER_NOTICE);
  125. mysql_query('SET NAMES utf8');
  126. $result = mysql_query($query);
  127. if (!$result) {
  128.     $message ='Неверный запрос: '.mysql_error()."\n";
  129.     $message.='Запрос целиком: '.$query;
  130.     fatal_error($message);
  131. }
  132. log_save('3) Успешно запросил информацию о пользователях;',$log_file);
  133. if (!mysql_num_rows($result)) {
  134.     $message='Запрос к таблице пользователей вернул пустой результат.'."\n";
  135.     fatal_error($message);
  136. }
  137. $i=0;
  138. while ($row = mysql_fetch_assoc($result)) {
  139.     $mik_bill_users[$i]['uid']      = $row['uid'];
  140.     $mik_bill_users[$i]['user']     = $row['user'];
  141.     $mik_bill_users[$i]['password'] = $row['password'];
  142.     $mik_bill_users[$i]['fio']      = $row['fio'];
  143.     $mik_bill_users[$i]['address']  = $row['address'];
  144.     $mik_bill_users[$i]['prim']     = $row['prim'];
  145.     $mik_bill_users[$i]['blocked']  = $row['blocked'];
  146.     $mik_bill_users[$i]['gid']      = $row['gid'];
  147.     $i++;
  148. }
  149. //ВОТ ТУТ ПРОВЕРЯЮ ГРУППЫ ПОЛЬЗОВАТЕЛЕЙ
  150. $query = "SELECT uid FROM usersgroups_users WHERE usersgroupid IN(".$_users_groups.")";
  151. mysql_query('SET NAMES utf8');
  152. trigger_error($query,E_USER_NOTICE);
  153. $result = mysql_query($query);
  154. if (!$result) {
  155.     $message ='Неверный запрос: '.mysql_error()."\n";
  156.     $message.='Запрос целиком: '.$query;
  157.     fatal_error($message);
  158. }
  159. log_save('4) Успешно запросил информацию о пользователях нужных групп;',$log_file);
  160. if (!mysql_num_rows($result)) {
  161.     $message='Запрос к таблице групп пользователей вернул пустой результат.'."\n";
  162.     fatal_error($message);
  163. }
  164. $i=0;
  165. while ($row = mysql_fetch_assoc($result)) {
  166.     $group_users[$i]['uid'] = $row['uid'];
  167.     $i++;
  168. }
  169. $not_group_users_count = 0;
  170. $group_users_count = 0;
  171. for($j=0;$j<count($mik_bill_users);$j++){
  172.     for($i=0;$i<count($group_users);$i++){
  173.         $user_found_in_group = false;
  174.         if($mik_bill_users[$j]['uid']==$group_users[$i]['uid']){
  175.             $user_found_in_group = true;
  176.             $mik_bill_group_users[$group_users_count]['uid']      = $mik_bill_users[$j]['uid'];
  177.             $mik_bill_group_users[$group_users_count]['user']     = $mik_bill_users[$j]['user'];
  178.             $mik_bill_group_users[$group_users_count]['password'] = $mik_bill_users[$j]['password'];
  179.             $mik_bill_group_users[$group_users_count]['fio']      = $mik_bill_users[$j]['fio'];
  180.             $mik_bill_group_users[$group_users_count]['address']  = $mik_bill_users[$j]['address'];
  181.             $mik_bill_group_users[$group_users_count]['prim']     = $mik_bill_users[$j]['prim'];
  182.             $mik_bill_group_users[$group_users_count]['blocked']  = $mik_bill_users[$j]['blocked'];
  183.             $mik_bill_group_users[$group_users_count]['gid']      = $mik_bill_users[$j]['gid'];
  184.             $group_users_count++;
  185.         }
  186.     }
  187.     if(!$user_found_in_group){
  188.             $mik_bill_not_group_users[$not_group_users_count]['uid']      = $mik_bill_users[$j]['uid'];
  189.             $mik_bill_not_group_users[$not_group_users_count]['user']     = $mik_bill_users[$j]['user'];
  190.             $mik_bill_not_group_users[$not_group_users_count]['password'] = $mik_bill_users[$j]['password'];
  191.             $mik_bill_not_group_users[$not_group_users_count]['fio']      = $mik_bill_users[$j]['fio'];
  192.             $mik_bill_not_group_users[$not_group_users_count]['address']  = $mik_bill_users[$j]['address'];
  193.             $mik_bill_not_group_users[$not_group_users_count]['prim']     = $mik_bill_users[$j]['prim'];
  194.             $mik_bill_not_group_users[$not_group_users_count]['blocked']  = $mik_bill_users[$j]['blocked'];
  195.             $mik_bill_not_group_users[$not_group_users_count]['gid']      = $mik_bill_users[$j]['gid'];
  196.             $not_group_users_count++;
  197.         }
  198. }
  199. if($_include_groups){//включать только пользователей указанных групп
  200.     $mik_bill_users = $mik_bill_group_users;
  201. }else{//включать только пользователей ВНЕ указанных групп
  202.     $mik_bill_users = $mik_bill_not_group_users;
  203. }
  204. //Тут добавлю пользователям базовые пакеты, прописанные в выбранном тарифе
  205. for($j=0;$j<count($mik_bill_users);$j++){
  206.     if (in_array($mik_bill_users[$j]['gid'], $BaseGids)) {
  207.         $mik_bill_users[$j]['services'] = $GidServices[$mik_bill_users[$j]['gid']];
  208.     }
  209. }
  210. //А вот тут - индивидуальные пакеты, вне выбранного тарифа...
  211. $query = "SELECT * FROM services_users_pairs";
  212. mysql_query('SET NAMES utf8');
  213. trigger_error($query,E_USER_NOTICE);
  214. $result = mysql_query($query);
  215. if (!$result) {
  216.     $message ='Неверный запрос: '.mysql_error()."\n";
  217.     $message.='Запрос целиком: '.$query;
  218.     fatal_error($message);
  219. }
  220. log_save('5) Успешно запросил информацию о пакетах пользователей;',$log_file);
  221. $i=0;
  222. while ($row = mysql_fetch_assoc($result)) {
  223.     for($j=0;$j<count($mik_bill_users);$j++){
  224.         if ($row['uid']==$mik_bill_users[$j]['uid']) {
  225.             if (!in_array($row['serviceid'], $BaseServices)) {  //проверка наличия выбранного сервиса в списке БАЗОВЫХ, если сервис базовый - он добавляется не здесь, а вместе с тарифом...
  226.                 if (in_array($row['serviceid'], $AllGidServices[$mik_bill_users[$j]['gid']])) { //проверка наличия выбранного сервиса в списке доступных, если услуга доступна на этом тарифе - тогда тогда добавление проходит...
  227.                     $mik_bill_users[$j]['services'][] = $row['serviceid'];
  228.                 }
  229.             }
  230.         }
  231.     }
  232.     $i++;
  233. }
  234. //Авторизуюсь на сервере MiddleWare
  235. $user = authorize_user ($auth_uri=$_auth_uri, $username=$_username, $password=$_password);
  236. if(empty($user[session_id])){
  237.     $message='Авторизация на сервере MiddleWare не прошла.'."\n";
  238.     fatal_error($message);
  239. }
  240. log_save('6) Успешно авторизовался на сервере MiddleWare;',$log_file);
  241. # выборка списка абонентов
  242. $res = jsonsql_call ("select", array (
  243.     "data" => array ("username", "comment"),
  244.     "from" => "subscriber",
  245.     "where" => array ("eq" => array ("sprofile_id", $_system_profile))
  246. ));
  247.  
  248. //убираю из списка синхронизируемых пользователей юзеров с коментарием VIP
  249. $middleware_users=array();
  250. foreach($res as $current_user)
  251. {
  252.    if($current_user[1] != "VIP") {
  253.         $middleware_users[] = array("user" => $current_user[0]);
  254.    }
  255. }
  256.  
  257. //итак имеем две таблицы пользователей, сформирую массивы элементов, которые нужно добавить в MiddleWare, удалить из MiddleWare, а так же массив общих элементов
  258. $del_from_middleware_elements=array();
  259. for($i=0;$i<count($mik_bill_users);$i++){
  260.     $element_present = false;
  261.     for($j=0;$j<count($middleware_users);$j++){
  262.         if($mik_bill_users[$i]['user']==$middleware_users[$j]['user']){
  263.             $element_present = true;
  264.             $common_elements[] = $mik_bill_users[$i];
  265.         }
  266.     }
  267.     if(!$element_present){
  268.         $add_to_middleware_elements[] = $mik_bill_users[$i];
  269.     }
  270. }
  271. for($i=0;$i<count($middleware_users);$i++){
  272.     $element_present = false;
  273.     for($j=0;$j<count($mik_bill_users);$j++){
  274.         if($mik_bill_users[$j]['user']==$middleware_users[$i]['user']){
  275.             $element_present = true;
  276.         }
  277.     }
  278.     if(!$element_present){
  279.         $del_from_middleware_elements[] = $middleware_users[$i]['user'];
  280.     }
  281. }
  282. //итак добавляю пользователей
  283. if(count($add_to_middleware_elements)>0){log_save(' Добавил пользователей:',$log_file);}
  284. for($i=0;$i<count($add_to_middleware_elements);$i++){
  285.     $fio = explode(" ",$add_to_middleware_elements[$i]['fio']);
  286.     $res = jsonsql_call ("insert", array (
  287.         "into" => "subscriber",
  288.         "columns" => array ("username","password","surname","comment","email","address","phone","first_name","middle_name","max_terminal","sprofile_id"),
  289.         "values" => array (
  290.         "username" => $add_to_middleware_elements[$i]['user'],
  291.         "password" => $add_to_middleware_elements[$i]['password'],
  292.         "surname" => $fio[0],
  293.         "comment" => $add_to_middleware_elements[$i]['prim'],
  294.         "email" => "",
  295.         "address" => $add_to_middleware_elements[$i]['address'],
  296.         "phone" => "",
  297.         "first_name" => $fio[1],
  298.         "middle_name" => $fio[2],
  299.         "max_terminal" => "3",
  300.         "sprofile_id" => $_system_profile,
  301.         ),
  302.     "returning" => "id"
  303.     ));
  304.     log_save('      '.$add_to_middleware_elements[$i]['user'].' '.$add_to_middleware_elements[$i]['fio'],$log_file);
  305.     $res = jsonsql_call ("insert", array (
  306.         "into" => "subscriber_package",
  307.         "columns" => array ("subscriber_id", "package_id", "enabled"),
  308.         "select" => array (
  309.             "data" => array (array ("s" => "id"), array ("p" => "id"), true),
  310.         "from" => array (array (
  311.             "table" => "subscriber", "as" => "s"
  312.         ), array (
  313.             "table" => "package", "as" => "p"
  314.         )),
  315.         "where" => array (
  316.             "and" => array (array (
  317.                 "eq" => array (array ("s" => "username"), $add_to_middleware_elements[$i]['user'])
  318.             ), array (
  319.                 "in" => array (array ("p" => "name"), "Базовый", "Стандарт")
  320.             ))
  321.         )
  322.     ),
  323.     "returning" => "package_id"
  324.     ));
  325.     log_save('          Добавил пакеты "Базовый" и "Стандарт" пользователю ',$log_file);
  326. }
  327. //вот тут удаляю терминалы удаляемых пользователей
  328. if(count($del_from_middleware_elements)>0){log_save('   Удалил терминалы пользователей:',$log_file);}
  329. for($i=0;$i<count($del_from_middleware_elements);$i++){
  330. $res = jsonsql_call ("delete", array (
  331.     "from" => "terminal",
  332.     "where" => array ("in" => array ("subscriber_id", array (
  333.         "select" => array (
  334.             "data" => "id",
  335.             "from" => "subscriber",
  336.             "where" => array ("eq" => array ("username", $del_from_middleware_elements[$i]))
  337.         )
  338.     ))),
  339.     "returning" => "id"
  340. ));
  341.     log_save('      '.$del_from_middleware_elements[$i],$log_file);
  342. }
  343. //а тут удаляю неугодных пользователей
  344. if(count($del_from_middleware_elements)>0){log_save('   Удалил пользователей:',$log_file);}
  345. for($i=0;$i<count($del_from_middleware_elements);$i++){
  346.     $res = jsonsql_call ("delete", array (
  347.         "from" => "subscriber",
  348.         "where" => array ("eq" => array ("username", $del_from_middleware_elements[$i])),
  349.         "returning" => "id"
  350.     ));
  351.     log_save('      '.$del_from_middleware_elements[$i],$log_file);
  352. }
  353. //обновляю инфу существующих пользователей
  354. if(count($common_elements)>0){log_save('    Обновил пользователей:'."\n",$log_file);}
  355. for($i=0;$i<count($common_elements);$i++){
  356.     $fio = explode(" ",$common_elements[$i]['fio']);
  357.     $res = jsonsql_call ("update", array (
  358.         "table" => "subscriber",
  359.         "set" => array (
  360.             "disabled" => false,
  361.             "password" => $common_elements[$i]['password'],
  362.             "surname" => $fio[0],
  363.             "comment" => $common_elements[$i]['prim'],
  364.             "email" => "",
  365.             "address" => $common_elements[$i]['address'],
  366.             "phone"  => "",
  367.             "first_name" => $fio[1],
  368.             "middle_name" => $fio[2],
  369.             "max_terminal" => "3",
  370.             "sprofile_id" => $_system_profile,
  371.             ),
  372.         "where" => array ("eq" => array ("username", $common_elements[$i]['user'])),
  373.         "returning" => "id"
  374.     ));
  375.     log_save('      '.$common_elements[$i]['user'].' '.$common_elements[$i]['fio']."\n",$log_file);
  376. }
  377. //Тут отключу заблокированных пользователей
  378. for($i=0;$i<count($mik_bill_users);$i++){
  379.     if($mik_bill_users[$i]['blocked']==='1'){
  380.         $res = jsonsql_call ("update", array (
  381.             "table" => "subscriber",
  382.             "set" => array ("disabled" => true),
  383.             "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user'])),
  384.             "returning" => "id"
  385.         ));
  386. //      log_save('      Отключил пользователя '.$mik_bill_users[$i]['user'],$log_file);
  387.     }else{
  388.         $res = jsonsql_call ("update", array (
  389.             "table" => "subscriber",
  390.             "set" => array ("disabled" => false),
  391.             "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user'])),
  392.             "returning" => "id"
  393.         ));
  394. //      log_save('      Включил пользователя '.$mik_bill_users[$i]['user'],$log_file);
  395.      }
  396. }
  397.  //Выясню текущие подключеные пакеты в мидлвари...
  398.  for($i=0;$i<count($mik_bill_users);$i++){
  399.     $subscriber_packages = jsonsql_call ("select", array (
  400.     "data" => array ("p" => "id"),
  401.     "from" => array (
  402.         array ("table" => "package", "as" => "p"),
  403.         array ("join" => "subscriber_package", "join_type" => "inner", "as" => "s2p",
  404.                "on" => array ("eq" => array (array ("s2p" => "package_id"), array ("p" => "id")))
  405.         ),
  406.         array ("join" => "subscriber", "join_type" => "inner", "as" => "s",
  407.                "on" => array ("eq" => array (array ("s2p" => "subscriber_id"), array ("s" => "id")))
  408.         )
  409.     ),
  410.     "where" => array ("eq" => array (array ("s" => "username"), $mik_bill_users[$i]['user'])),
  411.     "order_by" => array ("p" => "name")
  412.     ));
  413.     $middleware_packets[$mik_bill_users[$i]['user']] = $subscriber_packages;
  414.     //Ну и заодно в этом цикле расчитаю массив билинговский...
  415.     if(empty($mik_bill_users[$i]['services'])){
  416.         $mikbill_user_packets[$mik_bill_users[$i]['user']] = $default_packets;
  417.     }else{
  418.         $mikbill_user_packets[$mik_bill_users[$i]['user']] = array();
  419.         foreach ($mik_bill_users[$i]['services'] as $v) {
  420.              $mikbill_user_packets[$mik_bill_users[$i]['user']] = array_merge($mikbill_user_packets[$mik_bill_users[$i]['user']], $mikbill_packets[$v]);
  421.         }
  422.         $mikbill_user_packets[$mik_bill_users[$i]['user']] = array_unique($mikbill_user_packets[$mik_bill_users[$i]['user']]);
  423.     }
  424.    }
  425. for($i=0;$i<count($mik_bill_users);$i++){
  426.     $DeletingPackets[$mik_bill_users[$i]['user']] = array_values(array_diff($middleware_packets[$mik_bill_users[$i]['user']],$mikbill_user_packets[$mik_bill_users[$i]['user']]));
  427.     $AddingPackets[$mik_bill_users[$i]['user']]   = array_values(array_diff($mikbill_user_packets[$mik_bill_users[$i]['user']],$middleware_packets[$mik_bill_users[$i]['user']]));
  428.     }
  429. log_save('  Добавление пакетов пользователям:'."\n",$log_file);
  430. for($i=0;$i<count($mik_bill_users);$i++){
  431.     if(!empty($AddingPackets[$mik_bill_users[$i]['user']])){
  432.         $res = jsonsql_call ("insert", array (
  433.             "into" => "subscriber_package",
  434.             "columns" => array ("subscriber_id", "package_id", "enabled"),
  435.             "select" => array (
  436.                 "data" => array (array ("s" => "id"), array ("p" => "id"), true),
  437.             "from" => array (array (
  438.             "table" => "subscriber", "as" => "s"
  439.             ), array (
  440.                 "table" => "package", "as" => "p"
  441.             )),
  442.             "where" => array (
  443.                 "and" => array (array (
  444.                 "eq" => array (array ("s" => "username"), $mik_bill_users[$i]['user'])
  445.                 ), array (
  446.                 "in" => array (array ("p" => "id"), $AddingPackets[$mik_bill_users[$i]['user']])
  447.                 ))
  448.             )
  449.         ),
  450.         "returning" => "package_id"
  451.         ));
  452.         log_save('      У пользователя '.$mik_bill_users[$i]['user'].' прошло успешно'."\n",$log_file);
  453.     }else{
  454.         log_save('      У пользователя '.$mik_bill_users[$i]['user'].' не требуется'."\n",$log_file);
  455.     }
  456. }
  457. log_save('  Удаление пакетов у пользователей:'."\n",$log_file);
  458. for($i=0;$i<count($mik_bill_users);$i++){
  459.     if(!empty($DeletingPackets[$mik_bill_users[$i]['user']])){
  460.     $res = jsonsql_call ("delete", array (
  461.     "from" => "subscriber_package",
  462.     "where" => array ("and" => array (
  463.         array ("in" => array ("subscriber_id", array (
  464.             "select" => array (
  465.                 "data" => "id",
  466.                 "from" => "subscriber",
  467.                 "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user']))
  468.             )
  469.         ))), array ("in" => array ("package_id", array (
  470.             "select" => array (
  471.                 "data" => "id",
  472.                 "from" => "package",
  473.                 "where" => array ("in" => array ("id", $DeletingPackets[$mik_bill_users[$i]['user']]))
  474.             )
  475.         )))
  476.     )),
  477.     "returning" => "package_id"
  478.     ));
  479.         log_save('      У пользователя '.$mik_bill_users[$i]['user'].' прошло успешно'."\n",$log_file);
  480.     }else{
  481.         log_save('      У пользователя '.$mik_bill_users[$i]['user'].' не требуется'."\n",$log_file);
  482.     }
  483. }
  484. //if(ob_get_length()>0){
  485. //  log_save('7) Предупреждения, которые возникли в процессе выполнения кода: ',$log_file);
  486. //  log_save(ob_get_contents(),$log_file);
  487. //  log_save('7) Всем спасибо, все свободны :)',$log_file);
  488. //}else{
  489.     log_save('7) Всем спасибо, все свободны :)',$log_file);
  490. //}
  491. ob_end_clean();
  492. echo str_replace(array("\r","\n"),"<br>\n",file_get_contents($log_file));
  493. if($mail_to_admin){smtpmail($mail_to,$mail_subj,str_replace(array("\r","\n"),"<br>",str_replace("   ", "&nbsp;&nbsp;&nbsp;", file_get_contents($log_file))),$mail_headers);}
  494. //всё... код окончен, дальше чисто использумые функции...
  495. function fatal_error($message){
  496.     global $log_file,$mail_to_admin,$mail_to,$mail_subj,$mail_headers;
  497.     log_save('FATAL ERROR: '.$message,$log_file);
  498.     if($mail_to_admin){smtpmail($mail_to,$mail_subj,str_replace(array("\r","\n"),"<br>",file_get_contents($log_file)),$mail_headers);}
  499.     die($message);
  500. }
  501.  
  502. function log_save($logtext, $log_file){echo $logtext.'<br>';
  503. $h = fopen($log_file , 'ab');
  504. fwrite($h, $logtext . "\n");
  505. fclose($h);
  506. }
  507.  
  508. function smtpmail($mail_to, $subject, $message, $headers='') {
  509.     global $config;
  510.     $SEND = "Date: ".date("D, d M Y H:i:s") . " UT\r\n";
  511.     $SEND .=    'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
  512.     if ($headers) $SEND .= $headers."\r\n\r\n";
  513.     else
  514.     {
  515.             $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
  516.             $SEND .= "MIME-Version: 1.0\r\n";
  517.             $SEND .= "Content-Type: text/plain; charset=\"".$config['smtp_charset']."\"\r\n";
  518.             $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
  519.             $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
  520.             $SEND .= "To: $mail_to <$mail_to>\r\n";
  521.             $SEND .= "X-Priority: 3\r\n\r\n";
  522.     }
  523.     $SEND .=  $message."\r\n";
  524.      if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
  525.         if ($config['smtp_debug']) echo $errno."&lt;br&gt;".$errstr;
  526.         return false;
  527.      }
  528.  
  529.     if (!server_parse($socket, "220", __LINE__)) return false;
  530.  
  531.     fputs($socket, "HELO " . $config['smtp_host'] . "\r\n");
  532.     if (!server_parse($socket, "250", __LINE__)) {
  533.         if ($config['smtp_debug']) echo '<p>Не могу отправить HELO!</p>';
  534.         fclose($socket);
  535.         return false;
  536.     }
  537.     fputs($socket, "AUTH LOGIN\r\n");
  538.     if (!server_parse($socket, "334", __LINE__)) {
  539.         if ($config['smtp_debug']) echo '<p>Не могу найти ответ на запрос авторизаци.</p>';
  540.         fclose($socket);
  541.         return false;
  542.     }
  543.     fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
  544.     if (!server_parse($socket, "334", __LINE__)) {
  545.         if ($config['smtp_debug']) echo '<p>Логин авторизации не был принят сервером!</p>';
  546.         fclose($socket);
  547.         return false;
  548.     }
  549.     fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
  550.     if (!server_parse($socket, "235", __LINE__)) {
  551.         if ($config['smtp_debug']) echo '<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>';
  552.         fclose($socket);
  553.         return false;
  554.     }
  555.     fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
  556.     if (!server_parse($socket, "250", __LINE__)) {
  557.         if ($config['smtp_debug']) echo '<p>Не могу отправить комманду MAIL FROM: </p>';
  558.         fclose($socket);
  559.         return false;
  560.     }
  561.     fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
  562.  
  563.     if (!server_parse($socket, "250", __LINE__)) {
  564.         if ($config['smtp_debug']) echo '<p>Не могу отправить комманду RCPT TO: </p>';
  565.         fclose($socket);
  566.         return false;
  567.     }
  568.     fputs($socket, "DATA\r\n");
  569.  
  570.     if (!server_parse($socket, "354", __LINE__)) {
  571.         if ($config['smtp_debug']) echo '<p>Не могу отправить комманду DATA</p>';
  572.         fclose($socket);
  573.         return false;
  574.     }
  575.     fputs($socket, $SEND."\r\n.\r\n");
  576.  
  577.     if (!server_parse($socket, "250", __LINE__)) {
  578.         if ($config['smtp_debug']) echo '<p>Не смог отправить тело письма. Письмо не было отправленно!</p>';
  579.         fclose($socket);
  580.         return false;
  581.     }
  582.     fputs($socket, "QUIT\r\n");
  583.     fclose($socket);
  584.     return TRUE;
  585. }
  586.  
  587. function server_parse($socket, $response, $line = __LINE__) {
  588.     global $config;
  589.     $server_response='';
  590.     while (@substr($server_response, 3, 1) != ' ') {
  591.         if (!($server_response = fgets($socket, 256))) {
  592.             if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
  593.             return false;
  594.         }
  595.     }
  596.     if (!(substr($server_response, 0, 3) == $response)) {
  597.         if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
  598.         return false;
  599.     }
  600.     return true;
  601. }
  602.  
  603. function send ($url, $data, $extra_headers=null) {
  604.     $ch = curl_init ();
  605.     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,  10);
  606.     curl_setopt ($ch, CURLOPT_RETURNTRANSFER,  true);
  607.     curl_setopt ($ch, CURLOPT_TIMEOUT,         10);
  608.     curl_setopt ($ch, CURLOPT_URL,             $url);
  609.     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,  false);
  610.     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST,  false);
  611.     curl_setopt ($ch, CURLOPT_POST,            true);
  612.     curl_setopt ($ch, CURLOPT_POSTFIELDS,      $data);
  613.     if (isset ($extra_headers)) {
  614.         curl_setopt ($ch, CURLOPT_HTTPHEADER,  $extra_headers);
  615.     }
  616.     $content = curl_exec ($ch);
  617.     $http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE);
  618.     if ($content === false) {
  619.         $err_msg = "HTTP error: $http_code (" . curl_error($ch) . ')' . '\n';
  620.         echo $err_msg;
  621.         throw new Exception ($err_msg);
  622.     }
  623.     if ($http_code != 200) {
  624.         $err_msg = "HTTP request failed ($http_code)\n";
  625.         echo $err_msg;
  626.         throw new Exception ($err_msg);
  627.     }
  628.     curl_close ($ch);
  629.     return $content;
  630. }
  631.  
  632. function jsonrpc_call ($url, $method, $params, $extra_headers=null) {
  633.     static $req_id = 1;
  634.     $req = array (
  635.         "jsonrpc" => '2.0',
  636.         "id" => $req_id++,
  637.         "method" => $method,
  638.         "params" => $params
  639.     );
  640.     $req = json_encode ($req);
  641.     $res = send ($url, $req, $extra_headers=$extra_headers);
  642.     #echo $res;
  643.    $res = json_decode ($res, true);
  644.     if (!isset ($res)) {
  645.         echo "error: not result\n";
  646.         return null;
  647.     } else if (!array_key_exists ('result', $res) || !isset ($res ['result'])) {
  648.         print_r ($res ['error']);
  649.         return null;
  650.     } else {
  651.         return $res ['result'];
  652.     }
  653.     return $res;
  654. }
  655.  
  656. function jsonsql_call ($cmd, $params) {
  657.     global $_jsonsql_uri, $_iptvportal_header;
  658.     return jsonrpc_call ($_jsonsql_uri, $cmd, $params, $extra_headers=$_iptvportal_header);
  659. }
  660.  
  661. function authorize_user ($auth_uri, $username, $password) {
  662.     global $_iptvportal_header;
  663.     $res = jsonrpc_call ($auth_uri, $cmd="authorize_user", $params=array (
  664.         'username' => $username,
  665.         'password' => $password
  666.     ));
  667.     if (isset ($res) && array_key_exists ('session_id', $res)) {
  668.         $_iptvportal_header = array ('Iptvportal-Authorization: ' . 'sessionid=' . $res ['session_id']);
  669.     }
  670.     return $res;
  671. }
  672. ?>
Add Comment
Please, Sign In to add comment