<?php

function ShowTime()
{
  echo(date("H:i:s")."<br>\n");
  flush();
}

include('../global.php');
include('../style.php');

// Inicializace Logu
//$LogFile = fopen('info.log','w');
function Loguj($Info)
{
  //global $LogFile;
  //fputs($LogFile,$Info."\n");
}
//Show_Array($GLOBALS);

// Maximální vnoření
$MaxNesting = 20;

// Automatické zapamatování proměnných
$Promene = array(
  'keyword' => '',
  'file_type' => 0,
  'size' => '',
  'size_method' => 1,
  'size_units' => 2,
  'online' => 'on',
  'order' => 'size DESC',
  'page' => '0',
  'view' => 1,
);

// If not only online checkbox checked
if(array_key_exists('view',$_POST) && !array_key_exists('online',$_POST)) $_POST['online'] = 'off';

//echo($_SERVER['HTTP_REFERER']);
if(array_key_exists('HTTP_REFERER',$_SERVER))
{
  $Url = explode('?',$_SERVER['HTTP_REFERER']);
  $Url = explode('/',$Url[0]);
  //ShowArray($Url);
  $Url[2] = gethostbyname($Url[2]);
  if($Url[2]=='127.0.0.1') $Url[2] = '192.168.0.1';
  $Server = gethostbyname($_SERVER["HTTP_HOST"]);
  if($Server=='127.0.0.1') $Server = '192.168.0.1';
  $Url = implode('/',$Url);
  //echo($Url.',http://'.$Server.$_SERVER["SCRIPT_NAME"]);
  if(($Url!='http://'.$Server.$_SERVER["SCRIPT_NAME"])) { $_POST['view'] = 1; $_POST['page'] = 0; }
} else { $_POST['view'] = 1; $_POST['page'] = 0; }

// Default host list view
if((count($_POST)==0) && (count($_GET)==0)) $_POST['view'] = 1; 

// Toggle order direction
if(array_key_exists('order',$_GET)&&($_SESSION['order']==$_GET['order'])) $_GET['order'] .= ' DESC';

//print_r($_POST);
foreach($Promene as $Index => $Prvek)
{
  if(!array_key_exists($Index, $_SESSION)) $_SESSION[$Index] = $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] = $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].'<br>');
}
//echo($keyword);
//if($keyword)
//if($keyword != '') $view = '';

if(!isset($page)) $page = 0;

$Database->select_db('share');

// Najde cestu ke keřenu
function PlnaCesta($Row)
{
  global $MaxNesting, $Database;
  
  // Vyhledání cesty
  $Otec = $Row['parent'];
  $Cesta = ''; //$Row['name'];
  $i = 0;
  while(($Otec>1)&&($i<$MaxNesting))
  {
    $DbResult = $Database->query('SELECT id,name,parent FROM items WHERE id='.$Otec);
    $Row = $DbResult->fetch_array();
    Loguj('Name: '.$Row['name'].' ID:'.$Row['id'].' Parent:'.$Row['parent']);
    $Cesta = $Row['name'].'\\'.$Cesta;
    $Otec = $Row['parent'];
    $i++;
  }
  if($i>=$MaxNesting) $Cesta = '?'.'\\'.$Cesta;
  return('\\\\'.$Cesta);
}

// Převede velikost v bajtech na odpovídající jednotky
function PrevedVelikost($Velikost)
{
  $Jednotky = array('B','kB','MB','GB','TB','PB','EB');
  while($Velikost>=1024)
  {
    $Velikost = round($Velikost/1024*10)/10;
    array_shift($Jednotky);
  }
  return($Velikost.'&nbsp;'.$Jednotky[0]);
}
ShowHeader('Vyhledávání souborů','Vyhledávání souborů');

// Zobrazení formuláře
echo('<form action="/share/index.php" method="post">
<input type="hidden" name="view" value="">
<input type="hidden" name="page" value="0">
Hledat: <input type="text" name="keyword" value="'.$keyword.'">');
echo('<input type="submit" value="Hledat">&nbsp;Typ: <select name="file_type" id="file_type">');
$Selected = array('','','','','','','','');
$Selected[$file_type] = 'selected ';
echo('<option '.$Selected[0].'value="0">Vše
<option '.$Selected[1].'value="1">Audio(mp3,wav,ogg,mid)
<option '.$Selected[2].'value="2">Dokument(doc,txt,pdf)
<option '.$Selected[3].'value="3">Komprimovaný(zip,rar,ace,tar)
<option '.$Selected[4].'value="4">Video(mpeg,avi,ogm,mkv,asf)
<option '.$Selected[5].'value="5">Obrázek(jpg,bmp,gif,png)
<option '.$Selected[6].'value="6">Složka
<option '.$Selected[7].'value="7">Spustitelný(exe,com)
<option '.$Selected[7].'value="8">Obraz disku(iso,nrg,ccd,bin)
</select>
&nbsp;Velikost: <select name="size_method">');
$Selected = array('','','');
$Selected[$size_method] = 'selected ';
echo('<option '.$Selected[0].'value="0">Rovno
<option '.$Selected[1].'value="1">Nejméně
<option '.$Selected[2].'value="2">Nejvíce
</select>
<input type="edit" size="5" name="size" value="'.$size.'">
<select name="size_units">');
$Selected = array('','','','');
$Selected[$size_units] = 'selected ';
echo('<option '.$Selected[0].'value="0">B
<option '.$Selected[1].'value="1">kB
<option '.$Selected[2].'value="2">MB
<option '.$Selected[3].'value="3">GB
</select>&nbsp;');

if($online=='on') $Selected = 'checked '; else $Selected = '';
echo('<input type="checkbox" '.$Selected.'name="online">Pouze aktivní uživatele<br>
</form>');

//echo($view);
if($view != '')
{
  // Zobrazení obsahu vybrané sloľky
  $DbResult = $Database->query("SELECT * FROM items WHERE id=$view");
  $Row = $DbResult->fetch_array();
  $Cesta = PlnaCesta($Row);
  echo('<strong>Obsah složky: '.$Cesta.$Row['name'].'</strong><br>');
  $Podminka = '(parent='.$view.')';
  $Nahoru = $Row['parent'];
} else
{
  // Zobrazení výsledku vyhledávání
  echo('<strong>Výsledek hledání:</strong><br>');
  $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
$Database->select_db('is');
if($online == 'on') $DbResult = $Database->query('SELECT id FROM hosts WHERE online=1 AND user>0');
else $DbResult = $Database->query('SELECT id FROM hosts');
$Vyber = '';
while($Row = $DbResult->fetch_array()) $Vyber .= $Row['id'].',';
$Podminka .= ' AND (host IN ('.substr($Vyber,0,-1).'))';
//echo($Podminka.'<br>');
$Database->select_db('share');

//ShowTime();
flush();

// Zjištění počtu výskytů
//DB_Query("SELECT COUNT(*) FROM items WHERE ($Podminka)");
//$Row = DB_Row();
//$Pocet = $Row[0];
 
// Zobrazení [..]
if(($view!='')&&($page==0)&&($Nahoru>0))
{
  $DbResult = $Database->query("SELECT * FROM items WHERE id=$view");
  $Row = $DbResult->fetch_array();
  //ShowArray($Row);
  $Datum = explode(' ',$Row['date']);
  $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%">'.PrevedVelikost($Row['size']).'</td><td bgcolor="#F0F0FF" width="90">'.$Datum[0].'</td><td bgcolor="#F0F0FF" width="50%">'.$Cesta.'</td></tr>';
} else $upstr = '';

// Nacteni vysledku z databaze
$PerPage = 30;
$Dotaz = "SELECT SQL_CALC_FOUND_ROWS * FROM items WHERE ($Podminka)";
if($order!='') $Dotaz .= " ORDER BY $order";
$Dotaz .= " LIMIT ".($page*$PerPage).",".$PerPage;
$DbResult = $Database->query($Dotaz);

$DbResult2 = $Database->query("SELECT FOUND_ROWS()");
$Row = $DbResult2->fetch_array();
$Pocet = $Row[0];

if($Pocet > 0) { echo('Nalezeno celkem: '.$Pocet.' položek<br>'); } else echo('Podle zadaných podmínek nic nenalezeno');
if(($Pocet > 0)||($upstr)) {
echo('<table width="100%" style="font-size: 8pt;" border="0" cellpadding="2" cellspacing="2">
<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>');
echo $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 = 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'];
    }
    echo('<tr><td bgcolor="#F0F0FF"><a href="'.$Adresa.'</a></td><td bgcolor="#F0F0FF" width="1%">'.$Radek['ext'].'</td><td align="right" bgcolor="#F0F0FF" width="1%">'.PrevedVelikost($Radek['size']).'</td><td bgcolor="#F0F0FF" width="90">'.$Datum[0].'</td><td bgcolor="#F0F0FF" width="50%" >'.$Cesta.'</td></tr>');
//    flush();
  }
  echo('</table>');
}}
if($Pocet > 0) {
  // Celkový přehled
  if($view==1)
  {
    $DbResult = $Database->query('SELECT SUM(size) FROM items WHERE (parent=1) AND (host IN ('.substr($Vyber,0,-1).'))');
    $Row = $DbResult->fetch_array();
    $SizeOnline = PrevedVelikost($Row[0]);
    $DbResult = $Database->query('SELECT size FROM items WHERE id=1');
    $Row = $DbResult->fetch_array();
    $Size = PrevedVelikost($Row['size']);
    $DbResult = $Database->query('SELECT COUNT(*) FROM items');
    $Row = $DbResult->fetch_array();
    echo('<br>Celková velikost online sdílených dat: '.$SizeOnline);
    echo('<br>Celkem v databázi '.$Row[0].' položek o celkové velikosti '.$Size.'<br>');
    echo('<br><strong>Popis služby:</strong><br>
    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>
    <a href="firefox.php">Vyhledávání přes internetový prohlížeč Firefox</a><br>');
    echo('<a href="playlist.php">WinAMP playlist mp3 souborů online počítačů</a><br><br>');
    
    // Zobrazení chyb sdílení
    $Host = gethostbyaddr(GetRemoteAddress());
    //echo($Host);
    $Host = strtoupper(substr($Host, 0, strpos($Host, '.')));
    $DbResult = $Database->select('errors', '*', 'host="'.$Host.'"');
    if($DbResult->num_rows > 0) echo('<strong>Výpis chybových hlášení pro počítač '.$Host.':</strong><br>');
    //echo('host="'.$Host.'"');
    while($Row = $DbResult->fetch_array())
    {
      $Row['message'] = str_replace('/', '\\', $Row['message']);
      echo($Row['message'].'<br>');
    }
  }

  // Zobrazení seznamu stránek
  if($Pages>1)
  {
    if($page>0) echo('<a href="index.php?page=0">&lt;&lt;</a> ');
    if($page>0) echo('<a href="index.php?page='.($page-1).'">&lt;</a> ');
    $PagesMax = $Pages;
    $PagesMin = 0;
    if($PagesMax>($page+10)) $PagesMax = $page+10;
    if($PagesMin<($page-10))
    {
      echo(' .. ');
      $PagesMin = $page-10;
    }
    for($i=$PagesMin;$i<=$PagesMax;$i++)
    {
      if($i==$page) echo('<strong>');
      echo('<a href="index.php?page='.$i.'">'.($i+1).'</a> ');
      if($i==$page) echo('</strong>');
    }
    if($PagesMax<$Pages) echo(' .. ');
    if($page<$Pages) echo('<a href="index.php?page='.($page+1).'">&gt;</a> ');
    if($page<$Pages) echo('<a href="index.php?page='.$Pages.'">&gt;&gt;</a>');
  }
}

ShowFooter();
?>
