source: trunk/Modules/TV/TV.php

Last change on this file was 912, checked in by chronos, 3 years ago
  • Modified: Updated Common package.
File size: 6.7 KB
Line 
1<?php
2
3include_once(dirname(__FILE__).'/../../Common/Global.php');
4
5class PageIPTV extends Page
6{
7 function __construct(System $System)
8 {
9 parent::__construct($System);
10 $this->Title = 'IPTV';
11 $this->Description = 'Síťová televize';
12 $this->ParentClass = 'PagePortal';
13 }
14
15 function Show(): string
16 {
17 $Output = 'Stažení přehrávače: <a href="https://www.videolan.org/vlc/">VLC Media Player</a><br/>'.
18 'Seznam všech kanálů do přehrávače: <a href="playlist.m3u">Playlist</a><br/>'.
19 'Zobrazení playlistu ve VLC lze provést pomocí menu <strong>View - Playlist</strong> nebo klávesové zkratky CTRL+L<br/>'.
20 '<br/>'.
21 '<div align="center"><strong>Výpis kanálů:</strong><br>';
22
23 $DbResult = $this->Database->query('SELECT COUNT(*) FROM `TV` LEFT JOIN `TVGroup` ON `TVGroup`.`Id` = `TV`.`Category` '.
24 ' LEFT JOIN `Language` ON `Language`.`Id` = `TV`.`Language` WHERE (`TV`.`Stream` <> "") OR (`TV`.`StreamWeb` <> "")');
25 $DbRow = $DbResult->fetch_row();
26 $PageList = GetPageList('TVChannels', $DbRow[0]);
27
28 $Output .= $PageList['Output'];
29 $Output .= '<table class="WideTable">';
30
31 $TableColumns = array(
32 array('Name' => 'Name', 'Title' => 'Jméno stanice'),
33 array('Name' => 'Language', 'Title' => 'Jazyk'),
34 array('Name' => 'Category', 'Title' => 'Zaměření'),
35 array('Name' => 'SourceType', 'Title' => 'Zdroj'),
36 array('Name' => '', 'Title' => 'Ladění'),
37 );
38 $Order = GetOrderTableHeader('TVChannels', $TableColumns, 'Name', 0);
39 $Output .= $Order['Output'];
40
41 $Query = 'SELECT `TV`.*, `TVGroup`.`Name` AS `Category`, `Language`.`Name` AS `Language` FROM `TV` LEFT JOIN `TVGroup` ON `TVGroup`.`Id` = `TV`.`Category` '.
42 ' LEFT JOIN `Language` ON `Language`.`Id` = `TV`.`Language` WHERE (`TV`.`Stream` <> "") OR (`TV`.`StreamWeb` <> "") '.$Order['SQL'].$PageList['SQLLimit'];
43
44 $DbResult = $this->Database->query($Query);
45 while ($Line = $DbResult->fetch_assoc())
46 {
47 if ($Line['Stream'] <> '') $Line['Show'] = '<a href="playlist.m3u?id='.$Line['ShortName'].'">Naladit</a>';
48 else
49 if ($Line['StreamWeb'] <> '') $Line['Show'] = '<a href="'.$Line['StreamWeb'].'">Naladit</a>';
50 else $Line['Show'] = '&nbsp;';
51
52 $Output .= '<tr><td><a href="'.$Line['Homepage'].'">'.$Line['Name'].'</a></td>'.
53 '<td>'.$Line['Language'].'</td>'.
54 '<td>'.$Line['Category'].'</td>'.
55 '<td>'.$Line['SourceType'].'</td>'.
56 '<td>'.$Line['Show'].'</td></tr>';
57 }
58 $Output .= '</table>';
59 $Output .= $PageList['Output'];
60
61 $Output .= '</div><br/>';
62
63 $Output .= 'Další online TV na webu: <a href="https://spustit.cz/">Spustit.cz</a><br/>';
64
65 return $Output;
66 }
67}
68
69class PagePlaylist extends Page
70{
71 function Show(): string
72 {
73 $this->RawPage = true;
74
75 Header("Content-Type: audio/mpegurl");
76 Header("Content-Disposition: attachment; filename=playlist.m3u");
77
78 $Output = '#EXTM3U'."\n";
79 if (array_key_exists('id', $_GET))
80 {
81 $DbResult = $this->Database->select('TV', '*', ' (`Stream` <> "") AND (`ShortName`="'.addslashes($_GET['id']).'") ');
82 if ($DbResult->num_rows > 0)
83 {
84 $Channel = $DbResult->fetch_array();
85 $Output .= '#EXTINF:0,'.$Channel['Name']."\n";
86 $Output .= $Channel['Stream']."\n";
87 }
88 } else
89 {
90 $DbResult = $this->Database->select('TV', '*', ' (`Stream` <> "") ORDER BY `Name` ');
91 while ($Channel = $DbResult->fetch_array())
92 {
93 $Output .= '#EXTINF:0,'.$Channel['Name']."\n";
94 $Output .= $Channel['Stream']."\n";
95 }
96 }
97 return $Output;
98 }
99}
100
101class ModuleTV extends Module
102{
103 function __construct(System $System)
104 {
105 parent::__construct($System);
106 $this->Name = 'TV';
107 $this->Version = '1.0';
108 $this->Creator = 'Chronos';
109 $this->License = 'GNU/GPLv3';
110 $this->Description = 'Television channels management';
111 $this->Models = array(TVGroup::GetClassName(), TV::GetClassName());
112 }
113
114 function DoStart(): void
115 {
116 $this->System->RegisterPage(['tv'], 'PageIPTV');
117 $this->System->RegisterPage(['tv', 'playlist.m3u'], 'PagePlaylist');
118 $this->System->FormManager->RegisterClass('TV', array(
119 'Title' => 'TV kanály',
120 'Table' => 'TV',
121 'DefaultSortColumn' => 'Name',
122 'Items' => array(
123 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
124 'Frequency' => array('Type' => 'Integer', 'Caption' => 'Frekvence', 'Default' => '', 'Suffix' => 'Hz'),
125 'Norm' => array('Type' => 'String', 'Caption' => 'Video norma', 'Default' => ''),
126 'Homepage' => array('Type' => 'Hyperlink', 'Caption' => 'Web', 'Default' => ''),
127 'Language' => array('Type' => 'TLanguage', 'Caption' => 'Jazyk', 'Default' => '', 'Null' => true),
128 'ShortName' => array('Type' => 'String', 'Caption' => 'Zkratka', 'Default' => ''),
129 'Stream' => array('Type' => 'Hyperlink', 'Caption' => 'Proud', 'Default' => ''),
130 'StreamWeb' => array('Type' => 'Hyperlink', 'Caption' => 'Proud web', 'Default' => ''),
131 'SourceType' => array('Type' => 'String', 'Caption' => 'Typ zdroje', 'Default' => ''),
132 'Category' => array('Type' => 'TTVGroup', 'Caption' => 'Kategorie', 'Default' => '', 'Null' => true),
133 ),
134 ));
135 $this->System->FormManager->RegisterClass('TVGroup', array(
136 'Title' => 'Skupiny TV kanálů',
137 'Table' => 'TVGroup',
138 'DefaultSortColumn' => 'Name',
139 'Items' => array(
140 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
141 'Channels' => array('Type' => 'TTVListCategory', 'Caption' => 'Kanály', 'Default' => ''),
142 ),
143 ));
144 $this->System->FormManager->RegisterFormType('TTVGroup', array(
145 'Type' => 'Reference',
146 'Table' => 'TVGroup',
147 'Id' => 'Id',
148 'Name' => 'Name',
149 'Filter' => '1',
150 ));
151 $this->System->FormManager->RegisterFormType('TTVListCategory', array(
152 'Type' => 'ManyToOne',
153 'Table' => 'TV',
154 'Id' => 'Id',
155 'Ref' => 'Category',
156 'Filter' => '1',
157 ));
158 }
159}
160
161class TVGroup extends Model
162{
163 static function GetModelDesc(): ModelDesc
164 {
165 $Desc = new ModelDesc(self::GetClassName());
166 $Desc->AddString('Name');
167 return $Desc;
168 }
169}
170
171class TV extends Model
172{
173 static function GetModelDesc(): ModelDesc
174 {
175 $Desc = new ModelDesc(self::GetClassName());
176 $Desc->AddString('Name');
177 $Desc->AddInteger('Frequency');
178 $Desc->AddString('Norm');
179 $Desc->AddString('Homepage');
180 $Desc->AddReference('Language', Language::GetClassName());
181 $Desc->AddString('ShortName');
182 $Desc->AddString('Stream');
183 $Desc->AddString('StreamWeb');
184 $Desc->AddString('SourceType');
185 $Desc->AddReference('Category', TVGroup::GetClassName());
186 return $Desc;
187 }
188}
Note: See TracBrowser for help on using the repository browser.