Advertisement
Guest User

Untitled

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