diff --git a/MediaServe.php b/MediaServe.php index 431c9e6..bc47420 100644 --- a/MediaServe.php +++ b/MediaServe.php @@ -67,6 +67,8 @@ class MediaServe { static function processProgram() This function first checks for POST or GET Module commands, and if found, attempts to call them, passing parameters as needed. Thereafter, it runs through every Module loaded and executes the Module's onProcess method if it exists. + + POST/GET parameter(s) can be declared in a single variable syntax, e.g., "p=value", or in array style syntax, e.g., "p[]=value1&p[]=value2". Parameters are passed to functions in the order they are provided. ================================ */ static function processProgram() { @@ -74,13 +76,21 @@ class MediaServe { if (isset($_POST['m'])) { if (isset($_POST['c'])) { if (method_exists('ktk\\MediaServe\\'.$_POST['m'], $_POST['c'])) { - call_user_func('ktk\\MediaServe\\'.$_POST['m'].'::'.$_POST['c'], $_POST['p1']); + if (is_array($_POST['p'])) { + call_user_func_array('ktk\\MediaServe\\'.$_POST['m'].'::'.$_POST['c'], $_POST['p']); + } else { + call_user_func('ktk\\MediaServe\\'.$_POST['m'].'::'.$_POST['c'], $_POST['p']); + } } } } else if (isset($_GET['m'])) { if (isset($_GET['c'])) { if (method_exists('ktk\\MediaServe\\'.$_GET['m'], $_GET['c'])) { - call_user_func('ktk\\MediaServe\\'.$_GET['m'].'::'.$_GET['c'], $_GET['p1']); + if (is_array($_GET['p'])) { + call_user_func_array('ktk\\MediaServe\\'.$_GET['m'].'::'.$_GET['c'], $_GET['p']); + } else { + call_user_func('ktk\\MediaServe\\'.$_GET['m'].'::'.$_GET['c'], $_GET['p']); + } } } } diff --git a/modules/Clock.php b/modules/Clock.php index f5eb733..0a7dac4 100644 --- a/modules/Clock.php +++ b/modules/Clock.php @@ -14,7 +14,7 @@ class Clock { static function onRender() { echo '
'.PHP_EOL; echo self::$time.PHP_EOL; - echo '12-hour'.PHP_EOL; + echo '12-hour'.PHP_EOL; echo '
'.PHP_EOL; } static function changeTime($format) { diff --git a/modules/FileBrowser.css b/modules/FileBrowser.css index 8ecabbd..12ea5f2 100644 --- a/modules/FileBrowser.css +++ b/modules/FileBrowser.css @@ -51,7 +51,21 @@ color: #CCC; } +#ktk_MediaServe_FileBrowser button:hover, #ktk_MediaServe_FileBrowser input:hover { background-color: #777; cursor: pointer; } + +#ktk_MediaServe_FileBrowser button { + background-color: #777; + color: #CCC; + padding: 1px; +} + + +#ktk_MediaServe_FileBrowser_FilterInput { + border: 1px solid #777; + margin-left: 2px; + width: 115px; +} diff --git a/modules/FileBrowser.php b/modules/FileBrowser.php index 3340d8c..7735bb6 100644 --- a/modules/FileBrowser.php +++ b/modules/FileBrowser.php @@ -1,6 +1,10 @@ '; echo ' '; } + echo '
'; + echo ' '; + echo ' '; + //echo ' '; + //echo ' '; + // Using button may break IE6 and below... + echo ' '; + echo ' '; + echo '
'; echo ' '.PHP_EOL; echo ' '; echo ' '; echo ' '; - echo ' '.PHP_EOL; + echo ' '.PHP_EOL; echo ' '.PHP_EOL; echo ' '; echo ' '; echo ' '; - echo ' '.PHP_EOL; + echo ' '.PHP_EOL; foreach(MediaServe::getData('dirs') as $dir) { - echo ' '.PHP_EOL; + echo ' '.PHP_EOL; } echo ' '.PHP_EOL; @@ -51,7 +65,7 @@ class FileBrowser { echo ' '; echo ' '; foreach(MediaServe::getData('files') as $file) { - echo ' '.PHP_EOL; + echo ' '.PHP_EOL; } echo ' '.PHP_EOL; echo '
'.$file[FileBrowser::F_EXT].'
'.$file[FileBrowser::F_EXT].'
'.PHP_EOL; @@ -76,8 +90,9 @@ class FileBrowser { return NULL; } MediaServe::storeData('cwd', $directory); - if (self::getFiles()) - self::sortFiles(); + self::getFiles(); + self::sortFiles(); + self::filterFiles(); } static function changeSort($type) { @@ -88,6 +103,17 @@ class FileBrowser { MediaServe::storeData('sort_order', SORT_DESC); } self::sortFiles(); + self::filterFiles(); + } + + static function changeFilter($filter) { + MediaServe::storeData('filter', $filter); + self::filterFiles(); + } + + static function resetFilter() { + self::sortFiles(); + self::changeFilter(""); } static function openFile($file) { @@ -123,6 +149,7 @@ class FileBrowser { return NULL; } $i = 0; + $files = array(); while (false !== ($filename = readdir($directory_handle))) { if ($filename[0] != '.' && $filename != "..") { $files[$i] = array(); @@ -141,11 +168,6 @@ class FileBrowser { /* INTERNAL FUNCTIONS */ static function sortFiles() { - if (!MediaServe::getData('dir_list')) { - MediaServe::storeData('dirs', array()); - MediaServe::storeData('files', array()); - return NULL; - } $sort = array(); $sort_by = MediaServe::getData('sort_by'); $sort_order = MediaServe::getData('sort_order'); @@ -160,7 +182,7 @@ class FileBrowser { } } array_multisort($sort, $sort_order, MediaServe::getData('dir_list')); - // Wasteful, but we want directories always on top + // Wasteful, but we want directories always on top $dirs = array(); $files = array(); foreach (MediaServe::getData('dir_list') as $file) { @@ -173,5 +195,25 @@ class FileBrowser { MediaServe::storeData('files', $files); MediaServe::storeData('dirs', $dirs); } + + static function filterFiles() { + // TODO: recreating an array seems inefficient, should change + if (($filter = MediaServe::getData('filter')) == "") + return NULL; + $files = array(); + $dirs = array(); + foreach(MediaServe::getData('files') as $file) { + if (strpos($file[FileBrowser::F_NAME], $filter) !== FALSE) { + $files[] = $file; + } + } + foreach(MediaServe::getData('dirs') as $dir) { + if (strpos($dir[FileBrowser::F_NAME], $filter) !== FALSE) { + $dirs[] = $dir; + } + } + MediaServe::storeData('files', $files); + MediaServe::storeData('dirs', $dirs); + } } ?>