Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.92 KB | None | 0 0
  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. //убираю из списка синхронизируемых пользователей юзеров с коментарием VIP
  248. foreach($res as $current_user)
  249. {
  250. if($current_user[1]<>"VIP"){$middleware_users[]['user'] = $current_user[0];}
  251. }
  252. //итак имеем две таблицы пользователей, сформирую массивы элементов, которые нужно добавить в MiddleWare, удалить из MiddleWare, а так же массив общих элементов
  253. $del_from_middleware_elements=array();
  254. for($i=0;$i<count($mik_bill_users);$i++){
  255. $element_present = false;
  256. for($j=0;$j<count($middleware_users);$j++){
  257. if($mik_bill_users[$i]['user']==$middleware_users[$j]['user']){
  258. $element_present = true;
  259. $common_elements[] = $mik_bill_users[$i];
  260. }
  261. }
  262. if(!$element_present){
  263. $add_to_middleware_elements[] = $mik_bill_users[$i];
  264. }
  265. }
  266. for($i=0;$i<count($middleware_users);$i++){
  267. $element_present = false;
  268. for($j=0;$j<count($mik_bill_users);$j++){
  269. if($mik_bill_users[$j]['user']==$middleware_users[$i]['user']){
  270. $element_present = true;
  271. }
  272. }
  273. if(!$element_present){
  274. $del_from_middleware_elements[] = $middleware_users[$i]['user'];
  275. }
  276. }
  277. //итак добавляю пользователей
  278. if(count($add_to_middleware_elements)>0){log_save(' Добавил пользователей:',$log_file);}
  279. for($i=0;$i<count($add_to_middleware_elements);$i++){
  280. $fio = explode(" ",$add_to_middleware_elements[$i]['fio']);
  281. $res = jsonsql_call ("insert", array (
  282. "into" => "subscriber",
  283. "columns" => array ("username","password","surname","comment","email","address","phone","first_name","middle_name","max_terminal","sprofile_id"),
  284. "values" => array (
  285. "username" => $add_to_middleware_elements[$i]['user'],
  286. "password" => $add_to_middleware_elements[$i]['password'],
  287. "surname" => $fio[0],
  288. "comment" => $add_to_middleware_elements[$i]['prim'],
  289. "email" => "",
  290. "address" => $add_to_middleware_elements[$i]['address'],
  291. "phone" => "",
  292. "first_name" => $fio[1],
  293. "middle_name" => $fio[2],
  294. "max_terminal" => "3",
  295. "sprofile_id" => $_system_profile,
  296. ),
  297. "returning" => "id"
  298. ));
  299. log_save(' '.$add_to_middleware_elements[$i]['user'].' '.$add_to_middleware_elements[$i]['fio'],$log_file);
  300. $res = jsonsql_call ("insert", array (
  301. "into" => "subscriber_package",
  302. "columns" => array ("subscriber_id", "package_id", "enabled"),
  303. "select" => array (
  304. "data" => array (array ("s" => "id"), array ("p" => "id"), true),
  305. "from" => array (array (
  306. "table" => "subscriber", "as" => "s"
  307. ), array (
  308. "table" => "package", "as" => "p"
  309. )),
  310. "where" => array (
  311. "and" => array (array (
  312. "eq" => array (array ("s" => "username"), $add_to_middleware_elements[$i]['user'])
  313. ), array (
  314. "in" => array (array ("p" => "name"), "Базовый", "Стандарт")
  315. ))
  316. )
  317. ),
  318. "returning" => "package_id"
  319. ));
  320. log_save(' Добавил пакеты "Базовый" и "Стандарт" пользователю ',$log_file);
  321. }
  322. //вот тут удаляю терминалы удаляемых пользователей
  323. if(count($del_from_middleware_elements)>0){log_save(' Удалил терминалы пользователей:',$log_file);}
  324. for($i=0;$i<count($del_from_middleware_elements);$i++){
  325. $res = jsonsql_call ("delete", array (
  326. "from" => "terminal",
  327. "where" => array ("in" => array ("subscriber_id", array (
  328. "select" => array (
  329. "data" => "id",
  330. "from" => "subscriber",
  331. "where" => array ("eq" => array ("username", $del_from_middleware_elements[$i]))
  332. )
  333. ))),
  334. "returning" => "id"
  335. ));
  336. log_save(' '.$del_from_middleware_elements[$i],$log_file);
  337. }
  338. //а тут удаляю неугодных пользователей
  339. if(count($del_from_middleware_elements)>0){log_save(' Удалил пользователей:',$log_file);}
  340. for($i=0;$i<count($del_from_middleware_elements);$i++){
  341. $res = jsonsql_call ("delete", array (
  342. "from" => "subscriber",
  343. "where" => array ("eq" => array ("username", $del_from_middleware_elements[$i])),
  344. "returning" => "id"
  345. ));
  346. log_save(' '.$del_from_middleware_elements[$i],$log_file);
  347. }
  348. //обновляю инфу существующих пользователей
  349. if(count($common_elements)>0){log_save(' Обновил пользователей:'."\n",$log_file);}
  350. for($i=0;$i<count($common_elements);$i++){
  351. $fio = explode(" ",$common_elements[$i]['fio']);
  352. $res = jsonsql_call ("update", array (
  353. "table" => "subscriber",
  354. "set" => array (
  355. "disabled" => false,
  356. "password" => $common_elements[$i]['password'],
  357. "surname" => $fio[0],
  358. "comment" => $common_elements[$i]['prim'],
  359. "email" => "",
  360. "address" => $common_elements[$i]['address'],
  361. "phone" => "",
  362. "first_name" => $fio[1],
  363. "middle_name" => $fio[2],
  364. "max_terminal" => "3",
  365. "sprofile_id" => $_system_profile,
  366. ),
  367. "where" => array ("eq" => array ("username", $common_elements[$i]['user'])),
  368. "returning" => "id"
  369. ));
  370. log_save(' '.$common_elements[$i]['user'].' '.$common_elements[$i]['fio']."\n",$log_file);
  371. }
  372. //Тут отключу заблокированных пользователей
  373. for($i=0;$i<count($mik_bill_users);$i++){
  374. if($mik_bill_users[$i]['blocked']==='1'){
  375. $res = jsonsql_call ("update", array (
  376. "table" => "subscriber",
  377. "set" => array ("disabled" => true),
  378. "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user'])),
  379. "returning" => "id"
  380. ));
  381. // log_save(' Отключил пользователя '.$mik_bill_users[$i]['user'],$log_file);
  382. }else{
  383. $res = jsonsql_call ("update", array (
  384. "table" => "subscriber",
  385. "set" => array ("disabled" => false),
  386. "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user'])),
  387. "returning" => "id"
  388. ));
  389. // log_save(' Включил пользователя '.$mik_bill_users[$i]['user'],$log_file);
  390. }
  391. }
  392. //Выясню текущие подключеные пакеты в мидлвари...
  393. for($i=0;$i<count($mik_bill_users);$i++){
  394. $subscriber_packages = jsonsql_call ("select", array (
  395. "data" => array ("p" => "id"),
  396. "from" => array (
  397. array ("table" => "package", "as" => "p"),
  398. array ("join" => "subscriber_package", "join_type" => "inner", "as" => "s2p",
  399. "on" => array ("eq" => array (array ("s2p" => "package_id"), array ("p" => "id")))
  400. ),
  401. array ("join" => "subscriber", "join_type" => "inner", "as" => "s",
  402. "on" => array ("eq" => array (array ("s2p" => "subscriber_id"), array ("s" => "id")))
  403. )
  404. ),
  405. "where" => array ("eq" => array (array ("s" => "username"), $mik_bill_users[$i]['user'])),
  406. "order_by" => array ("p" => "name")
  407. ));
  408. $middleware_packets[$mik_bill_users[$i]['user']] = $subscriber_packages;
  409. //Ну и заодно в этом цикле расчитаю массив билинговский...
  410. if(empty($mik_bill_users[$i]['services'])){
  411. $mikbill_user_packets[$mik_bill_users[$i]['user']] = $default_packets;
  412. }else{
  413. $mikbill_user_packets[$mik_bill_users[$i]['user']] = array();
  414. foreach ($mik_bill_users[$i]['services'] as $v) {
  415. $mikbill_user_packets[$mik_bill_users[$i]['user']] = array_merge($mikbill_user_packets[$mik_bill_users[$i]['user']], $mikbill_packets[$v]);
  416. }
  417. $mikbill_user_packets[$mik_bill_users[$i]['user']] = array_unique($mikbill_user_packets[$mik_bill_users[$i]['user']]);
  418. }
  419. }
  420. for($i=0;$i<count($mik_bill_users);$i++){
  421. $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']]));
  422. $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']]));
  423. }
  424. log_save(' Добавление пакетов пользователям:'."\n",$log_file);
  425. for($i=0;$i<count($mik_bill_users);$i++){
  426. if(!empty($AddingPackets[$mik_bill_users[$i]['user']])){
  427. $res = jsonsql_call ("insert", array (
  428. "into" => "subscriber_package",
  429. "columns" => array ("subscriber_id", "package_id", "enabled"),
  430. "select" => array (
  431. "data" => array (array ("s" => "id"), array ("p" => "id"), true),
  432. "from" => array (array (
  433. "table" => "subscriber", "as" => "s"
  434. ), array (
  435. "table" => "package", "as" => "p"
  436. )),
  437. "where" => array (
  438. "and" => array (array (
  439. "eq" => array (array ("s" => "username"), $mik_bill_users[$i]['user'])
  440. ), array (
  441. "in" => array (array ("p" => "id"), $AddingPackets[$mik_bill_users[$i]['user']])
  442. ))
  443. )
  444. ),
  445. "returning" => "package_id"
  446. ));
  447. log_save(' У пользователя '.$mik_bill_users[$i]['user'].' прошло успешно'."\n",$log_file);
  448. }else{
  449. log_save(' У пользователя '.$mik_bill_users[$i]['user'].' не требуется'."\n",$log_file);
  450. }
  451. }
  452. log_save(' Удаление пакетов у пользователей:'."\n",$log_file);
  453. for($i=0;$i<count($mik_bill_users);$i++){
  454. if(!empty($DeletingPackets[$mik_bill_users[$i]['user']])){
  455. $res = jsonsql_call ("delete", array (
  456. "from" => "subscriber_package",
  457. "where" => array ("and" => array (
  458. array ("in" => array ("subscriber_id", array (
  459. "select" => array (
  460. "data" => "id",
  461. "from" => "subscriber",
  462. "where" => array ("eq" => array ("username", $mik_bill_users[$i]['user']))
  463. )
  464. ))), array ("in" => array ("package_id", array (
  465. "select" => array (
  466. "data" => "id",
  467. "from" => "package",
  468. "where" => array ("in" => array ("id", $DeletingPackets[$mik_bill_users[$i]['user']]))
  469. )
  470. )))
  471. )),
  472. "returning" => "package_id"
  473. ));
  474. log_save(' У пользователя '.$mik_bill_users[$i]['user'].' прошло успешно'."\n",$log_file);
  475. }else{
  476. log_save(' У пользователя '.$mik_bill_users[$i]['user'].' не требуется'."\n",$log_file);
  477. }
  478. }
  479. //if(ob_get_length()>0){
  480. // log_save('7) Предупреждения, которые возникли в процессе выполнения кода: ',$log_file);
  481. // log_save(ob_get_contents(),$log_file);
  482. // log_save('7) Всем спасибо, все свободны :)',$log_file);
  483. //}else{
  484. log_save('7) Всем спасибо, все свободны :)',$log_file);
  485. //}
  486. ob_end_clean();
  487. echo str_replace(array("\r","\n"),"<br>\n",file_get_contents($log_file));
  488. 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);}
  489. //всё... код окончен, дальше чисто использумые функции...
  490. function fatal_error($message){
  491. global $log_file,$mail_to_admin,$mail_to,$mail_subj,$mail_headers;
  492. log_save('FATAL ERROR: '.$message,$log_file);
  493. if($mail_to_admin){smtpmail($mail_to,$mail_subj,str_replace(array("\r","\n"),"<br>",file_get_contents($log_file)),$mail_headers);}
  494. die($message);
  495. }
  496.  
  497. function log_save($logtext, $log_file){echo $logtext.'<br>';
  498. $h = fopen($log_file , 'ab');
  499. fwrite($h, $logtext . "\n");
  500. fclose($h);
  501. }
  502.  
  503. function smtpmail($mail_to, $subject, $message, $headers='') {
  504. global $config;
  505. $SEND = "Date: ".date("D, d M Y H:i:s") . " UT\r\n";
  506. $SEND .= 'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
  507. if ($headers) $SEND .= $headers."\r\n\r\n";
  508. else
  509. {
  510. $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
  511. $SEND .= "MIME-Version: 1.0\r\n";
  512. $SEND .= "Content-Type: text/plain; charset=\"".$config['smtp_charset']."\"\r\n";
  513. $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
  514. $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
  515. $SEND .= "To: $mail_to <$mail_to>\r\n";
  516. $SEND .= "X-Priority: 3\r\n\r\n";
  517. }
  518. $SEND .= $message."\r\n";
  519. if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
  520. if ($config['smtp_debug']) echo $errno."&lt;br&gt;".$errstr;
  521. return false;
  522. }
  523.  
  524. if (!server_parse($socket, "220", __LINE__)) return false;
  525.  
  526. fputs($socket, "HELO " . $config['smtp_host'] . "\r\n");
  527. if (!server_parse($socket, "250", __LINE__)) {
  528. if ($config['smtp_debug']) echo '<p>Не могу отправить HELO!</p>';
  529. fclose($socket);
  530. return false;
  531. }
  532. fputs($socket, "AUTH LOGIN\r\n");
  533. if (!server_parse($socket, "334", __LINE__)) {
  534. if ($config['smtp_debug']) echo '<p>Не могу найти ответ на запрос авторизаци.</p>';
  535. fclose($socket);
  536. return false;
  537. }
  538. fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
  539. if (!server_parse($socket, "334", __LINE__)) {
  540. if ($config['smtp_debug']) echo '<p>Логин авторизации не был принят сервером!</p>';
  541. fclose($socket);
  542. return false;
  543. }
  544. fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
  545. if (!server_parse($socket, "235", __LINE__)) {
  546. if ($config['smtp_debug']) echo '<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>';
  547. fclose($socket);
  548. return false;
  549. }
  550. fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
  551. if (!server_parse($socket, "250", __LINE__)) {
  552. if ($config['smtp_debug']) echo '<p>Не могу отправить комманду MAIL FROM: </p>';
  553. fclose($socket);
  554. return false;
  555. }
  556. fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");
  557.  
  558. if (!server_parse($socket, "250", __LINE__)) {
  559. if ($config['smtp_debug']) echo '<p>Не могу отправить комманду RCPT TO: </p>';
  560. fclose($socket);
  561. return false;
  562. }
  563. fputs($socket, "DATA\r\n");
  564.  
  565. if (!server_parse($socket, "354", __LINE__)) {
  566. if ($config['smtp_debug']) echo '<p>Не могу отправить комманду DATA</p>';
  567. fclose($socket);
  568. return false;
  569. }
  570. fputs($socket, $SEND."\r\n.\r\n");
  571.  
  572. if (!server_parse($socket, "250", __LINE__)) {
  573. if ($config['smtp_debug']) echo '<p>Не смог отправить тело письма. Письмо не было отправленно!</p>';
  574. fclose($socket);
  575. return false;
  576. }
  577. fputs($socket, "QUIT\r\n");
  578. fclose($socket);
  579. return TRUE;
  580. }
  581.  
  582. function server_parse($socket, $response, $line = __LINE__) {
  583. global $config;
  584. $server_response='';
  585. while (@substr($server_response, 3, 1) != ' ') {
  586. if (!($server_response = fgets($socket, 256))) {
  587. if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
  588. return false;
  589. }
  590. }
  591. if (!(substr($server_response, 0, 3) == $response)) {
  592. if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response<br>$line<br>";
  593. return false;
  594. }
  595. return true;
  596. }
  597.  
  598. function send ($url, $data, $extra_headers=null) {
  599. $ch = curl_init ();
  600. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
  601. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
  602. curl_setopt ($ch, CURLOPT_TIMEOUT, 10);
  603. curl_setopt ($ch, CURLOPT_URL, $url);
  604. curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
  605. curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
  606. curl_setopt ($ch, CURLOPT_POST, true);
  607. curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
  608. if (isset ($extra_headers)) {
  609. curl_setopt ($ch, CURLOPT_HTTPHEADER, $extra_headers);
  610. }
  611. $content = curl_exec ($ch);
  612. $http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE);
  613. if ($content === false) {
  614. $err_msg = "HTTP error: $http_code (" . curl_error($ch) . ')' . '\n';
  615. echo $err_msg;
  616. throw new Exception ($err_msg);
  617. }
  618. if ($http_code != 200) {
  619. $err_msg = "HTTP request failed ($http_code)\n";
  620. echo $err_msg;
  621. throw new Exception ($err_msg);
  622. }
  623. curl_close ($ch);
  624. return $content;
  625. }
  626.  
  627. function jsonrpc_call ($url, $method, $params, $extra_headers=null) {
  628. static $req_id = 1;
  629. $req = array (
  630. "jsonrpc" => '2.0',
  631. "id" => $req_id++,
  632. "method" => $method,
  633. "params" => $params
  634. );
  635. $req = json_encode ($req);
  636. $res = send ($url, $req, $extra_headers=$extra_headers);
  637. #echo $res;
  638. $res = json_decode ($res, true);
  639. if (!isset ($res)) {
  640. echo "error: not result\n";
  641. return null;
  642. } else if (!array_key_exists ('result', $res) || !isset ($res ['result'])) {
  643. print_r ($res ['error']);
  644. return null;
  645. } else {
  646. return $res ['result'];
  647. }
  648. return $res;
  649. }
  650.  
  651. function jsonsql_call ($cmd, $params) {
  652. global $_jsonsql_uri, $_iptvportal_header;
  653. return jsonrpc_call ($_jsonsql_uri, $cmd, $params, $extra_headers=$_iptvportal_header);
  654. }
  655.  
  656. function authorize_user ($auth_uri, $username, $password) {
  657. global $_iptvportal_header;
  658. $res = jsonrpc_call ($auth_uri, $cmd="authorize_user", $params=array (
  659. 'username' => $username,
  660. 'password' => $password
  661. ));
  662. if (isset ($res) && array_key_exists ('session_id', $res)) {
  663. $_iptvportal_header = array ('Iptvportal-Authorization: ' . 'sessionid=' . $res ['session_id']);
  664. }
  665. return $res;
  666. }
  667. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement