1 | <?php
|
---|
2 |
|
---|
3 | class SharePage extends Page
|
---|
4 | {
|
---|
5 | var $FullTitle = 'Prohledávání sdílených souborů';
|
---|
6 | var $ShortTitle = 'Sdílené soubory';
|
---|
7 | var $ParentClass = 'PagePortal';
|
---|
8 | var $Dependencies = array('Log');
|
---|
9 | var $MaxNesting = 20; // Maximální vnoření
|
---|
10 | var $Promene = array( // Automatické zapamatování proměnných
|
---|
11 | 'keyword' => '',
|
---|
12 | 'file_type' => 0,
|
---|
13 | 'size' => '',
|
---|
14 | 'size_method' => 1,
|
---|
15 | 'size_units' => 2,
|
---|
16 | 'online' => 'on',
|
---|
17 | 'order' => 'size DESC',
|
---|
18 | 'page' => '0',
|
---|
19 | 'view' => 1,
|
---|
20 | );
|
---|
21 |
|
---|
22 | function ShowTime()
|
---|
23 | {
|
---|
24 | return date("H:i:s")."<br />\n";
|
---|
25 | }
|
---|
26 |
|
---|
27 | // Inicializace Logu
|
---|
28 | //$LogFile = fopen('info.log','w');
|
---|
29 | function Loguj($Info)
|
---|
30 | {
|
---|
31 | //global $LogFile;
|
---|
32 | //fputs($LogFile,$Info."\n");
|
---|
33 | }
|
---|
34 | //Show_Array($GLOBALS);
|
---|
35 |
|
---|
36 | // Najde cestu ke keřenu
|
---|
37 | function PlnaCesta($Row)
|
---|
38 | {
|
---|
39 | // Vyhledání cesty
|
---|
40 | $Otec = $Row['Parent'];
|
---|
41 | $Cesta = ''; //$Row['name'];
|
---|
42 | $i = 0;
|
---|
43 | while (($Otec > 1) && ($i < $this->MaxNesting))
|
---|
44 | {
|
---|
45 | $DbResult = $this->Database->query('SELECT Id,Name,Parent FROM NetworkShareItem WHERE Id='.$Otec);
|
---|
46 | $Row = $DbResult->fetch_array();
|
---|
47 | $this->Loguj('Name: '.$Row['Name'].' ID:'.$Row['Id'].' Parent:'.$Row['Parent']);
|
---|
48 | $Cesta = $Row['Name'].'\\'.$Cesta;
|
---|
49 | $Otec = $Row['Parent'];
|
---|
50 | $i++;
|
---|
51 | }
|
---|
52 | if ($i >= $this->MaxNesting) $Cesta = '?'.'\\'.$Cesta;
|
---|
53 | return '\\\\'.$Cesta;
|
---|
54 | }
|
---|
55 |
|
---|
56 | // Převede velikost v bajtech na odpovídající jednotky
|
---|
57 | function PrevedVelikost($Velikost)
|
---|
58 | {
|
---|
59 | $Jednotky = array('B','kB','MB','GB','TB','PB','EB');
|
---|
60 | while ($Velikost >= 1024)
|
---|
61 | {
|
---|
62 | $Velikost = round($Velikost / 1024 * 10) / 10;
|
---|
63 | array_shift($Jednotky);
|
---|
64 | }
|
---|
65 | return $Velikost.' '.$Jednotky[0];
|
---|
66 | }
|
---|
67 |
|
---|
68 | function Show()
|
---|
69 | {
|
---|
70 | if (!$this->System->User->CheckPermission('NetworkShare', 'Display')) return 'Nemáte oprávnění';
|
---|
71 |
|
---|
72 | // If not only online checkbox checked
|
---|
73 | if (array_key_exists('view', $_POST) and !array_key_exists('online', $_POST)) $_POST['online'] = 'off';
|
---|
74 |
|
---|
75 | // Default host list view
|
---|
76 | if ((count($_POST) == 0) and (count($_GET) == 0))
|
---|
77 | {
|
---|
78 | $_POST['view'] = 1;
|
---|
79 | $_POST['page'] = 0;
|
---|
80 | }
|
---|
81 |
|
---|
82 | // Toggle order direction
|
---|
83 | if (array_key_exists('order', $_GET) and ($_SESSION['order'] == $_GET['order'])) $_GET['order'] .= ' DESC';
|
---|
84 |
|
---|
85 | //print_r($_POST);
|
---|
86 | foreach ($this->Promene as $Index => $Prvek)
|
---|
87 | {
|
---|
88 | if (!array_key_exists($Index, $_SESSION)) $_SESSION[$Index] = $this->Promene[$Index];
|
---|
89 | if (array_key_exists($Index, $_GET)) $_SESSION[$Index] = $_GET[$Index];
|
---|
90 | if (array_key_exists($Index, $_POST)) $_SESSION[$Index] = $_POST[$Index];
|
---|
91 | if (($Index == 'keyword') and (array_key_exists('view', $_GET))) $_SESSION[$Index] = $this->Promene[$Index];
|
---|
92 | if (($Index == 'view') and ((array_key_exists('keyword', $_POST)) or (array_key_exists('keyword', $_GET)))) $_SESSION[$Index] = '';
|
---|
93 | $$Index = $_SESSION[$Index];
|
---|
94 | //echo('$'.$Index.' = '.$_SESSION[$Index].'<br>');
|
---|
95 | }
|
---|
96 | //echo($keyword);
|
---|
97 | //if ($keyword)
|
---|
98 | //if ($keyword != '') $view = '';
|
---|
99 |
|
---|
100 | //$this->Database->select_db('share');
|
---|
101 |
|
---|
102 | // Log search
|
---|
103 | if (array_key_exists('keyword', $_POST) or array_key_exists('keyword', $_GET))
|
---|
104 | $this->System->ModuleManager->Modules['Log']->NewRecord('Share', 'Hledaný výraz', $_SESSION['keyword']);
|
---|
105 |
|
---|
106 | // Zobrazení formuláře
|
---|
107 | $Output = '<form action="?" method="post">
|
---|
108 | <input type="hidden" name="view" value="">
|
---|
109 | <input type="hidden" name="page" value="0">
|
---|
110 | Hledat: <input type="text" name="keyword" value="'.$keyword.'">';
|
---|
111 | $Output .= '<input type="submit" value="Hledat"> Typ: <select name="file_type" id="file_type">';
|
---|
112 | $Selected = array('', '', '', '', '', '', '', '');
|
---|
113 | $Selected[$file_type] = 'selected ';
|
---|
114 | $Output .= '<option '.$Selected[0].'value="0">Vše
|
---|
115 | <option '.$Selected[1].'value="1">Audio(mp3,wav,ogg,mid)
|
---|
116 | <option '.$Selected[2].'value="2">Dokument(doc,txt,pdf)
|
---|
117 | <option '.$Selected[3].'value="3">Komprimovaný(zip,rar,ace,tar)
|
---|
118 | <option '.$Selected[4].'value="4">Video(mpeg,avi,ogm,mkv,asf)
|
---|
119 | <option '.$Selected[5].'value="5">Obrázek(jpg,bmp,gif,png)
|
---|
120 | <option '.$Selected[6].'value="6">Složka
|
---|
121 | <option '.$Selected[7].'value="7">Spustitelný(exe,com)
|
---|
122 | <option '.$Selected[7].'value="8">Obraz disku(iso,nrg,ccd,bin)
|
---|
123 | </select>
|
---|
124 | Velikost: <select name="size_method">';
|
---|
125 | $Selected = array('', '', '');
|
---|
126 | $Selected[$size_method] = 'selected ';
|
---|
127 | $Output .= '<option '.$Selected[0].'value="0">Rovno
|
---|
128 | <option '.$Selected[1].'value="1">Nejméně
|
---|
129 | <option '.$Selected[2].'value="2">Nejvíce
|
---|
130 | </select>
|
---|
131 | <input type="edit" size="5" name="size" value="'.$size.'">
|
---|
132 | <select name="size_units">';
|
---|
133 | $Selected = array('', '', '', '');
|
---|
134 | $Selected[$size_units] = 'selected ';
|
---|
135 | $Output .= '<option '.$Selected[0].'value="0">B
|
---|
136 | <option '.$Selected[1].'value="1">kB
|
---|
137 | <option '.$Selected[2].'value="2">MB
|
---|
138 | <option '.$Selected[3].'value="3">GB
|
---|
139 | </select> ';
|
---|
140 |
|
---|
141 | if ($online == 'on') $Selected = 'checked '; else $Selected = '';
|
---|
142 | $Output .= '<input type="checkbox" '.$Selected.'name="online">Pouze aktivní uživatele<br>
|
---|
143 | </form>';
|
---|
144 |
|
---|
145 | //$Output .= $view;
|
---|
146 | if ($view != '')
|
---|
147 | {
|
---|
148 | // Zobrazení obsahu vybrané složky
|
---|
149 | $DbResult = $this->Database->query('SELECT * FROM NetworkShareItem WHERE id='.$view);
|
---|
150 | $Row = $DbResult->fetch_array();
|
---|
151 | $Cesta = $this->PlnaCesta($Row);
|
---|
152 | $Output .= '<strong>Obsah složky: '.$Cesta.$Row['name'].'</strong><br />';
|
---|
153 | $Podminka = '(Parent='.$view.')';
|
---|
154 | $Nahoru = $Row['Parent'];
|
---|
155 | } else
|
---|
156 | {
|
---|
157 | // Zobrazení výsledku vyhledávání
|
---|
158 | $Output .= '<strong>Výsledek hledání:</strong><br />';
|
---|
159 | $Podminka = "(Name LIKE '%".strtr($keyword, '*', '%')."%')";
|
---|
160 |
|
---|
161 | // Hledání podle typů
|
---|
162 | $Pripony = array('',
|
---|
163 | "(ext LIKE 'mp3') OR (ext LIKE 'wav') OR (ext LIKE 'ogg') OR (ext LIKE 'mid')",
|
---|
164 | "(ext LIKE 'doc') OR (ext LIKE 'txt') OR (ext LIKE 'pdf')",
|
---|
165 | "(ext LIKE 'zip') OR (ext LIKE 'rar') OR (ext LIKE 'ace') OR (ext LIKE 'tar')",
|
---|
166 | "(ext LIKE 'mpeg') OR (ext LIKE 'mpg') OR (ext LIKE 'avi') OR (ext LIKE 'ogm') OR (ext LIKE 'mkv') OR (ext LIKE 'asf')",
|
---|
167 | "(ext LIKE 'jpg') OR (ext LIKE 'gif') OR (ext LIKE 'bmp') OR (ext LIKE 'ico') OR (ext LIKE 'png')",
|
---|
168 | "(type='2')",
|
---|
169 | "(ext LIKE 'exe') OR (ext LIKE 'com')",
|
---|
170 | "(ext LIKE 'iso') OR (ext LIKE 'nrg') OR (ext LIKE 'ccd') OR (ext LIKE 'bin') OR (ext LIKE 'mds')",
|
---|
171 | );
|
---|
172 | if ($file_type > 0) $Podminka .= ' AND ('.$Pripony[$file_type].')';
|
---|
173 |
|
---|
174 | //Hledání podle velikosti
|
---|
175 | $Jednotky = array(1, 1024, 1048576, 1073741824);
|
---|
176 | if (is_numeric($size))
|
---|
177 | {
|
---|
178 | $Metoda = array('=', '>', '<');
|
---|
179 | $Velikost = $size * $Jednotky[$size_units];
|
---|
180 | $Podminka .= ' AND (Size'.$Metoda[$size_method].$Velikost.')';
|
---|
181 | }
|
---|
182 | }
|
---|
183 |
|
---|
184 | // Omezení na online/offline uživatele
|
---|
185 | //$this->Database->select_db('is');
|
---|
186 | if ($online == 'on') $DbResult = $this->Database->query('SELECT Id FROM NetworkDevice WHERE Online=1 AND Member IS NOT NULL');
|
---|
187 | else $DbResult = $this->Database->query('SELECT Id FROM NetworkDevice');
|
---|
188 | $Vyber = '';
|
---|
189 | while ($Row = $DbResult->fetch_array()) $Vyber .= $Row['Id'].',';
|
---|
190 | $Podminka .= ' AND (Host IN ('.substr($Vyber, 0, -1).'))';
|
---|
191 | //echo($Podminka.'<br>');
|
---|
192 | //$this->Database->select_db('share');
|
---|
193 |
|
---|
194 | //ShowTime();
|
---|
195 |
|
---|
196 | // Zjištění počtu výskytů
|
---|
197 | //DB_Query("SELECT COUNT(*) FROM NetworkShareItem WHERE ($Podminka)");
|
---|
198 | //$Row = DB_Row();
|
---|
199 | //$Pocet = $Row[0];
|
---|
200 |
|
---|
201 | // Zobrazení [..]
|
---|
202 | if (($view != '') && ($page == 0) && ($Nahoru > 0))
|
---|
203 | {
|
---|
204 | $DbResult = $this->Database->query('SELECT * FROM NetworkShareItem WHERE Id='.$view);
|
---|
205 | $Row = $DbResult->fetch_array();
|
---|
206 | //ShowArray($Row);
|
---|
207 | $Datum = explode(' ', $Row['date']);
|
---|
208 | $upstr = '<tr><td bgcolor="#F0F0FF"><a href="index.php?view='.$Nahoru.'">[..]</a></td><td bgcolor="#F0F0FF" width="1%"></td><td align="right" bgcolor="#F0F0FF" width="1%">'.$this->PrevedVelikost($Row['size']).'</td><td bgcolor="#F0F0FF" width="90">'.$Datum[0].'</td><td bgcolor="#F0F0FF" width="50%">'.$Cesta.'</td></tr>';
|
---|
209 | } else $upstr = '';
|
---|
210 |
|
---|
211 | // Nacteni vysledku z databaze
|
---|
212 | $PerPage = 30;
|
---|
213 | $Dotaz = "SELECT COUNT(*) FROM NetworkShareItem WHERE (".$Podminka.")";
|
---|
214 | if ($order != '') $Dotaz .= ' ORDER BY '.$order;
|
---|
215 | $Dotaz .= " LIMIT ".($page * $PerPage).",".$PerPage;
|
---|
216 | $DbResult = $this->Database->query($Dotaz);
|
---|
217 | $Row = $DbResult->fetch_array();
|
---|
218 | $Pocet = $Row[0];
|
---|
219 |
|
---|
220 | if ($Pocet > 0)
|
---|
221 | {
|
---|
222 | $Output .= 'Nalezeno celkem: '.$Pocet.' položek<br />';
|
---|
223 | } else
|
---|
224 | $Output .= 'Podle zadaných podmínek nic nenalezeno';
|
---|
225 | if (($Pocet > 0) || ($upstr))
|
---|
226 | {
|
---|
227 | $Output .= '<table width="100%" style="font-size: 8pt;" border="0" cellpadding="2" cellspacing="2">
|
---|
228 | <tr><th bgcolor="#E0E0FF"><a href="index.php?order=name">Soubor</a></th><th bgcolor="#E0E0FF"><a href="index.php?order=ext">Přípona</a></th><th bgcolor="#E0E0FF"><a href="index.php?order=size">Velikost</a></th><th bgcolor="#E0E0FF"><a href="index.php?order=date">Datum</a></th><th bgcolor="#E0E0FF">Umístění</th></tr>';
|
---|
229 | $Output .= $upstr;
|
---|
230 | if ($Pocet > 0)
|
---|
231 | {
|
---|
232 | // Zobrazení tabulky s výsledky
|
---|
233 | $Pages = floor($Pocet / $PerPage);
|
---|
234 | // echo($Dotaz);
|
---|
235 |
|
---|
236 | // Zobrazení poloľek
|
---|
237 | while ($Row = $DbResult->fetch_array())
|
---|
238 | {
|
---|
239 | // Loguj('Radek '.$Row['name']);
|
---|
240 | $Radek = $Row;
|
---|
241 | $Cesta = $this->PlnaCesta($Row);
|
---|
242 | $Datum = explode(' ', $Radek['Date']);
|
---|
243 |
|
---|
244 | // Zobrazení řádku
|
---|
245 | $Cesta2 = strtr($Cesta.$Radek['Name'], '\\', '/');
|
---|
246 | if ($Radek['Ext'] != '') $Cesta2 .= '.'.$Radek['Ext'];
|
---|
247 | if ($Radek['Type'] != 0) $Adresa = 'index.php?view='.$Radek['Id'].'">['.$Radek['Name'].']';
|
---|
248 | else
|
---|
249 | {
|
---|
250 | if (strstr($_SERVER['HTTP_USER_AGENT'], 'Linux')) $Adresa = 'smb:'.$Cesta2.'">'.$Radek['Name'];
|
---|
251 | else $Adresa = 'file:///'.$Cesta2.'">'.$Radek['Name'];
|
---|
252 | }
|
---|
253 | $Output .= '<tr><td bgcolor="#F0F0FF"><a href="'.$Adresa.'</a></td>'.
|
---|
254 | '<td bgcolor="#F0F0FF" width="1%">'.$Radek['Ext'].'</td>'.
|
---|
255 | '<td align="right" bgcolor="#F0F0FF" width="1%">'.$this->PrevedVelikost($Radek['Size']).'</td>'.
|
---|
256 | '<td bgcolor="#F0F0FF" width="90">'.$Datum[0].'</td>'.
|
---|
257 | '<td bgcolor="#F0F0FF" width="50%" >'.$Cesta.'</td></tr>';
|
---|
258 | }
|
---|
259 | $Output .= '</table>';
|
---|
260 | }
|
---|
261 | }
|
---|
262 | if ($Pocet > 0)
|
---|
263 | {
|
---|
264 | // Celkový přehled
|
---|
265 | if ($view == 1)
|
---|
266 | {
|
---|
267 | $DbResult = $this->Database->query('SELECT SUM(Size) FROM NetworkShareItem WHERE (Parent=1) AND (Host IN ('.substr($Vyber,0,-1).'))');
|
---|
268 | $Row = $DbResult->fetch_array();
|
---|
269 | $SizeOnline = $this->PrevedVelikost($Row[0]);
|
---|
270 | $DbResult = $this->Database->query('SELECT Size FROM NetworkShareItem WHERE Id=1');
|
---|
271 | $Row = $DbResult->fetch_array();
|
---|
272 | $Size = $this->PrevedVelikost($Row['size']);
|
---|
273 | $DbResult = $this->Database->query('SELECT COUNT(*) FROM NetworkShareItem');
|
---|
274 | $Row = $DbResult->fetch_array();
|
---|
275 | $Output .= '<br />Celková velikost online sdílených dat: '.$SizeOnline;
|
---|
276 | $Output .= '<br />Celkem v databázi '.$Row[0].' položek o celkové velikosti '.$Size.'<br />';
|
---|
277 | $Output .= '<br /><strong>Popis služby:</strong><br />
|
---|
278 | Tento vyhledávač slouží k prohledávání obsahu samba sdílení všech uživatelů. Je postaven na filosofii, čím více lidí bude sdílet data, tím větší bude pravděpodobnost, že najdete to co hledáte. Každý počítač je jednou za den oskenován a informace o jeho sdílení jsou zaneseny do databáze. Každou hodinu probíhá kontrola zapnutých počítačů a jejich případné oskenování. Při hledání použíjte znak * podobně jako při vyhledávání souborů na disku.<br><br>
|
---|
279 | <a href="firefox.php">Vyhledávání přes internetový prohlížeč Firefox</a><br />';
|
---|
280 | $Output .= '<a href="playlist.php">WinAMP playlist mp3 souborů online počítačů</a><br /><br />';
|
---|
281 |
|
---|
282 | // Zobrazení chyb sdílení
|
---|
283 | $Host = gethostbyaddr(GetRemoteAddress());
|
---|
284 | //echo($Host);
|
---|
285 | $Host = strtoupper(substr($Host, 0, strpos($Host, '.')));
|
---|
286 | $DbResult = $this->Database->select('NetworkShareError', '*', 'Host="'.$Host.'"');
|
---|
287 | if ($DbResult->num_rows > 0) $Output .= '<strong>Výpis chybových hlášení pro počítač '.$Host.':</strong><br />';
|
---|
288 | //echo('host="'.$Host.'"');
|
---|
289 | while ($Row = $DbResult->fetch_array())
|
---|
290 | {
|
---|
291 | $Row['Message'] = str_replace('/', '\\', $Row['Message']);
|
---|
292 | $Output .= $Row['Message'].'<br />';
|
---|
293 | }
|
---|
294 | }
|
---|
295 |
|
---|
296 | // Zobrazení seznamu stránek
|
---|
297 | if ($Pages > 1)
|
---|
298 | {
|
---|
299 | if ($page > 0) $Output .= '<a href="index.php?page=0"><<</a> ';
|
---|
300 | if ($page > 0) $Output .= '<a href="index.php?page='.($page-1).'"><</a> ';
|
---|
301 | $PagesMax = $Pages;
|
---|
302 | $PagesMin = 0;
|
---|
303 | if ($PagesMax > ($page + 10)) $PagesMax = $page + 10;
|
---|
304 | if ($PagesMin < ($page - 10))
|
---|
305 | {
|
---|
306 | $Output .= ' .. ';
|
---|
307 | $PagesMin = $page - 10;
|
---|
308 | }
|
---|
309 | for ($i = $PagesMin; $i <= $PagesMax; $i++)
|
---|
310 | {
|
---|
311 | if ($i == $page) $Output .= '<strong>';
|
---|
312 | $Output .= '<a href="index.php?page='.$i.'">'.($i + 1).'</a> ';
|
---|
313 | if ($i == $page) $Output .= '</strong>';
|
---|
314 | }
|
---|
315 | if ($PagesMax < $Pages) $Output .= ' .. ';
|
---|
316 | if ($page < $Pages) $Output .= '<a href="index.php?page='.($page + 1).'">></a> ';
|
---|
317 | if ($page < $Pages) $Output .= '<a href="index.php?page='.$Pages.'">>></a>';
|
---|
318 | }
|
---|
319 | }
|
---|
320 | return $Output;
|
---|
321 | }
|
---|
322 | }
|
---|