From a604c177c80a55ec74b2bcdd7932b09af81973c1 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Thu, 14 Dec 2006 17:17:42 +0000 Subject: [PATCH] several filemanager fixes from Klaus Leithoff --- filemanager/inc/class.uifilemanager.inc.php | 180 ++++++++++++++------ 1 file changed, 125 insertions(+), 55 deletions(-) diff --git a/filemanager/inc/class.uifilemanager.inc.php b/filemanager/inc/class.uifilemanager.inc.php index 575d723bdc..b2b6f36dd3 100755 --- a/filemanager/inc/class.uifilemanager.inc.php +++ b/filemanager/inc/class.uifilemanager.inc.php @@ -84,7 +84,7 @@ { // error_reporting(8); $GLOBALS['egw']->browser =& CreateObject('phpgwapi.browser'); - + $this->dateformat=$GLOBALS['egw_info']['user']['preferences']['common']['dateformat']; $this->now = date('Y-m-d'); @@ -708,13 +708,14 @@ # File size if($this->prefs['size']) { - $tmp_arr=array( - 'string' => $files['directory'] . '/' . $files['name'], - 'relatives' => array(RELATIVE_NONE) - ); - if($files['mime_type'] != 'Directory') $tmp_arr['checksubdirs'] = false; - - $size = $this->bo->vfs->get_size($tmp_arr); + // KL to fetch the size of the object here is just WRONG, since the array may be already sorted by size + //$tmp_arr=array( + // 'string' => $files['directory'] . '/' . $files['name'], + // 'relatives' => array(RELATIVE_NONE) + //; + //if($files['mime_type'] != 'Directory') $tmp_arr['checksubdirs'] = false; + //$size = $this->bo->vfs->get_size($tmp_arr); + $size = $files['size']; $col_data=$this->bo->borkb($size); @@ -749,7 +750,9 @@ # Owner name if($this->prefs['owner']) { - $this->t->set_var('col_data',$GLOBALS['egw']->accounts->id2name($files['owner_id'])); + // KL to fetch the name of the object here is just WRONG, since the array may be already sorted by id + //$this->t->set_var('col_data',$GLOBALS['egw']->accounts->id2name($files['owner_id'])); + $this->t->set_var('col_data',$files['owner_name']); $this->t->parse('columns','column',True); } @@ -759,7 +762,9 @@ $this->html_table_col_begin(); if($files['createdby_id']) { - $col_data=$GLOBALS['egw']->accounts->id2name($files['createdby_id']); + // KL to fetch the name of the object here is just WRONG, since the array may be already sorted by id + //$col_data=$GLOBALS['egw']->accounts->id2name($files['createdby_id']); + $col_data=$files['createdby_name']; } else $col_data=''; @@ -772,7 +777,9 @@ { if($files['modifiedby_id']) { - $col_data=$GLOBALS['egw']->accounts->id2name($files['modifiedby_id']); + // KL to fetch the name of the object here is just WRONG, since the array may be already sorted by id + //$col_data=$GLOBALS['egw']->accounts->id2name($files['modifiedby_id']); + $col_data=$files['modifiedby_name']; } else $col_data=''; $this->t->set_var('col_data',$col_data); @@ -882,20 +889,11 @@ { $this->bo->vfs->mkdir(array('string' => $this->bo->homedir, 'relatives' => array(RELATIVE_NONE))); } - - $ls_array = $this->bo->vfs->ls(array( - 'string' => $this->bo->homedir, - 'relatives' => array(RELATIVE_NONE), - 'checksubdirs' => False, - 'nofiles' => True - )); - $this->files_array[] = $ls_array[0]; - $this->numoffiles++; - reset($this->readable_groups); + // create the directorys of the readableGroups if they do not exist while(list($num, $group_array) = each($this->readable_groups)) { - # If the group doesn't have access to this app, we don't show it + # If the group doesn't have access to this app, we don't show it, and do not appkly any action here if(!$this->groups_applications[$group_array['account_name']][$this->bo->appname]['enabled']) { continue; @@ -908,52 +906,124 @@ 'string' => $this->bo->fakebase.'/'.$group_array['account_name'], 'relatives' => array(RELATIVE_NONE) )); - // FIXME we just created a fresh group dir so we know there nothing in it so we have to remove all existing content - $this->bo->vfs->override_acl = 0; - $this->bo->vfs->set_attributes(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],'relatives' => array(RELATIVE_NONE),'attributes' => array('owner_id' => $group_array['account_id'],'createdby_id' => $group_array['account_id']))); } - - $ls_array = $this->bo->vfs->ls(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],'relatives' => array(RELATIVE_NONE),'checksubdirs' => False,'nofiles' => True)); - - $this->files_array[] = $ls_array[0]; - - $this->numoffiles++; } } - else - { - $ls_array = $this->bo->vfs->ls(array( - 'string' => $this->path, - 'relatives' => array(RELATIVE_NONE), - 'checksubdirs' => False, - 'nofiles' => False, - 'orderby' => $this->sortby - )); - if($phpwh_debug) - { - echo '# of files found in "'.$this->path.'" : '.count($ls_array).'
'."\n"; - } - - while(list($num, $file_array) = each($ls_array)) - { - $this->numoffiles++; - $this->files_array[] = $file_array; - if($phpwh_debug) + // read the list of the existing directorys/files + $ls_array = $this->bo->vfs->ls(array( + 'string' => $this->path, + 'relatives' => array(RELATIVE_NONE), + 'checksubdirs' => false, + 'nofiles' => false, + 'orderby' => $this->sortby + )); + $heimatverz=explode('/',$this->bo->homedir); + // process the list: check if we are allowed to read it, get the real size, and count the files/dirs + while(list($num, $file_array) = each($ls_array)) + { + if($this->path == $this->bo->fakebase) + { + if ($file_array['name'] && (array_key_exists($file_array['name'],$this->readable_groups) || $this->bo->fakebase.'/'.$file_array['name'] == $this->bo->homedir || $file_array['name'] == $heimatverz[2])) { - echo 'Filename: '.$file_array['name'].'
'."\n"; + if(!$this->groups_applications[$file_array['name']][$this->bo->appname]['enabled'] && $this->bo->fakebase.'/'.$file_array['name'] != $this->bo->homedir && $file_array['name'] != $heimatverz[2]) + { + continue; + } } + if ($file_array['name'] && !array_key_exists($file_array['name'],$this->readable_groups) && !($this->bo->fakebase.'/'.$file_array['name'] == $this->bo->homedir || $file_array['name'] == $heimatverz[2])) + { + continue; + } } - } + // get additional info, which was not retrieved meeting our needs -> size, ids + if($this->prefs['size']) + { + //KL get the real size of the object + $tmp_arr=array( + 'string' => $file_array['directory'] . '/' . $file_array['name'], + 'relatives' => array(RELATIVE_NONE) + ); + if($file_array['mime_type'] != 'Directory') $tmp_arr['checksubdirs'] = false; + $file_array['size']=$this->bo->vfs->get_size($tmp_arr); + // KL got the real size + } + if($this->prefs['owner']) + { + $file_array['owner_name']=$GLOBALS['egw']->accounts->id2name($file_array['owner_id']); + } - if(!is_array($this->files_array)) + # Creator name + if($this->prefs['createdby_id']) + { + if($file_array['createdby_id']) + { + //$col_data=$GLOBALS['egw']->accounts->id2name($files['createdby_lid']); + $file_array['createdby_name']=$GLOBALS['egw']->accounts->id2name($file_array['createdby_id']); + } + else + { + $file_array['createdby_name']=''; + } + } + + # Modified by name + if($this->prefs['modifiedby_id']) + { + if($file_array['modifiedby_id']) + { + $file_array['modifiedby_name']=$GLOBALS['egw']->accounts->id2name($file_array['modifiedby_id']); + } + else + { + $file_array['modifiedby_name']=''; + } + } + // got additional info + $this->numoffiles++; + $this->files_array[] = $file_array; + if($phpwh_debug) + { + echo 'Filename: '.$file_array['name'].'
'."\n"; + } + } + + + if( !is_array($this->files_array) ) { $this->files_array = array(); } - // end file count + else + { + // KL sorting by multisort, if sort-param is set. + if ($this->sortby) + { + $mysorting=$this->sortby; + if ($mysorting=='owner') + { + $mysorting='owner_name'; + } + elseif ($mysorting=='createdby_id') + { + $mysorting='createdby_name'; + } + elseif($mysorting=='modifiedby_id') + { + $mysorting='modifiedby_name'; + } + foreach ($this->files_array as $key => $row) { + $file[$key] = $row[$mysorting]; + } + + // cast and sort file as container of the sort-key-column ascending to sort + // $files_array (as last Param), by the common key + array_multisort(array_map('strtolower',$file), SORT_ASC, $this->files_array); + } + // KL sorting done + } } function toolbar($type) @@ -2073,4 +2143,4 @@ $rstring = ""; return($this->bo->eor($rstring, $return)); } - } + } \ No newline at end of file