From a05b0f0fa131d03b136c52c2373a3159efcb6512 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 15 Oct 2008 05:57:00 +0000 Subject: [PATCH] removed outdated docu --- phpgwapi/doc/README.first | 6 - phpgwapi/doc/class.accounts | 109 --- phpgwapi/doc/cvs.html | 95 --- phpgwapi/doc/php-configuration.txt | 60 -- phpgwapi/doc/phpgw.css | 21 - phpgwapi/doc/ttkcruncher-0.2.tgz | Bin 24975 -> 0 bytes phpgwapi/doc/vfs/inline2lyx.pl | 164 ---- phpgwapi/doc/vfs/vfs-1.html | 28 - phpgwapi/doc/vfs/vfs-2.html | 143 ---- phpgwapi/doc/vfs/vfs-3.html | 130 ---- phpgwapi/doc/vfs/vfs-4.html | 201 ----- phpgwapi/doc/vfs/vfs-5.html | 25 - phpgwapi/doc/vfs/vfs-6.html | 110 --- phpgwapi/doc/vfs/vfs-7.html | 42 -- phpgwapi/doc/vfs/vfs.html | 72 -- phpgwapi/doc/vfs/vfs.lyx | 1118 ---------------------------- phpgwapi/doc/vfs/vfs.sgml | 648 ---------------- phpgwapi/doc/vfs/vfs.txt | 425 ----------- 18 files changed, 3397 deletions(-) delete mode 100644 phpgwapi/doc/README.first delete mode 100644 phpgwapi/doc/class.accounts delete mode 100755 phpgwapi/doc/cvs.html delete mode 100644 phpgwapi/doc/php-configuration.txt delete mode 100644 phpgwapi/doc/phpgw.css delete mode 100644 phpgwapi/doc/ttkcruncher-0.2.tgz delete mode 100755 phpgwapi/doc/vfs/inline2lyx.pl delete mode 100644 phpgwapi/doc/vfs/vfs-1.html delete mode 100644 phpgwapi/doc/vfs/vfs-2.html delete mode 100644 phpgwapi/doc/vfs/vfs-3.html delete mode 100644 phpgwapi/doc/vfs/vfs-4.html delete mode 100644 phpgwapi/doc/vfs/vfs-5.html delete mode 100644 phpgwapi/doc/vfs/vfs-6.html delete mode 100644 phpgwapi/doc/vfs/vfs-7.html delete mode 100644 phpgwapi/doc/vfs/vfs.html delete mode 100644 phpgwapi/doc/vfs/vfs.lyx delete mode 100644 phpgwapi/doc/vfs/vfs.sgml delete mode 100644 phpgwapi/doc/vfs/vfs.txt diff --git a/phpgwapi/doc/README.first b/phpgwapi/doc/README.first deleted file mode 100644 index 6e6841191c..0000000000 --- a/phpgwapi/doc/README.first +++ /dev/null @@ -1,6 +0,0 @@ - -We plan to organize documents centralized on wiki site, for easy maintain. For the latest documents, please visite the public wiki http://egroupware.org/wiki/ - -The documents currently in this directory will most likely be moved to wiki upon next update, and please developers don't store more documents here. - ---- message drop by zhangweiwu@realss.com diff --git a/phpgwapi/doc/class.accounts b/phpgwapi/doc/class.accounts deleted file mode 100644 index b7eeb96595..0000000000 --- a/phpgwapi/doc/class.accounts +++ /dev/null @@ -1,109 +0,0 @@ -// There is a accounts_shared which added functions that are identical for all - -class accounts_{ - var $db; - var $account_id; - var $data; - var $memberships; - var $members; - - function read_repository() - { - /**************************************************************************\ - * Read values for $this->account_id and put them into $this->data and * - * then return $this->data * - * * - * These are the values that should be set: * - * $this->data["account_id"] * - * $this->data["account_lid"] * - * $this->data["account_type"] * - * $this->data["firstname"] * - * $this->data["lastname"] * - * $this->data["fullname"] * - * $this->data["lastlogin"] * - * $this->data["lastloginfrom"] * - * $this->data["lastpasswd_change"] * - * $this->data["status"] * - \**************************************************************************/ - } - -/**************************************************************************\ -* These are the standard $this->account_id specific functions * -\**************************************************************************/ - - function save_repository(){ - /**************************************************************************\ - * Store the values in $this->data to the repository * - \**************************************************************************/ - } - -/**************************************************************************\ -* These are the generic functions. Not specific to $this->account_id * -\**************************************************************************/ - - function add($account_name, $account_type, $first_name, $last_name, $passwd = False) { - /**************************************************************************\ - * Create a new account. Password is optional because of our seperated * - * auth class structure * - \**************************************************************************/ - } - - function delete($account_id) { - /**************************************************************************\ - * Accept both acount_name or account_id and use name2id to convert to id * - * delete account. I have not worked the details of how hooks will be used * - * by apps to delete the users data. For now ignore the issue. * - \**************************************************************************/ - } - - function get_list() - { - /**************************************************************************\ - * Return a list of users * - \**************************************************************************/ - } - - function name2id($account_name) - { - /**************************************************************************\ - * Return the account_id for the account_name requested * - * Return False if you cannot find the given account_name * - \**************************************************************************/ - } - - function id2name($account_id) - { - /**************************************************************************\ - * Return the account_id for the account_name requested * - * Return False if you cannot find the given account_name * - \**************************************************************************/ - } - - function get_type($account_id) - { - /**************************************************************************\ - * Return the account_type for the account_id requested * - * Return False if you cannot find the given account_id * - \**************************************************************************/ - } - - function exists($accountname) - { - /**************************************************************************\ - * Check to see if an account exists. If string is sent, * - * use $this->name2id to get the id. * - * Return True or False as appropriate * - \**************************************************************************/ - } - - function auto_add($account_name, $passwd, $default_prefs=False, $default_acls= False) - { - /**************************************************************************\ - * This is used to auto create an account. First make sure the account_name * - * doesnt exist by using $this->exists and then create the account. * - * This function still needs to have some details worked out for dealing * - * the default values. * - \**************************************************************************/ - } -} //end of class -?> diff --git a/phpgwapi/doc/cvs.html b/phpgwapi/doc/cvs.html deleted file mode 100755 index adad67913b..0000000000 --- a/phpgwapi/doc/cvs.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - -egroupware.org - - - - - -
- - - - - - -
- - - - -
-
-
-

You can get your own copy of the eGroupWare CVS tree by using a CVS client from your own system. If you don't already -have one, you can find one at http://www.cvshome.org. -You can get your own copy of the tree with the commands:

- -
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/egroupware login
- -

When it asks you for a password, simply press the Enter key

-

Then type:

- -
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/egroupware co [ -r <TAG> ] <MODULE>
- -

This will create a <MODULE> directory in your current -directory. It may take a bit of time, especially if your network connection -is slow or the module is an espeicially large one. But once it is done, you -will have an up to date copy of the master CVS source for that module. You -can then at any time cd into this directory and type:

- -
cvs -z3 update -dP
- -

to update your source tree to be in sync with the master tree. (The -z3 sets -the compression level)

- -

The <TAG> refers to the release version that you -wish to checkout. At this time, tags that would be of use are: -

-"Version-0_9_10-branch" - most recent release with patches applied,
-"HEAD" - a development version and should be treated as such.
-
-

- - -

Valid module names are:

- - - - - - - - - - - - - - - - - - - - - -
egroupware * The core eGoupWare libraries
phpgwapi * The eGoupWare API
addressbook * an addressbook
admin * Administration module
bookmarks Bookmark manager
calendar * personal/Group calendar
comic Comic Strip system
email * EMAIL reader (interfaces to IMAP/POP3)
filemanager * Personal/Group Filemanagement
forum A forum system
ftp web based FTP client
headlines news site headline system
manual * online eGoupWare manual
news_admin create system wide news for your eGoupWare installation
polls * create/administer polls
preferences * Manage eGoupWare user preferences
projects ?
setup * eGoupWare setup
stocks stock info grabber
tts Trouble Ticket System
- -

You should probably check out egroupware first, then -cd egroupware, and then check out any additional modules that you -want.
We suggest at a minimum that you install those modules that mare marked with an "*".

- -

Please keep in mind that the CVS '-r HEAD' version may not always work correctly, -may be unpredictable, etc. The CVS '-r HEAD' version is a development version -and should be treated as such.

-
- - - -
- - - diff --git a/phpgwapi/doc/php-configuration.txt b/phpgwapi/doc/php-configuration.txt deleted file mode 100644 index 987213d732..0000000000 --- a/phpgwapi/doc/php-configuration.txt +++ /dev/null @@ -1,60 +0,0 @@ -------------------------------- -- Suggested PHP Configuration - -------------------------------- - -This is a suggested php.ini config for running eGroupWare on php4. It -is roughly in the order of the paramters in your php.ini file. These recommendations -are based on feedback from users and developers. - -RESOURCES -max_execution_time = 90 -This allows for encoding/decoding large file attachments on slower machines and -other complex functions. - -memory_limit = 20M -At least this value should help with more complex operations. - -ERRORS -error_reporting = E_ALL & ~E_NOTICE -Having this set to E_ALL, will cause all types of problems if left to -display on the screen. E_NOTICE are non-fatal errors such as undefined -variable etc. Having this set to E_ALL only will dramatically increase -the size of your log files if you log errors. - -display_errors = Off -This can cause header output problems if left on. They are better stored in -your log file and that way you have a record of any problems. - -log_errors = On -See above. - -DATABASES -[dbms].allow_persistent = On -This must be set to on if you want to use persistent database -connections. Change [dbms] to whatever db you want to use, i.e. mysql or -pgsql. - -FILE UPLOADING -file_uploads = On -If you want to use email,phpwebhosting, infolog or any apps that upload files -this must be set to on. - -upload_max_filesize = 5M -At least this. This will allow for larger email attachments and -phpwebhosting files. Use filesize * 4 = memory_limit to allow for -base64 encodes. - -PHP4 SESSIONS -session.save_path = /tmp -Your httpd must be able to read and write to this directory, if you -intend to use php4 sessions. - -session.gc_maxlifetime = 1440 -Set this to what you want to be your session time out limit. It is in -seconds, so set it to 3660 if you want it to one hour ... the default is -24mins, which is generally too short. - -REGISTER GLOBALS -register_globals = On -Until release eGroupWare will not work, if the value is set to Off. -All further releases will support the Off setting. diff --git a/phpgwapi/doc/phpgw.css b/phpgwapi/doc/phpgw.css deleted file mode 100644 index a797bc216d..0000000000 --- a/phpgwapi/doc/phpgw.css +++ /dev/null @@ -1,21 +0,0 @@ -body { font-family: Geneva,Arial,Helvetica,sans-serif; font-size: 10pt; } -pre { font-family: Lucida Console, monospace; font-size: 10pt; } -tt { font-family: Lucida Console, monospace; font-size: 10pt; } -td { font-family: Geneva,Arial,Helvetica,sans-serif; font-size: 10pt; } - -.h1 { font-size: 18pt; color: white; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; } -.h1black { font-size: 18pt; color: black; font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; } -.h2 { font-size: 14pt; color: #ccccff; } -.h2black { font-size: 14pt; color: black; } - -a { color: #333399; text-decoration: underline; } -a:visited { color: #6666aa; text-decoration: underline; } -a:hover { color: #0000ff; text-decoration: underline; } - -a.side { color: #ff9900; text-decoration: none; } -a.side:visited { color: #ffcc66; text-decoration: none; } -a.side:hover { color: #ffffcc; text-decoration: underline; } - -a.anchor { color: #000066; text-decoration: none; } - -td.side { color: white; } diff --git a/phpgwapi/doc/ttkcruncher-0.2.tgz b/phpgwapi/doc/ttkcruncher-0.2.tgz deleted file mode 100644 index 4df561b68ccffa1dee497796b4f4993d218cec4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24975 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 diff --git a/phpgwapi/doc/vfs/inline2lyx.pl b/phpgwapi/doc/vfs/inline2lyx.pl deleted file mode 100755 index c7b2dc892d..0000000000 --- a/phpgwapi/doc/vfs/inline2lyx.pl +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/perl -#Created by Jason Wies (Zone, zone@users.sourceforge.net) -#Copyright 2001 Jason Wies -#Released under GNU Public License - -#Converts HeaderDoc style inline comments to LyX style LaTeX -#Usage: ./inline2lyx.pl file Title Author Date Abstract - -if (!@ARGV[0]) -{ - print "Usage: ./inline2lyx.pl file Title Author Date Abstract\n"; - exit; -} - -$output .= '\lyxformat 2.16 -\textclass linuxdoc -\language default -\inputencoding latin1 -\fontscheme default -\graphics default -\paperfontsize default -\spacing single -\papersize Default -\paperpackage a4 -\use_geometry 0 -\use_amsmath 0 -\paperorientation portrait -\secnumdepth 2 -\tocdepth 2 -\paragraph_separation indent -\defskip medskip -\quotes_language english -\quotes_times 2 -\papercolumns 1 -\papersides 1 -\paperpagestyle default - -\layout Title -\added_space_top vfill \added_space_bottom vfill -' . @ARGV[1] . ' -\layout Author - -' . @ARGV[2] . ' - -\layout Date - -' . @ARGV[3] . ' - -\layout Abstract - -' . @ARGV[4] . ' - -\layout Section - -' . @ARGV[1]; - -$file = `cat @ARGV[0]`; - -@lines = split ('\n', $file); - -foreach $line (@lines) -{ - undef $start; - undef $class; - undef $function; - undef $abstract; - undef $param; - undef $result; - undef $discussion; - undef $end; - undef $layout; - - if ($line =~ /\/\*\!/) - { - $in = 1; - $start = 1; - } - - if ($looking && $line =~ /function/) - { - $layout = "verbatim"; - undef $looking; - } - elsif (!$in) - { - goto next; - } - - if ($line =~ /\@(class)/) - { - $layout = "subsection"; - $name = $1; - $class = 1; - } - if ($line =~ /\@(function)/) - { - $layout = "subsection"; - $name = $1; - $function = 1; - } - if ($line =~ /\@(abstract)/) - { - $layout = "standard"; - $name = $1; - $abstract = 1; - } - if ($line =~ /\@(description)/) - { - $layout = "standard"; - $name = $1; - $description = 1; - } - if ($line =~ /\@(param)/) - { - $layout = "standard"; - $name = $1; - $param = 1; - } - if ($line =~ /\@(result)/) - { - $layout = "standard"; - $name = $1; - $result = 1; - } - if ($line =~ /\@(discussion)/) - { - $layout = "standard"; - $name = $1; - $discussion = 1; - } - if ($line =~ /\*\// && $in) - { - undef $in; - $looking = 1; - $end = 1; - } - - if ($layout) - { - $output .= "\n\n" . '\layout ' . ucfirst ($layout); - $line =~ s/\@function//; - $line =~ s/\@//; - $data = ucfirst ($line); - if (!$function && !$class) - { - $data =~ s/$name/$name:/; - } - $output .= "\n$data"; - if ($function || $class) - { - $output .= "\n" . '\begin_inset LatexCommand \label{sec:' . "$data" . '}' . "\n\n" . '\end_inset'; - } - } - elsif ($in && !$start) - { - $output .= '\layout Standard' . "\n$line"; - } - - next: -} - -$output .= "\n" . '\the_end'; - -print $output; diff --git a/phpgwapi/doc/vfs/vfs-1.html b/phpgwapi/doc/vfs/vfs-1.html deleted file mode 100644 index 455d8fe649..0000000000 --- a/phpgwapi/doc/vfs/vfs-1.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - phpgwapi - VFS Class: Introduction and Purpose - - - - - -Next -Previous -Contents -
-

1. Introduction and Purpose

- -

The latest version of the VFS for eGroupWare combines actual -file system manipulation with fully integrated database support. -It features nearly transparent handling of files and directories, -as well as files inside and outside the virtual root. This document -is intended to provide API and application developers with a guide -to incorporating the VFS into their work.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-2.html b/phpgwapi/doc/vfs/vfs-2.html deleted file mode 100644 index 5a32d208a4..0000000000 --- a/phpgwapi/doc/vfs/vfs-2.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - phpgwapi - VFS Class: Basics - - - - - -Next -Previous -Contents -
-

2. Basics

- -

2.1 Prerequisites -

- -

You must explicitly enable the VFS class. To do this, set 'enable_vfs_class' -to True in $GLOBALS['phpgw_info']['flags']. -An example:

-

-

-$GLOBALS['phpgw_info']['flags'] = array(
-     'currentapp' => 'filemanaer',
-     'noheader' => False,
-     'noappheader' => False,
-     'enable_vfs_class' => True,
-     'enable_browser_class' => True
-);
-
-

-

2.2 Concepts -

- -

The VFS in located in phpgwapi/inc/class.vfs_sql.inc.php. You -can look over it, but I don't suggest trying to understand how it -works. It isn't necessary to know its internals to use it, but you -may find the inline comments helpful. The basic things to keep in -mind:

-

-

    -
  • Files and directories are synonymous in almost all cases
  • -
-

-

-

-$GLOBALS['phpgw']->vfs->mv (array(
-     'from' => 'file1',
-     'to' => 'dir/file2'
-));
-
-$GLOBALS['phpgw']->vfs->mv (array(
-     'from' => 'dir1',
-     'to' => 'dir/dir1'
-));
-
-$GLOBALS['phpgw']->vfs->rm (array(
-     'string' => 'file'
-));
-
-$GLOBALS['phpgw']->vfs->rm (array(
-     'string' => 'dir'
-));
-
-

-

All work as you would except them to. The major exception is:

-

-

-$GLOBALS['phpgw']->vfs->touch (array(
-     'string' => 'file'
-));
-
-

-

vs.

-

-

-$GLOBALS['phpgw']->vfs->mkdir (array(
-     'string' => 'dir'
-));
-
-

-

-

    -
  • Users and groups are synonymous
  • -
-

-

As far as the actual paths are concerned, users and groups are -the same. /home/username works the same as /home/groupname.

-

-

    -
  • You should never have to know the real paths of files
  • -
-

-

One of the VFS's responsibilities is to translate paths for you. -While you certainly can operate using full paths, it is much simpler -to use the virtual paths. For example, instead of using:

-

-

-$GLOBALS['phpgw']->vfs->cp (array(
-     'from' => '/var/www/egroupware/files/home/user/file1',
-     'to' => '/var/www/egroupware/files/home/user/file2',
-     'relatives' => array(
-          RELATIVE_NONE|VFS_REAL,
-          RELATIVE_NONE|VFS_REAL
-     )
-));
-
-

-

you might use

-

-

-$GLOBALS['phpgw']->vfs->cp (array(
-     'from' => '/home/user/file1',
-     'to' => '/home/user/file2',
-     'relatives' => array(
-          RELATIVE_NONE,
-          RELATIVE_NONE
-     )
-));
-
-

-

(We'll get to the RELATIVE's in a minute.)

-

Site administrators should be able to move their files dir around -on their system and know that everything will continue to work smoothly.

-

-

    -
  • Relativity is vital
  • -
-

-

Relativity is a new feature in the VFS, and its importance cannot -be stressed enough. It will make your life much easier, especially -for file system intensive applications, but it will take some getting -used to. If something doesn't work right the first time, chances -are great it has to do with incorrect relativity settings. We will -deal with relativity in depth in the Relativity section.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-3.html b/phpgwapi/doc/vfs/vfs-3.html deleted file mode 100644 index 2276185cb7..0000000000 --- a/phpgwapi/doc/vfs/vfs-3.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - phpgwapi - VFS Class: Basic Functions - - - - - -Next -Previous -Contents -
-

3. Basic Functions

- -

These are two functions you'll need to know before we get into -relativity.

-

3.1 path_parts () -

- -

The job of path_parts () is to translate any given file location -into its many component parts for any relativity. The values passed -to path_parts () are:

-

-

-string
-relatives
-object
-
-

-

'string' is the path you want to translate, 'relatives' is the -standard relativity array, and 'object' specifies how you would like -the return value: if 'object' is True, an object will be returned; -if 'object' is False, an array will be returned. I think you'll find -the object easier to deal with, and we'll be using it throughout -this document. The most important returned values (but not all) for -path_parts () are:

-

-

-fake_full_path
-fake_leading_dirs
-fake_extra_path
-fake_name
-real_full_path
-real_leading_dirs
-real_extra_path
-real_name
-
-

-

Just like you would think, fake_full_path contains the full virtual -path of 'string', and real_full_path contains the full real path -of 'string'. The fake_name and real_name variables should always -be the same, and contain the final file or directory name. The leading_dirs -contain everything except the name, and the extra_path is everything -from the / before "home" to the end of the leading_dirs. To better -illustrate, here is an example:

-

-

-$p = $GLOBALS['phpgw']->vfs->path_parts (array(
-     'string' => '/home/jason/dir/file',
-     'relatives' => array(
-         RELATIVE_NONE
-     )
-));
-
-

-

-

    -
  • $p->fake_full_path - /home/jason/dir/file
  • -
  • $p->fake_leading_dirs - /home/jason/dir
  • -
  • $p->fake_extra_path - home/jason/dir
  • -
  • $p->fake_name - file
  • -
  • $p->real_full_path - /var/www/egroupware/files/home/jason/dir/file
  • -
  • $p->real_leading_dirs - /var/www/egroupware/files/home/jason/dir -
  • -
  • $p->real_extra_path - home/jason/dir
  • -
  • $p->real_name - file
  • -
-

-

As you can see, path_parts () is a very useful function and will -save you from doing those darn substr ()'s yourself. For those of -you used to the prior VFS, note that getabsolutepath () is depreciated. -getabsolutepath () still exists (albeit in a much different form), -and is responsible for some of the path translation, but it is an -internal function only. Applications should only use path_parts (). -We have shown you how to use path_parts () so you can experiment -with it using different paths and relativities as we explore relativity.

-

3.2 cd () -

- -

Part of the overall goal for the VFS in eGroupWare is to give -the user a seamless experience during their session. For example, -if they upload a file using a file manager to the directory /home/my_group/project1, -and then go to download an email attachment, the default directory -will be /home/my_group/project1. This is accomplished using the cd -() function. Examples:

-

-

-/* cd to their home directory */
-$GLOBALS['phpgw']->vfs->cd (array(
-     'string' => '/'
-));
-
-/* cd to /home/jason/dir */
-$GLOBALS['phpgw']->vfs->cd (array(
-     'string' => '/home/jason/dir',
-     'relative' => False,
-     'relatives' => array(
-          RELATIVE_NONE
-     )
-));
-
-/* When following the above, cd's to /home/jason/dir/dir2 */
-$GLOBALS['phpgw']->vfs->cd (array(
-     'string' => 'dir2',
-     'relative' => True
-));
-
-

-

If 'relative' is True, the 'string' is simply appended to the -current path. If you want to know what the current path is, use $GLOBALS['phpgw']->vfs->pwd -().

-

Now you're ready for relativity.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-4.html b/phpgwapi/doc/vfs/vfs-4.html deleted file mode 100644 index 973cce2867..0000000000 --- a/phpgwapi/doc/vfs/vfs-4.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - phpgwapi - VFS Class: Relativity - - - - - -Next -Previous -Contents -
-

4. Relativity

- -

Ok, just one last thing before we get into relativity. You will -notice throughout the examples the use of $fakebase. $GLOBALS['phpgw']->vfs->fakebase -is by default '/home'. The old VFS was hard-coded to use '/home', -but the naming choice for this is now up to administrators. See the -Fakebase directory (changing /home) section for more information. Throughout the rest of this document, -you will see $fakebase used in calls to the VFS, and /home -used in actual paths. You should always use $fakebase when -making applications. I suggest doing $fakebase = $GLOBALS['phpgw']->vfs->fakebase; -right off the bat to keep things neater.

-

4.1 What is it and how does it work? -

- -

One of the design challenges for a Virtual File System is to -try to figure out whether the calling application is referring to -a file inside or outside the virtual root, and if inside, exactly -where. To solve this problem, the eGoupWare VFS uses RELATIVE -defines that are used in bitmasks passed to each function. The result -is that any set of different relativities can be used in combination -with each other. Let's look at a few examples. Say you want to move -'logo.png' from the user's home directory to the current directory.

- -

-

-$GLOBALS['phpgw']->vfs->mv (array(
-    'from' => 'logo.png',
-    'to' => 'logo.png',
-    'relatives' => array(
-          RELATIVE_USER,
-          RELATIVE_ALL
-     )
-));
-
-

-

RELATIVE_USER means relative to the user's home directory. RELATIVE_ALL -means relative to the current directory, as set by cd () and as reported -by pwd (). So if the current directory was "$fakebase/my_group/project1", -the call to mv () would be processed as:

-

-

-MOVE "$fakebase/jason/logo.png" TO "$fakebase/my_group/project1/logo.png"
-
-

-

and the actual file system call would be:

-

-

-rename ('/var/www/egroupware/files/home/jason/logo.php', '/var/www/egroupware/files/home/my_group/project1/logo.png');
-
-

-

Those used to the old VFS will note that you do not have to translate -the path beforehand. Let's look at another example. Suppose you were -moving an email attachment stored in eGoupWare's temporary directory -to the 'attachments' directory within the user's home directory (we're -assuming the attachments directory exists). Note that the temporary -directory is outside the virtual root.

-

-

-$GLOBALS['phpgw']->vfs->mv (array(
-     'from' => $GLOBALS['phpgw_info']['server']['temp_dir'] . '/' . $randomdir . '/' . $randomfile,
-     'to' => 'attachments/actual_name.ext',
-     'relatives' => array(
-          RELATIVE_NONE|VFS_REAL,
-          RELATIVE_USER
-     )
-));
-
-

-

$randomdir and $randomfile are what the directory -and file might be called before they are given a proper name by the -user, which is actual_name.ext in this example. RELATIVE_NONE is -the define for using full path names. However, RELATIVE_NONE is still -relative to the virtual root, so we pass along VFS_REAL as well, -to say that the file is outside the virtual root, somewhere else -in the file system. Once again, RELATIVE_USER means relative to the -user's home directory. So the actual file system call might look -like this (keep in mind that $randomdir and $randomfile -are just random strings):

-

-

-rename ('/var/www/egroupware/tmp/0ak5adftgh7/jX42sC9M', '/var/www/egroupware/files/home/jason/attachments/actual_name.ext');
-
-

-

Of course you don't have to know that, nor should you be concerned -with it; you can take it for granted that the VFS will translate -the paths correctly. Let's take a look at one more example, this -time using the RELATIVE_USER_APP define. RELATIVE_USER_APP is used -to store quasi-hidden application files, similar to the Unix convention -of ~/.appname. It simply appends .appname to the user's home -directory. For example, if you were making an HTML editor application -named 'htmledit', and wanted to keep a backup file in case something -goes wrong, you could use RELATIVE_USER_APP to store it:

-

-

-$GLOBALS['phpgw']->vfs->write (array(
-     'string' => 'file.name~',
-     'relatives' => array(
-          RELATIVE_USER_APP
-     ),
-     'content' => $contents
-));
-
-

-

This assumes that ~/.htmledit exists of course. The backup -file "file.name~" would then be written in $fakebase/jason/.htmledit/file.name~. -Note that storing files like this might not be as good of a solution -as storing them in the temporary directory or in the database. But -it is there in case you need it.

-

4.2 Complete List -

- -

Here is the complete list of RELATIVE defines, and what they -do:

-

-

-
RELATIVE_ROOT

Don't translate the path at all. Just prepends -a /. You'll probably want to use RELATIVE_NONE though, which handles -both virtual and real files.

-
RELATIVE_USER

User's home directory

-
RELATIVE_CURR_USER

Current user's home directory. If the -current directory is $fakebase/my_group/project1, this will -return is $fakebase/my_group

-
RELATIVE_USER_APP

Append .appname to the user's home directory, -where appname is the current application's appname

-
RELATIVE_PATH

DO NOT USE. Relative to the current directory, -used in RELATIVE_ALL

-
RELATIVE_NONE

Not relative to anything. Use this with VFS_REAL -for files outside the virtual root. Note that using RELATIVE_NONE -by itself still means relative to the virtual root

-
RELATIVE_CURRENT

An alias for the currently set RELATIVE -define, or RELATIVE_ALL if none is set (see the Defaults section)

-
VFS_REAL

File is outside of the virtual root. Usually used -with RELATIVE_NONE

-
RELATIVE_ALL

Relative to the current directory. Use RELATIVE_ALLinstead of RELATIVE_PATH

-
-

-

4.3 Defaults -

- -

You might be thinking to yourself that passing along RELATIVE -defines with every VFS call is overkill, especially if your application -always uses the same relativity. The default RELATIVE define for -all VFS calls is RELATIVE_CURRENT. RELATIVE_CURRENT itself defaults -to RELATIVE_ALL (relative to the current path), unless your application -sets a specific relativity. If your application requires most of -the work to be done outside of the virtual root, you may wish to -set RELATIVE_CURRENT to RELATIVE_NONE|VFS_REAL. set_relative () is -the function to do this. For example:

-

-

-$GLOBALS['phpgw']->vfs->set_relative (array(
-     'mask' => RELATIVE_NONE|VFS_REAL
-));
-
-$GLOBALS['phpgw']->vfs->read (array(
-     'string' => '/etc/passwd'
-));
-
-$GLOBALS['phpgw']->vfs->cp (array(
-     'from' => '/usr/include/stdio.h',
-     'to' => '/tmp/stdio.h'
-));
-
-$GLOBALS['phpgw']->vfs->cp (array(
-     'from' => '/usr/share/pixmaps/yes.xpm',
-     'to' => 'icons/yes.xpm',
-     'relatives' => array(
-          RELATIVE_CURRENT,
-          RELATIVE_USER
-     )
-));
-
-

-

You should notice that no relativity array is needed in the other -calls that refer to files outside the virtual root, but one is needed -for calls that include files inside the virtual root. Any RELATIVE -define can be set as the default and works in the same fashion. To -retrieve the currently set define, use get_relative (). Note that -the relativity is reset after each page request; that is, it's good -only for the life of the current page loading, and is not stored -in session management.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-5.html b/phpgwapi/doc/vfs/vfs-5.html deleted file mode 100644 index 4c78cffbb8..0000000000 --- a/phpgwapi/doc/vfs/vfs-5.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - phpgwapi - VFS Class: Function reference - - - - - -Next -Previous -Contents -
-

5. Function reference

- -

To view the function reference for the VFS, use the doc/inlinedocparser.php -script that comes with eGroupWare, ie -http://localhost/doc/inlinedocparser.php?fn=class.vfs_sql.inc.php.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-6.html b/phpgwapi/doc/vfs/vfs-6.html deleted file mode 100644 index e2fe957fba..0000000000 --- a/phpgwapi/doc/vfs/vfs-6.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - phpgwapi - VFS Class: Notes - - - - - -Next -Previous -Contents -
-

6. Notes

- -

6.1 Database -

- -

Data about the files and directories within the virtual root -is kept in the SQL database. Currently, this information includes:

-

-

    -
  • File ID (used internally, primary key for table)
  • -
  • Owner ID (phpGW account_id)
  • -
  • Created by ID (phpGW account_id)
  • -
  • Modified by ID (phpGW account_id)
  • -
  • Created (date)
  • -
  • Modified (date)
  • -
  • Size (bytes)
  • -
  • MIME type
  • -
  • Deleteable (Y/N/Other?)
  • -
  • Comment
  • -
  • App (appname of application that created the file)
  • -
  • Directory (directory the file or directory is in)
  • -
  • Name (name of file or directory)
  • -
  • Link directory (if the file or directory is linked, what the -actual directory is)
  • -
  • Link name (if the file or directory is linked, what the actual -name is)
  • -
  • Version (numeric version of the file)
  • -
-

-

The internal names of these (the database column names) are stored -in the $GLOBALS['phpgw']->vfs->attributes -array, which is useful for loops, and is guaranteed to be up-to-date.

-

Note that no information is kept about files outside the virtual -root. If a file is moved outside, all records of it are deleted from -the database (other than the journaling records). If a file is moved -into the virtual root, some information, specifically MIME-type, -is not always stored in the database. The vital information has defaults: -owner is based on where the file is being stored; size is correctly -read; deleteable is set to Y.

-

6.2 ACL support -

- -

ACL support is built into the VFS. vfs->acl_check () does -the actual checking, and is called from all VFS functions as needed. -If the file or directory sent to acl_check () doesn't exist, the -permissions for the parent directory are used to determine access. -ACL checking can be overridden at any time by setting vfs->override_acl. -For example:

-

-

-$GLOBALS['phpgw']->vfs->override_acl = 1;
-$GLOBALS['phpgw']->vfs->mkdir (array(
-     'string' => $GLOBALS['fakebase']. '/' . $group_array['account_name'],
-     'relatives' => array(
-          RELATIVE_NONE
-     )
-));
-$GLOBALS['phpgw']->vfs->override_acl = 0;
-
-

-

6.3 Function aliases -

- -

You might have noticed there are some functions that just pass -the arguments on to other functions. These are provided in part because -of legacy and in part for convenience. You can use either. Here is -the list (alias -> actual):

-

-

    -
  • copy -> cp
  • -
  • move -> rm
  • -
  • delete -> rm
  • -
  • dir -> ls
  • -
-

-

6.4 Fakebase directory (changing /home) -

- -

The old VFS was hard-coded to use '/home' as the fake base directory, -even though the user never saw it. With the new system, crafty administrators -may wish to change '/home' to something else, say '/users' or '/public_html'. -The fake base directory name is stored in $GLOBALS['phpgw']->vfs->fakebase, -and changing it will transparently change it throughout the VFS and -all applications. However, this must be done before any data is in -the VFS database. If you wish to change it afterwords, you'll have -to manually update the database, replacing the old value with the -new value. Application programmers need to recognize that /home is -not absolute, and use $GLOBALS['phpgw']->vfs->fakebase -instead. I suggest setting $fakebase = $GLOBALS['phpgw']->vfs->fakebase; -right off the bat to keep things neater.

-
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs-7.html b/phpgwapi/doc/vfs/vfs-7.html deleted file mode 100644 index ae560d7d30..0000000000 --- a/phpgwapi/doc/vfs/vfs-7.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - phpgwapi - VFS Class: About this Document - - - - -Next -Previous -Contents -
-

7. About this Document

- -

7.1 Copyright and License -

- -

Copyright (c) 2001, 2002 Jason Wies

-

Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.1 or any later version published by the Free Software Foundation; -with no Invarient Sections, with no Front-Cover Texts, and no Back-Cover -Texts.

-

A copy of the license is available at -http://www.gnu.org/copyleft/fdl.html.

-

7.2 History -

- -

Original document released in June 2001 by Jason Wies.

-

Updated February 2002 to include arrayized parameters, single -quotes, and GLOBALS.

-

7.3 Contributing -

- -maintainer, Jason Wies, -
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs.html b/phpgwapi/doc/vfs/vfs.html deleted file mode 100644 index 341bc57293..0000000000 --- a/phpgwapi/doc/vfs/vfs.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - phpgwapi - VFS Class - - - - - -Next -Previous -Contents -
-

phpgwapi - VFS Class

- -

Jason Wies

June 2001, February 2002 -
-The VFS, or Virtual File System, handles all file system activity - for eGroupWare. -
-

-

1. Introduction and Purpose

- -

-

2. Basics

- - -

-

3. Basic Functions

- - -

-

4. Relativity

- - -

-

5. Function reference

- -

-

6. Notes

- - -

-

7. About this Document

- - -
-Next -Previous -Contents - - diff --git a/phpgwapi/doc/vfs/vfs.lyx b/phpgwapi/doc/vfs/vfs.lyx deleted file mode 100644 index 69ff0a0068..0000000000 --- a/phpgwapi/doc/vfs/vfs.lyx +++ /dev/null @@ -1,1118 +0,0 @@ -#LyX 1.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 218 -\textclass linuxdoc -\language english -\inputencoding latin1 -\fontscheme default -\graphics default -\paperfontsize default -\spacing single -\papersize Default -\paperpackage a4 -\use_geometry 0 -\use_amsmath 0 -\paperorientation portrait -\secnumdepth 5 -\tocdepth 5 -\paragraph_separation indent -\defskip medskip -\quotes_language english -\quotes_times 2 -\papercolumns 1 -\papersides 1 -\paperpagestyle default - -\layout Title -\added_space_top vfill \added_space_bottom vfill -phpgwapi - VFS Class -\layout Author - -Jason Wies -\layout Date - -June 2001, February 2002 -\layout Abstract - -The VFS, or Virtual File System, handles all file system activity for phpGroupWa -re. -\layout Section - -Introduction and Purpose -\begin_inset LatexCommand \label{sec:introduction} - -\end_inset - - -\layout Standard - -The latest version of the VFS for eGoupWare combines actual file system - manipulation with fully integrated database support. - It features nearly transparent handling of files and directories, as well - as files inside and outside the virtual root. - This document is intended to provide API and application developers with - a guide to incorporating the VFS into their work. -\layout Section - -Basics -\begin_inset LatexCommand \label{sec:basics} - -\end_inset - - -\layout Subsection - -Prerequisites -\begin_inset LatexCommand \label{sec:prerequisites} - -\end_inset - - -\layout Standard - -You must explicitly enable the VFS class. - To do this, set 'enable_vfs_class' to True in $GLOBALS['phpgw_info']['flags']. - An example: -\layout Verbatim - -$GLOBALS['phpgw_info']['flags'] = array( -\layout Verbatim - - 'currentapp' => 'phpwebhosting', -\layout Verbatim - - 'noheader' => False, -\layout Verbatim - - 'noappheader' => False, -\layout Verbatim - - 'enable_vfs_class' => True, -\layout Verbatim - - 'enable_browser_class' => True -\layout Verbatim - -); -\layout Subsection - -Concepts -\begin_inset LatexCommand \label{sec:concepts} - -\end_inset - - -\layout Standard - -The VFS in located in phpgwapi/inc/class.vfs_sql.inc.php. - You can look over it, but I don't suggest trying to understand how it works. - It isn't necessary to know its internals to use it, but you may find the - inline comments helpful. - The basic things to keep in mind: -\layout Itemize - -Files and directories are synonymous in almost all cases -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mv (array( -\layout Verbatim - - 'from' => 'file1', -\layout Verbatim - - 'to' => 'dir/file2' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mv (array( -\layout Verbatim - - 'from' => 'dir1', -\layout Verbatim - - 'to' => 'dir/dir1' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->rm (array( -\layout Verbatim - - 'string' => 'file' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->rm (array( -\layout Verbatim - - 'string' => 'dir' -\layout Verbatim - -)); -\layout Standard - -All work as you would except them to. - The major exception is: -\layout Verbatim - -$GLOBALS['phpgw']->vfs->touch (array( -\layout Verbatim - - 'string' => 'file' -\layout Verbatim - -)); -\layout Standard - -vs. -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mkdir (array( -\layout Verbatim - - 'string' => 'dir' -\layout Verbatim - -)); -\layout Verbatim - -\layout Itemize - -Users and groups are synonymous -\layout Standard - -As far as the actual paths are concerned, users and groups are the same. - /home/username works the same as /home/groupname. -\layout Itemize - -You should never have to know the real paths of files -\layout Standard - -One of the VFS's responsibilities is to translate paths for you. - While you certainly -\emph on -can -\emph default - operate using full paths, it is much simpler to use the virtual paths. - For example, instead of using: -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cp (array( -\layout Verbatim - - 'from' => '/var/www/egroupware/files/home/user/file1', -\layout Verbatim - - 'to' => '/var/www/egroupware/files/home/user/file2', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE|VFS_REAL, -\layout Verbatim - - RELATIVE_NONE|VFS_REAL -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Standard - -you might use -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cp (array( -\layout Verbatim - - 'from' => '/home/user/file1', -\layout Verbatim - - 'to' => '/home/user/file2', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE, -\layout Verbatim - - RELATIVE_NONE -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Standard - -(We'll get to the RELATIVE's in a minute.) -\layout Standard - -Site administrators should be able to move their files dir around on their - system and know that everything will continue to work smoothly. -\layout Itemize - -Relativity is -\emph on -vital -\layout Standard - -Relativity is a new feature in the VFS, and its importance cannot be stressed - enough. - It will make your life much easier, especially for file system intensive - applications, but it will take some getting used to. - If something doesn't work right the first time, chances are great it has - to do with incorrect relativity settings. - We will deal with relativity in depth in the Relativity section. -\layout Section - -Basic Functions -\begin_inset LatexCommand \label{sec:basic_functions} - -\end_inset - - -\layout Standard - -These are two functions you'll need to know before we get into relativity. -\layout Subsection - -path_parts () -\begin_inset LatexCommand \label{sec:path_parts} - -\end_inset - - -\layout Standard - -The job of path_parts () is to translate any given file location into its - many component parts for any relativity. - The values passed to path_parts () are: -\layout Verbatim - -string -\layout Verbatim - -relatives -\layout Verbatim - -object -\layout Standard - -'string' is the path you want to translate, 'relatives' is the standard - relativity array, and 'object' specifies how you would like the return - value: if 'object' is True, an object will be returned; if 'object' is - False, an array will be returned. - I think you'll find the object easier to deal with, and we'll be using - it throughout this document. - The most important returned values (but not all) for path_parts () are: -\layout Verbatim - -fake_full_path -\layout Verbatim - -fake_leading_dirs -\layout Verbatim - -fake_extra_path -\layout Verbatim - -fake_name -\layout Verbatim - -real_full_path -\layout Verbatim - -real_leading_dirs -\layout Verbatim - -real_extra_path -\layout Verbatim - -real_name -\layout Standard - -Just like you would think, fake_full_path contains the full virtual path - of 'string', and real_full_path contains the full real path of 'string'. - The fake_name and real_name variables should always be the same, and contain - the final file or directory name. - The leading_dirs contain everything except the name, and the extra_path - is everything from the / before -\begin_inset Quotes eld -\end_inset - -home -\begin_inset Quotes erd -\end_inset - - to the end of the leading_dirs. - To better illustrate, here is an example: -\layout Verbatim - -$p = $GLOBALS['phpgw']->vfs->path_parts (array( -\layout Verbatim - - 'string' => '/home/jason/dir/file', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Itemize - -$p->fake_full_path - /home/jason/dir/file -\layout Itemize - -$p->fake_leading_dirs - /home/jason/dir -\layout Itemize - -$p->fake_extra_path - home/jason/dir -\layout Itemize - -$p->fake_name - file -\layout Itemize - -$p->real_full_path - /var/www/egroupware/files/home/jason/dir/file -\layout Itemize - -$p->real_leading_dirs - /var/www/egroupware/files/home/jason/dir -\layout Itemize - -$p->real_extra_path - home/jason/dir -\layout Itemize - -$p->real_name - file -\layout Standard - -As you can see, path_parts () is a very useful function and will save you - from doing those darn substr ()'s yourself. - For those of you used to the prior VFS, note that -\emph on -getabsolutepath () is depreciated -\emph default -. - getabsolutepath () still exists (albeit in a much different form), and - is responsible for some of the path translation, but it is an -\emph on -internal -\emph default - function only. - Applications should only use path_parts (). - We have shown you how to use path_parts () so you can experiment with it - using different paths and relativities as we explore relativity. -\layout Subsection - -cd () -\begin_inset LatexCommand \label{sec:cd} - -\end_inset - - -\layout Standard - -Part of the overall goal for the VFS in eGoupWare is to give the user - a seamless experience during their session. - For example, if they upload a file using a file manager to the directory - /home/my_group/project1, and then go to download an email attachment, the - default directory will be /home/my_group/project1. - This is accomplished using the cd () function. - Examples: -\layout Verbatim - -/* cd to their home directory */ -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cd (array( -\layout Verbatim - - 'string' => '/' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -/* cd to /home/jason/dir */ -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cd (array( -\layout Verbatim - - 'string' => '/home/jason/dir', -\layout Verbatim - - 'relative' => False, -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -/* When following the above, cd's to /home/jason/dir/dir2 */ -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cd (array( -\layout Verbatim - - 'string' => 'dir2', -\layout Verbatim - - 'relative' => True -\layout Verbatim - -)); -\layout Standard - -If 'relative' is True, the 'string' is simply appended to the current path. - If you want to know what the current path is, use $GLOBALS['phpgw']->vfs->pwd - (). -\layout Standard - -Now you're ready for relativity. -\layout Section - -Relativity -\begin_inset LatexCommand \label{sec:relativity} - -\end_inset - - -\layout Standard - -Ok, just one last thing before we get into relativity. - You will notice throughout the examples the use of $fakebase. - $GLOBALS['phpgw']->vfs->fakebase is by default '/home'. - The old VFS was hard-coded to use '/home', but the naming choice for this - is now up to administrators. - See the -\begin_inset LatexCommand \ref[Fakebase directory (changing /home)]{sec:fakebase} - -\end_inset - - section for more information. - Throughout the rest of this document, you will see $fakebase used in calls - to the VFS, and /home used in actual paths. - -\emph on -You should always use $fakebase when making applications. - -\emph default -I suggest doing $fakebase = $GLOBALS['phpgw']->vfs->fakebase; right off - the bat to keep things neater. -\layout Subsection - -What is it and how does it work? -\layout Standard - -One of the design challenges for a Virtual File System is to try to figure - out whether the calling application is referring to a file inside or outside - the virtual root, and if inside, exactly where. - To solve this problem, the eGoupWare VFS uses RELATIVE defines that - are used in bitmasks passed to each function. - The result is that any set of different relativities can be used in combination - with each other. - Let's look at a few examples. - Say you want to move 'logo.png' from the user's home directory to the current - directory. - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mv (array( -\layout Verbatim - - 'from' => 'logo.png', -\layout Verbatim - - 'to' => 'logo.png', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_USER, -\layout Verbatim - - RELATIVE_ALL -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Standard - -RELATIVE_USER means relative to the user's home directory. - RELATIVE_ALL means relative to the current directory, as set by cd () and - as reported by pwd (). - So if the current directory was -\begin_inset Quotes eld -\end_inset - -$fakebase/my_group/project1 -\begin_inset Quotes erd -\end_inset - -, the call to mv () would be processed as: -\layout Verbatim - -MOVE -\begin_inset Quotes eld -\end_inset - -$fakebase/jason/logo.png -\begin_inset Quotes erd -\end_inset - - TO -\begin_inset Quotes eld -\end_inset - -$fakebase/my_group/project1/logo.png -\begin_inset Quotes erd -\end_inset - - -\layout Standard - -and the actual file system call would be: -\layout Verbatim - -rename ('/var/www/egroupware/files/home/jason/logo.php', '/var/www/egroupware -/files/home/my_group/project1/logo.png'); -\layout Standard - -Those used to the old VFS will note that you do not have to translate the - path beforehand. - Let's look at another example. - Suppose you were moving an email attachment stored in eGoupWare's temporary - directory to the 'attachments' directory within the user's home directory - (we're assuming the attachments directory exists). - Note that the temporary directory is -\emph on -outside -\emph default - the virtual root. -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mv (array( -\layout Verbatim - - 'from' => $GLOBALS['phpgw_info']['server']['temp_dir'] . - '/' . - $randomdir . - '/' . - $randomfile, -\layout Verbatim - - 'to' => 'attachments/actual_name.ext', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE|VFS_REAL, -\layout Verbatim - - RELATIVE_USER -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Standard - -$randomdir and $randomfile are what the directory and file might be called - before they are given a proper name by the user, which is actual_name.ext - in this example. - RELATIVE_NONE is the define for using full path names. - However, RELATIVE_NONE is still relative to the virtual root, so we pass - along VFS_REAL as well, to say that the file is -\emph on -outside -\emph default - the virtual root, somewhere else in the file system. - Once again, RELATIVE_USER means relative to the user's home directory. - So the actual file system call might look like this (keep in mind that - $randomdir and $randomfile are just random strings): -\layout Verbatim - -rename ('/var/www/egroupware/tmp/0ak5adftgh7/jX42sC9M', '/var/www/egroupware -/files/home/jason/attachments/actual_name.ext'); -\layout Standard - -Of course you don't have to know that, nor should you be concerned with - it; you can take it for granted that the VFS will translate the paths correctly. - Let's take a look at one more example, this time using the RELATIVE_USER_APP - define. - RELATIVE_USER_APP is used to store quasi-hidden application files, similar - to the Unix convention of ~/.appname. - It simply appends .appname to the user's home directory. - For example, if you were making an HTML editor application named 'htmledit', - and wanted to keep a backup file in case something goes wrong, you could - use RELATIVE_USER_APP to store it: -\layout Verbatim - -$GLOBALS['phpgw']->vfs->write (array( -\layout Verbatim - - 'string' => 'file.name~', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_USER_APP -\layout Verbatim - - ), -\layout Verbatim - - 'content' => $contents -\layout Verbatim - -)); -\layout Standard - -This assumes that ~/.htmledit exists of course. - The backup file -\begin_inset Quotes eld -\end_inset - -file.name~ -\begin_inset Quotes erd -\end_inset - - would then be written in $fakebase/jason/.htmledit/file.name~. - Note that storing files like this might not be as good of a solution as - storing them in the temporary directory or in the database. - But it is there in case you need it. -\layout Subsection - -Complete List -\begin_inset LatexCommand \label{sec:relatives_complete_list} - -\end_inset - - -\layout Standard - -Here is the complete list of RELATIVE defines, and what they do: -\layout Description - -RELATIVE_ROOT Don't translate the path at all. - Just prepends a /. - You'll probably want to use RELATIVE_NONE though, which handles both virtual - and real files. -\layout Description - -RELATIVE_USER User's home directory -\layout Description - -RELATIVE_CURR_USER Current user's home directory. - If the current directory is $fakebase/my_group/project1, this will return - is $fakebase/my_group -\layout Description - -RELATIVE_USER_APP Append .appname to the user's home directory, where appname - is the current application's appname -\layout Description - -RELATIVE_PATH DO NOT USE. - Relative to the current directory, used in RELATIVE_ALL -\layout Description - -RELATIVE_NONE Not relative to anything. - Use this with VFS_REAL for files outside the virtual root. - Note that using RELATIVE_NONE by itself still means relative to the virtual - root -\layout Description - -RELATIVE_CURRENT An alias for the currently set RELATIVE define, or RELATIVE_ALL - if none is set (see the Defaults section) -\layout Description - -VFS_REAL File is outside of the virtual root. - Usually used with RELATIVE_NONE -\layout Description - -RELATIVE_ALL Relative to the current directory. - Use RELATIVE_ALL -\emph on - -\emph default -instead of RELATIVE_PATH -\layout Subsection - -Defaults -\begin_inset LatexCommand \label{sec:relatives_defaults} - -\end_inset - - -\layout Standard - -You might be thinking to yourself that passing along RELATIVE defines with - every VFS call is overkill, especially if your application always uses - the same relativity. - The default RELATIVE define for all VFS calls is RELATIVE_CURRENT. - RELATIVE_CURRENT itself defaults to RELATIVE_ALL (relative to the current - path), -\emph on -unless -\emph default - your application sets a specific relativity. - If your application requires most of the work to be done outside of the - virtual root, you may wish to set RELATIVE_CURRENT to RELATIVE_NONE|VFS_REAL. - set_relative () is the function to do this. - For example: -\layout Verbatim - -$GLOBALS['phpgw']->vfs->set_relative (array( -\layout Verbatim - - 'mask' => RELATIVE_NONE|VFS_REAL -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->read (array( -\layout Verbatim - - 'string' => '/etc/passwd' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cp (array( -\layout Verbatim - - 'from' => '/usr/include/stdio.h', -\layout Verbatim - - 'to' => '/tmp/stdio.h' -\layout Verbatim - -)); -\layout Verbatim - -\layout Verbatim - -$GLOBALS['phpgw']->vfs->cp (array( -\layout Verbatim - - 'from' => '/usr/share/pixmaps/yes.xpm', -\layout Verbatim - - 'to' => 'icons/yes.xpm', -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_CURRENT, -\layout Verbatim - - RELATIVE_USER -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Standard - -You should notice that no relativity array is needed in the other calls - that refer to files outside the virtual root, but one is needed for calls - that include files inside the virtual root. - Any RELATIVE define can be set as the default and works in the same fashion. - To retrieve the currently set define, use get_relative (). - Note that the relativity is reset after each page request; that is, it's - good only for the life of the current page loading, and is not stored in - session management. -\layout Section - -Function reference -\begin_inset LatexCommand \label{sec:function_reference} - -\end_inset - - -\layout Standard - -To view the function reference for the VFS, use the doc/inlinedocparser.php - script that comes with eGoupWare, ie -\begin_inset LatexCommand \url[http://localhost/doc/inlinedocparser.php?fn=class.vfs_sql.inc.php]{http://localhost/doc/inlinedocparser.php?fn=class.vfs_sql.inc.php} - -\end_inset - -. -\layout Section - -Notes -\begin_inset LatexCommand \label{sec:notes} - -\end_inset - - -\layout Subsection - -Database -\begin_inset LatexCommand \label{sec:database} - -\end_inset - - -\layout Standard - -Data about the files and directories within the virtual root is kept in - the SQL database. - Currently, this information includes: -\layout Itemize - -File ID (used internally, primary key for table) -\layout Itemize - -Owner ID (phpGW account_id) -\layout Itemize - -Created by ID (phpGW account_id) -\layout Itemize - -Modified by ID (phpGW account_id) -\layout Itemize - -Created (date) -\layout Itemize - -Modified (date) -\layout Itemize - -Size (bytes) -\layout Itemize - -MIME type -\layout Itemize - -Deleteable (Y/N/Other?) -\layout Itemize - -Comment -\layout Itemize - -App (appname of application that created the file) -\layout Itemize - -Directory (directory the file or directory is in) -\layout Itemize - -Name (name of file or directory) -\layout Itemize - -Link directory (if the file or directory is linked, what the actual directory - is) -\layout Itemize - -Link name (if the file or directory is linked, what the actual name is) -\layout Itemize - -Version (numeric version of the file) -\layout Standard - -The internal names of these (the database column names) are stored in the - $GLOBALS['phpgw']->vfs->attributes array, which is useful for loops, and - is guaranteed to be up-to-date. -\layout Standard - -Note that no information is kept about files outside the virtual root. - If a file is moved outside, all records of it are deleted from the database - (other than the journaling records). - If a file is moved into the virtual root, some information, specifically - MIME-type, is not always stored in the database. - The vital information has defaults: owner is based on where the file is - being stored; size is correctly read; deleteable is set to Y. -\layout Subsection - -ACL support -\begin_inset LatexCommand \label{sec:acl_support} - -\end_inset - - -\layout Standard - -ACL support is built into the VFS. - vfs->acl_check () does the actual checking, and is called from all VFS - functions as needed. - If the file or directory sent to acl_check () doesn't exist, the permissions - for the parent directory are used to determine access. - ACL checking can be overridden at any time by setting vfs->override_acl. - For example: -\layout Verbatim - -$GLOBALS['phpgw']->vfs->override_acl = 1; -\layout Verbatim - -$GLOBALS['phpgw']->vfs->mkdir (array( -\layout Verbatim - - 'string' => $GLOBALS['fakebase']. - '/' . - $group_array['account_name'], -\layout Verbatim - - 'relatives' => array( -\layout Verbatim - - RELATIVE_NONE -\layout Verbatim - - ) -\layout Verbatim - -)); -\layout Verbatim - -$GLOBALS['phpgw']->vfs->override_acl = 0; -\layout Subsection - -Function aliases -\begin_inset LatexCommand \label{sec:function_aliases} - -\end_inset - - -\layout Standard - -You might have noticed there are some functions that just pass the arguments - on to other functions. - These are provided in part because of legacy and in part for convenience. - You can use either. - Here is the list (alias -> actual): -\layout Itemize - -copy -> cp -\layout Itemize - -move -> rm -\layout Itemize - -delete -> rm -\layout Itemize - -dir -> ls -\layout Subsection - -Fakebase directory (changing /home) -\begin_inset LatexCommand \label{sec:fakebase} - -\end_inset - - -\layout Standard - -The old VFS was hard-coded to use '/home' as the fake base directory, even - though the user never saw it. - With the new system, crafty administrators may wish to change '/home' to - something else, say '/users' or '/public_html'. - The fake base directory name is stored in $GLOBALS['phpgw']->vfs->fakebase, - and changing it will transparently change it throughout the VFS and all - applications. - However, this must be done -\emph on -before -\emph default - any data is in the VFS database. - If you wish to change it afterwords, you'll have to manually update the - database, replacing the old value with the new value. - -\emph on -Application programmers need to recognize that /home is not absolute, and - use $GLOBALS['phpgw']->vfs->fakebase instead -\emph default -. - I suggest setting $fakebase = $GLOBALS['phpgw']->vfs->fakebase; right off - the bat to keep things neater. -\layout Section - -About this Document -\layout Subsection - -Copyright and License -\layout Standard - -Copyright (c) 2001, 2002 Jason Wies -\layout Standard - -Permission is granted to copy, distribute and/or modify this document under - the terms of the GNU Free Documentation License, Version 1.1 or any later - version published by the Free Software Foundation; with no Invarient Sections, - with no Front-Cover Texts, and no Back-Cover Texts. -\layout Standard - -A copy of the license is available at -\begin_inset LatexCommand \url[http://www.gnu.org/copyleft/fdl.html]{http://www.gnu.org/copyleft/fdl.html} - -\end_inset - -. -\layout Subsection - -History -\layout Standard - -Original document released in June 2001 by Jason Wies. -\layout Standard - -Updated February 2002 to include arrayized parameters, single quotes, and - GLOBALS. -\layout Subsection - -Contributing -\layout Standard - -Contributions are always welcome. - Please send to the current maintainer, Jason Wies, - - -\end_inset - -. -\the_end diff --git a/phpgwapi/doc/vfs/vfs.sgml b/phpgwapi/doc/vfs/vfs.sgml deleted file mode 100644 index 265a6c96ec..0000000000 --- a/phpgwapi/doc/vfs/vfs.sgml +++ /dev/null @@ -1,648 +0,0 @@ - - -
- - -phpgwapi - VFS Class - - -Jason Wies - - -June 2001, February 2002 - - -The VFS, or Virtual File System, handles all file system activity - for eGoupWare. - - -Introduction and Purpose
diff --git a/phpgwapi/doc/vfs/vfs.txt b/phpgwapi/doc/vfs/vfs.txt deleted file mode 100644 index 1f1e22cdcc..0000000000 --- a/phpgwapi/doc/vfs/vfs.txt +++ /dev/null @@ -1,425 +0,0 @@ - -Next Previous Contents -=============================================================================== -***** 1. Introduction_and_Purpose ***** -The latest version of the VFS for eGoupWare combines actual file system -manipulation with fully integrated database support. It features nearly -transparent handling of files and directories, as well as files inside and -outside the virtual root. This document is intended to provide API and -application developers with a guide to incorporating the VFS into their work. -=============================================================================== -Next Previous Contents - - -Next Previous Contents -=============================================================================== -***** 2. Basics ***** -***** 2.1 Prerequisites ***** -You must explicitly enable the VFS class. To do this, set 'enable_vfs_class' to -True in $GLOBALS['phpgw_info']['flags']. An example: -$GLOBALS['phpgw_info']['flags'] = array( - 'currentapp' => 'phpwebhosting', - 'noheader' => False, - 'noappheader' => False, - 'enable_vfs_class' => True, - 'enable_browser_class' => True -); -***** 2.2 Concepts ***** -The VFS in located in phpgwapi/inc/class.vfs_sql.inc.php. You can look over it, -but I don't suggest trying to understand how it works. It isn't necessary to -know its internals to use it, but you may find the inline comments helpful. The -basic things to keep in mind: - * Files and directories are synonymous in almost all cases -$GLOBALS['phpgw']->vfs->mv (array( - 'from' => 'file1', - 'to' => 'dir/file2' -)); - -$GLOBALS['phpgw']->vfs->mv (array( - 'from' => 'dir1', - 'to' => 'dir/dir1' -)); - -$GLOBALS['phpgw']->vfs->rm (array( - 'string' => 'file' -)); - -$GLOBALS['phpgw']->vfs->rm (array( - 'string' => 'dir' -)); -All work as you would except them to. The major exception is: -$GLOBALS['phpgw']->vfs->touch (array( - 'string' => 'file' -)); -vs. -$GLOBALS['phpgw']->vfs->mkdir (array( - 'string' => 'dir' -)); - * Users and groups are synonymous -As far as the actual paths are concerned, users and groups are the same. /home/ -username works the same as /home/groupname. - * You should never have to know the real paths of files -One of the VFS's responsibilities is to translate paths for you. While you -certainly can operate using full paths, it is much simpler to use the virtual -paths. For example, instead of using: -$GLOBALS['phpgw']->vfs->cp (array( - 'from' => '/var/www/egroupware/files/home/user/file1', - 'to' => '/var/www/egroupware/files/home/user/file2', - 'relatives' => array( - RELATIVE_NONE|VFS_REAL, - RELATIVE_NONE|VFS_REAL - ) -)); -you might use -$GLOBALS['phpgw']->vfs->cp (array( - 'from' => '/home/user/file1', - 'to' => '/home/user/file2', - 'relatives' => array( - RELATIVE_NONE, - RELATIVE_NONE - ) -)); -(We'll get to the RELATIVE's in a minute.) -Site administrators should be able to move their files dir around on their -system and know that everything will continue to work smoothly. - * Relativity is vital -Relativity is a new feature in the VFS, and its importance cannot be stressed -enough. It will make your life much easier, especially for file system -intensive applications, but it will take some getting used to. If something -doesn't work right the first time, chances are great it has to do with -incorrect relativity settings. We will deal with relativity in depth in the -Relativity section. -=============================================================================== -Next Previous Contents - - -Next Previous Contents -=============================================================================== -***** 3. Basic_Functions ***** -These are two functions you'll need to know before we get into relativity. -***** 3.1 path_parts_() ***** -The job of path_parts () is to translate any given file location into its many -component parts for any relativity. The values passed to path_parts () are: -string -relatives -object -'string' is the path you want to translate, 'relatives' is the standard -relativity array, and 'object' specifies how you would like the return value: -if 'object' is True, an object will be returned; if 'object' is False, an array -will be returned. I think you'll find the object easier to deal with, and we'll -be using it throughout this document. The most important returned values (but -not all) for path_parts () are: -fake_full_path -fake_leading_dirs -fake_extra_path -fake_name -real_full_path -real_leading_dirs -real_extra_path -real_name -Just like you would think, fake_full_path contains the full virtual path of -'string', and real_full_path contains the full real path of 'string'. The -fake_name and real_name variables should always be the same, and contain the -final file or directory name. The leading_dirs contain everything except the -name, and the extra_path is everything from the / before "home" to the end of -the leading_dirs. To better illustrate, here is an example: -$p = $GLOBALS['phpgw']->vfs->path_parts (array( - 'string' => '/home/jason/dir/file', - 'relatives' => array( - RELATIVE_NONE - ) -)); - * $p->fake_full_path - /home/jason/dir/file - * $p->fake_leading_dirs - /home/jason/dir - * $p->fake_extra_path - home/jason/dir - * $p->fake_name - file - * $p->real_full_path - /var/www/egroupware/files/home/jason/dir/file - * $p->real_leading_dirs - /var/www/egroupware/files/home/jason/dir - * $p->real_extra_path - home/jason/dir - * $p->real_name - file -As you can see, path_parts () is a very useful function and will save you from -doing those darn substr ()'s yourself. For those of you used to the prior VFS, -note that getabsolutepath () is depreciated. getabsolutepath () still exists -(albeit in a much different form), and is responsible for some of the path -translation, but it is an internal function only. Applications should only use -path_parts (). We have shown you how to use path_parts () so you can experiment -with it using different paths and relativities as we explore relativity. -***** 3.2 cd_() ***** -Part of the overall goal for the VFS in eGoupWare is to give the user a -seamless experience during their session. For example, if they upload a file -using a file manager to the directory /home/my_group/project1, and then go to -download an email attachment, the default directory will be /home/my_group/ -project1. This is accomplished using the cd () function. Examples: -/* cd to their home directory */ -$GLOBALS['phpgw']->vfs->cd (array( - 'string' => '/' -)); - -/* cd to /home/jason/dir */ -$GLOBALS['phpgw']->vfs->cd (array( - 'string' => '/home/jason/dir', - 'relative' => False, - 'relatives' => array( - RELATIVE_NONE - ) -)); - -/* When following the above, cd's to /home/jason/dir/dir2 */ -$GLOBALS['phpgw']->vfs->cd (array( - 'string' => 'dir2', - 'relative' => True -)); -If 'relative' is True, the 'string' is simply appended to the current path. If -you want to know what the current path is, use $GLOBALS['phpgw']->vfs->pwd (). -Now you're ready for relativity. -=============================================================================== -Next Previous Contents - - -Next Previous Contents -=============================================================================== -***** 4. Relativity ***** -Ok, just one last thing before we get into relativity. You will notice -throughout the examples the use of $fakebase. $GLOBALS['phpgw']->vfs->fakebase -is by default '/home'. The old VFS was hard-coded to use '/home', but the -naming choice for this is now up to administrators. See the Fakebase_directory_ -(changing_/home) section for more information. Throughout the rest of this -document, you will see $fakebase used in calls to the VFS, and /home used in -actual paths. You should always use $fakebase when making applications.I -suggest doing $fakebase = $GLOBALS['phpgw']->vfs->fakebase; right off the bat -to keep things neater. -***** 4.1 What_is_it_and_how_does_it_work? ***** -One of the design challenges for a Virtual File System is to try to figure out -whether the calling application is referring to a file inside or outside the -virtual root, and if inside, exactly where. To solve this problem, the -eGoupWare VFS uses RELATIVE defines that are used in bitmasks passed to each -function. The result is that any set of different relativities can be used in -combination with each other. Let's look at a few examples. Say you want to move -'logo.png' from the user's home directory to the current directory. -$GLOBALS['phpgw']->vfs->mv (array( - 'from' => 'logo.png', - 'to' => 'logo.png', - 'relatives' => array( - RELATIVE_USER, - RELATIVE_ALL - ) -)); -RELATIVE_USER means relative to the user's home directory. RELATIVE_ALL means -relative to the current directory, as set by cd () and as reported by pwd (). -So if the current directory was "$fakebase/my_group/project1", the call to mv -() would be processed as: -MOVE "$fakebase/jason/logo.png" TO "$fakebase/my_group/project1/logo.png" -and the actual file system call would be: -rename ('/var/www/egroupware/files/home/jason/logo.php', '/var/www/ -egroupware/files/home/my_group/project1/logo.png'); -Those used to the old VFS will note that you do not have to translate the path -beforehand. Let's look at another example. Suppose you were moving an email -attachment stored in eGoupWare's temporary directory to the 'attachments' -directory within the user's home directory (we're assuming the attachments -directory exists). Note that the temporary directory is outside the virtual -root. -$GLOBALS['phpgw']->vfs->mv (array( - 'from' => $GLOBALS['phpgw_info']['server']['temp_dir'] . '/' . $randomdir -. '/' . $randomfile, - 'to' => 'attachments/actual_name.ext', - 'relatives' => array( - RELATIVE_NONE|VFS_REAL, - RELATIVE_USER - ) -)); -$randomdir and $randomfile are what the directory and file might be called -before they are given a proper name by the user, which is actual_name.ext in -this example. RELATIVE_NONE is the define for using full path names. However, -RELATIVE_NONE is still relative to the virtual root, so we pass along VFS_REAL -as well, to say that the file is outside the virtual root, somewhere else in -the file system. Once again, RELATIVE_USER means relative to the user's home -directory. So the actual file system call might look like this (keep in mind -that $randomdir and $randomfile are just random strings): -rename ('/var/www/egroupware/tmp/0ak5adftgh7/jX42sC9M', '/var/www/ -egroupware/files/home/jason/attachments/actual_name.ext'); -Of course you don't have to know that, nor should you be concerned with it; you -can take it for granted that the VFS will translate the paths correctly. Let's -take a look at one more example, this time using the RELATIVE_USER_APP define. -RELATIVE_USER_APP is used to store quasi-hidden application files, similar to -the Unix convention of ~/.appname. It simply appends .appname to the user's -home directory. For example, if you were making an HTML editor application -named 'htmledit', and wanted to keep a backup file in case something goes -wrong, you could use RELATIVE_USER_APP to store it: -$GLOBALS['phpgw']->vfs->write (array( - 'string' => 'file.name~', - 'relatives' => array( - RELATIVE_USER_APP - ), - 'content' => $contents -)); -This assumes that ~/.htmledit exists of course. The backup file "file.name~" -would then be written in $fakebase/jason/.htmledit/file.name~. Note that -storing files like this might not be as good of a solution as storing them in -the temporary directory or in the database. But it is there in case you need -it. -***** 4.2 Complete_List ***** -Here is the complete list of RELATIVE defines, and what they do: - RELATIVE_ROOT - Don't translate the path at all. Just prepends a /. You'll probably want - to use RELATIVE_NONE though, which handles both virtual and real files. - RELATIVE_USER - User's home directory - RELATIVE_CURR_USER - Current user's home directory. If the current directory is $fakebase/ - my_group/project1, this will return is $fakebase/my_group - RELATIVE_USER_APP - Append .appname to the user's home directory, where appname is the - current application's appname - RELATIVE_PATH - DO NOT USE. Relative to the current directory, used in RELATIVE_ALL - RELATIVE_NONE - Not relative to anything. Use this with VFS_REAL for files outside the - virtual root. Note that using RELATIVE_NONE by itself still means - relative to the virtual root - RELATIVE_CURRENT - An alias for the currently set RELATIVE define, or RELATIVE_ALL if none - is set (see the Defaults section) - VFS_REAL - File is outside of the virtual root. Usually used with RELATIVE_NONE - RELATIVE_ALL - Relative to the current directory. Use RELATIVE_ALLinstead of - RELATIVE_PATH -***** 4.3 Defaults ***** -You might be thinking to yourself that passing along RELATIVE defines with -every VFS call is overkill, especially if your application always uses the same -relativity. The default RELATIVE define for all VFS calls is RELATIVE_CURRENT. -RELATIVE_CURRENT itself defaults to RELATIVE_ALL (relative to the current -path), unless your application sets a specific relativity. If your application -requires most of the work to be done outside of the virtual root, you may wish -to set RELATIVE_CURRENT to RELATIVE_NONE|VFS_REAL. set_relative () is the -function to do this. For example: -$GLOBALS['phpgw']->vfs->set_relative (array( - 'mask' => RELATIVE_NONE|VFS_REAL -)); - -$GLOBALS['phpgw']->vfs->read (array( - 'string' => '/etc/passwd' -)); - -$GLOBALS['phpgw']->vfs->cp (array( - 'from' => '/usr/include/stdio.h', - 'to' => '/tmp/stdio.h' -)); - -$GLOBALS['phpgw']->vfs->cp (array( - 'from' => '/usr/share/pixmaps/yes.xpm', - 'to' => 'icons/yes.xpm', - 'relatives' => array( - RELATIVE_CURRENT, - RELATIVE_USER - ) -)); -You should notice that no relativity array is needed in the other calls that -refer to files outside the virtual root, but one is needed for calls that -include files inside the virtual root. Any RELATIVE define can be set as the -default and works in the same fashion. To retrieve the currently set define, -use get_relative (). Note that the relativity is reset after each page request; -that is, it's good only for the life of the current page loading, and is not -stored in session management. -=============================================================================== -Next Previous Contents - - -Next Previous Contents -=============================================================================== -***** 5. Function_reference ***** -To view the function reference for the VFS, use the doc/inlinedocparser.php -script that comes with eGoupWare, ie http://localhost/doc/ -inlinedocparser.php?fn=class.vfs_sql.inc.php. -=============================================================================== -Next Previous Contents - - -Next Previous Contents -=============================================================================== -***** 6. Notes ***** -***** 6.1 Database ***** -Data about the files and directories within the virtual root is kept in the SQL -database. Currently, this information includes: - * File ID (used internally, primary key for table) - * Owner ID (phpGW account_id) - * Created by ID (phpGW account_id) - * Modified by ID (phpGW account_id) - * Created (date) - * Modified (date) - * Size (bytes) - * MIME type - * Deleteable (Y/N/Other?) - * Comment - * App (appname of application that created the file) - * Directory (directory the file or directory is in) - * Name (name of file or directory) - * Link directory (if the file or directory is linked, what the actual - directory is) - * Link name (if the file or directory is linked, what the actual name is) - * Version (numeric version of the file) -The internal names of these (the database column names) are stored in the -$GLOBALS['phpgw']->vfs->attributes array, which is useful for loops, and is -guaranteed to be up-to-date. -Note that no information is kept about files outside the virtual root. If a -file is moved outside, all records of it are deleted from the database (other -than the journaling records). If a file is moved into the virtual root, some -information, specifically MIME-type, is not always stored in the database. The -vital information has defaults: owner is based on where the file is being -stored; size is correctly read; deleteable is set to Y. -***** 6.2 ACL_support ***** -ACL support is built into the VFS. vfs->acl_check () does the actual checking, -and is called from all VFS functions as needed. If the file or directory sent -to acl_check () doesn't exist, the permissions for the parent directory are -used to determine access. ACL checking can be overridden at any time by setting -vfs->override_acl. For example: -$GLOBALS['phpgw']->vfs->override_acl = 1; -$GLOBALS['phpgw']->vfs->mkdir (array( - 'string' => $GLOBALS['fakebase']. '/' . $group_array['account_name'], - 'relatives' => array( - RELATIVE_NONE - ) -)); -$GLOBALS['phpgw']->vfs->override_acl = 0; -***** 6.3 Function_aliases ***** -You might have noticed there are some functions that just pass the arguments on -to other functions. These are provided in part because of legacy and in part -for convenience. You can use either. Here is the list (alias -> actual): - * copy -> cp - * move -> rm - * delete -> rm - * dir -> ls -***** 6.4 Fakebase_directory_(changing_/home) ***** -The old VFS was hard-coded to use '/home' as the fake base directory, even -though the user never saw it. With the new system, crafty administrators may -wish to change '/home' to something else, say '/users' or '/public_html'. The -fake base directory name is stored in $GLOBALS['phpgw']->vfs->fakebase, and -changing it will transparently change it throughout the VFS and all -applications. However, this must be done before any data is in the VFS -database. If you wish to change it afterwords, you'll have to manually update -the database, replacing the old value with the new value. Application -programmers need to recognize that /home is not absolute, and use $GLOBALS -['phpgw']->vfs->fakebase instead. I suggest setting $fakebase = $GLOBALS -['phpgw']->vfs->fakebase; right off the bat to keep things neater. -=============================================================================== -Next Previous Contents - -Next Previous Contents -=============================================================================== -***** 7. About_this_Document ***** -***** 7.1 Copyright_and_License ***** -Copyright (c) 2001, 2002 Jason Wies -Permission is granted to copy, distribute and/or modify this document under the -terms of the GNU Free Documentation License, Version 1.1 or any later version -published by the Free Software Foundation; with no Invarient Sections, with no -Front-Cover Texts, and no Back-Cover Texts. -A copy of the license is available at http://www.gnu.org/copyleft/fdl.html. -***** 7.2 History ***** -Original document released in June 2001 by Jason Wies. -Updated February 2002 to include arrayized parameters, single quotes, and -GLOBALS. -***** 7.3 Contributing ***** -Contributions are always welcome. Please send to the current maintainer, Jason -Wies, -=============================================================================== -Next Previous Contents