diff --git a/filemanager/inc/class.filemanager_hooks.inc.php b/filemanager/inc/class.filemanager_hooks.inc.php index e2d85d3a9a..5e34dd3755 100644 --- a/filemanager/inc/class.filemanager_hooks.inc.php +++ b/filemanager/inc/class.filemanager_hooks.inc.php @@ -35,21 +35,34 @@ class filemanager_hooks if ($location == 'sidebox_menu') { $title = $GLOBALS['egw_info']['apps'][self::$appname]['title'] . ' '. lang('Menu'); - $file = array( - 'Your home directory' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$homepath)), - 'Users and groups' => $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath)), + $file = array(); + // add selection for available views, if we have more then one + if (count(filemanager_ui::init_views()) > 1) + { + $index_url = egw::link('/index.php',array('menuaction' => 'filemanager.filemanager_ui.index'),false); + $file[] = array( + 'text' => html::select('filemanager_view',filemanager_ui::get_view(),filemanager_ui::$views,false, + ' onchange="'."egw_appWindow('filemanager').location='$index_url&view='+this.value;". + '" style="width: 100%;"'), + 'no_lang' => True, + 'link' => False + ); + } + $file += array( + 'Your home directory' => egw::link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$homepath)), + 'Users and groups' => egw::link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$basepath)), ); if (!empty($file_prefs['showbase']) && $file_prefs['showbase']=='yes') { - $file['Basedirectory'] = $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$rootpath)); + $file['Basedirectory'] = egw::link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$rootpath)); } - if (!empty($file_prefs['startfolder'])) $file['Startfolder']= $GLOBALS['egw']->link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$file_prefs['startfolder'])); + if (!empty($file_prefs['startfolder'])) $file['Startfolder']= egw::link('/index.php',array('menuaction'=>self::$appname.'.filemanager_ui.index','path'=>$file_prefs['startfolder'])); for ($i=1; $i<=self::$foldercount; $i++) { if (!empty($file_prefs['folderlink'.$i])) { $foldername = array_pop(explode('/',$file_prefs['folderlink'.$i])); - $file[lang('Link %1: %2',$i,$foldername)]= $GLOBALS['egw']->link('/index.php',array( + $file[lang('Link %1: %2',$i,$foldername)]= egw::link('/index.php',array( 'menuaction' => self::$appname.'.filemanager_ui.index', 'path' => $file_prefs['folderlink'.$i], 'nolang' => true, @@ -72,8 +85,8 @@ class filemanager_hooks if (is_array($location)) $location = $location['location']; $file = Array( - 'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname='.self::$appname), - 'Custom fields' => $GLOBALS['egw']->link('/index.php','menuaction=admin.customfields.edit&appname='.self::$appname), + 'Site Configuration' => egw::link('/index.php','menuaction=admin.uiconfig.index&appname='.self::$appname), + 'Custom fields' => egw::link('/index.php','menuaction=admin.customfields.edit&appname='.self::$appname), ); // add other administration links, eg. of filesystem backends like versioning if (($other = $GLOBALS['egw']->hooks->process('filemanager_admin',array(),true))) @@ -103,7 +116,7 @@ class filemanager_hooks if (is_array($location)) $location = $location['location']; $file = array( - 'Preferences' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uisettings.index&appname='.self::$appname), + 'Preferences' => egw::link('/index.php','menuaction=preferences.uisettings.index&appname='.self::$appname), ); if ($location == 'preferences') { diff --git a/filemanager/inc/class.filemanager_ui.inc.php b/filemanager/inc/class.filemanager_ui.inc.php index 5ce303a818..4d9243b8f2 100644 --- a/filemanager/inc/class.filemanager_ui.inc.php +++ b/filemanager/inc/class.filemanager_ui.inc.php @@ -24,6 +24,16 @@ class filemanager_ui 'index' => true, 'file' => true, ); + + /** + * Views available from plugins + * + * @var array + */ + public static $views = array( + 'filemanager_ui::listview' => 'Listview', + ); + public static $views_init = false; /** * Constructor @@ -41,36 +51,51 @@ class filemanager_ui { egw_vfs::$is_root = true; } + + self::init_views(); + } + + /** + * Initialise and return available views + * + * @return array with method => label pairs + */ + public static function init_views() + { + if (!self::$views_init) + { + // translate our labels + foreach(self::$views as $method => &$label) + { + $label = lang($label); + } + // search for plugins with additional filemanager views + foreach($GLOBALS['egw']->hooks->process('filemanager_views') as $app => $views) + { + if ($views) self::$views += $views; + } + self::$views_init = true; + } + return self::$views; } /** - * Make the current user (vfs) root + * Get active view * - * The user/pw is either the setup config user or a specially configured vfs_root user - * - * @param string $user='' setup config user to become root or '' to log off as root - * @param string $password=null setup config password to become root - * @param boolean &$is_setup=null on return true if authenticated user is setup config user, false otherwise - * @return boolean true is root user given, false otherwise (including logout / empty $user) + * @return string */ - protected function sudo($user='',$password=null,&$is_setup=null) + function get_view() { - if (!$user) + $view =& egw_cache::getSession('filemanager', 'view'); + if (isset($_GET['view'])) { - $is_root = $is_setup = false; + $view = $_GET['view']; } - else + if (!isset(self::$views[$view])) { - // config user & password - $is_setup = egw_session::user_pw_hash($user,$password) === $GLOBALS['egw_info']['server']['config_hash']; - // or vfs root user from setup >> configuration - $is_root = $is_setup || $GLOBALS['egw_info']['server']['vfs_root_user'] && - in_array($user,preg_split('/, */',$GLOBALS['egw_info']['server']['vfs_root_user'])) && - $GLOBALS['egw']->auth->authenticate($user, $password, 'text'); + $view = key(self::$views); } - //echo "
".__METHOD__."('$user','$password',$is_setup) user_pw_hash(...)='".egw_session::user_pw_hash($user,$password)."', config_hash='{$GLOBALS['egw_info']['server']['config_hash']}' --> returning ".array2string($is_root)."
\n"; - egw_session::appsession('is_setup','filemanager',$is_setup); - return egw_session::appsession('is_root','filemanager',egw_vfs::$is_root = $is_root); + return $view; } /** @@ -81,10 +106,6 @@ class filemanager_ui */ function index(array $content=null,$msg=null) { - $GLOBALS['egw_info']['flags']['include_xajax'] = true; - - $tpl = new etemplate('filemanager.index'); - if (!is_array($content)) { $content = array( @@ -140,6 +161,53 @@ class filemanager_ui if (!$content['nm']['filter']) $content['nm']['filter'] = '1'; } } + $view = self::get_view(); + + call_user_func($view,$content,$msg); + } + + /** + * Make the current user (vfs) root + * + * The user/pw is either the setup config user or a specially configured vfs_root user + * + * @param string $user='' setup config user to become root or '' to log off as root + * @param string $password=null setup config password to become root + * @param boolean &$is_setup=null on return true if authenticated user is setup config user, false otherwise + * @return boolean true is root user given, false otherwise (including logout / empty $user) + */ + protected function sudo($user='',$password=null,&$is_setup=null) + { + if (!$user) + { + $is_root = $is_setup = false; + } + else + { + // config user & password + $is_setup = egw_session::user_pw_hash($user,$password) === $GLOBALS['egw_info']['server']['config_hash']; + // or vfs root user from setup >> configuration + $is_root = $is_setup || $GLOBALS['egw_info']['server']['vfs_root_user'] && + in_array($user,preg_split('/, */',$GLOBALS['egw_info']['server']['vfs_root_user'])) && + $GLOBALS['egw']->auth->authenticate($user, $password, 'text'); + } + //echo "".__METHOD__."('$user','$password',$is_setup) user_pw_hash(...)='".egw_session::user_pw_hash($user,$password)."', config_hash='{$GLOBALS['egw_info']['server']['config_hash']}' --> returning ".array2string($is_root)."
\n"; + egw_session::appsession('is_setup','filemanager',$is_setup); + return egw_session::appsession('is_root','filemanager',egw_vfs::$is_root = $is_root); + } + + /** + * Filemanager listview + * + * @param array $content=null + * @param string $msg=null + */ + function listview(array $content=null,$msg=null) + { + $GLOBALS['egw_info']['flags']['include_xajax'] = true; + + $tpl = new etemplate('filemanager.index'); + $content['nm']['msg'] = $msg; if ($content['action'] || $content['nm']['rows'])