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:
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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
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.
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
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:
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.
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:
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:
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.
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
-().
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.
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.
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"
-
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.
$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):
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:
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.
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
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:
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.
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.
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:
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):
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.
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.
-
-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