<?php

if(SITE_CONFIG_ENABLE_FILE_SEARCH == 'no')
{
	// this page can not be accessed
	coreFunctions::output404();
}

// setup initial params
$s = (int)$_REQUEST['iDisplayStart'];
$l = (int)$_REQUEST['iDisplayLength'];
$db = Database::getDatabase();

// create json response
$jsonRs = array();

// document types
require_once(SITE_TEMPLATES_PATH . '/partial/_search_document_types.inc.php');

// prepare clause
$clause = 'WHERE ';
$clause .= 'statusId = 1 ';
$clause .= 'AND file.isPublic > 0 ';

// only files in public folders
$publicFolderClause = 'SELECT ff1.id FROM file_folder ff1 WHERE ff1.isPublic > 0 AND IF(ff1.parentId IS NULL, 1, (SELECT IF(ff2.isPublic = 0, 0, IF(ff2.parentId IS NULL, ff2.isPublic, (SELECT ff3.isPublic FROM file_folder ff3 WHERE ff3.id = ff2.parentId))) FROM file_folder ff2 WHERE ff2.id = ff1.parentId)) > 0';
$clause .= 'AND (file.folderId IN ('.$publicFolderClause.') OR (file.folderId IS NULL))';

// only files in users which have opted to share them
$clause .= 'AND (file.userId IN (SELECT id FROM users WHERE isPublic = 1) OR (file.userId IS NULL))';

// filterText
$filterText = '';
if(isset($_REQUEST['filterText']))
{
	$filterText = $_REQUEST['filterText'];
	$filterText = str_replace(array('"', '%', '*'), '', $filterText);
}
if(strlen($filterText))
{
	$clause .= 'AND (file.shortUrl = '.$db->quote($filterText).' OR file.originalFilename LIKE "%'.$db->escape($filterText).'%") ';
}

// load stats for tabs
$jsonRs['iTotalAll'] = $db->getValue('SELECT COUNT(id) AS total FROM file '.$clause);
foreach($documentTypes AS $documentType=>$documentExt)
{
	$arrKey = 'iTotal'.UCFirst($documentType);
	$jsonRs[$arrKey] = $db->getValue('SELECT COUNT(id) AS total FROM file '.$clause.' AND extension IN ("'.implode('","', explode(',', $documentExt)).'")');
}

// filterType
$filterType = '';
if(isset($_REQUEST['filterType']))
{
	$filterType = $_REQUEST['filterType'];
}

// make filterType safe
$filterTypeArr = array();
if(strlen($filterType))
{
	if(isset($documentTypes[$filterType]))
	{
		$filterTypeExp = explode(',', $documentTypes[$filterType]);
		foreach($filterTypeExp AS $filterTypeExpItem)
		{
			// limit length
			$filterTypeExpItem = substr($filterTypeExpItem, 0, 10);
			$filterTypeExpItem = strtolower($filterTypeExpItem);
			
			// remove unwanted characters
			$filterTypeExpItem = str_replace(array(',',')','(','$','"','\'','&','-','*','%'), '', $filterTypeExpItem);
			if(strlen($filterTypeExpItem))
			{
				$filterTypeArr[] = $filterTypeExpItem;
			}
		}
	}
}
if(COUNT($filterTypeArr))
{
	$clause .= 'AND extension IN ("'.implode('","', $filterTypeArr).'") ';
}

// load all
$totalResults = $db->getValue('SELECT COUNT(id) AS total FROM file '.$clause);

// load filtered
$results = $db->getRows('SELECT * FROM file '.$clause.'ORDER BY uploadedDate DESC LIMIT '.$s.','.$l);

$data = array();
if ($results)
{
    foreach ($results AS $result)
    {
		$fileObj = file::hydrate($result);
		$previewImageUrlMedium = file::getIconPreviewImageUrl($result, false, 160, false, 68, 68, 'middle');

        $lrs = array();

		$cell1 = '';
		$cell1 .= '<div class="searchNew fade in">';
		$cell1 .= '<div class="start-icon"><img src="'.$previewImageUrlMedium.'" alt="'.validation::safeOutputToScreen($result['extension']).'" title="'.validation::safeOutputToScreen($result['extension']).'"/></div>';
		
		$cell1 .= '<div class="main-text">';
		$cell1 .= '<span class="ext">'.validation::safeOutputToScreen($result['extension']).'</span>';
		$cell1 .= '<h6>'.validation::safeOutputToScreen($result['originalFilename']).'</h6>';
		$cell1 .= '<a class="resultUrl" href="'.validation::safeOutputToScreen($fileObj->getFullShortUrl()).'" target="_blank"><i class="la la-download"></i></a>';
        $cell1 .= '<p class="size">'.validation::safeOutputToScreen(coreFunctions::formatSize($result['fileSize'])).'</p><p class="date">'.t('search_date_uploaded', 'Dated Uploaded').': '.validation::safeOutputToScreen(coreFunctions::formatDate($result['uploadedDate'], SITE_CONFIG_DATE_FORMAT)).'</p>';
		$cell1 .= '</div>';
		$cell1 .= '</div>';
		
		$lrs[] = $cell1;
		
		
        $data[] = $lrs;
    }
}

$jsonRs['sEcho']                = intval($_GET['sEcho']);
$jsonRs['iTotalRecords']        = $totalResults;
$jsonRs['iTotalDisplayRecords'] = $totalResults;
$jsonRs['aaData']               = $data;

echo json_encode($jsonRs);
