api.speedcontrol.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. /**
  3. * Speed Control Report implementation
  4. */
  5. class SpeedControl {
  6. /**
  7. * Speed overrides database abstraction layer
  8. *
  9. * @var object
  10. */
  11. protected $overridesDb = '';
  12. /**
  13. * Contains users with non zero speed overrides
  14. *
  15. * @var array
  16. */
  17. protected $overridedUsers = array();
  18. /**
  19. * Contains all available users data as login=>userData
  20. *
  21. * @var array
  22. */
  23. protected $allUsersData = array();
  24. /**
  25. * Contains existing tariffs speed data as tariffName=>speeddown/speedup
  26. *
  27. * @var array
  28. */
  29. protected $allTariffSpeeds = array();
  30. /**
  31. * system messages helper placeholder
  32. *
  33. * @var object
  34. */
  35. protected $messages = '';
  36. //some predefined stuff here
  37. const DATA_SOURCE = 'userspeeds';
  38. const URL_ME = '?module=speedcontrol';
  39. const ROUTE_FIX = 'fix';
  40. /**
  41. * Submit and surrender unto Caesar
  42. * What is his rightful due
  43. * Complete oppression, no catharsis
  44. * In emphatic contempt for all of life
  45. */
  46. public function __construct() {
  47. $this->initMessages();
  48. $this->initOverDb();
  49. $this->loadUsersOverrides();
  50. if (!empty($this->overridedUsers)) {
  51. $this->loadUsersData();
  52. $this->loadTariffSpeeds();
  53. }
  54. }
  55. /**
  56. * Initializes the messages helper.
  57. *
  58. * @return void
  59. */
  60. protected function initMessages() {
  61. $this->messages = new UbillingMessageHelper();
  62. }
  63. /**
  64. * Initializes the overrides database abstraction layer.
  65. *
  66. * @return void
  67. */
  68. protected function initOverDb() {
  69. $this->overridesDb = new NyanORM(self::DATA_SOURCE);
  70. }
  71. /**
  72. * Loads all tariff speeds.
  73. *
  74. * @return void
  75. */
  76. protected function loadTariffSpeeds() {
  77. $this->allTariffSpeeds = zb_TariffGetAllSpeeds();
  78. }
  79. /**
  80. * Loads all user speed overrides from the database.
  81. *
  82. * @return void
  83. */
  84. protected function loadUsersOverrides() {
  85. $query = "SELECT `login` from `userspeeds` WHERE `speed` NOT LIKE '0'";
  86. $alloverrides = simple_queryall($query);
  87. $this->overridesDb->where('speed', 'NOT LIKE', '0');
  88. $this->overridedUsers = $this->overridesDb->getAll('login');
  89. }
  90. /**
  91. * Loads all user data.
  92. *
  93. * @return void
  94. */
  95. protected function loadUsersData() {
  96. $this->allUsersData = zb_UserGetAllDataCache();
  97. }
  98. /**
  99. * Renders the speed control report of users with some speed overrides set
  100. *
  101. * @return string
  102. */
  103. public function render() {
  104. $result = '';
  105. if (!empty($this->overridedUsers)) {
  106. $tablecells = wf_TableCell(__('Login'));
  107. $tablecells .= wf_TableCell(__('Real Name'));
  108. $tablecells .= wf_TableCell(__('Full address'));
  109. $tablecells .= wf_TableCell(__('Tariff'));
  110. $tablecells .= wf_TableCell(__('Tariff speeds'));
  111. $tablecells .= wf_TableCell(__('Speed override'));
  112. $tablecells .= wf_TableCell(__('Actions'));
  113. $tablerows = wf_TableRow($tablecells, 'row1');
  114. foreach ($this->overridedUsers as $io => $each) {
  115. if (isset($this->allUsersData[$each['login']])) {
  116. $userLogin = $each['login'];
  117. $userData = $this->allUsersData[$userLogin];
  118. $userTariff = $userData['Tariff'];
  119. if (isset($this->allTariffSpeeds[$userTariff])) {
  120. $normalSpeedDown = $this->allTariffSpeeds[$userTariff]['speeddown'];
  121. $normalSpeedUp = $this->allTariffSpeeds[$userTariff]['speedup'];
  122. } else {
  123. $normalSpeedDown = '-';
  124. $normalSpeedUp = '-';
  125. }
  126. $tablecells = wf_TableCell(wf_Link(UserProfile::URL_PROFILE . $userLogin, web_profile_icon() . ' ' . $each['login']));
  127. $tablecells .= wf_TableCell($userData['realname']);
  128. $tablecells .= wf_TableCell($userData['fulladress']);
  129. $tablecells .= wf_TableCell($userData['Tariff']);
  130. $tablecells .= wf_TableCell($normalSpeedDown . '/' . $normalSpeedUp);
  131. $tablecells .= wf_TableCell($each['speed']);
  132. $fixlink = wf_JSAlert(self::URL_ME . '&' . self::ROUTE_FIX . '=' . $userLogin, wf_img('skins/icon_repair.gif', __('Fix')), $this->messages->getEditAlert());
  133. $tablecells .= wf_TableCell($fixlink);
  134. $tablerows .= wf_TableRow($tablecells, 'row5');
  135. }
  136. }
  137. $result = wf_TableBody($tablerows, '100%', '0', 'sortable');
  138. } else {
  139. $result .= $this->messages->getStyledMessage(__('Nothing to show'), 'success');
  140. }
  141. return ($result);
  142. }
  143. /**
  144. * Drops the speed override for a user.
  145. *
  146. * @param string $userLogin The login of the user.
  147. *
  148. * @return void
  149. */
  150. public function dropOverride($userLogin) {
  151. global $billing;
  152. global $ubillingConfig;
  153. $login = ubRouting::filters($userLogin, 'mres');
  154. zb_UserDeleteSpeedOverride($login);
  155. zb_UserCreateSpeedOverride($login, 0);
  156. log_register('SPEEDCONTROL FIX (' . $login . ')');
  157. // Reset user if needed
  158. $billing->resetuser($login);
  159. log_register('RESET User (' . $login . ')');
  160. // Resurrect user if they are disconnected
  161. if ($ubillingConfig->getAlterParam('RESETHARD')) {
  162. zb_UserResurrect($login);
  163. }
  164. }
  165. }