* * Modified by Jonathon Sim for Zeald Ltd * * User interface for the filemanager app * * Copyright (C) 2002 Mark A Peters (C) 2003 Zeald Ltd * * -------------------------------------------- * * This program is free software; you can redistribute it and/or modify it * * under the terms of the GNU General Public License as published by the * * Free Software Foundation; either version 2 of the License, or (at your * * option) any later version. * \**************************************************************************/ /* $Id$ */ define('UI_DEBUG', 0); class uifilemanager { var $public_functions = array( 'index' => True, 'action' => True, 'help' => True, 'history' => True, 'view' => True, 'view_file' => True, 'edit' => True, 'rename' => True, 'edit_comments' => True ); var $bo; var $nextmatchs; var $browser; var $template_dir; var $help_info; var $mime_ico = array ( 'application/pdf' => 'pdf', 'application/postscript' => 'postscript', 'application/msword' => 'word', 'application/vnd.ms-excel' => 'excel', 'application/vnd.ms-powerpoint' => 'ppt', 'application/x-gzip' => 'tgz', 'application/x-bzip' => 'tgz', 'application/zip' => 'tgz', 'application/x-debian-package' => 'deb', 'application/x-rpm' => 'rpm', 'application' => 'document', 'application/octet-stream' => 'unknown', 'audio' => 'sound', 'audio/mpeg' => 'sound', 'Directory' => 'folder', 'exe' => 'exe', 'image' => 'image', 'text' => 'txt', 'text/html' => 'html', 'text/plain' => 'txt', 'text/xml' => 'html', 'text/x-vcalendar' => 'vcalendar', 'text/calendar' => 'vcalendar', 'text/x-vcard' => 'vcard', 'text/x-tex' => 'tex', 'unknown' => 'unknown', 'video' => 'video', 'message' => 'message' ); function uifilemanager() { $GLOBALS['phpgw_info']['flags']['xslt_app'] = True; $this->actions = CreateObject('filemanager.uiactions'); $this->bo = CreateObject('filemanager.bofilemanager'); $this->nextmatchs = CreateObject('phpgwapi.nextmatchs'); $this->browser = CreateObject('phpgwapi.browser'); $this->template_dir = $GLOBALS['phpgw']->common->get_tpl_dir($GLOBALS['phpgw_info']['flags']['currentapp']); $this->check_access(); $this->create_home_dir(); $this->verify_path(); $this->update(); $GLOBALS['phpgw']->xslttpl->add_file(array('widgets',$GLOBALS['phpgw']->common->get_tpl_dir('phpgwapi','default') . SEP . 'app_header')); } function load_header() { unset($GLOBALS['phpgw_info']['flags']['noheader']); unset($GLOBALS['phpgw_info']['flags']['nonavbar']); unset($GLOBALS['phpgw_info']['flags']['noappheader']); unset($GLOBALS['phpgw_info']['flags']['noappfooter']); $GLOBALS['phpgw']->common->phpgw_header(); } function check_access() { if($this->bo->path != $this->bo->homedir && $this->bo->path != $this->bo->fakebase && $this->bo->path != '/' && !$this->bo->vfs->acl_check(array( 'string'=>$this->bo->path, 'relatives' => Array(RELATIVE_NONE), 'operation' => PHPGW_ACL_READ))) { $this->no_access_exists(lang('You do not have access to %1',$this->bo->path)); } $this->bo->userinfo['working_id'] = $this->bo->vfs->working_id; $this->bo->userinfo['working_lid'] = $GLOBALS['phpgw']->accounts->id2name($this->bo->userinfo['working_id']); } function set_col_headers(&$p,$var,$append=True) { // $p->set_var($var); // $p->parse('col_headers','column_headers',$append); } function no_access_exists($error_msg) { if($this->bo->debug) { echo 'DEBUG: ui.no_access_exists: you do not have access to this directory
'."\n"; } $p = CreateObject('phpgwapi.Template',$this->template_dir); $p->set_unknowns('remove'); $p->set_file( Array( '_errors' => 'errors.tpl' ) ); $p->set_block('_errors','error_page','error_page'); $p->set_block('_errors','ind_error','ind_error'); $p->set_var('error',$error_msg); $p->parse('errors','ind_error',True); $p->set_var('error','

Go to your Home directory' ); $p->parse('errors','ind_error',True); $p->pfp('output','error_page'); exit(); } function create_home_dir() { ### # If their home directory doesn't exist, we create it # Same for group directories ### if($this->bo->debug) { echo 'DEBUG: ui.create_home_dir: PATH = '.$this->bo->path.'
'."\n"; echo 'DEBUG: ui.create_home_dir: PATH = '.urlencode($this->bo->path).'
'."\n"; } if(($this->bo->path == $this->bo->homedir) && !$this->bo->vfs->file_exists(array( 'string' => $this->bo->homedir, 'relatives' => Array(RELATIVE_NONE) ))) { $this->bo->vfs->override_acl = 1; if (!$this->bo->vfs->mkdir(array( 'string' => $this->bo->homedir, 'relatives' => Array(RELATIVE_NONE) ))) { echo lang('failed to create directory') . ' '. $this->bo->homedir . '

'; } $this->bo->vfs->override_acl = 0; } elseif(preg_match("|^".$this->bo->fakebase."\/(.*)$|U",$this->bo->path,$this->bo->matches)) { if (!$this->bo->vfs->file_exists(array( 'string' => $this->bo->path, 'relatives' => Array(RELATIVE_NONE) ))) { //$this->bo->vfs->override_acl = 1; if (!$this->bo->vfs->mkdir(array( 'string' => $this->bo->homedir, 'relatives' => Array(RELATIVE_NONE) ))) { echo lang('failed to create directory') . ' '. $this->bo->homedir . '

'; } //$this->bo->vfs->override_acl = 0; if($this->bo->debug) { echo 'DEBUG: ui.create_home_dir: PATH = '.$this->bo->path.'
'."\n"; echo 'DEBUG: ui.create_home_dir(): matches[1] = '.$this->bo->matches[1].'
'."\n"; } $group_id = $GLOBALS['phpgw']->accounts->name2id($this->bo->matches[1]); if($group_id) { $this->bo->vfs->set_attributes(array( 'string' => $this->bo->path, 'relatives' => Array(RELATIVE_NONE), 'attributes' => Array('owner_id' => $group_id, 'createdby_id' => $group_id) )); } } } } function verify_path() { ### # Verify path is real ### if($this->bo->debug) { echo 'DEBUG: ui.verify_path: PATH = '.$this->bo->path.'
'."\n"; echo 'DEBUG: ui.verify_path: exists = '.$this->bo->vfs->file_exists(array( 'string' => $this->bo->path, 'relatives' => Array(RELATIVE_NONE))).'
'."\n"; } if($this->bo->path != $this->bo->homedir && $this->bo->path != '/' && $this->bo->path != $this->bo->fakebase && !$this->bo->vfs->file_exists(array( 'string' => $this->bo->path, 'relatives' => Array(RELATIVE_NONE) ))) { $this->no_access_exists(lang('Directory %1 does not exist',$this->bo->path)); } } function update() { /* Update if they request it, or one out of 20 page loads */ srand((double)microtime() * 1000000); if($this->bo->update || rand(0,19) == 4) { $this->bo->vfs->update_real( array( 'string' => $this->bo->path, 'relatives' =>Array(RELATIVE_NONE) )); } if($this->bo->update) { Header('Location: '.$GLOBALS['phpgw']->link( '/index.php', Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path) ) ) ); } } //Dispatches various file manager actions to the appropriate handler function action() { if (UI_DEBUG) { echo " Debug mode
"; echo "function : ".$this->bo->$function; print_r($_POST); die(); } $actions = Array( 'rename' => lang('Rename'), 'delete' => lang('Delete'), 'go' => lang('Go To'), 'copy' => lang('Copy To'), 'move' => lang('Move To'), 'download' => lang('Download'), 'newdir' => lang('Create Folder'), 'newfile' => lang('Create File'), 'edit' => lang('Edit'), 'edit_comments' => lang('Edit Comments'), 'apply_edit_comment' => '1', 'apply_edit_name' => '1', 'cancel' => lang('Cancel'), 'upload' => lang('Upload Files') ); $local_functions = array( 'rename', 'edit_comments' ); $bo_functions = array( 'apply_edit_comment', 'apply_edit_name', 'copy', 'delete', 'move', 'newdir', 'newfile', 'go', 'upload', 'download' ); if (trim(strtolower($this->bo->cancel)) == strtolower(lang('Cancel'))) { $this->cancel(); exit(); } //If the action is a "uiaction" (ie it has its own seperate interface), this will run it $this->actions->dispatch($this); @reset($actions); while(list($function,$text) = each($actions)) { if(isset($this->bo->$function) && !empty($this->bo->$function) && trim(strtolower($this->bo->$function)) == strtolower($text)) { //If the action is provided by this class, this'l do it if (in_array($function, $local_functions)) { echo " uifunction $function "; //Header('Location: '.$GLOBALS['phpgw']->link('/index.php',$var)); $this->$function(); exit(); } //For actions provided by the back-end, with no gui elseif (in_array($function, $bo_functions)) { echo " bofunction $function "; $f_function = 'f_'.$function; $errors = $this->bo->$f_function(); $var = Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path) ); if($function == 'newfile') { $var = Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.edit', 'path' => urlencode($this->bo->path), 'file' => urlencode($this->bo->createfile) ); } elseif(strlen($errors)) { $var['errors'] = $errors; } Header('Location: '.$GLOBALS['phpgw']->link('/index.php',$var)); exit(); } } } Header('Location: '.$GLOBALS['phpgw']->link('/index.php',Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path), 'errors' => lang('Unknown Action!') ))); } function help() { $this->load_header(); $this->bo->load_help_info(); @reset($this->bo->help_info); while(list($num,$help_array) = each($this->bo->help_info)) { if ($help_array[0] != $this->bo->help_name) { continue; } $help_array[1] = preg_replace("/\[(.*)\|(.*)\]/Ue","\$this->build_help('\\1','\\2')",$help_array[1]); $help_array[1] = preg_replace("/\[(.*)\]/Ue","\$this->build_help('\\1','\\1')",$help_array[1]); echo ''."\n".ucwords(str_replace('_',' ',$help_array[0]))."\n".'
'."\n"; echo ''."\n".$help_array[1].''; } exit(); } function build_help($help_option,$text='') { if($this->bo->settings['show_help']) { $help = ($text?'':''."\n"); $help .= ' '; $help .= ($text?$text:'[?]'); $help .= ''; $help .= ($text?'':"\n".' '); return $help; } else { return ''; } } /* function image($image,$alt) { return ''.$alt.''; } function link($array_params,$text) { return ''.$text.''; } function build_upload_choices($number) { return $this->link( Array( 'menuaction' => get_var('menuaction',Array('GET')), 'path' => $this->bo->path, 'show_upload_boxes' => $number ), $number).'  '; } function column_header(&$p,$internal,$displayed,$link=True) { if($link) { $header_str = ''.lang($displayed).''; } else { $header_str = $displayed; } $this->set_col_headers( $p, Array( 'td_extras' => '', 'column_header' => $header_str.$this->build_help($internal) ) ); } */ function display_buttons() { $var = array(); $button['type'] = 'submit'; $button['name'] = 'uiaction_edit'; $button['value'] = lang('Edit'); $button['caption'] = $this->build_help('edit'); $var[] = array('widget' => $button); $button['name'] = "rename"; $button['value'] =lang('Rename'); $button['caption'] = $this->build_help('rename'); $var[] = array('widget' => $button); $button['name'] = "delete"; $button['value'] =lang('Delete'); $button['caption'] = $this->build_help('delete'); $var[] = array('widget' => $button); $button['name'] = "edit_comments"; $button['value'] =lang('Edit Comments'); $button['caption'] = $this->build_help('edit_comments'); $var[] = array('widget' => $button); $var[] = array('widget' => array( 'type' => 'seperator' )); $button['name'] = "go"; $button['value'] = lang('Go To'); $button['caption'] = $this->build_help('go_to'); $var[] = array('widget' => $button); $button['name'] = "copy"; $button['value'] = lang('Copy To'); $button['caption'] = $this->build_help('copy_to'); $var[] = array('widget' => $button); $button['name'] = "move"; $button['value'] = lang('Move To'); $button['caption'] =$this->build_help('move_to'); $var[] = array('widget' => $button); ### # First we get the directories in their home directory ### $dirs[] = Array( 'directory' => $this->bo->fakebase, 'name' => $this->bo->userinfo['account_lid'] ); $ls_array = $this->bo->vfs->ls(array( 'string' => $this->bo->homedir, 'relatives' => Array(RELATIVE_NONE), 'nofiles' => True, 'mime_type' => 'Directory')); while(list($num,$dir) = each($ls_array)) { $dirs[] = $dir; } ### # Then we get the directories in their membership's home directories ### reset($this->bo->memberships); while(list($num,$group_array) = each($this->bo->memberships)) { ### # Don't list directories for groups that don't have access ### if(!$this->bo->membership_applications[$group_array['account_name']][$this->bo->appname]['enabled']) { continue; } $dirs[] = Array( 'directory' => $this->bo->fakebase, 'name' => $group_array['account_name'] ); $ls_array = $this->bo->vfs->ls(array( 'string' => $this->bo->fakebase.SEP.$group_array['account_name'], 'relatives' => Array(RELATIVE_NONE), 'nofiles' => True, 'mime_type' => 'Directory' )); while(list($num,$dir) = each($ls_array)) { $dirs[] = $dir; } } $dir_list = array(); reset($dirs); while(list($num, $dir) = each($dirs)) { if(!$dir['directory']) { continue; } ### # So we don't display // ### if($dir['directory'] != '/') { $dir['directory'] .= SEP; } $selected = ''; if($num == 0) { $selected = ' selected'; } ### # No point in displaying the current directory, or a directory that doesn't exist ### if((($dir['directory'].$dir['name']) != $this->bo->path) && $this->bo->vfs->file_exists(array( 'string' => $dir['directory'].$dir['name'], 'relatives' => Array(RELATIVE_NONE) ))) { $dir_list[] =array('option'=> array('value'=> urlencode($dir['directory'].$dir['name']), 'selected' => $selected, 'caption' => $dir['directory'].$dir['name'] )); } } $var[] = array('widget' => array( 'type' => 'select', 'name'=> 'todir', 'options' => $dir_list, 'caption' => $this->build_help('directory_list') )); if($this->bo->path != '/' && $this->bo->path != $this->bo->fakebase) { $var[] = array('widget' => array('type'=>'submit', 'name'=> 'download', 'value' => lang('Download'), 'caption' => $this->build_help('download') )); $var[] = array('widget' => array( 'type' => 'seperator' )); $var[] = array('widget' => array('type' => 'text', 'name' => 'createdir', 'maxlength' => '255', 'size' => '15' )); $var[] = array('widget' => array('type' => 'submit', 'name' => 'newdir', 'value' => lang('Create Folder'), 'caption' => $this->build_help('create_folder') )); $var[] = array('widget' => array( 'type' => 'seperator' )); } /* $var[] = array('widget' => array('type' => 'submit', 'name' => 'update', 'value' => lang('Update'), 'caption' => $this->build_help('update') )); */ if($this->bo->path != '/' && $this->bo->path != $this->bo->fakebase) { $var[] = array('widget' => array( 'type' => 'text', 'name' => 'createfile', 'maxlength' => '255', 'size' => '15' )); $var[] = array('widget' => array('type' => 'submit', 'name' => 'newfile', 'value' => lang('Create File'), 'caption' => $this->build_help('create_file') )); $var[] = array('widget' => array( 'type' => 'seperator' )); } if($this->bo->settings['show_command_line']) { $var[] = array('widget' => array( 'type' => 'text' , 'name'=> 'command_line', 'size' => '50', 'caption' => $this->build_help('command_line') )); $var[] = array('widget' => array( 'type' => 'submit', 'name' => 'execute', 'value' => lang('Execute'), 'caption' => $this->build_help('execute') )); $var[] = array('widget' => array( 'type' => 'seperator' )); } return $var; } function display_summary_info($numoffiles,$usedspace) { $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); $var['td_extras'] = ' align="right"'; $var['column_header'] = ''.lang('Used Space').':'; $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); $var['td_extras'] = ' align="left"'; $var['column_header'] = $this->bo->borkb($usedspace); $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); if($this_homedir) { $var['td_extras'] = ' align="right"'; $var['column_header'] = ''.lang('Unused space').':'; $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); $var['td_extras'] = ' align="left"'; $var['column_header'] = $this->bo->borkb($this->bo->userinfo['hdspace'] - $usedspace); $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); } $p->parse('list','column_rows',True); $p->set_var('col_headers',''); if($this_homedir) { $var['td_extras'] = ' colspan="'.($info_columns / 2).'" align="right" width="50%"'; $var['column_header'] = ''.lang('Total Files').':'; $p->set_var($var); $p->parse('col_headers','column_headers_normal',False); $var['td_extras'] = ' colspan="'.($info_columns / 2).'" align="left" width="50%"'; $var['column_header'] = count($this->bo->vfs->ls(array( 'string' => $this->bo->path, 'relatives' => Array(RELATIVE_NONE) ))); $p->set_var($var); $p->parse('col_headers','column_headers_normal',True); $p->parse('list','column_rows',True); $p->set_var('col_headers',''); } return $p->fp('output','table'); } function display_uploads() { $var_head[] = array('widget' => array('type' => 'label', 'caption' => lang('File').$this->build_help('upload_file') )); $var_head[] = array('widget' => array('type' => 'label', 'caption' => lang('Comment').$this->build_help('upload_comment') )); $table_head [] =array('table_col' => $var_head); // $var[] = array('widget' => array('type' => 'seperator')); for($i=0;$i<$this->bo->show_upload_boxes;$i++) { $var = array(); $var[] = array('widget' => array('type' => 'file', 'name' => 'upload_file[]' , 'maxlength'=> '255' )); $var[] = array('widget' => array('type' => 'text', 'name' => 'upload_comment[]' )); /* $var[] = array('widget' => array('type' => 'label', 'caption' => $input_file.$input_comment )); */ $table_rows [] = array('table_col' => $var); } $var = array(); $var[] = array('widget' => array('type' =>'submit', 'name' => 'upload', 'value' => lang('Upload Files'), 'caption' => $this->build_help('upload_files') )); $var[] = array('widget' => array('type' => 'hidden', 'name' => 'show_upload_boxes', 'value' => $this->bo->show_upload_boxes )); $table_rows [] = array('table_col' => $var); return array('table' => array('table_head' =>$table_head , 'table_row' => $table_rows) ); } function dirs_first($files_array) { $dirs = array(); $files = array(); $result = array(); for($i=0;$i!=count($files_array);$i++) { $file = $files_array[$i]; if ($file['mime_type'] == 'Directory') { $dirs[] = $file; } else { $files[] = $file; } } return array_merge($dirs, $files); } function index( $edit=array()) { $this->load_header(); $files_array = $this->bo->load_files(); $usage = 0; $files_array = $this->dirs_first($files_array); if(count($files_array) || $this->bo->cwd) { $file_output = array(); for($i=0;$i!=count($files_array);$i++) { $file = $files_array[$i]; $usage += $file['size']; if (!count($edit) ) { $file_attributes['checkbox'] = ''; $file_output[$i]['checkbox'] =array('widget' => array( 'type' => 'checkbox', 'name' => 'fileman[]', 'value' => $file['name'] )); } @reset($this->bo->file_attributes); while(list($internal,$displayed) = each($this->bo->file_attributes)) { if ($this->bo->settings[$internal]) { if ($internal==$edit[$file['name']]) { $file_output[$i][$internal] = array('widget' => array('type' => 'text', 'name' => 'changes['.$file['name'].']', 'value' => $file[$internal] )); } else { switch($internal) { case 'owner_id': case 'owner': case 'createdby_id': case 'modifiedby_id': $name = $GLOBALS['phpgw']->accounts->id2name($file[$internal]) ; $file_output[$i][$internal] = $name ? $name: ''; break; case 'created': case 'modified': //Convert ISO 8601 date format used by DAV into something people can read $file_output[$i][$internal] = $this->bo->convert_date($file[$internal]); break; case 'name': $mime_parts = explode('/',$file['mime_type']); $file_icon = $this->mime_ico[$file['mime_type']]; if (!$file_icon) { $file_icon = ( $this->mime_ico[$mime_parts[0]]) ? $this->mime_ico[$mime_parts[0]] : $this->mime_ico['unknown']; if (strpos($file['name'],'.exe') !== false) $file_icon = $this->mime_ico['exe']; } $file_output[$i]['name']['icon'] = array( 'widget' => array( 'type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,$file_icon) )); if ($file['mime_type']=='Directory') { $href = array('menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => $this->bo->path.SEP.$file['name'] ); } else { $href = Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.view', 'path' => urlencode($this->bo->path), 'file' => urlencode($file['name']) ); } $file_output[$i]['name']['link'] = array( "widget"=> array( 'type' => 'link', 'caption' => $file['name'], 'href' => $GLOBALS['phpgw']->link('/index.php', $href) )); if ($mime_parts[0] == 'text') { $href['menuaction'] = $this->bo->appname.'.ui'.$this->bo->appname.'.action'; $href['uiaction'] = 'edit'; $file_output[$i]['name']['edit'] = array('widget' => array( 'type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'pencil'), 'link' => $GLOBALS['phpgw']->link('/index.php', $href) )); } break; default: $file_output[$i][$internal] = $file[$internal]; } } $file_attributes[$internal] = array("widget"=> array( 'type' => 'link', 'caption' => $displayed, 'href' => $GLOBALS['phpgw']->link('/index.php', array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path'=>$this->bo->path, 'sortby' => $internal )) )); } } } $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('summary' => array( 'file_count' => count($files_array), 'usage' => $usage ))); $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('file_attributes' => $file_attributes)); $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array( 'files' => array( 'file' => $file_output ) ) ); $GLOBALS['phpgw']->xslttpl->add_file(array('index',$GLOBALS['phpgw']->common->get_tpl_dir('phpgwapi','default') . SEP . 'app_header')); $GLOBALS['tr_color'] = $GLOBALS['phpgw_info']['theme']['row_off']; $var = Array( 'form_action' => $GLOBALS['phpgw']->link('/index.php', Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.action', 'path' => urlencode($this->bo->path) ) ), 'error' => (isset($this->bo->errors) && is_array(unserialize(base64_decode($this->bo->errors)))?$GLOBALS['phpgw']->common->error_list(unserialize(base64_decode($this->bo->errors)),'Results'):''), 'img_up' => array('widget' => array('type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'up'), 'alt' => lang('Up'), 'link' => $GLOBALS['phpgw']->link('/index.php',Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->lesspath) )) )), 'help_up' => $this->build_help('up'), 'img_home' => array('widget' => array('type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'folder_home'), 'alt' => lang('Folder'), 'link' => $GLOBALS['phpgw']->link('/index.php',Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->homedir) )) )), 'dir' => $this->bo->path, 'img_dir' => array('widget' => array('type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'folder_large'), 'alt' => lang('Folder'), 'link' => $GLOBALS['phpgw']->link('/index.php',Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path) )) )), 'help_home' => $this->build_help('home'), ); if (strlen($this->bo->errors)) { $var['errors'] = $this->bo->errors; } if (count($edit)) { $var['img_cancel'] = array('widget' => array('type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'button_cancel'), 'alt' => lang('Folder') )); $var['button_cancel'] = array('widget' => array('type' => 'submit', 'name' => 'cancel', 'value' => lang('Cancel') )); $var['img_ok'] = array('widget' => array('type' => 'img', 'src' => $GLOBALS['phpgw']->common->image($this->bo->appname,'button_ok'), 'alt' => lang('Folder') )); $var['button_ok'] = array('widget' => array('type' => 'submit', 'name' => 'submit', 'value' => lang('OK') )); @reset($edit); while( list($file,$prop) = each($edit)) { $var['fileman'][] = array('widget' => array('type'=>'hidden', 'name' => 'fileman[]', 'value' => $file )); } @reset($edit); list($file,$prop) = each($edit); $var['action'] = array('widget' => array('type'=>'hidden', 'name' => 'apply_edit_'.$prop, 'value' => 1 )); } $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('index' => $var)); @reset($this->bo->file_attributes); $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('settings' => $this->bo->settings)); $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('display_settings' => $GLOBALS['phpgw_info']['theme'])); if(!count($edit)) { $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('buttons'=> array('button' => $this->display_buttons()) )); $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('uploads' => $this->display_uploads() )); } $GLOBALS['phpgw']->xslttpl->set_var('phpgw', array('index' => $var)); } } function cancel() { $var = Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path) ); Header('Location: '.$GLOBALS['phpgw']->link('/index.php',$var)); } function rename() { $edit=array(); for ($i=0; $i!=count($this->bo->fileman);$i++) { $edit[$this->bo->fileman[$i]] = 'name'; } $this->index($edit); } function edit_comments() { $edit=array(); for ($i=0; $i!=count($this->bo->fileman);$i++) { $edit[$this->bo->fileman[$i]] = 'comment'; } $this->index($edit); } function view() { //Some VFSs (ie WebDAV) are able to provide their own more efficent view method //than just reading the file into memory then dumping it back out again if ($this->bo->vfs->options('VIEW')) { $this->bo->vfs->view(array ( 'string' => $this->bo->path.'/'.$this->bo->file, 'relatives' => array (RELATIVE_NONE) )); } else { $GLOBALS['phpgw_info']['flags']['noheader'] = true; $GLOBALS['phpgw_info']['flags']['nonavbar'] = true; $GLOBALS['phpgw_info']['flags']['noappheader'] = true; $GLOBALS['phpgw_info']['flags']['noappfooter'] = true; $ls_array = $this->bo->vfs->ls (array ( 'string' => $this->bo->path.'/'.$this->bo->file, 'relatives' => array (RELATIVE_ALL), 'checksubdirs' => False, 'nofiles' => True ) ); if ($ls_array[0]['mime_type']) { $mime_type = $ls_array[0]['mime_type']; } elseif ($GLOBALS['settings']['viewtextplain']) { $mime_type = 'text/plain'; } header('Content-type: ' . $mime_type); echo $this->bo->vfs->read (array ( 'string' => $this->bo->path.'/'.$this->bo->file, 'relatives' => array (RELATIVE_NONE) ) ); } exit();; } function history() { $this->load_header(); $file = $this->bo->path.$this->bo->dispsep.$this->bo->file; if($this->bo->vfs->file_exists(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE) ))) { $col_headers = Array( 'Date' => 'created', 'Version' => 'version', 'Action Performed by' => 'owner_id', 'Operation' => 'comment' ); $p = CreateObject('phpgwapi.Template',$this->template_dir); $p->set_unknowns('remove'); $p->set_file( Array( '_history' => 'history.tpl' ) ); $p->set_block('_history','history','history'); $p->set_block('_history','column_headers','column_headers'); $p->set_block('_history','column_rows','column_rows'); $var = Array( 'path' => $this->link( Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.index', 'path' => urlencode($this->bo->path) ), $this->bo->path ), 'filename' => $this->link( Array( 'menuaction' => $this->bo->appname.'.ui'.$this->bo->appname.'.view', 'path' => urlencode($this->bo->path), 'file' => urlencode($this->bo->file) ), $this->bo->file ) ); $p->set_var($var); $GLOBALS['tr_color'] = $GLOBALS['phpgw_info']['theme']['row_off']; $var = Array( 'td_extras' => '' ); @reset($col_headers); while(list($label,$field)= each($col_headers)) { $var['column_header'] = ''.$label.''; $this->set_col_headers($p,$var); } $p->set_var('tr_extras',' bgcolor="'.$this->nextmatchs->alternate_row_color().'" border="0"'); $p->parse('col_row','column_rows',True); $p->set_var('col_headers',''); $journal_array = $this->bo->vfs->get_journal(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE) )); while(list($num,$journal_entry) = each($journal_array)) { @reset($col_headers); while(list($label,$field)= each($col_headers)) { switch($field) { case 'owner_id': $var['column_header'] = ''.$GLOBALS['phpgw']->accounts->id2name($journal_entry[$field]).''; break; case 'created': $var['column_header'] = ''.$this->bo->convert_date($journal_entry[$field]).''; break; default: $var['column_header'] = ''.$journal_entry[$field].''; break; } $this->set_col_headers($p,$var); } $p->set_var('tr_extras',' bgcolor="'.$this->nextmatchs->alternate_row_color().'" border="0"'); $p->parse('col_row','column_rows',True); $p->set_var('col_headers',''); } $p->pfp('output','history'); } } function view_file($file_array='') { if(is_array($file_array)) { $this->bo->path = $file_array['path']; $this->bo->file = $file_array['file']; } $file = $this->bo->path.SEP.$this->bo->file; if($this->bo->vfs->file_exists(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE) ))) { $browser = CreateObject('phpgwapi.browser'); $browser->content_header($this->bo->file,$this->bo->vfs->file_type(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE))), $this->bo->vfs->get_size(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE), 'checksubdirs' => True ))); // $browser->content_header($this->bo->file); echo $this->bo->vfs->read(array( 'string' => $file, 'relatives' => Array(RELATIVE_NONE) )); flush(); } if(!is_array($file_array)) { exit(); } } }