LinuxRocker.com/files/.pdirl/guifunctions.php

358 lines
10 KiB
PHP
Raw Permalink Normal View History

2013-12-31 17:31:21 +00:00
<?php
/**
* Adjusts user configuration with default configuration.
* If a configuration key has an empty value, use a default value instead
* @param array $configuration
* @return array
*/
function defaultGUIConfiguration($configuration) {
$default = array(
'language' => 'en_GB',
'template' => 'default',
'icons' => 'default',
);
// replace empty configuration variables with the default ones
return $GLOBALS['pdlc'] -> configuration($configuration,
$default);
}
function modRewriteRedirect () {
if(!empty($_GET['gosearch'])) {
if ($GLOBALS['pdlc'] -> modRewrite)
header('Location: http://'. host() .
dirname($_SERVER['REQUEST_URI']) .
'/search:'. $_GET['gosearch']);
else
header('Location: http://' .
host() .
dirname($_SERVER['REQUEST_URI']) .
'/?directory=' .
@$_GET['directory'] .
'&search='. $_GET['gosearch']);
}
}
function setLanguage($language) {
/*
* Sets the language from the configuration to use with gettext.
* Thanks to <mario.ugedo@gmail.com>
*/
// Set language
setlocale(LC_ALL, $language.'.utf8');
putenv('LANG='.$language.'.utf8');
// Specify location of translation tables
bindtextdomain('default', './.pdirl/languages/');
bind_textdomain_codeset('default', 'UTF-8');
// Select domain
textdomain('default');
return true;
}
// Views were planned for the 1.0 series, but I think, it would be better if
// I don't build so much features in pdirl-1.0, but fix some security relevant
// problems ;-) So you get the view features maybe in some 1.1.x version
/**
* Returns the current view.
* @param object $viewConfiguration [optional]
* @return string
*/
function getView($viewConfiguration = false) {
// if ($viewConfiguration === '') {
// if (!empty($_POST['view'])) {
// setcookie('view', htmlspecialchars($_POST['view']), time() + 60 * 60 * 24 * 7, dirname($_SERVER['SCRIPT_NAME'].'/'));
// return htmlspecialchars($_POST['view']);
// } elseif (!empty($_COOKIE['view'])) {
// return $_COOKIE['view'];
// } else {
// return $this -> defaultView;
// }
// } else {
// return $this -> view;
// }
}
/**
* Sets the view.
* @param object $view
* @return
*/
function setView($view) {
// if (setcookie('view', htmlspecialchars($view), time() + 60 * 60 * 24 * 7, dirname($_SERVER['SCRIPT_NAME'].'/')))
// return true;
// else
// return false;
}
/**
* Converts bytes to a more readable format. ex. '3,21 KB'
* @link http://us3.php.net/manual/en/function.filesize.php#84652
* @author <nak5ive@gmail.com>
* @param interger $size
* @param interger $precision [optional]
* @return array
*/
function sizeReadable ($size, $precision = 0) {
$sizes = array('YB', 'ZB', 'EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B');
$total = count($sizes);
/*
* $total is the number how often while was executed.
* If you have 10 units and while was executed 3 times, $total is 7.
*/
while($total-- && $size > 1024)
$size /= 1024;
$return['number'] = round($size, $precision);
$return['unit'] = $sizes[$total];
return $return;
}
/**
* Returns time left from supplied date ex. '3 days ago' etc.
* @author <andypsv@rcdrugs.com>
* @link http://us.php.net/manual/en/function.time.php
* @param interger $timestamp
* @return string
*/
function lastModificationReadable($timestamp) {
$current = time();
$difference = $current - $timestamp;
$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560);
for ($val = sizeof($lengths) - 1; ($val >= 0) && (($number = $difference / $lengths[$val]) <= 1); $val--);
if ($val < 0) $val = 0;
$new_time = $current - ($difference % $lengths[$val]);
if (floor($number) == 1)
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year');
else
$periods = array('seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'years');
return sprintf(_('%d %s ago'), $number, _($periods[$val]));
}
/**
* Returns (linked) path navigation
* @param string $path
* @param boolean $link [optional]
* @return string
*/
function path($path=false, $link=false, $absolute=false) {
// if (!$path)
// $path = $_SERVER['REQUEST_URI'];
if ($path == $GLOBALS['pdlc'] -> getScriptPath())
$path = dirname($path);
$path = explode('?', $path);
preg_match('/^(.*)?(search:([^|]+))?\|?(sort:(name|mtime|size)(:(asc|desc))?)?$/', $path[0], $match);
$path = $match[1];
$path = str_replace('./', '', $path);
$dir_array = explode ("/", $path);
$counter = 1;
$path = "";
foreach ($dir_array as $dir) {
if ($dir != "") {
$dir = htmlspecialchars(urldecode($dir));
if ($link) {
$linkhref = implode("/", array_slice($dir_array, 0, $counter));
if ($GLOBALS['pdlc'] -> modRewrite) {
if ($absolute) {
$linkhref = '/'.path(scriptPath()).$linkhref;
}
$path .= '<a href="'.$linkhref.'/">'.$dir.'</a>/';
} else {
$path .= '<a href="'.scriptPath().'?directory='.$linkhref.'/">'.$dir.'</a>/';
}
} else {
$path .= $dir."/";
}
}
$counter++;
}
return $path;
}
function goParent($path = false) {
if (!$path)
$path = currentDirectory();
if (modRewriteActive()) {
return scriptDirectory()."/".currentDirectory()."/../..";
} else {
$parentdir = dirname($path);
if ($parentdir == '.')
return "?directory=";
else
return "?directory=".$parentdir."/";
}
}
/**
* Seperates directories from files
* @param array $elements
* @return array
*/
function seperateDirectoriesAndFiles(&$elements) {
$directories = array();
$files = array();
if (is_array($elements)) {
foreach($elements as $element) {
if ($element['directory']) {
$directories[] = $element;
} else {
$files[] = $element;
}
}
}
// Sort directories by their number of elements not their bytes
if (sortKey() == 'bytes' && !empty($directories))
$directories = sortElements($directories, array('key'=>'numberofelements', 'sort'=>sortOrder()));
$elements = array('directories' => $directories, 'files' => $files);
return true;
}
/**
* Adds human readable modfication time and size.
* @param array $elements
* @return array
*/
function addHumanInformation (&$elements) {
if (is_array($elements)) {
foreach ($elements as $key => $elementData) {
if ($elementData['readable']) {
$elements[$key]['sizer'] = sizeReadable($elementData['bytes']);
$elements[$key]['mtimer'] = lastModificationReadable($elementData['mtime']);
}
}
return true;
} else {
return false;
}
}
/**
* abbreviated form of <img src="index.php?icon=blablablabla...
* @param string $icon
* @param string $iconDesc [optional]
* @return string
*/
function imgTagIcon ($icon, $iconDesc = '') {
printf('<img src="%s/%s.png" alt="%s" title="%3$s" class="%2$s" />', iconDirectory(), $icon, _($iconDesc));
}
/**
* translated filetype info
* @param string $type
* @return string
*/
function filetypeInfo ($type) {
$typesList = array (
'audio' => 'Audio file',
'image' => 'Image file',
'web' => 'Web document',
'text' => 'Text document',
'package' => 'Compressed package',
'program' => 'Application',
'directory' => 'Directory',
'default' => 'Unknown file type',
);
return _($typesList[$type]);
}
/**
* breadcumb navigation, $pdirlView -> path () doesn't return the actual directory in plain text format, but in slash-seperated links of directories.
* e.g. <a>dir</a>/<a>anotherdir</a>/<a>blubb</a>
* $pdirl -> getHost ($link) gives out the current hostname, if $link's true, it will give out a link
* A combination of getHost(1) and path() returns a breadcumb navigation
*/
function printBreadcrumb () {
$scriptDirPath = scriptDirectory();
// path: bla/bla/blubb
$scriptDirPath = explode('/', $scriptDirPath);
// folder: blubb
$scriptFolder = array_pop($scriptDirPath);
// path: bla/bla/
$scriptDirPath = implode('/', $scriptDirPath);
$breadcrumbPath = sprintf('%s/%s<a href="%s/%s/">%s</a>%s',
2014-01-03 20:55:07 +00:00
host($link = true),
2013-12-31 17:31:21 +00:00
path($scriptDirPath),
$scriptDirPath,
$scriptFolder,
path($scriptFolder),
path(currentDirectory(), true, true));
if (searchTag()) {
// It wil return "search for 'searchkeyword' in host/path
printf(_('Search for "%s" in %s'), searchTag(), $breadcrumbPath);
} else {
echo _('Directory listing for '), $breadcrumbPath;
}
}
function sortLink($key, $text) {
if (userSortActive()) {
$sortlink = "<a ";
if (sortKey() == $key) {
$classorder = str_replace(array('SORT_ASC', 'SORT_DESC'), array('asc', 'desc'), sortOrder());
$sortlink .= 'class="'.$classorder.'" ';
$linkorder = sortOrder(true); // adesc
} else {
$linkorder = "SORT_ASC";
}
$sortlink .= ' href="'.scriptPath().'?sortkey='.$key.'&sortorder='.$linkorder.'&directory='.currentDirectory();
if (searchTag() != '')
$sortlink .= '&search='.searchTag();
$sortlink .= '">'.$text.'</a>';
} else {
$sortlink = $text;
}
echo $sortlink;
}
function currentTemplate() {
return $GLOBALS['GUIconf']['template'];
}
function templateDirectory() {
return scriptDirectory().'/.pdirl/templates/'.currentTemplate();
}
function currentIcons() {
return $GLOBALS['GUIconf']['icons'];
}
function iconDirectory() {
return scriptDirectory().'/.pdirl/icons/'.currentIcons();
}
function searchInput () {
if (searchTag())
return searchTag();
else
return _('Search...');
}
function host ($link = false) {
if ($link) {
return sprintf('<a href="http://%s">%1$s</a>', $GLOBALS['pdlc'] -> getHost($link));
} else {
return $GLOBALS['pdlc'] -> getHost($link);
}
}
function searchTag() {return $GLOBALS['pdlc'] -> getSearchTag();}
function scriptPath() {return $GLOBALS['pdlc'] -> getScriptPath();}
function scriptDirectory() {return $GLOBALS['pdlc'] -> getScriptDirectory();}
function currentDirectory() {return $GLOBALS['pdlc'] -> getCurrentDirectory();}
function numberOfElements() {return $GLOBALS['pdlc'] -> getNumberOfElements();}
function totalSize() {return $GLOBALS['pdlc'] -> getTotalSize();}
function urlPath($path) {return $GLOBALS['pdlc'] -> urlPath($path);}
function sortOrder($r=false){return $GLOBALS['pdlc'] -> getSortOrder($r);}
function sortKey() {return $GLOBALS['pdlc'] -> getSortKey();}
function sortElements($elementsVar = false, $sortOptions = false){
return $GLOBALS['pdlc'] -> sortElements($elementsVar, $sortOptions);
}
function userSortActive() {return $GLOBALS['pdlc'] -> isUserSortActive();}
function modRewriteActive() {return $GLOBALS['pdlc'] -> isModRewriteActive();}
?>