install.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. if(!$go)
  5. exit;
  6. $pid = isset($url['plugin']) ? sys::int($url['plugin']) : exit;
  7. $sql->query('SELECT `name`, `cfg`, `upd`, `incompatible`, `required`, `packs`, `price` FROM `plugins` WHERE `id`="'.$pid.'" AND `game`="'.$server['game'].'" LIMIT 1');
  8. if(!$sql->num())
  9. exit;
  10. $plugin = $sql->get();
  11. // Проверка установки плагина
  12. $sql->query('SELECT `id` FROM `control_plugins_install` WHERE `server`="'.$sid.'" AND `plugin`="'.$pid.'" LIMIT 1');
  13. if($sql->num())
  14. sys::outjs(array('e' => 'Данный плагин уже установлен'));
  15. $upd = false;
  16. // Если есть более поздняя версия плагина
  17. if($plugin['upd'])
  18. {
  19. $sql->query('SELECT `name`, `id`, `cfg`, `incompatible`, `required`, `packs`, `price` FROM `plugins_update` WHERE `plugin`="'.$pid.'" ORDER BY `id` DESC LIMIT 1');
  20. if($sql->num())
  21. {
  22. $plugin = array_merge($plugin, $sql->get());
  23. $upd = true;
  24. }
  25. }
  26. $buy = false;
  27. // Если платный плагин
  28. if($plugin['price'])
  29. {
  30. // Проверка покупки
  31. $sql->query('SELECT `id` FROM `control_plugins_buy` WHERE `plugin`="'.$pid.'" AND `server`="'.$sid.'" LIMIT 1');
  32. if($sql->num())
  33. $buy = true;
  34. else{
  35. // Проверка баланса
  36. if($user['balance'] < $plugin['price'])
  37. sys::outjs(array('e' => 'У вас не хватает '.(round($plugin['price']-$user['balance'], 2)).' '.$cfg['currency']), $name_mcache);
  38. }
  39. }
  40. // Проверка на доступность плагина к установленной на сервере сборке
  41. $packs = strpos($plugin['packs'], ':') ? explode(':',$plugin['packs']) : array($plugin['packs']);
  42. if(!in_array($server['pack'], $packs) AND $plugin['packs'] != 'all')
  43. exit;
  44. include(LIB.'control/plugins.php');
  45. // Проверка на наличие несовместимости с уже установленными плагинами
  46. plugins::incompatible($sid, $plugin['incompatible'], $nmch);
  47. // Проверка на наличие необходимых установленых плагинов для устанавливаемого дополнения
  48. plugins::required($sid, $plugin['required'], $nmch);
  49. $sql->query('SELECT `address`, `passwd` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  50. $unit = $sql->get();
  51. if(!isset($ssh))
  52. include(LIB.'ssh.php');
  53. if(!$ssh->auth($unit['passwd'], $unit['address']))
  54. sys::outjs(array('e' => sys::text('error', 'ssh')), $nmch);
  55. if($upd)
  56. {
  57. $qsql = 'WHERE `update`="'.$plugin['id'].'" ORDER BY `id` ASC';
  58. $fzip = 'u'.$plugin['id'];
  59. $upd = $plugin['id'];
  60. }else{
  61. $qsql = 'WHERE `plugin`="'.$pid.'" AND `update`="0" ORDER BY `id` ASC';
  62. $fzip = $pid;
  63. $upd = 0;
  64. }
  65. // Директория игр. сервера
  66. $dir = '/servers/'.$server['uid'].'/';
  67. // Установка файлов на сервер
  68. $ssh->set('cd '.$dir.' && screen -dmS install_'.$start_point.' sudo -u server'.$server['uid'].' sh -c "'
  69. .'wget --no-check-certificate '.$cfg['plugins'].'install/'.$fzip.'.zip && unzip -o '.$fzip.'.zip; rm '.$fzip.'.zip;'
  70. .'find . -type d -exec chmod 700 {} \;;'
  71. .'find . -type f -exec chmod 600 {} \;;'
  72. .'chmod 500 '.params::$aFileGame[$server['game']].'"');
  73. // Удаление файлов
  74. $sql->query('SELECT `file` FROM `plugins_delete` '.$qsql);
  75. while($delete = $sql->get())
  76. $ssh->set('sudo -u server'.$server['uid'].' rm '.$dir.$delete['file']);
  77. // Удаление текста из файлов
  78. $sql->query('SELECT `text`, `file`, `regex` FROM `plugins_clear` '.$qsql);
  79. while($clear = $sql->get())
  80. plugins::clear($clear, $server['uid'], $dir);
  81. // Добавление текста в файлы
  82. $sql->query('SELECT `text`, `file`, `top` FROM `plugins_write` '.$qsql);
  83. while($write = $sql->get())
  84. plugins::write($write, $server['uid'], $dir);
  85. // Если платный плагин
  86. if(!$buy AND $plugin['price'])
  87. {
  88. $sql->query('UPDATE `users` set `balance`=`balance`-"'.$plugin['price'].'" WHERE `id`="'.$user['id'].'" LIMIT 1');
  89. $sql->query('INSERT INTO `control_plugins_buy` set `plugin`="'.$pid.'", `key`="'.md5(strip_tags($plugin['name'])).'", `server`="'.$sid.'", `price`="'.$plugin['price'].'", `time`="'.$start_point.'"');
  90. // Запись логов
  91. $sql->query('INSERT INTO `logs` set `user`="'.$user['id'].'", `text`="'.sys::updtext(sys::text('logs', 'ctrl_buy_plugin'),
  92. array('plugin' => strip_tags($plugin['name']), 'money' => $plugin['price'], 'id' => $sid)).'", `date`="'.$start_point.'", `type`="buy", `money`="'.$plugin['price'].'"');
  93. }
  94. // Запись данных в базу
  95. $sql->query('INSERT INTO `control_plugins_install` set `server`="'.$sid.'", `plugin`="'.$pid.'", `upd`="'.$upd.'", `time`="'.$start_point.'"');
  96. // Очистка кеша
  97. $mcache->delete('ctrl_server_plugins_'.$sid);
  98. if($plugin['cfg'])
  99. sys::outjs(array('s' => 'cfg'), $nmch);
  100. sys::outjs(array('s' => 'ok'), $nmch);
  101. ?>