diff --git a/filemanager/inc/class.filemanager_select.inc.php b/filemanager/inc/class.filemanager_select.inc.php new file mode 100644 index 0000000000..8cdfac311e --- /dev/null +++ b/filemanager/inc/class.filemanager_select.inc.php @@ -0,0 +1,164 @@ + + * @copyright (c) 2009 by Ralf Becker + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version $Id$ + */ + +class filemanager_select +{ + /** + * Methods callable via menuaction + * + * @var array + */ + var $public_functions = array( + 'select' => true, + ); + + /** + * Constructor + * + */ + function __construct() + { + // strip slashes from _GET parameters, if someone still has magic_quotes_gpc on + if (get_magic_quotes_gpc() && $_GET) + { + $_GET = etemplate::array_stripslashes($_GET); + } + } + + /** + * Callback to fetch the rows for the nextmatch widget + * + * @param array $query + * @param array &$rows + * @param array &$readonlys + */ + function get_rows($query,&$rows,&$readonlys) + { + + } + + function select(array $content=null) + { + if (!is_array($content)) + { + $content = array(); + $content['mode'] = $_GET['mode']; + if (!in_array($content['mode'],array('open','open-multiple','saveas','select-dir'))) + { + throw new egw_exception_wrong_parameter("Wrong or unset required mode parameter!"); + } + $content['path'] = $_GET['path']; + if (!isset($content['path']) && ($content['path'] = egw_session::appsession('select_path','filemanger')) === false || + !egw_vfs::is_dir($content['path'])) + { + $content['path'] = filemanager_ui::get_home_dir(); + } + $content['method'] = $_GET['method']; + $content['id'] = $_GET['id']; + $content['label'] = isset($_GET['label']) ? $_GET['label'] : lang('Open'); + $content['mime'] = $_GET['mime']; + } + else + { + //_debug_array($content); die('Stop'); + if ($content['button']) list($button) = each($content['button']); + switch($button) + { + case 'up': + if ($content['path'] != '/') $content['path'] = egw_vfs::dirname($content['path']); + break; + case 'home': + $content['path'] = filemanager_ui::get_home_dir(); + break; + case 'ok': + switch($content['mode']) + { + case 'open-multiple': + foreach((array)$content['dir']['selected'] as $name) + { + $files[] = egw_vfs::concat($content['path'],$name); + } + break; + case 'select-dir': + $files = $content['path']; + break; + default: + $files = egw_vfs::concat($content['path'],$content['name']); + break; + } + $js = ExecMethod2($content['method'],$content['id'],$files); + echo "\n\n\n\n\n"; + $GLOBALS['egw']->common->egw_exit(); + } + } + if (!($d = egw_vfs::opendir($content['path']))) + { + $content['msg'] = lang("Can't open directory %1!",$content['path']); + } + else + { + $n = 0; + $content['dir'] = array('mode' => $content['mode']); + while (($name = readdir($d))) + { + $path = egw_vfs::concat($content['path'],$name); + $is_dir = egw_vfs::is_dir($path); + $content['dir'][$n] = array( + 'name' => $name, + 'path' => $path, + 'onclick' => $is_dir ? "return select_goto('".addslashes($path)."');" : + ($content['mode'] != 'open-multiple' ? "return select_show('".addslashes($name)."');" : + "return select_toggle('".addslashes($name)."');"), + ); + if ($is_dir && $content['mode'] == 'open-multiple') + { + $readonlys['selected['.$name.']'] = true; + } + ++$n; + } + closedir($d); + } + $content['name'] = ''; + $content['js'] = ' +'; + //_debug_array($content); + //_debug_array($readonlys); + egw_session::appsession('select_path','filemanger',$content['path']); + $tpl = new etemplate('filemanager.select'); + $tpl->exec('filemanager.filemanager_select.select',$content,$sel_options,$readonlys,array( + 'mode' => $content['mode'], + 'method' => $content['method'], + 'id' => $content['id'], + 'label' => $content['label'], + ),2); + } +} diff --git a/filemanager/templates/default/app.css b/filemanager/templates/default/app.css index a4df6f0ddc..e560fb8ff2 100644 --- a/filemanager/templates/default/app.css +++ b/filemanager/templates/default/app.css @@ -8,3 +8,13 @@ .comment textarea { width: 100%; height: 35px; } .previewImage img { max-width: 430px; max-height: 275px; border: 1px solid black; } .previewText div { } + +/** + * Select file dialog + */ +.selectPath { font-weight: bold; } +.selectName input { width: 100%; } +.selectMime select { width: 100%; } +.selectIcon img { height: 16px; } +.displayNone input { display: none; } +.selectFiles td div { border-style: groove; } \ No newline at end of file diff --git a/filemanager/templates/default/select.xet b/filemanager/templates/default/select.xet new file mode 100644 index 0000000000..afabb9c04f --- /dev/null +++ b/filemanager/templates/default/select.xet @@ -0,0 +1,62 @@ + + + + + \ No newline at end of file