'',
'file_type' => 0,
'size' => '',
'size_method' => 1,
'size_units' => 2,
'online' => 'on',
'order' => 'size DESC',
'page' => '0',
'view' => 1,
);
function __construct(System $System)
{
parent::__construct($System);
$this->Title = 'Sdílené soubory';
$this->Description = 'Prohledávání sdílených souborů';
$this->ParentClass = 'PagePortal';
}
function ShowTime(): string
{
return date("H:i:s")."
\n";
}
// Inicializace Logu
//$LogFile = fopen('info.log','w');
function Loguj($Info)
{
//global $LogFile;
//fputs($LogFile,$Info."\n");
}
//Show_Array($GLOBALS);
// Najde cestu ke keřenu
function PlnaCesta($Row): string
{
// Vyhledání cesty
$Otec = $Row['Parent'];
$Cesta = ''; //$Row['name'];
$i = 0;
while (($Otec > 1) && ($i < $this->MaxNesting))
{
$DbResult = $this->Database->query('SELECT Id,Name,Parent FROM NetworkShareItem WHERE Id='.$Otec);
$Row = $DbResult->fetch_array();
$this->Loguj('Name: '.$Row['Name'].' ID:'.$Row['Id'].' Parent:'.$Row['Parent']);
$Cesta = $Row['Name'].'\\'.$Cesta;
$Otec = $Row['Parent'];
$i++;
}
if ($i >= $this->MaxNesting) $Cesta = '?'.'\\'.$Cesta;
return '\\\\'.$Cesta;
}
// Převede velikost v bajtech na odpovídající jednotky
function PrevedVelikost($Velikost): string
{
$Jednotky = array('B','kB','MB','GB','TB','PB','EB');
while ($Velikost >= 1024)
{
$Velikost = round($Velikost / 1024 * 10) / 10;
array_shift($Jednotky);
}
return $Velikost.' '.$Jednotky[0];
}
function Show(): string
{
if (!ModuleUser::Cast($this->System->GetModule('User'))->User->CheckPermission('NetworkShare', 'Display')) return 'Nemáte oprávnění';
// If not only online checkbox checked
if (array_key_exists('view', $_POST) and !array_key_exists('online', $_POST)) $_POST['online'] = 'off';
// Default host list view
if ((count($_POST) == 0) and (count($_GET) == 0))
{
$_POST['view'] = 1;
$_POST['page'] = 0;
}
// Toggle order direction
if (array_key_exists('order', $_GET) and ($_SESSION['order'] == $_GET['order'])) $_GET['order'] .= ' DESC';
foreach ($this->Promene as $Index => $Prvek)
{
if (!array_key_exists($Index, $_SESSION)) $_SESSION[$Index] = $this->Promene[$Index];
if (array_key_exists($Index, $_GET)) $_SESSION[$Index] = $_GET[$Index];
if (array_key_exists($Index, $_POST)) $_SESSION[$Index] = $_POST[$Index];
if (($Index == 'keyword') and (array_key_exists('view', $_GET))) $_SESSION[$Index] = $this->Promene[$Index];
if (($Index == 'view') and ((array_key_exists('keyword', $_POST)) or (array_key_exists('keyword', $_GET)))) $_SESSION[$Index] = '';
$$Index = $_SESSION[$Index];
//echo('$'.$Index.' = '.$_SESSION[$Index].'
');
}
//echo($keyword);
//if ($keyword)
//if ($keyword != '') $view = '';
//$this->Database->select_db('share');
// Log search
if (array_key_exists('keyword', $_POST) or array_key_exists('keyword', $_GET))
ModuleLog::Cast($this->System->GetModule('Log'))->NewRecord('Share', 'Hledaný výraz', $_SESSION['keyword']);
// Zobrazení formuláře
$Output = '
';
//$Output .= $view;
if ($view != '')
{
// Zobrazení obsahu vybrané složky
$DbResult = $this->Database->query('SELECT * FROM NetworkShareItem WHERE id='.$view);
$Row = $DbResult->fetch_array();
$Cesta = $this->PlnaCesta($Row);
$Output .= 'Obsah složky: '.$Cesta.$Row['name'].'
';
$Podminka = '(Parent='.$view.')';
$Nahoru = $Row['Parent'];
} else
{
// Zobrazení výsledku vyhledávání
$Output .= 'Výsledek hledání:
';
$Podminka = "(Name LIKE '%".strtr($keyword, '*', '%')."%')";
// Hledání podle typů
$Pripony = array('',
"(ext LIKE 'mp3') OR (ext LIKE 'wav') OR (ext LIKE 'ogg') OR (ext LIKE 'mid')",
"(ext LIKE 'doc') OR (ext LIKE 'txt') OR (ext LIKE 'pdf')",
"(ext LIKE 'zip') OR (ext LIKE 'rar') OR (ext LIKE 'ace') OR (ext LIKE 'tar')",
"(ext LIKE 'mpeg') OR (ext LIKE 'mpg') OR (ext LIKE 'avi') OR (ext LIKE 'ogm') OR (ext LIKE 'mkv') OR (ext LIKE 'asf')",
"(ext LIKE 'jpg') OR (ext LIKE 'gif') OR (ext LIKE 'bmp') OR (ext LIKE 'ico') OR (ext LIKE 'png')",
"(type='2')",
"(ext LIKE 'exe') OR (ext LIKE 'com')",
"(ext LIKE 'iso') OR (ext LIKE 'nrg') OR (ext LIKE 'ccd') OR (ext LIKE 'bin') OR (ext LIKE 'mds')",
);
if ($file_type > 0) $Podminka .= ' AND ('.$Pripony[$file_type].')';
//Hledání podle velikosti
$Jednotky = array(1, 1024, 1048576, 1073741824);
if (is_numeric($size))
{
$Metoda = array('=', '>', '<');
$Velikost = $size * $Jednotky[$size_units];
$Podminka .= ' AND (Size'.$Metoda[$size_method].$Velikost.')';
}
}
// Omezení na online/offline uživatele
//$this->Database->select_db('is');
if ($online == 'on') $DbResult = $this->Database->query('SELECT Id FROM NetworkDevice WHERE Online=1 AND Member IS NOT NULL');
else $DbResult = $this->Database->query('SELECT Id FROM NetworkDevice');
$Vyber = '';
while ($Row = $DbResult->fetch_array()) $Vyber .= $Row['Id'].',';
$Podminka .= ' AND (Host IN ('.substr($Vyber, 0, -1).'))';
//echo($Podminka.'
');
//$this->Database->select_db('share');
//ShowTime();
// Zjištění počtu výskytů
//DB_Query("SELECT COUNT(*) FROM NetworkShareItem WHERE ($Podminka)");
//$Row = DB_Row();
//$Pocet = $Row[0];
// Zobrazení [..]
if (($view != '') && ($page == 0) && ($Nahoru > 0))
{
$DbResult = $this->Database->query('SELECT * FROM NetworkShareItem WHERE Id='.$view);
$Row = $DbResult->fetch_array();
//ShowArray($Row);
$Datum = explode(' ', $Row['date']);
$upstr = '[..] | | '.$this->PrevedVelikost($Row['size']).' | '.$Datum[0].' | '.$Cesta.' |
';
} else $upstr = '';
// Nacteni vysledku z databaze
$PerPage = 30;
$Dotaz = "SELECT COUNT(*) FROM NetworkShareItem WHERE (".$Podminka.")";
if ($order != '') $Dotaz .= ' ORDER BY '.$order;
$Dotaz .= " LIMIT ".($page * $PerPage).",".$PerPage;
$DbResult = $this->Database->query($Dotaz);
$Row = $DbResult->fetch_array();
$Pocet = $Row[0];
if ($Pocet > 0)
{
$Output .= 'Nalezeno celkem: '.$Pocet.' položek
';
} else
$Output .= 'Podle zadaných podmínek nic nenalezeno';
if (($Pocet > 0) || ($upstr))
{
$Output .= '
Soubor | Přípona | Velikost | Datum | Umístění |
';
$Output .= $upstr;
if ($Pocet > 0)
{
// Zobrazení tabulky s výsledky
$Pages = floor($Pocet / $PerPage);
// echo($Dotaz);
// Zobrazení poloľek
while ($Row = $DbResult->fetch_array())
{
// Loguj('Radek '.$Row['name']);
$Radek = $Row;
$Cesta = $this->PlnaCesta($Row);
$Datum = explode(' ', $Radek['Date']);
// Zobrazení řádku
$Cesta2 = strtr($Cesta.$Radek['Name'], '\\', '/');
if ($Radek['Ext'] != '') $Cesta2 .= '.'.$Radek['Ext'];
if ($Radek['Type'] != 0) $Adresa = 'index.php?view='.$Radek['Id'].'">['.$Radek['Name'].']';
else
{
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Linux')) $Adresa = 'smb:'.$Cesta2.'">'.$Radek['Name'];
else $Adresa = 'file:///'.$Cesta2.'">'.$Radek['Name'];
}
$Output .= ''.$Radek['Ext'].' | '.
''.$this->PrevedVelikost($Radek['Size']).' | '.
''.$Datum[0].' | '.
''.$Cesta.' |
';
}
$Output .= '
';
}
}
if ($Pocet > 0)
{
// Celkový přehled
if ($view == 1)
{
$DbResult = $this->Database->query('SELECT SUM(Size) FROM NetworkShareItem WHERE (Parent=1) AND (Host IN ('.substr($Vyber,0,-1).'))');
$Row = $DbResult->fetch_array();
$SizeOnline = $this->PrevedVelikost($Row[0]);
$DbResult = $this->Database->query('SELECT Size FROM NetworkShareItem WHERE Id=1');
$Row = $DbResult->fetch_array();
$Size = $this->PrevedVelikost($Row['size']);
$DbResult = $this->Database->query('SELECT COUNT(*) FROM NetworkShareItem');
$Row = $DbResult->fetch_array();
$Output .= '
Celková velikost online sdílených dat: '.$SizeOnline;
$Output .= '
Celkem v databázi '.$Row[0].' položek o celkové velikosti '.$Size.'
';
$Output .= '
Popis služby:
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.
Vyhledávání přes internetový prohlížeč Firefox
';
$Output .= 'WinAMP playlist mp3 souborů online počítačů
';
// Zobrazení chyb sdílení
$Host = gethostbyaddr(GetRemoteAddress());
//echo($Host);
$Host = strtoupper(substr($Host, 0, strpos($Host, '.')));
$DbResult = $this->Database->select('NetworkShareError', '*', 'Host="'.$Host.'"');
if ($DbResult->num_rows > 0) $Output .= 'Výpis chybových hlášení pro počítač '.$Host.':
';
//echo('host="'.$Host.'"');
while ($Row = $DbResult->fetch_array())
{
$Row['Message'] = str_replace('/', '\\', $Row['Message']);
$Output .= $Row['Message'].'
';
}
}
// Zobrazení seznamu stránek
if ($Pages > 1)
{
if ($page > 0) $Output .= '<< ';
if ($page > 0) $Output .= '< ';
$PagesMax = $Pages;
$PagesMin = 0;
if ($PagesMax > ($page + 10)) $PagesMax = $page + 10;
if ($PagesMin < ($page - 10))
{
$Output .= ' .. ';
$PagesMin = $page - 10;
}
for ($i = $PagesMin; $i <= $PagesMax; $i++)
{
if ($i == $page) $Output .= '';
$Output .= ''.($i + 1).' ';
if ($i == $page) $Output .= '';
}
if ($PagesMax < $Pages) $Output .= ' .. ';
if ($page < $Pages) $Output .= '> ';
if ($page < $Pages) $Output .= '>>';
}
}
return $Output;
}
}