superedit-TV_OFERTA_PROGRAMOWA.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. <?php
  2. if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
  3. if (!defined('APP_PATH_ROOT')) define('APP_PATH_ROOT', dirname(__FILE__));
  4. if (!defined('APP_PATH_WWW')) define('APP_PATH_WWW', dirname(__FILE__));
  5. if (!defined('APP_PATH_CONFIG')) define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
  6. function TV_OFERTA_PROGRAMOWA() {
  7. require_once dirname(__FILE__) . '/' . 'se-lib' . '/' . 'Lib.php';
  8. Lib::loadClass('V');
  9. Lib::loadClass('User');
  10. Lib::loadClass('Config');
  11. Lib::loadClass('DB');
  12. $TvOfertaView = new TvOfertaView();
  13. $_print = V::get('_print', '', $_GET);
  14. if (!$_print) {
  15. $TvOfertaView->menu();
  16. }
  17. $task = V::get('task', 'cyfrowe', $_GET);
  18. if ($task == 'analog') {
  19. $programy = TvOfertaHelper::getProgramyAnalogowe();
  20. $groups = array();
  21. foreach ($programy as $r) {
  22. $groups[$r->TV_PROGRAM_PROFILE] = true;
  23. }
  24. $orderby = V::get('orderby', '', $_GET);
  25. $TvOfertaView->analogowe($programy, $groups, $orderby);
  26. }
  27. else {
  28. $pakiety_cyfrowe = TvOfertaHelper::getPakietyCyfrowe();
  29. $programy = TvOfertaHelper::getProgramyCyfrowe();
  30. $groups = array();
  31. foreach ($programy as $r) {
  32. $groups[$r->TV_PROGRAM_PROFILE] = true;
  33. }
  34. $orderby = V::get('orderby', '', $_GET);
  35. $view_type = V::get('view_type', '', $_GET);
  36. $TvOfertaView->cyfrowe($programy, $pakiety_cyfrowe, $groups, $orderby, $view_type);
  37. }
  38. }
  39. class TvOfertaView {
  40. // TODO: function link()
  41. function menu() {
  42. // TODO: MENU_INIT na FUNCTION_INIT i HEADER NOT INIT
  43. ?>
  44. <div>
  45. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA">Cyfrowe</a>
  46. |
  47. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&task=analog">Analogowe</a>
  48. <?php if ('analog' == V::get('task', '', $_GET)) : ?>
  49. <br />Analogowe posortowane po:
  50. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&task=analog&orderby=group">grupach tematycznych</a>
  51. |
  52. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&task=analog&orderby=name">nazwie</a>
  53. <?php else : ?>
  54. <br />Cyfrowe posortowane po:
  55. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&orderby=group">grupach tematycznych</a>
  56. |
  57. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&orderby=pakiety">pakietach</a>
  58. |
  59. <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&orderby=name">nazwie</a>
  60. <?php endif; ?>
  61. </div>
  62. <?php
  63. }
  64. function css() {
  65. ?>
  66. <style type="text/css">
  67. /* Styles for rotateTableCellContent plugin */
  68. #oferta-programowa-cyfrowe div.rotated {
  69. -webkit-transform:rotate(-90deg);
  70. -moz-transform:rotate(-90deg);
  71. -o-transform:rotate(-90deg);
  72. writing-mode:tb-rl;
  73. white-space:nowrap;
  74. }
  75. body{font-family:arial}
  76. .oferta-programowa { border-collapse:collapse; border:1px solid #7EC5FF; }
  77. .oferta-programowa td { border:1px solid #7EC5FF; }
  78. .oferta-programowa .prog-group { color:#7A7A7A; }
  79. .oferta-programowa .cyfrowe-prog-count {}
  80. .oferta-programowa .p2 { padding:0 2px; }
  81. .oferta-programowa .c { text-align:center; }
  82. .oferta-programowa .r { text-align:right; }
  83. .oferta-programowa .cyfrowe-prog-count td { background-color:#fff; }
  84. .oferta-programowa .hd { background-color:#FF5F5F; color:#fff; font-weight:bold; }
  85. .oferta-programowa .nr { color:#7A7A7A; }
  86. .oferta-programowa thead th { border:1px solid #7EC5FF; }
  87. #oferta-programowa-cyfrowe thead { background:none; }
  88. #oferta-programowa-cyfrowe thead th { vertical-align:bottom; border:none; }
  89. #oferta-programowa-cyfrowe .logo { text-align:center; background-color:#fff; border:none; }
  90. #oferta-programowa-cyfrowe .vertical { height:30px; white-space:nowrap; line-height:30px; padding:2px 0; }
  91. #oferta-programowa-cyfrowe .prog-pakiet-24 {background-color:#EBEBEB;} /* Biały */
  92. #oferta-programowa-cyfrowe .prog-pakiet-25 {background-color:#B88019;} /* Brązowy */
  93. #oferta-programowa-cyfrowe .prog-pakiet-26 {background-color:#CACACA;} /* Srebrny */
  94. #oferta-programowa-cyfrowe .prog-pakiet-27 {background-color:#FFE554;} /* Złoty */
  95. #oferta-programowa-cyfrowe .prog-pakiet-28 {background-color:#E7E4E4;} /* Platynowy */
  96. #oferta-programowa-cyfrowe .prog-pakiet-8 {background-color:#94CFFF;} /* CANAL+ */
  97. #oferta-programowa-cyfrowe .prog-pakiet-10 {background-color:#77A3FF;} /* CANAL+ HD */
  98. #oferta-programowa-analogowe { }
  99. /* print table background colors */
  100. table td, table th { -webkit-print-color-adjust:exact; }
  101. table { page-break-after:auto }
  102. tr { page-break-inside:avoid; page-break-after:auto; position:relative; }
  103. td { page-break-inside:avoid; page-break-after:auto; position:relative; }
  104. thead { display:table-header-group }
  105. tfoot { display:table-footer-group }
  106. </style>
  107. <?php
  108. }
  109. function cyfrowe($programy, $pakiety_cyfrowe, $groups, $orderby = '', $view_type = '') {
  110. $colors = array();
  111. $colors []= '#FFB3B3';
  112. $colors []= '#FFD9B3';
  113. $colors []= '#FFFFB3';
  114. $colors []= '#D9FFB3';
  115. $colors []= '#B3FFB3';
  116. $colors []= '#B3FFD9';
  117. $colors []= '#B3FFFF';
  118. $colors []= '#B3D9FF';
  119. $colors []= '#B3B3FF';
  120. $colors []= '#D9B3FF';
  121. $colors []= '#FFB3FF';
  122. $colors []= '#FFB3D9';
  123. $colors []= '#FFC6B3';
  124. $colors []= '#FFECB3';
  125. $colors []= '#ECFFB3';
  126. $colors []= '#C6FFB3';
  127. $colors []= '#B3FFC6';
  128. $colors []= '#B3FFEC';
  129. reset($colors);
  130. foreach ($groups as $name => $group) {
  131. $groups[$name] = next($colors);
  132. }
  133. if ($orderby == 'pakiety') {
  134. $group_sorter = new GroupSorterCallback();
  135. $group_sorter->setType('pakiety');
  136. $group_sorter->_pakiety_cyfrowe = $pakiety_cyfrowe;
  137. $group_sorter->addGroup('Biały');
  138. $group_sorter->addGroup('Brązowy');
  139. $group_sorter->addGroup('Srebrny');
  140. $group_sorter->addGroup('Złoty');
  141. $group_sorter->addGroup('Platynowy');
  142. $group_sorter->addGroup('Pakiet Premium: CANAL+');
  143. $group_sorter->addGroup('Pakiet Premium: CANAL+ HD');
  144. $pakiety_cyfrowe_names = array();
  145. foreach ($pakiety_cyfrowe as $pakiet) {
  146. $pakiety_cyfrowe_names[] = $pakiet->WWW_NAZWA;
  147. }
  148. $group_sorter->addGroups($pakiety_cyfrowe_names);
  149. uasort($programy, array($group_sorter, 'sort'));
  150. }
  151. else if ($orderby == 'name') {
  152. $group_sorter = new GroupSorterCallback();
  153. $group_sorter->setType('name');
  154. uasort($programy, array($group_sorter, 'sort'));
  155. }
  156. else {
  157. $group_sorter = new GroupSorterCallback();
  158. $group_sorter->setType('group');
  159. $group_sorter->addGroup('ogólnotematyczny');
  160. $group_sorter->addGroup('sport');
  161. $group_sorter->addGroup('filmowy');
  162. $group_sorter->addGroup('kobiecy');
  163. $group_sorter->addGroup('dla dzieci');
  164. $group_sorter->addGroup('informacyjny');
  165. $group_sorter->addGroups(array_keys($groups));
  166. uasort($programy, array($group_sorter, 'sort'));
  167. }
  168. $pakiety_cyfrowe_count = array();
  169. foreach ($pakiety_cyfrowe as $pakiet) {
  170. $pakiety_cyfrowe_count[$pakiet->ID] = 0;
  171. }
  172. $pakiety_cyfrowe_count['HD'] = 0;
  173. foreach ($programy as $program) {
  174. foreach ($pakiety_cyfrowe as $pakiet) {
  175. if (in_array($pakiet->ID, $program->pakiety)) {
  176. $pakiety_cyfrowe_count[$pakiet->ID] += 1;
  177. }
  178. }
  179. if ($program->TV_SIGAL_DELIVERY == 'DVB-HD') {
  180. $pakiety_cyfrowe_count['HD'] += 1;
  181. }
  182. }
  183. if ($view_type == 'csv') {
  184. $this->csv_cyfrowe($programy, $pakiety_cyfrowe, $groups, $orderby = '');
  185. return;
  186. }
  187. $this->css();
  188. ?>
  189. <script type="text/javascript">
  190. (function($){
  191. $.fn.rotateTableCellContent = function(options){
  192. /*
  193. Version 1.0
  194. 7/2011
  195. Written by David Votrubec (davidjs.com) and
  196. Michal Tehnik (@Mictech) for ST-Software.com
  197. @from https://github.com/ST-Software/Scripts/tree/master/jquery.rotateTableCellContent
  198. modified by Piotr Labudda: set -90deg from 90deg
  199. */
  200. var cssClass = ((options) ? options.className : false) || "vertical";
  201. var cellsToRotate = $('.' + cssClass, this);
  202. var betterCells = [];
  203. cellsToRotate.each(function(){
  204. var cell = $(this)
  205. , newText = cell.text()
  206. , height = cell.height()
  207. , width = cell.width()
  208. , newDiv = $('<div>', { height: width, width: height })
  209. , newInnerDiv = $('<div>', { text: newText, 'class': 'rotated' });
  210. newInnerDiv.css('-webkit-transform-origin', (width / 2) + 'px ' + (width / 2) + 'px');
  211. newInnerDiv.css('-moz-transform-origin', (width / 2) + 'px ' + (width / 2) + 'px');
  212. newDiv.append(newInnerDiv);
  213. betterCells.push(newDiv);
  214. });
  215. cellsToRotate.each(function(i){
  216. $(this).html(betterCells[i]);
  217. });
  218. };
  219. })(jQuery);
  220. jQuery(document).ready(function(){
  221. var n=jQuery('#oferta-programowa-cyfrowe')
  222. n.rotateTableCellContent();
  223. n.find('.logo').append(jQuery('<img src="icon/logo.biall-net.jpg">'));
  224. });
  225. </script>
  226. <div style="float:right;color:#aaa;"><?php echo date("Y-m-d"); ?></div>
  227. <h1>Oferta programowa
  228. <?php if (!V::get('_print', '', $_GET)) : ?>
  229. - <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&orderby=<?php echo $orderby; ?>&_print=1" target="_blank">Drukuj</a>
  230. <?php endif; ?>
  231. </h1>
  232. <p>porównanie pakietów telewizji cyfrowej</p>
  233. <table cellspacing="0" cellpadding="0" border="0" id="oferta-programowa-cyfrowe" class="oferta-programowa">
  234. <thead>
  235. <tr>
  236. <td colspan="3" class="logo">
  237. </td>
  238. <th class="vertical">HD&nbsp;&nbsp;</th>
  239. <?php foreach ($pakiety_cyfrowe as $pakiet) { ?>
  240. <th class="vertical prog-pakiet-<?php echo $pakiet->ID; ?>"><?php echo $pakiet->WWW_NAZWA; ?></th>
  241. <?php } ?>
  242. </tr>
  243. </thead>
  244. <tbody class="cyfrowe-prog-count">
  245. <tr>
  246. <td colspan="3" class="p2 r">Liczba programów</td>
  247. <td class="c"><?php echo $pakiety_cyfrowe_count['HD']; ?></td>
  248. <?php foreach ($pakiety_cyfrowe as $pakiet) { ?>
  249. <td class="c"><?php echo $pakiety_cyfrowe_count[$pakiet->ID]; ?></td>
  250. <?php } ?>
  251. </tr>
  252. </tbody>
  253. <tbody>
  254. <?php $t = 1; foreach ($programy as $program) { ?>
  255. <tr class="row-<?php echo ($t = 1 - $t); ?>">
  256. <td class="p2 r nr"><?php echo $program->TV_DVBC_EPG_CHANNEL_NUMBER; ?></td>
  257. <td class="p2"><?php echo $program->TV_NAZWA_PROGRAMU; ?></td>
  258. <td class="p2 c prog-group prog-group-<?php echo substr($groups[$program->TV_PROGRAM_PROFILE], 1); ?>"><?php echo $program->TV_PROGRAM_PROFILE; ?></td>
  259. <?php if ($program->TV_SIGAL_DELIVERY == 'DVB-HD') : ?>
  260. <td class="hd c">HD</td>
  261. <?php else: ?>
  262. <td></td>
  263. <?php endif; ?>
  264. <?php foreach ($pakiety_cyfrowe as $pakiet) { ?>
  265. <?php if (in_array($pakiet->ID, $program->pakiety)) : ?>
  266. <td class="c prog-pakiet-<?php echo $pakiet->ID; ?>">&diams;</td>
  267. <?php else : ?>
  268. <td></td>
  269. <?php endif; ?>
  270. <?php } ?>
  271. </tr>
  272. <?php } ?>
  273. </tbody>
  274. </table>
  275. <?php
  276. }
  277. function csv_cyfrowe($programy, $pakiety_cyfrowe, $groups, $orderby = '') {
  278. echo'<pre style="overflow:auto;border:1px solid red;text-align:left;">';
  279. foreach ($programy as $program) {
  280. $csv_line = array();
  281. $csv_line []= '"' . $program->TV_DVBC_EPG_CHANNEL_NUMBER . '"';
  282. $csv_line []= '"' . $program->TV_NAZWA_PROGRAMU . '"';
  283. $csv_line []= '"' . $program->TV_PROGRAM_PROFILE . '"';
  284. $csv_line []= '"' . (($program->TV_SIGAL_DELIVERY == 'DVB-HD')? 'HD' : '') . '"';
  285. foreach ($pakiety_cyfrowe as $pakiet) {
  286. if (in_array($pakiet->ID, $program->pakiety)) {
  287. $csv_line []= '"1"';
  288. } else {
  289. $csv_line []= '"0"';
  290. }
  291. }
  292. echo implode(';', $csv_line) . "\n";
  293. }
  294. echo'</pre>';
  295. }
  296. function analogowe($programy, $groups, $orderby = '') {
  297. $colors = array();
  298. $colors []= '#FFB3B3';
  299. $colors []= '#FFD9B3';
  300. $colors []= '#FFFFB3';
  301. $colors []= '#D9FFB3';
  302. $colors []= '#B3FFB3';
  303. $colors []= '#B3FFD9';
  304. $colors []= '#B3FFFF';
  305. $colors []= '#B3D9FF';
  306. $colors []= '#B3B3FF';
  307. $colors []= '#D9B3FF';
  308. $colors []= '#FFB3FF';
  309. $colors []= '#FFB3D9';
  310. $colors []= '#FFC6B3';
  311. $colors []= '#FFECB3';
  312. $colors []= '#ECFFB3';
  313. $colors []= '#C6FFB3';
  314. $colors []= '#B3FFC6';
  315. $colors []= '#B3FFEC';
  316. reset($colors);
  317. foreach ($groups as $name => $group) {
  318. $groups[$name] = next($colors);
  319. }
  320. if ($orderby == 'name') {
  321. $group_sorter = new GroupSorterCallback();
  322. $group_sorter->setType('name');
  323. uasort($programy, array($group_sorter, 'sort'));
  324. }
  325. else {
  326. $group_sorter = new GroupSorterCallback();
  327. $group_sorter->setType('group');
  328. $group_sorter->addGroup('ogólnotematyczny');
  329. $group_sorter->addGroup('sport');
  330. $group_sorter->addGroup('filmowy');
  331. $group_sorter->addGroup('kobiecy');
  332. $group_sorter->addGroup('dla dzieci');
  333. $group_sorter->addGroup('informacyjny');
  334. $group_sorter->addGroups(array_keys($groups));
  335. uasort($programy, array($group_sorter, 'sort'));
  336. }
  337. $this->css();
  338. ?>
  339. <h1>Oferta programowa - telewizja analogowa
  340. <?php if (!V::get('_print', '', $_GET)) : ?>
  341. - <a href="?MENU_INIT=TV_OFERTA_PROGRAMOWA&task=analog&orderby=<?php echo $orderby; ?>&_print=1" target="_blank">Drukuj</a>
  342. <?php endif; ?>
  343. </h1>
  344. <table cellspacing="0" cellpadding="0" border="0" id="oferta-programowa-analogowe" class="oferta-programowa">
  345. <thead>
  346. <tr>
  347. <th class="p2">Lp.</th>
  348. <th class="p2">Nazwa</th>
  349. <th class="p2">Grupa</th>
  350. <th class="p2">Czętotliwość</th>
  351. </tr>
  352. </thead>
  353. <tbody>
  354. <?php $lp = 0; $t = 1; foreach ($programy as $program) { $lp++; ?>
  355. <tr class="row-<?php echo ($t = 1 - $t); ?>">
  356. <td class="p2 prog-group"><?php echo $lp; ?></td>
  357. <td class="p2"><?php echo $program->TV_NAZWA_PROGRAMU; ?></td>
  358. <td class="p2 c prog-group prog-group-<?php echo substr($groups[$program->TV_PROGRAM_PROFILE], 1); ?>"><?php echo $program->TV_PROGRAM_PROFILE; ?></td>
  359. <td class="p2 r"><?php echo $program->TV_ANALOG_FREQUENCY; ?></td>
  360. </tr>
  361. <?php } ?>
  362. </tbody>
  363. </table>
  364. <?php
  365. }
  366. }
  367. class TvOfertaHelper {
  368. function getPakietyCyfrowe() {
  369. $pakiety_cyfrowe = array();
  370. $db = DB::getDB();
  371. $sql = "select gc.`ID`, gc.`POKAZ_NA_WWW`, gc.`WWW_NAZWA`, gc.`WWW_P_SERVICE`
  372. , if(gc.`WWW_P_SERVICE`='TVC', 1, 2) as order_by_lp
  373. from `USERS2_OFFERS_COSTS_GROUPS` as gc
  374. where
  375. gc.`A_STATUS` in('NORMAL', 'WAITING')
  376. and gc.`POKAZ_NA_WWW`='TAK'
  377. order by order_by_lp
  378. ";
  379. $res = $db->query($sql);
  380. while ($r = $db->fetch($res)) {
  381. $pakiety_cyfrowe[$r->ID] = $r;
  382. }
  383. return $pakiety_cyfrowe;
  384. }
  385. function getProgramyCyfrowe() {
  386. $db = DB::getDB();
  387. $programy = array();
  388. $sql = "select c.ID as c_ID
  389. , c.ID_PROJECT as c_ID_PROJECT
  390. , p.ID, p.TV_NAZWA_PROGRAMU, p.TV_LANGUAGE, p.TV_SIGAL_DELIVERY, p.TV_PROGRAM_PROFILE, p.TV_DVBC_EPG_CHANNEL_NUMBER, p.M_DIST_INVENTOR
  391. , CAST(p.`TV_DVBC_EPG_CHANNEL_NUMBER` AS SIGNED) as order_by_lp
  392. , GROUP_CONCAT(cg.ID) as cost_group_ids
  393. from `USERS2_OFFERS_COSTS_GROUPS` as cg
  394. left join `USERS2_OFFERS_COSTS` as c on(c.`ID_COSTS_GROUPS`=cg.`ID`)
  395. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p on(p.`ID`=c.`ID_PROJECT` and p.`M_DIST_TYPE`='TV__UMOWA ZAKUPU KANALU')
  396. where
  397. p.`M_DIST_TYPE`='TV__UMOWA ZAKUPU KANALU'
  398. and c.`S_OFFER_STATUS`='IN_OFFER'
  399. and cg.`ID_MAIN_COSTS_GROUP`=47
  400. and p.`ID` is not NULL
  401. and cg.`A_STATUS` in('WAITING', 'NORMAL')
  402. and c.`A_STATUS` in('WAITING', 'NORMAL')
  403. and p.`A_STATUS` in('WAITING', 'NORMAL')
  404. and p.`TV_SIGAL_DELIVERY` in ('DVB-SD', 'DVB-HD')
  405. and cg.`POKAZ_NA_WWW`='TAK'
  406. group by p.ID
  407. order by order_by_lp ASC
  408. limit 1000;
  409. ";
  410. $res = $db->query($sql);
  411. while ($r = $db->fetch($res)) {
  412. $r->pakiety = explode(',', $r->cost_group_ids);
  413. $programy []= $r;
  414. }
  415. return $programy;
  416. }
  417. function getProgramyAnalogowe() {
  418. $db = DB::getDB();
  419. $programy = array();
  420. $sql = "select c.ID as c_ID
  421. , c.ID_PROJECT as c_ID_PROJECT
  422. , p.ID, p.TV_NAZWA_PROGRAMU, p.TV_LANGUAGE, p.TV_SIGAL_DELIVERY
  423. , p.TV_PROGRAM_PROFILE
  424. -- , p.TV_DVBC_EPG_CHANNEL_NUMBER
  425. , p.M_DIST_INVENTOR
  426. , p.TV_ANALOG_FREQUENCY
  427. , CAST(p.`TV_DVBC_EPG_CHANNEL_NUMBER` AS SIGNED) as order_by_lp
  428. , GROUP_CONCAT(cg.ID) as cost_group_ids
  429. from `USERS2_OFFERS_COSTS_GROUPS` as cg
  430. left join `USERS2_OFFERS_COSTS` as c on(c.`ID_COSTS_GROUPS`=cg.`ID`)
  431. left join `IN7_MK_BAZA_DYSTRYBUCJI` as p on(p.`ID`=c.`ID_PROJECT` and p.`M_DIST_TYPE`='TV__UMOWA ZAKUPU KANALU')
  432. where
  433. p.`M_DIST_TYPE`='TV__UMOWA ZAKUPU KANALU'
  434. and c.`S_OFFER_STATUS`='IN_OFFER'
  435. and cg.`ID`=2
  436. and p.`ID` is not NULL
  437. and cg.`A_STATUS` in('WAITING', 'NORMAL')
  438. and c.`A_STATUS` in('WAITING', 'NORMAL')
  439. and p.`A_STATUS` in('WAITING', 'NORMAL')
  440. and p.`TV_SIGAL_DELIVERY` in ('ANALOG')
  441. -- and cg.`POKAZ_NA_WWW`='TAK'
  442. group by p.ID
  443. order by order_by_lp ASC
  444. limit 1000;
  445. ";
  446. $res = $db->query($sql);
  447. while ($r = $db->fetch($res)) {
  448. $r->pakiety = explode(',', $r->cost_group_ids);
  449. $programy []= $r;
  450. }
  451. return $programy;
  452. }
  453. }
  454. class GroupSorterCallback {
  455. var $groups_order;
  456. var $_type = '';// group, pakiety
  457. var $_pakiety_cyfrowe = '';
  458. function setType($type) {
  459. $this->_type = $type;
  460. }
  461. function setOrder($group_name, $order) {
  462. $this->groups_order[$group_name] = $order;
  463. }
  464. function getOrder($item) {
  465. if ($this->_type == 'name') {
  466. return 0;
  467. } else if ($this->_type == 'pakiety') {
  468. $min_order = 999;
  469. foreach ($this->_pakiety_cyfrowe as $pakiet) {
  470. if (in_array($pakiet->ID, $item->pakiety)) {
  471. $cur_order = 999;
  472. if (array_key_exists($pakiet->WWW_NAZWA, $this->groups_order)) {
  473. $cur_order = $this->groups_order[$pakiet->WWW_NAZWA];
  474. }
  475. $min_order = min($min_order, $cur_order);
  476. }
  477. }
  478. return $min_order;
  479. } else {
  480. $group_name = $item->TV_PROGRAM_PROFILE;
  481. if (array_key_exists($group_name, $this->groups_order)) {
  482. return $this->groups_order[$group_name];
  483. }
  484. }
  485. return count($this->groups_order) + 1;
  486. }
  487. function addGroup($group_name) {
  488. $this->groups_order[$group_name] = count($this->groups_order) + 1;
  489. }
  490. function addGroups($groups) {
  491. foreach ($groups as $group_name) {
  492. if (!array_key_exists($group_name, $this->groups_order)) {
  493. $this->addGroup($group_name);
  494. }
  495. }
  496. }
  497. function sort($a, $b) {
  498. $oa = $this->getOrder($a);
  499. $ob = $this->getOrder($b);
  500. // sortuj w kolejności malejącej
  501. if ($oa < $ob) {
  502. return -1;
  503. } else if ($oa > $ob) {
  504. return 1;
  505. } else {
  506. // sortuj rosnąco alfabetycznie
  507. if ($a->TV_NAZWA_PROGRAMU < $b->TV_NAZWA_PROGRAMU) {
  508. return -1;
  509. } else if ($a->TV_NAZWA_PROGRAMU > $b->TV_NAZWA_PROGRAMU) {
  510. return 1;
  511. } else {
  512. return 0;
  513. }
  514. }
  515. }
  516. }