[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [12858] api: update integration with external filesys
From: |
Sigurd Nes |
Subject: |
[Fmsystem-commits] [12858] api: update integration with external filesystem |
Date: |
Fri, 13 Mar 2015 13:59:51 +0000 |
Revision: 12858
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=12858
Author: sigurdne
Date: 2015-03-13 13:59:50 +0000 (Fri, 13 Mar 2015)
Log Message:
-----------
api: update integration with external filesystem
Modified Paths:
--------------
trunk/phpgwapi/inc/class.vfs_fileoperation_braArkiv.inc.php
trunk/phpgwapi/inc/class.vfs_sql.inc.php
Removed Paths:
-------------
trunk/phpgwapi/inc/class.vfs_braArkiv.inc.php
Deleted: trunk/phpgwapi/inc/class.vfs_braArkiv.inc.php
===================================================================
--- trunk/phpgwapi/inc/class.vfs_braArkiv.inc.php 2015-03-12 23:39:27 UTC
(rev 12857)
+++ trunk/phpgwapi/inc/class.vfs_braArkiv.inc.php 2015-03-13 13:59:50 UTC
(rev 12858)
@@ -1,2838 +0,0 @@
-<?php
- /**
- * Virtual File System with SQL backend
- * @author Jason Wies <address@hidden>
- * @author Giancarlo Susin
- * @copyright Copyright(C) 2001 Jason Wies
- * @copyright Copyright(C) 2004 Free Software Foundation, Inc.
http://www.fsf.org/
- * @license http://www.fsf.org/licenses/lgpl.html GNU Lesser General
Public License
- * @package phpgwapi
- * @subpackage vfs
- * @version $Id$
- */
-
- /**
- * VFS SQL select
- * @see extra_sql()
- */
- define('VFS_SQL_SELECT', 1);
- /**
- * VFS SQL delete
- * @see extra_sql()
- */
- define('VFS_SQL_DELETE', 2);
- /**
- * VFS SQL update
- * @see extra_sql()
- */
- define('VFS_SQL_UPDATE', 4);
-
-
- /**
- * Virtual File System with SQL backend
- *
- * @package phpgwapi
- * @subpackage vfs
- * @ignore
- */
- class phpgwapi_vfs extends phpgwapi_vfs_shared
- {
- var $file_actions;
- var $acl_default;
-
- /**
- * constructor, sets up variables
- *
- */
- function __construct()
- {
- parent::__construct();
- /*
- File/dir attributes, each corresponding to a
database field. Useful for use in loops
- If an attribute was added to the table, add it here
and possibly add it to
- set_attributes()
-
- set_attributes now uses this array(). 07-Dec-01
skeeter
- */
-
- $this->attributes[] = 'deleteable';
- $this->attributes[] = 'content';
-
- /*
- Decide whether to use any actual filesystem
calls(fopen(), fread(),
- unlink(), rmdir(), touch(), etc.). If not, then
we're working completely
- in the database.
- */
- $conf = CreateObject('phpgwapi.config', 'phpgwapi');
- $conf->read();
-
- if(isset($conf->config_data['file_store_contents']) &&
$conf->config_data['file_store_contents'])
- {
- $file_store_contents =
$conf->config_data['file_store_contents'];
- }
- else
- {
- $file_store_contents = 'filesystem';
- }
-
- switch ($file_store_contents)
- {
- case 'filesystem':
- $this->file_actions = 1;
- break;
- default:
- $this->file_actions = 0;
- break;
- }
-
- $this->fileoperation =
CreateObject("phpgwapi.vfs_fileoperation_{$file_store_contents}");
-
- $this->acl_default = $conf->config_data['acl_default'];
-
- // test if the files-dir is inside the document-root,
and refuse working if so
- //
- if($this->file_actions &&
$this->in_docroot($this->basedir))
- {
- $GLOBALS['phpgw']->common->phpgw_header();
- if($GLOBALS['phpgw_info']['flags']['noheader'])
- {
- echo parse_navbar();
- }
- echo '<p align="center"><font
color="red"><b>'.lang('Path to user and group files HAS TO BE OUTSIDE of the
webservers document-root!!!')."</b></font></p>\n";
- $GLOBALS['phpgw']->common->phpgw_exit();
- }
-
- /* We store the linked directories in an array now, so
we don't have to make the SQL call again */
- if($GLOBALS['phpgw_info']['server']['db_type']=='mssql'
- ||
$GLOBALS['phpgw_info']['server']['db_type']=='sybase')
- {
- $query = $GLOBALS['phpgw']->db->query("SELECT
directory, name, link_directory, link_name"
- . " FROM phpgw_vfs WHERE
CONVERT(varchar,link_directory) != ''"
- . " AND CONVERT(varchar,link_name) != ''" .
$this->extra_sql(array('query_type' => VFS_SQL_SELECT)), __LINE__,__FILE__);
- }
- else
- {
- $query = $GLOBALS['phpgw']->db->query("SELECT
directory, name, link_directory, link_name"
- . " FROM phpgw_vfs WHERE(link_directory IS NOT
NULL or link_directory != '')"
- . " AND(link_name IS NOT NULL or link_name !=
'')" . $this->extra_sql(array('query_type' => VFS_SQL_SELECT)),
__LINE__,__FILE__);
- }
-
- $this->linked_dirs = array();
- while($GLOBALS['phpgw']->db->next_record())
- {
- $this->linked_dirs[] = $this->Record();
- }
- }
-
- /**
- * test if $path lies within the webservers document-root
- *
- */
- function in_docroot($path)
- {
- //$docroots = array(PHPGW_SERVER_ROOT,
$_SERVER['DOCUMENT_ROOT']);
- $docroots = array(PHPGW_SERVER_ROOT);
- //in case vfs is called from cli(cron-job)
-
- if($_SERVER['DOCUMENT_ROOT'])
- {
- $docroots[] = $_SERVER['DOCUMENT_ROOT'];
- }
-
- foreach($docroots as $docroot)
- {
- $len = strlen($docroot);
-
- if($docroot == substr($path,0,$len))
- {
- $rest = substr($path,$len);
-
- if(!strlen($rest) || $rest[0] ==
DIRECTORY_SEPARATOR)
- {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Return extra SQL code that should be appended to certain
queries
- *
- * @param query_type The type of query to get extra SQL code
for, in the form of a VFS_SQL define
- * @return Extra SQL code
- */
- function extra_sql($data)
- {
- if(!is_array($data))
- {
- $data = array('query_type' => VFS_SQL_SELECT);
- }
-
- if($data['query_type'] == VFS_SQL_SELECT ||
$data['query_type'] == VFS_SQL_DELETE || $data['query_type'] = VFS_SQL_UPDATE)
- {
- $sql = ' AND((';
-
- reset($this->meta_types);
- while(list($num, $type) =
each($this->meta_types))
- {
- if($num)
- {
- $sql .= ' AND ';
- }
-
- $sql .= "mime_type != '{$type}'";
- }
- $sql .= ') OR mime_type IS NULL)';
- }
-
- return($sql);
- }
-
- /**
- * Add a journal entry after(or before) completing an operation,
- *
- * and increment the version number. This function
should be used internally only
- * Note that state_one and state_two are ignored for some
VFS_OPERATION's, for others
- * * they are required. They are ignored for any
"custom" operation
- * * The two operations that require state_two:
- * * operation * state_two
- * * VFS_OPERATION_COPIED fake_full_path of
copied to
- * * VFS_OPERATION_MOVED *
fake_full_path of moved to
-
- * * If deleting, you must call add_journal()
before you delete the entry from the database
- * @param string File or directory to add entry for
- * @param relatives Relativity array
- * @param operation The operation that was performed. Either a
VFS_OPERATION define or
- * * a non-integer descriptive text string
- * @param state_one The first "state" of the file or directory.
Can be a file name, size,
- * * location, whatever is appropriate for the
specific operation
- * @param state_two The second "state" of the file or directory
- * @param incversion Boolean True/False. Increment the version
for the file? Note that this is
- * * handled automatically for the
VFS_OPERATION defines.
- * * i.e. VFS_OPERATION_EDITED would increment
the version, VFS_OPERATION_COPIED
- * * would not
- * @return Boolean True/False
- */
- function add_journal($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' =>
array(RELATIVE_CURRENT),
- 'state_one' => false,
- 'state_two' => false,
- 'incversion' => true
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
-
- $p = $this->path_parts(array('string' =>
$data['string'], 'relatives' => array($data['relatives'][0])));
-
- /* We check that they have some sort of access to the
file other than read */
- if(!$this->acl_check(array('string' =>
$p->fake_full_path, 'relatives' => array($p->mask), 'operation' =>
PHPGW_ACL_ADD)) &&
- !$this->acl_check(array('string' =>
$p->fake_full_path, 'relatives' => array($p->mask), 'operation' =>
PHPGW_ACL_EDIT)) &&
- !$this->acl_check(array('string' =>
$p->fake_full_path, 'relatives' => array($p->mask), 'operation' =>
PHPGW_ACL_DELETE)))
- {
- return false;
- }
-
- if(!$this->file_exists(array('string' =>
$p->fake_full_path, 'relatives' => array($p->mask))))
- {
- return false;
- }
-
- $ls_array = $this->ls(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'checksubdirs' => false,
- 'mime_type' => false,
- 'nofiles' => true
- )
- );
- $file_array = $ls_array[0];
-
- $sql = 'INSERT INTO phpgw_vfs(';
- $sql2 = ' VALUES(';
- $morethanone = false;
- $modified = false;
-
- for($i = 0; list($attribute, $value) =
each($file_array); $i++)
- {
- if($attribute == 'file_id' || $attribute ==
'content')
- {
- continue;
- }
-
- if($attribute == 'owner_id')
- {
- $value = $account_id;
- }
-
- if($attribute == 'created')
- {
- $value = $this->now;
- }
-
- if($attribute == 'modified' && !$modified)
- {
- unset($value);
- }
-
- if($attribute == 'mime_type')
- {
- $value = 'journal';
- }
-
- if($attribute == 'comment')
- {
- switch($data['operation'])
- {
- case VFS_OPERATION_CREATED:
- $value = 'Created';
- $data['incversion'] =
true;
- break;
- case VFS_OPERATION_EDITED:
- $value = 'Edited';
- $data['incversion'] =
true;
- break;
- case
VFS_OPERATION_EDITED_COMMENT:
- $value = 'Edited
comment';
- $data['incversion'] =
false;
- break;
- case VFS_OPERATION_COPIED:
- if(!$data['state_one'])
- {
-
$data['state_one'] = $p->fake_full_path;
- }
- if(!$data['state_two'])
- {
- return false;
- }
- $value = "Copied
{$data['state_one']} to {$data['state_two']}";
- $data['incversion'] =
false;
- break;
- case VFS_OPERATION_MOVED:
- if(!$data['state_one'])
- {
-
$data['state_one'] = $p->fake_full_path;
- }
- if(!$data['state_two'])
- {
- return false;
- }
- $value = "Moved
{$data['state_one']} to {$data['state_two']}";
- $data['incversion'] =
false;
- break;
- case VFS_OPERATION_DELETED:
- $value = 'Deleted';
- $data['incversion'] =
false;
- break;
- default:
- $value =
$data['operation'];
- break;
- }
- }
-
- /*
- Let's increment the version for the file
itself. We keep the current
- version when making the journal entry,
because that was the version that
- was operated on. The maximum numbers for
each part in the version string:
- none.99.9.9
- */
- if($attribute == 'version' &&
$data['incversion'])
- {
- $version_parts = explode(".", $value);
- $newnumofparts = $numofparts =
count($version_parts);
-
- if($version_parts[3] >= 9)
- {
- $version_parts[3] = 0;
- $version_parts[2]++;
- $version_parts_3_update = 1;
- }
- else if(isset($version_parts[3]))
- {
- $version_parts[3]++;
- }
-
- if($version_parts[2] >= 9 &&
$version_parts[3] == 0 && $version_parts_3_update)
- {
- $version_parts[2] = 0;
- $version_parts[1]++;
- }
-
- if($version_parts[1] > 99)
- {
- $version_parts[1] = 0;
- $version_parts[0]++;
- }
- $newversion = '';
- for($j = 0; $j < $newnumofparts; $j++)
- {
- if(!isset($version_parts[$j]))
- {
- break;
- }
-
- if($j)
- {
- $newversion .= '.';
- }
-
- $newversion .=
$version_parts[$j];
- }
-
- $this->set_attributes(array(
- 'string'
=> $p->fake_full_path,
- 'relatives'
=> array($p->mask),
- 'attributes' =>
array(
-
'version' => $newversion
- )
- )
- );
- }
- if(isset($value) && !empty($value))
- {
- if($morethanone)
- {
- $sql .= ', ';
- $sql2 .= ', ';
- }
- else
- {
- $morethanone = true;
- }
- $sql .= "$attribute";
- $sql2 .= "'" .
$this->clean_string(array('string' => $value)) . "'";
- }
- }
- unset($morethanone);
- $sql .= ')';
- $sql2 .= ')';
-
- $sql .= $sql2;
-
- /*
- These are some special situations where we need to
flush the journal entries
- or move the 'journal' entries to 'journal-deleted'.
Kind of hackish, but they
- provide a consistent feel to the system
- */
- $flush_path = '';
- if($data['operation'] == VFS_OPERATION_CREATED)
- {
- $flush_path = $p->fake_full_path;
- $deleteall = true;
- }
-
- if($data['operation'] == VFS_OPERATION_COPIED ||
$data['operation'] == VFS_OPERATION_MOVED)
- {
- $flush_path = $data['state_two'];
- $deleteall = false;
- }
-
- if($flush_path)
- {
- $flush_path_parts = $this->path_parts(array(
- 'string' => $flush_path,
- 'relatives' =>
array(RELATIVE_NONE)
- )
- );
-
- $this->flush_journal(array(
- 'string' =>
$flush_path_parts->fake_full_path,
- 'relatives' =>
array($flush_path_parts->mask),
- 'deleteall' => $deleteall
- )
- );
- }
-
- if($data['operation'] == VFS_OPERATION_COPIED)
- {
- /*
- We copy it going the other way as well, so
both files show the operation.
- The code is a bad hack to prevent recursion.
Ideally it would use VFS_OPERATION_COPIED
- */
- $this->add_journal(array(
- 'string' =>
$data['state_two'],
- 'relatives' =>
array(RELATIVE_NONE),
- 'operation' => "Copied
{$data['state_one']} to {$data['state_two']}",
- 'state_one' => null,
- 'state_two' => null,
- 'incversion' => false
- )
- );
- }
-
- if($data['operation'] == VFS_OPERATION_MOVED)
- {
- $state_one_path_parts = $this->path_parts(array(
- 'string' =>
$data['state_one'],
- 'relatives' =>
array(RELATIVE_NONE)
- )
- );
-
- $query = $GLOBALS['phpgw']->db->query("UPDATE
phpgw_vfs SET mime_type='journal-deleted'"
- . " WHERE
directory='{$state_one_path_parts->fake_leading_dirs_clean}'"
- . " AND
name='{$state_one_path_parts->fake_name_clean}' AND mime_type='journal'");
-
- /*
- We create the file in addition to logging
the MOVED operation. This is an
- advantage because we can now search for
'Create' to see when a file was created
- */
- $this->add_journal(array(
- 'string' =>
$data['state_two'],
- 'relatives' =>
array(RELATIVE_NONE),
- 'operation' =>
VFS_OPERATION_CREATED
- )
- );
- }
-
- /* This is the SQL query we made for THIS request,
remember that one? */
- $query = $GLOBALS['phpgw']->db->query($sql, __LINE__,
__FILE__);
-
- /*
- If we were to add an option of whether to keep
journal entries for deleted files
- or not, it would go in the if here
- */
- if($data['operation'] == VFS_OPERATION_DELETED)
- {
- $query = $GLOBALS['phpgw']->db->query("UPDATE
phpgw_vfs SET mime_type='journal-deleted'"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}' AND
mime_type='journal'");
- }
-
- return true;
- }
-
- /**
- * Flush journal entries for $string. Used before adding
$string
- *
- * flush_journal() is an internal function and should be called
from add_journal() only
- * @param string File/directory to flush journal entries of
- * @param relatives Realtivity array
- * @param deleteall Delete all types of journal entries,
including the active Create entry.
- * * Normally you only want to delete the
Create entry when replacing the file
- * * Note that this option does not effect
$deleteonly
- * @param deletedonly Only flush 'journal-deleted'
entries(created when $string was deleted)
- * @return Boolean True/False
- */
- function flush_journal($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' =>
array(RELATIVE_CURRENT),
- 'deleteall' => false,
- 'deletedonly' => false
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- $sql = "DELETE FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'";
-
- if(!$data['deleteall'])
- {
- $sql .= " AND(mime_type != 'journal' AND
comment != 'Created')";
- }
-
- $sql .= " AND(mime_type='journal-deleted'";
-
- if(!$data['deletedonly'])
- {
- $sql .= " OR mime_type='journal'";
- }
-
- $sql .= ")";
-
- $query = $GLOBALS['phpgw']->db->query($sql, __LINE__,
__FILE__);
-
- if($query)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /*
- * See vfs_shared
- */
- function get_journal($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' =>
array(RELATIVE_CURRENT),
- 'type' => false
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask)
- )))
- {
- return false;
- }
-
- $sql = "SELECT * FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'";
-
- if($data['type'] == 1)
- {
- $sql .= " AND mime_type='journal'";
- }
- elseif($data['type'] == 2)
- {
- $sql .= " AND mime_type='journal-deleted'";
- }
- else
- {
- $sql .= " AND(mime_type='journal' OR
mime_type='journal-deleted')";
- }
-
- $query = $GLOBALS['phpgw']->db->query($sql, __LINE__,
__FILE__);
-
- while($GLOBALS['phpgw']->db->next_record())
- {
- $rarray[] = $this->Record();
- }
-
- return $rarray;
- }
-
- /*
- * See vfs_shared
- */
- function acl_check($data)
- {
- //echo 'checking vfs_sql::acl_check(' . print_r($data,
true) . '</pre>';
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' =>
array(RELATIVE_CURRENT),
- 'operation' => PHPGW_ACL_READ,
- 'must_exist' => false
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- /* Accommodate special situations */
- if($this->override_acl || $data['relatives'][0] ==
RELATIVE_USER_APP)
- {
- return true;
- }
-
- if(!isset($data['owner_id']) || !$data['owner_id'])
- {
- $p = $this->path_parts(array(
- 'string' =>
$data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- /* Temporary, until we get symlink type files
set up */
- if($p->outside)
- {
- return true;
- }
-
- /* Read access is always allowed here, but
nothing else is */
- if($data['string'] == '/' || $data['string'] ==
$this->fakebase)
- {
- if($data['operation'] == PHPGW_ACL_READ)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /* If the file doesn't exist, we get ownership
from the parent directory */
- if(!$this->file_exists(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- ))
- )
- {
- if($data['must_exist'])
- {
- return false;
- }
-
- $data['string'] = $p->fake_leading_dirs;
- $p2 = $this->path_parts(array(
- 'string' =>
$data['string'],
- 'relatives' =>
array($p->mask)
- )
- );
-
- if(!$this->file_exists(array(
- 'string' =>
$data['string'],
- 'relatives' =>
array($p->mask)
- ))
- )
- {
- return false;
- }
- }
- else
- {
- $p2 = $p;
- }
-
- /*
- We don't use ls() to get owner_id as we
normally would,
- because ls() calls acl_check(), which would
create an infinite loop
- */
- $query = $GLOBALS['phpgw']->db->query("SELECT
owner_id FROM phpgw_vfs WHERE directory='{$p2->fake_leading_dirs_clean}'"
- . " AND name='{$p2->fake_name_clean}'" .
$this->extra_sql(array('query_type' => VFS_SQL_SELECT)), __LINE__, __FILE__);
- $GLOBALS['phpgw']->db->next_record();
-
- $record = $this->Record();
- $owner_id = $record['owner_id'];
- }
- else
- {
- $owner_id = $data['owner_id'];
- }
-
- /* This is correct. The ACL currently doesn't handle
undefined values correctly */
- if(!$owner_id)
- {
- $owner_id = 0;
- }
-
- $user_id = $GLOBALS['phpgw_info']['user']['account_id'];
-
- /* They always have access to their own files */
- if($owner_id == $user_id)
- {
- return true;
- }
-
- $currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
- return $GLOBALS['phpgw']->acl->check('run',
PHPGW_ACL_READ, $currentapp);
- }
-
- /*
- * See vfs_shared
- */
- function read($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => PHPGW_ACL_READ
- ))
- )
- {
- return false;
- }
-
- if($this->file_actions || $p->outside)
- {
- if($p->outside)
- {
- $contents = null;
- if( $filesize =
filesize($p->real_full_path) > 0 && $fp = fopen($p->real_full_path, 'rb'))
- {
- $contents = fread($fp,
$filesize);
- fclose ($fp);
- }
- }
- else
- {
- $contents =
$this->fileoperation->read($p);
- }
- }
- else
- {
- $ls_array = $this->ls(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- )
- );
-
- $contents = $ls_array[0]['content'];
- }
-
- return $contents;
- }
-
- /*
- * See vfs_shared
- */
- function write($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT),
- 'content' => ''
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if($this->file_exists(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask)
- ))
- )
- {
- $acl_operation = PHPGW_ACL_EDIT;
- $journal_operation = VFS_OPERATION_EDITED;
- }
- else
- {
- $acl_operation = PHPGW_ACL_ADD;
- }
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => $acl_operation
- ))
- )
- {
- return false;
- }
-
- umask(000);
-
- /*
- If 'string' doesn't exist, touch() creates both the
file and the database entry
- If 'string' does exist, touch() sets the
modification time and modified by
- */
- $this->touch(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask)
- )
- );
-
- if($this->file_actions)
- {
- $write_ok = $this->fileoperation->write($p,
$data['content']);
- }
-
- if($write_ok || !$this->file_actions)
- {
- if($this->file_actions)
- {
- $set_attributes_array = array(
- 'size' =>
strlen($data['content']),
- );
- }
- else
- {
- $set_attributes_array = array(
- 'size' =>
strlen($data['content']),
- 'content' =>
$data['content']
- );
- }
-
- $this->set_attributes(array
- (
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'attributes' =>
$set_attributes_array
- )
- );
-
- if($journal_operation)
- {
- $this->add_journal(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' =>
$journal_operation
- )
- );
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /*
- * See vfs_shared
- */
- function touch($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
- $currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- umask(000);
-
- if($this->file_actions)
- {
- /*
- PHP's touch function will automatically
decide whether to
- create the file or set the modification time
- */
-
- /* In case of $p->outside: touch on local disk
*/
- if($p->outside)
- {
- return @touch($p->real_full_path);
- }
- else
- {
- $rr = $this->fileoperation->touch($p);
- }
- }
-
- /* We, however, have to decide this ourselves */
- if($this->file_exists(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask)
- ))
- )
- {
- if(!$this->acl_check(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' =>
PHPGW_ACL_EDIT
- )))
- {
- return false;
- }
-
- $vr = $this->set_attributes(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'attributes' => array(
-
'modifiedby_id' => $account_id,
-
'modified' => $this->now
- )
- )
- );
- }
- else
- {
- if(!$this->acl_check(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' => PHPGW_ACL_ADD
- ))
- )
- {
- return false;
- }
-
- $query = $GLOBALS['phpgw']->db->query("INSERT
INTO phpgw_vfs (owner_id, directory, name)"
- . "
VALUES({$this->working_id},'{$p->fake_leading_dirs_clean}',
'{$p->fake_name_clean}')", __LINE__, __FILE__);
-
- $this->set_attributes(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'attributes' => array(
- 'createdby_id'
=> $account_id,
- 'created'
=> $this->now,
- 'size'
=> 0,
- 'deleteable'
=> 'Y',
- 'app'
=> $currentapp
- )
- )
- );
- $this->correct_attributes(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- )
- );
-
- $this->add_journal(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' =>
VFS_OPERATION_CREATED
- )
- );
- }
-
- if($rr || $vr || $query)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /*
- * See vfs_shared
- */
- function cp($data)
- {
- if(!$data['from'])
- {
- throw new Exception('nothing to copy from');
- }
-
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT,
RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
-
- $f = $this->path_parts(array(
- 'string' => $data['from'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- $t = $this->path_parts(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- )
- );
-
- if(!$this->fileoperation->check_target_directory($t))
- {
- $GLOBALS['phpgw']->log->error(array(
- 'text' => 'vfs::cp() : missing target
directory %1',
- 'p1' => $t->real_leading_dirs,
- 'p2' => '',
- 'line' => __LINE__,
- 'file' => __FILE__
- ));
-
- return false;
- }
-
- if(!$this->acl_check(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask),
- 'operation' => PHPGW_ACL_READ
- ))
- )
- {
- return false;
- }
-
- if($this->file_exists(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask)
- ))
- )
- {
- if(!$this->acl_check(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' =>
PHPGW_ACL_EDIT
- ))
- )
- {
- return false;
- }
- }
- else
- {
- if(!$this->acl_check(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' => PHPGW_ACL_ADD
- ))
- )
- {
- return false;
- }
-
- }
-
- umask(000);
-
- if($this->file_type(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask)
- )) != 'Directory'
- )
- {
- if($this->file_actions)
- {
- if(!$this->fileoperation->copy($f, $t))
- {
- return false;
- }
-
- $size =
$this->fileoperation->filesize($t);
- }
- else
- {
- $content = $this->read(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask)
- )
- );
-
- $size = strlen($content);
- }
-
- if($t->outside)
- {
- return true;
- }
-
- $ls_array = $this->ls(array(
- 'string' =>
$f->real_full_path, // Sigurd: seems to work better with real - old: 'string'
=> $f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'checksubdirs' => false,
- 'mime_type' => false,
- 'nofiles' => true
- )
- );
- $record = $ls_array[0];
-
- if($this->file_exists(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- ))
- )
- {
- $query =
$GLOBALS['phpgw']->db->query("UPDATE phpgw_vfs SET
owner_id='{$this->working_id}',"
- . "
directory='{$t->fake_leading_dirs_clean}',"
- . " name='{$t->fake_name_clean}'"
- . " WHERE
owner_id='{$this->working_id}' AND directory='{$t->fake_leading_dirs_clean}'"
- . " AND name='{$t->fake_name_clean}'" .
$this->extra_sql(VFS_SQL_UPDATE), __LINE__, __FILE__);
-
- $set_attributes_array = array
- (
- 'createdby_id' => $account_id,
- 'created' =>
$this->now,
- 'size' =>
$size,
- 'mime_type' =>
$record['mime_type'],
- 'deleteable' =>
$record['deleteable'],
- 'comment' =>
$record['comment'],
- 'app' =>
$record['app']
- );
-
- if(!$this->file_actions)
- {
-
$set_attributes_array['content'] = $content;
- }
-
- $this->set_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'attributes' =>
$set_attributes_array
- )
- );
-
- $this->add_journal(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' =>
VFS_OPERATION_EDITED
- )
- );
- }
- else
- {
- $this->touch(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
-
- $set_attributes_array = array
- (
- 'createdby_id' => $account_id,
- 'created' =>
$this->now,
- 'size' =>
$size,
- 'mime_type' =>
$record['mime_type'],
- 'deleteable' =>
$record['deleteable'],
- 'comment' =>
$record['comment'],
- 'app' =>
$record['app']
- );
-
- if(!$this->file_actions)
- {
-
$set_attributes_array['content'] = $content;
- }
-
- $this->set_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'attributes' =>
$set_attributes_array
- )
- );
- }
- $this->correct_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
- }
- else /* It's a directory */
- {
- /* First, make the initial directory */
- if($this->mkdir(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- )) === false
- )
- {
- return false;
- }
-
- /* Next, we create all the directories below
the initial directory */
- $ls = $this->ls(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'checksubdirs' => true,
- 'mime_type' => 'Directory'
- )
- );
-
- while(list($num, $entry) = each($ls))
- {
- $newdir = preg_replace("/^" .
str_replace('/', '\/', $f->fake_full_path). "/", $t->fake_full_path,
$entry['directory']);
-
- if($this->mkdir(array(
- 'string' =>
"{$newdir}/{$entry['name']}",
- 'relatives' =>
array($t->mask)
- )) === false
- )
- {
- return false;
- }
- }
-
- /* Lastly, we copy the files over */
- $ls = $this->ls(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask)
- )
- );
-
- while(list($num, $entry) = each($ls))
- {
- if($entry['mime_type'] == 'Directory')
- {
- continue;
- }
-
- $newdir = preg_replace("/^" .
str_replace('/', '\/', $f->fake_full_path). "/", $t->fake_full_path,
$entry['directory']);
- $this->cp(array(
- 'from' =>
"{$entry[directory]}/{$entry[name]}",
- 'to' =>
"{$newdir}/{$entry[name]}",
- 'relatives' =>
array($f->mask, $t->mask)
- )
- );
- }
- }
-
- if(!$f->outside)
- {
- $this->add_journal(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'operation' =>
VFS_OPERATION_COPIED,
- 'state_one' => NULL,
- 'state_two' =>
$t->fake_full_path
- )
- );
- }
-
- return true;
- }
- /*
- * Same as cp function, except an exception is thrown if there
is a failure
- * errors have also been expanded
- */
- function cp2($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT,
RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
-
- $f = $this->path_parts(array(
- 'string' => $data['from'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- $t = $this->path_parts(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask),
- 'operation' => PHPGW_ACL_READ
- ))
- )
- {
- throw new Exception('ACL(READ) check failed!');
- }
-
- if($this->file_exists(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask)
- ))
- )
- {
- if(!$this->acl_check(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' =>
PHPGW_ACL_EDIT
- ))
- )
- {
- throw new Exception('ACL(EDIT) check
failed!');
- }
- }
- else
- {
- if(!$this->acl_check(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' => PHPGW_ACL_ADD
- ))
- )
- {
- throw new Exception('ACL(ADD) check
failed!');
- }
-
- }
-
- umask(000);
-
- if($this->file_type(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask)
- )) != 'Directory'
- )
- {
- if($this->file_actions)
- {
- if(!$this->fileoperation->copy($f, $t))
- {
- $error = "Copy failed!\n";
- $error = $error.
"f->real_full_path: $f->real_full_path \n";
- $error = $error.
"t->real_full_path: $t->real_full_path \n";
- throw new Exception($error);
- }
- $size =
$this->fileoperation->filesize($t);
- }
- else
- {
- $content = $this->read(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask)
- )
- );
-
- $size = strlen($content);
- }
-
- if($t->outside)
- {
- return true;
- }
-
- $ls_array = $this->ls(array(
- 'string' =>
$f->real_full_path, // Sigurd: seems to work better with real - old: 'string'
=> $f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'checksubdirs' => false,
- 'mime_type' =>
false,
- 'nofiles' => true
- )
- );
- $record = $ls_array[0];
-
- if($this->file_exists(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- ))
- )
- {
- $query =
$GLOBALS['phpgw']->db->query("UPDATE phpgw_vfs SET
owner_id='{$this->working_id}',"
- . "
directory='{$t->fake_leading_dirs_clean}',"
- . " name='{$t->fake_name_clean}'"
- . " WHERE
owner_id='{$this->working_id}' AND directory='{$t->fake_leading_dirs_clean}'"
- . " AND name='$t->fake_name_clean'" .
$this->extra_sql(VFS_SQL_UPDATE), __LINE__, __FILE__);
-
- $set_attributes_array = array
- (
- 'createdby_id' =>
$account_id,
- 'created'
=> $this->now,
- 'size'
=> $size,
- 'mime_type'
=> $record['mime_type'],
- 'deleteable' =>
$record['deleteable'],
- 'comment'
=> $record['comment'],
- 'app'
=> $record['app']
- );
-
- if(!$this->file_actions)
- {
-
$set_attributes_array['content'] = $content;
- }
-
- $this->set_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'attributes' =>
$set_attributes_array
- )
- );
-
- $this->add_journal(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' =>
VFS_OPERATION_EDITED
- )
- );
- }
- else
- {
- $this->touch(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
-
- $set_attributes_array = array
- (
- 'createdby_id' =>
$account_id,
- 'created'
=> $this->now,
- 'size'
=> $size,
- 'mime_type'
=> $record['mime_type'],
- 'deleteable' =>
$record['deleteable'],
- 'comment'
=> $record['comment'],
- 'app'
=> $record['app']
- );
-
- if(!$this->file_actions)
- {
-
$set_attributes_array['content'] = $content;
- }
-
- $this->set_attributes(array(
- 'string'
=> $t->fake_full_path,
- 'relatives'
=> array($t->mask),
- 'attributes' =>
$set_attributes_array
- )
- );
- }
- $this->correct_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
- }
- else /* It's a directory */
- {
- /* First, make the initial directory */
- if($this->mkdir(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- )) === false
- )
- {
- throw new Exception('Error, it is a
directory');
- }
-
- /* Next, we create all the directories below
the initial directory */
- $ls = $this->ls(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'checksubdirs' => true,
- 'mime_type' =>
'Directory'
- )
- );
-
- while(list($num, $entry) = each($ls))
- {
- $newdir = preg_replace("/^" .
str_replace('/', '\/', $f->fake_full_path). "/", $t->fake_full_path,
$entry['directory']);
- if($this->mkdir(array(
- 'string' =>
"{$newdir}/{$entry['name']}",
- 'relatives' =>
array($t->mask)
- )) === false
- )
- {
- throw new Exception('While loop
error!');
- }
- }
-
- /* Lastly, we copy the files over */
- $ls = $this->ls(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask)
- )
- );
-
- while(list($num, $entry) = each($ls))
- {
- if($entry['mime_type'] == 'Directory')
- {
- continue;
- }
-
- $newdir = preg_replace("/^" .
str_replace('/', '\/', $f->fake_full_path). "/", $t->fake_full_path,
$entry['directory']);
-
- $this->cp(array(
- 'from' =>
"{$entry[directory]}/{$entry[name]}",
- 'to' =>
"{$newdir}/{$entry[name]}",
- 'relatives' =>
array($f->mask, $t->mask)
- )
- );
- }
- }
-
- if(!$f->outside)
- {
- $this->add_journal(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'operation' =>
VFS_OPERATION_COPIED,
- 'state_one' => NULL,
- 'state_two' =>
$t->fake_full_path
- )
- );
- }
-
- return true;
- }
- /*
- * See vfs_shared
- */
- function mv($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT,
RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
- $f = $this->path_parts(array(
- 'string' => $data['from'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- $t = $this->path_parts(array(
- 'string' => $data['to'],
- 'relatives' =>
array($data['relatives'][1])
- )
- );
- if(!$this->acl_check(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask),
- 'operation' => PHPGW_ACL_READ
- ))
- || !$this->acl_check(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask),
- 'operation' => PHPGW_ACL_DELETE
- ))
- )
- {
- return false;
- }
-
- if(!$this->acl_check(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask),
- 'operation' => PHPGW_ACL_ADD
- ))
- )
- {
- return false;
- }
-
- if($this->file_exists(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask)
- ))
- )
- {
- if(!$this->acl_check(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'operation' =>
PHPGW_ACL_EDIT
- ))
- )
- {
- return false;
- }
- }
-
- umask(000);
-
- /* We can't move directories into themselves */
- if(($this->file_type(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask)
- ) == 'Directory'))
-// && preg_match("/^{$f->fake_full_path}/",
$t->fake_full_path)
- && preg_match("/^" . str_replace('/', '\/',
$f->fake_full_path). "/", $t->fake_full_path)
- )
- {
- if(($t->fake_full_path == $f->fake_full_path)
|| substr($t->fake_full_path, strlen($f->fake_full_path), 1) == '/')
- {
- return false;
- }
- }
- if($this->file_exists(array(
- 'string' => $f->fake_full_path,
- 'relatives' => array($f->mask)
- ))
- )
- {
- /* We get the listing now, because it will
change after we update the database */
- $ls = $this->ls(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask)
- )
- );
-
- if($this->file_exists(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- ))
- )
- {
- $this->rm(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
- }
-
- /*
- We add the journal entry now, before we
delete. This way the mime_type
- field will be updated to 'journal-deleted'
when the file is actually deleted
- */
- if(!$f->outside)
- {
- $this->add_journal(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
array($f->mask),
- 'operation' =>
VFS_OPERATION_MOVED,
- 'state_one' =>
$f->fake_full_path,
- 'state_two' =>
$t->fake_full_path
- )
- );
- }
-
- /*
- If the from file is outside, it won't have a
database entry,
- so we have to touch it and find the size
- */
- if($f->outside)
- {
- $size = filesize($f->real_full_path);
- if( $size === false )
- {
- _debug_array($f);
- $size = 1;
- }
- $this->touch(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
- $query =
$GLOBALS['phpgw']->db->query("UPDATE phpgw_vfs SET size={$size}"
- . " WHERE
directory='{$t->fake_leading_dirs_clean}'"
- . " AND name='{$t->fake_name_clean}'" .
$this->extra_sql(array('query_type' => VFS_SQL_UPDATE)), __LINE__, __FILE__);
- }
- elseif(!$t->outside)
- {
- $query =
$GLOBALS['phpgw']->db->query("UPDATE phpgw_vfs SET
name='{$t->fake_name_clean}', directory='{$t->fake_leading_dirs_clean}'"
- . " WHERE
directory='{$f->fake_leading_dirs_clean}'"
- . " AND name='{$f->fake_name_clean}'" .
$this->extra_sql(array('query_type' => VFS_SQL_UPDATE)), __LINE__, __FILE__);
- }
-
- $this->set_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask),
- 'attributes' => array(
-
'modifiedby_id' => $account_id,
-
'modified' => $this->now
- )
- )
- );
-
- $this->correct_attributes(array(
- 'string' =>
$t->fake_full_path,
- 'relatives' =>
array($t->mask)
- )
- );
-
- if($this->file_actions)
- {
- $rr = $this->fileoperation->rename($f,
$t);
- }
-
- /*
- This removes the original entry from the
database
- The actual file is already deleted because
of the rename() above
- */
- if($t->outside)
- {
- $this->rm(array(
- 'string' =>
$f->fake_full_path,
- 'relatives' =>
$f->mask
- )
- );
- }
- }
- else
- {
- return false;
- }
-
- if($this->file_type(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask)
- )) == 'Directory'
- )
- {
- /* We got $ls from above, before we renamed the
directory */
- while(list($num, $entry) = each($ls))
- {
- $newdir = preg_replace("/^" .
str_replace('/', '\/', $f->fake_full_path). "/", $t->fake_full_path,
$entry['directory']);
- $newdir_clean =
$this->clean_string(array('string' => $newdir));
-
- $query =
$GLOBALS['phpgw']->db->query("UPDATE phpgw_vfs SET directory='{$newdir_clean}'"
- . " WHERE file_id='{$entry[file_id]}'"
. $this->extra_sql(array('query_type' => VFS_SQL_UPDATE)), __LINE__, __FILE__);
-
- $this->correct_attributes(array(
- 'string' =>
"{$newdir}/{$entry[name]}",
- 'relatives' =>
array($t->mask)
- )
- );
- }
- }
-
- $this->add_journal(array(
- 'string' => $t->fake_full_path,
- 'relatives' => array($t->mask),
- 'operation' => VFS_OPERATION_MOVED,
- 'state_one' => $f->fake_full_path,
- 'state_two' => $t->fake_full_path
- )
- );
-
- return true;
- }
-
- /*
- * See vfs_shared
- */
- function rm($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => PHPGW_ACL_DELETE
- ))
- )
- {
- return false;
- }
-
- if(!$this->file_exists(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- ))
- )
- {
- if($this->file_actions)
- {
- $rr = $this->fileoperation->unlink($p);
- }
- else
- {
- $rr = true;
- }
-
- if($rr)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- if($this->file_type(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )) != 'Directory'
- )
- {
- $this->add_journal(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' =>
VFS_OPERATION_DELETED
- )
- );
-
- $query = $GLOBALS['phpgw']->db->query("DELETE
FROM phpgw_vfs"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}'"
- . " AND name='{$p->fake_name_clean}'" .
$this->extra_sql(array('query_type' => VFS_SQL_DELETE)), __LINE__, __FILE__);
-
- if($this->file_actions)
- {
- $rr = $this->fileoperation->unlink($p);
- }
- else
- {
- $rr = true;
- }
-
- if($query || $rr)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- $ls = $this->ls(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- )
- );
-
- /* First, we cycle through the entries and
delete the files */
- while(list($num, $entry) = each($ls))
- {
- if($entry['mime_type'] == 'Directory')
- {
- continue;
- }
-
- $this->rm(array(
- 'string' =>
"{$entry['directory']}/{$entry['name']}",
- 'relatives' =>
array($p->mask)
- )
- );
- }
-
- /* Now we cycle through again and delete the
directories */
- reset($ls);
- while(list($num, $entry) = each($ls))
- {
- if($entry['mime_type'] != 'Directory')
- {
- continue;
- }
-
- /* Only the best in confusing recursion
*/
- $this->rm(array(
- 'string' =>
"{$entry['directory']}/{$entry['name']}",
- 'relatives' =>
array($p->mask)
- )
- );
- }
-
- /* If the directory is linked, we delete the
placeholder directory */
- $ls_array = $this->ls(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'checksubdirs' => false,
- 'mime_type' =>
false,
- 'nofiles' => true
- )
- );
- $link_info = $ls_array[0];
-
- if($link_info['link_directory'] &&
$link_info['link_name'])
- {
- $path = $this->path_parts(array(
- 'string' =>
"{$link_info['directory']}/{$link_info['name']}",
- 'relatives' =>
array($p->mask),
- 'nolinks' => true
- )
- );
-
- if($this->file_actions)
- {
-
$this->fileoperation->rmdir($path);
- }
- }
-
- /* Last, we delete the directory itself */
- $this->add_journal(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operaton' =>
VFS_OPERATION_DELETED
- )
- );
-
- $query = $GLOBALS['phpgw']->db->query("DELETE
FROM phpgw_vfs"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'" .
$this->extra_sql(array('query_type' => VFS_SQL_DELETE)), __LINE__, __FILE__);
-
- if($this->file_actions)
- {
- $this->fileoperation->rmdir($p);
- }
-
- return true;
- }
- }
-
- /*
- * See vfs_shared
- */
- function mkdir($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
- $currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => PHPGW_ACL_ADD)
- )
- )
- {
- return false;
- }
-
- /* We don't allow /'s in dir names, of course */
- if(preg_match('/\//', $p->fake_name))
- {
- return false;
- }
-
- umask(000);
-
- if($this->file_actions)
- {
-
if(!$this->fileoperation->check_target_directory($p))
- {
- $GLOBALS['phpgw']->log->error(array(
- 'text' => 'vfs::mkdir() :
missing leading directory %1 when attempting to create %2',
- 'p1' => $p->real_leading_dirs,
- 'p2' => $p->real_full_path,
- 'line' => __LINE__,
- 'file' => __FILE__
- ));
-
- return false;
- }
-
- /* Auto create home */
-
-
$this->fileoperation->auto_create_home($this->basedir);
-
- if($this->fileoperation->file_exists($p))
- {
- if(!$this->fileoperation->is_dir($p))
- {
- return false;
- }
- }
- else if(!$this->fileoperation->mkdir($p))
- {
- $GLOBALS['phpgw']->log->error(array(
- 'text' => 'vfs::mkdir() :
failed to create directory %1',
- 'p1' => $p->real_full_path,
- 'p2' => '',
- 'line' => __LINE__,
- 'file' => __FILE__
- ));
-
- return false;
- }
-
- }
-
- if(!$this->file_exists(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask)
- ))
- )
- {
- $query = $GLOBALS['phpgw']->db->query("INSERT
INTO phpgw_vfs(owner_id, name, directory)"
- . " VALUES({$this->working_id},
'{$p->fake_name_clean}', '{$p->fake_leading_dirs_clean}')", __LINE__, __FILE__);
- $this->set_attributes(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'attributes' => array(
- 'createdby_id'
=> $account_id,
- 'size'
=> 4096,
- 'mime_type'
=> 'Directory',
- 'created'
=> $this->now,
- 'deleteable'
=> 'Y',
- 'app'
=> $currentapp
- )
- )
- );
-
- $this->correct_attributes(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- )
- );
-
- $this->add_journal(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask),
- 'operation' =>
VFS_OPERATION_CREATED
- )
- );
- }
- else
- {
- return false;
- }
-
- return true;
- }
-
- /*
- * See vfs_shared
- */
- function make_link($data)
- {
- /* Does not seem to be used */
- return false;
-
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT,
RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
- $currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
-
- $vp = $this->path_parts(array(
- 'string' => $data['vdir'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- $rp = $this->path_parts(array(
- 'string' => $data['rdir'],
- 'relatives' =>
array($data['relatives'][1])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $vp->fake_full_path,
- 'relatives' => array($vp->mask),
- 'operation' => PHPGW_ACL_ADD
- ))
- )
- {
- return false;
- }
-
- if($this->file_exists(array(
- 'string' => $rp->real_full_path,
- 'relatives' => array($rp->mask)
- ))
- )
- {
- if(!$this->fileoperation->is_dir($rp))
- {
- return false;
- }
- }
- elseif(!$this->fileoperation->mkdir($rp))
- {
- return false;
- }
-
- if(!$this->mkdir(array(
- 'string' => $vp->fake_full_path,
- 'relatives' => array($vp->mask)
- ))
- )
- {
- return false;
- }
-
- //FIXME real_full_path...
- $size = $this->get_size(array(
- 'string' => $rp->real_full_path,
- 'relatives' => array($rp->mask)
- )
- );
-
- $this->set_attributes(array(
- 'string' => $vp->fake_full_path,
- 'relatives' => array($vp->mask),
- 'attributes' => array(
-
'link_directory' => $rp->real_leading_dirs,
- 'link_name' =>
$rp->real_name,
- 'size' => $size
- )
- )
- );
-
- $this->correct_attributes(array(
- 'string' => $vp->fake_full_path,
- 'relatives' => array($vp->mask)
- )
- );
-
- return true;
- }
-
- /*
- * See vfs_shared
- */
- function set_attributes($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' =>
array(RELATIVE_CURRENT),
- 'attributes' => array()
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- /*
- This is kind of trivial, given that set_attributes()
can change owner_id,
- size, etc.
- */
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => PHPGW_ACL_EDIT
- ))
- )
- {
- return false;
- }
-
- if(!$this->file_exists(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- ))
- )
- {
- return false;
- }
-
- /*
- All this voodoo just decides which attributes to
update
- depending on if the attribute was supplied in the
'attributes' array
- */
-
- $ls_array = $this->ls(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'checksubdirs' => false,
- 'nofiles' => true
- )
- );
- $record = $ls_array[0];
-
- $sql = 'UPDATE phpgw_vfs SET ';
-
- $change_attributes = 0;
- $edited_comment = false;
-
- reset($this->attributes);
- $value_set = array();
-
- foreach($this->attributes as $num => $attribute)
- {
- if(isset($data['attributes'][$attribute]))
- {
- $$attribute =
$data['attributes'][$attribute];
-
- /*
- Indicate that the EDITED_COMMENT
operation needs to be journaled,
- but only if the comment changed
- */
- if($attribute == 'comment' &&
$data['attributes'][$attribute] != $record[$attribute])
- {
- $edited_comment = true;
- }
-
- if($attribute == 'owner_id' &&
!$$attribute)
- {
- $$attribute =
$GLOBALS['phpgw_info']['user']['account_id'];
- }
-
- $$attribute =
$this->clean_string(array('string' => $$attribute));
-
- $value_set[$attribute] = $$attribute;
-
- $change_attributes++;
- }
- }
-
- if( $change_attributes )
- {
- $value_set =
$GLOBALS['phpgw']->db->validate_update($value_set);
- $sql .= " {$value_set} WHERE file_id="
.(int)$record['file_id'];
- $sql .= $this->extra_sql(array('query_type' =>
VFS_SQL_UPDATE));
-
- //echo 'sql: ' . $sql;
-
- $query = $GLOBALS['phpgw']->db->query($sql,
__LINE__, __FILE__);
- if($query)
- {
- if($edited_comment)
- {
- $this->add_journal(array(
- 'string'
=> $p->fake_full_path,
- 'relatives'
=> array($p->mask),
- 'operation'
=> VFS_OPERATION_EDITED_COMMENT
- )
- );
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- //Nothing was done, because nothing required !
- //This is a kind of bug isn't it ?
- //So I let people choose to debug here :/
- //FIXME : decide what we are doing here !
- return true;
- }
- }
-
- /*
- * See vfs_shared
- */
- function file_type($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(!$this->acl_check(array(
- 'string' => $p->fake_full_path,
- 'relatives' => array($p->mask),
- 'operation' => PHPGW_ACL_READ,
- 'must_exist' => true
- ))
- )
- {
- return false;
- }
-
- /*
- * The file is outside the virtual root
- */
- if($p->outside)
- {
- if(is_dir($p->real_full_path))
- {
- return('Directory');
- }
-
- /*
- We don't return an empty string here,
because it may still match with a database query
- because of linked directories
- */
- }
-
- /*
- We don't use ls() because it calls file_type() to
determine if it has been
- passed a directory
- */
- $db2 = clone($GLOBALS['phpgw']->db);
- $db2->query("SELECT mime_type FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}'"
- . " AND name='{$p->fake_name_clean}'"
- . $this->extra_sql(array('query_type' =>
VFS_SQL_SELECT)), __LINE__, __FILE__);
-
- $db2->next_record();
- $mime_type = $db2->f('mime_type');
-
- if(!$mime_type)
- {
- $mime_type =
$this->get_ext_mime_type(array('string' => $data['string']));
- {
- $db2->query("UPDATE phpgw_vfs SET
mime_type='{$mime_type}'"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'"
- . $this->extra_sql(array('query_type'
=> VFS_SQL_SELECT)), __LINE__, __FILE__);
- }
- }
-
- return $mime_type;
- }
-
- /*
- * See vfs_shared
- */
- function file_exists($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if($p->outside)
- {
- $rr = file_exists($p->real_full_path);
-
- return $rr;
- }
-
- $db2 = clone($GLOBALS['phpgw']->db);
- $db2->query("SELECT name FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}'"
- . " AND name='{$p->fake_name_clean}'"
- . $this->extra_sql(array('query_type' =>
VFS_SQL_SELECT)), __LINE__, __FILE__);
-
- if($db2->next_record())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /*
- * See vfs_shared
- */
- function get_size($data)
- {
- $size = parent::get_size($data);
- /*XXX Caeies : Not sure about this, but ... */
- /* If the virtual size is always 4096, we don't need
this ... */
-/* if($data['checksubdirs'])
- {
- $query = $GLOBALS['phpgw']->db->query("SELECT
size FROM phpgw_vfs WHERE directory='".$p->fake_leading_dirs_clean."' AND
name='".$p->fake_name_clean."'" . $this->extra_sql(array('query_text' =>
VFS_SQL_SELECT)));
- $GLOBALS['phpgw']->db->next_record();
- $size += $GLOBALS['phpgw']->db->Record[0];
- }
-*/
- return $size;
- }
-
- /* temporary wrapper function for not working Record function
in adodb layer(ceb)*/
- function Record()
- {
- $values = array();
- foreach($this->attributes as $attribute)
- {
- $values[$attribute] =
$GLOBALS['phpgw']->db->f($attribute);
- }
- return $values;
- }
-
- /*
- * See vfs_shared
- */
- function ls($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT),
- 'checksubdirs' => true,
- 'mime_type' => false,
- 'nofiles' => false,
- 'orderby' => 'directory'
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
- //_debug_array($data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- //_debug_array($p);
-
- $ftype = $this->file_type( array('string' =>
$p->fake_full_path, 'relatives' => array($p->mask) ) );
- /* If they pass us a file or 'nofiles' is set, return
the info for $dir only */
- if(($ftype != 'Directory' || $data['nofiles'] ) &&
!$p->outside)
- {
- /* SELECT all, the, attributes */
- $sql = 'SELECT ' . implode(', ',
$this->attributes)
- . " FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}' "
- .
$this->extra_sql(array('query_type' => VFS_SQL_SELECT));
-
- $query = $GLOBALS['phpgw']->db->query($sql,
__LINE__, __FILE__);
- if($GLOBALS['phpgw']->db->num_rows() == 0)
- {
- return array();
- }
- $GLOBALS['phpgw']->db->next_record();
- $record = $this->Record();
- //echo 'record: ' . _debug_array($record);
-
- /* We return an array of one array to maintain
the standard */
- $rarray = array();
- reset($this->attributes);
- $db2 =
clone($GLOBALS['phpgw']->db);
- while(list($num, $attribute) =
each($this->attributes))
- {
- if($attribute == 'mime_type' &&
!$record[$attribute])
- {
- $record[$attribute] =
$this->get_ext_mime_type(array(
- 'string' =>
$p->fake_name_clean
- )
- );
-
- if($record[$attribute])
- {
- $db2->query("UPDATE
phpgw_vfs SET mime_type='{$record[$attribute]}'"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'"
- .
$this->extra_sql(array('query_type' => VFS_SQL_SELECT)), __LINE__, __FILE__);
- }
- }
-
- $rarray[0][$attribute] =
$record[$attribute];
- }
-
- return $rarray;
- }
-
- //WIP - this should recurse using the same options the
virtual part of ls() does
- /* If $dir is outside the virutal root, we have to
check the file system manually */
- if($p->outside)
- {
- if($this->file_type(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array($p->mask)
- )) == 'Directory'
- && !$data['nofiles']
- )
- {
- $dir_handle =
opendir($p->real_full_path);
- while($filename = readdir($dir_handle))
- {
- if($filename == '.' ||
$filename == '..')
- {
- continue;
- }
- $rarray[] =
$this->get_real_info(array(
- 'string'
=> "{$p->real_full_path}/{$filename}",
- 'relatives'
=> array($p->mask)
- )
- );
- }
- }
- else
- {
- $rarray[] = $this->get_real_info(array(
- 'string' =>
$p->real_full_path,
- 'relatives' =>
array($p->mask)
- )
- );
- }
-
- return $rarray;
- }
-
- /* $dir's not a file, is inside the virtual root, and
they want to check subdirs */
- /* SELECT all, the, attributes FROM phpgw_vfs WHERE
file=$dir */
- $sql = 'SELECT ' . implode(',', $this->attributes);
-
- $dir_clean = $this->clean_string(array('string' =>
$p->fake_full_path));
- $sql .= " FROM phpgw_vfs WHERE directory LIKE
'{$dir_clean}%'";
- $sql .= $this->extra_sql(array('query_type' =>
VFS_SQL_SELECT));
-
- if($data['mime_type'])
- {
- $sql .= " AND mime_type='{$data['mime_type']}'";
- }
-
- $sql .= " ORDER BY {$data['orderby']}";
-
- $query = $GLOBALS['phpgw']->db->query($sql, __LINE__,
__FILE__);
-
- $rarray = array();
- while( $GLOBALS['phpgw']->db->next_record() )
- {
- $record = $this->Record();
-
- //_debug_array($record);
- /* Further checking on the directory. This
makes sure /home/user/test won't match /home/user/test22 */
- // if(address@hidden("^{$p->fake_full_path}(/|$)",
$record['directory']))
- if(!preg_match("/^" . str_replace('/', '\/',
$p->fake_full_path). "(\/|$)/", $record['directory']))
- {
- continue;
- }
-
- /* If they want only this directory, then $dir
should end without a trailing / */
-// if(!$data['checksubdirs'] &&
preg_match("/^{$p->fake_full_path}\//", $record['directory']))
- if(!$data['checksubdirs'] && preg_match("/^" .
str_replace('/', '\/', $p->fake_full_path). "\//", $record['directory']))
- {
- continue;
- }
-
- $db2 = clone($GLOBALS['phpgw']->db);
- if( isset($this->attributes['mime_type']) &&
!isset($record['mime_type']) )
- {
- $record['mime_type'] ==
$this->get_ext_mime_type(array('string' => $p->fake_name_clean));
-
- if( $record['mime_type'] )
- {
- $db2->query("UPDATE phpgw_vfs
SET mime_type='{$record[$attribute]}'"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'"
- .
$this->extra_sql(array('query_type' => VFS_SQL_SELECT)), __LINE__, __FILE__);
-
- }
- }
- $rarray[] = $record;
- }
- return $rarray;
- }
-
- /*
- * See vfs_shared
- */
- function update_real($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(file_exists($p->real_full_path))
- {
- if(is_dir($p->real_full_path))
- {
- $dir_handle =
opendir($p->real_full_path);
- while($filename = readdir($dir_handle))
- {
- if($filename == '.' ||
$filename == '..')
- {
- continue;
- }
-
- $rarray[] =
$this->get_real_info(array(
- 'string'
=> $p->fake_full_path . '/' . $filename,
- 'relatives'
=> array(RELATIVE_NONE)
- )
- );
- }
- }
- else
- {
- $rarray[] = $this->get_real_info(array(
- 'string' =>
$p->fake_full_path,
- 'relatives' =>
array(RELATIVE_NONE)
- )
- );
- }
-
- if(!is_array($rarray))
- {
- $rarray = array();
- }
-
- while(list($num, $file_array) = each($rarray))
- {
- $p2 = $this->path_parts(array(
- 'string' =>
$file_array['directory'] . '/' . $file_array['name'],
- 'relatives' =>
array(RELATIVE_NONE)
- )
- );
-
- /* Note the mime_type. This can be
"Directory", which is how we create directories */
- $set_attributes_array = array(
- 'size' => $file_array['size'],
- 'mime_type' =>
$file_array['mime_type']
- );
-
- if(!$this->file_exists(array(
- 'string' =>
$p2->fake_full_path,
- 'relatives' =>
array(RELATIVE_NONE)
- ))
- )
- {
- $this->touch(array(
- 'string'
=> $p2->fake_full_path,
- 'relatives'
=> array(RELATIVE_NONE)
- )
- );
-
- $this->set_attributes(array(
- 'string'
=> $p2->fake_full_path,
- 'relatives'
=> array(RELATIVE_NONE),
- 'attributes'
=> $set_attributes_array
- )
- );
- }
- else
- {
- $this->set_attributes(array(
- 'string'
=> $p2->fake_full_path,
- 'relatives'
=> array(RELATIVE_NONE),
- 'attributes'
=> $set_attributes_array
- )
- );
- }
- }
- }
- }
-
- /* Helper functions */
-
- /* This fetchs all available file system information for
string(not using the database) */
- function get_real_info($data)
- {
- if(!is_array($data))
- {
- $data = array();
- }
-
- $default_values = array
- (
- 'relatives' => array(RELATIVE_CURRENT)
- );
-
- $data = array_merge($this->default_values($data,
$default_values), $data);
-
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
-
- if(is_dir($p->real_full_path))
- {
- $mime_type = 'Directory';
- }
- else
- {
- $mime_type = $this->get_ext_mime_type(array(
- 'string' => $p->fake_name
- )
- );
-
- if($mime_type)
- {
- $GLOBALS['phpgw']->db->query("UPDATE
phpgw_vfs SET mime_type='{$mime_type}'"
- . " WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'"
- . $this->extra_sql(array('query_type'
=> VFS_SQL_SELECT)), __LINE__, __FILE__);
- }
- }
-
- $size = filesize($p->real_full_path);
- $rarray = array(
- 'directory' => $p->fake_leading_dirs,
- 'name' => $p->fake_name,
- 'size' => $size,
- 'mime_type' => $mime_type
- );
-
- return($rarray);
- }
- }
Modified: trunk/phpgwapi/inc/class.vfs_fileoperation_braArkiv.inc.php
===================================================================
--- trunk/phpgwapi/inc/class.vfs_fileoperation_braArkiv.inc.php 2015-03-12
23:39:27 UTC (rev 12857)
+++ trunk/phpgwapi/inc/class.vfs_fileoperation_braArkiv.inc.php 2015-03-13
13:59:50 UTC (rev 12858)
@@ -31,7 +31,7 @@
class phpgwapi_vfs_fileoperation_braArkiv
{
- private $Services;
+ public $external_ref = true;
private $secKey;
private $db;
private $meta_types = array ('journal', 'journal-deleted');
@@ -59,22 +59,25 @@
throw new Exception('braArkiv is not
configured');
}
- $options=array();
- $options['soap_version'] = SOAP_1_2;
- $options['location'] = $location_url;
- $options['uri'] = $location_url;
- $options['trace'] = false;
- $options['encoding'] = 'UTF-8';
+ $wdsl = "{$location_url}?WSDL";
+ $options = array();
- $wdsl = "{$location_url}?WSDL";
- $Services = new Services($wdsl, $options);
- $Login = new Login();
- $Login->userName = $braarkiv_user;
- $Login->password = $braarkiv_pass;
- $LoginResponse = $Services->Login($Login);
- $secKey = $LoginResponse->LoginResult;
- $this->Services = $Services;
- $this->secKey = $secKey;
+ $options[Bra5WsdlClass::WSDL_URL] = $wdsl;
+ $options[Bra5WsdlClass::WSDL_ENCODING] = 'UTF-8';
+ $options[Bra5WsdlClass::WSDL_TRACE] = false;
+ $options[Bra5WsdlClass::WSDL_SOAP_VERSION] = SOAP_1_2;
+
+ $wsdlObject = new Bra5WsdlClass($options);
+
+ $bra5ServiceLogin = new Bra5ServiceLogin();
+ if($bra5ServiceLogin->Login(new
Bra5StructLogin($braarkiv_user,$braarkiv_pass)))
+ {
+ $this->secKey =
$bra5ServiceLogin->getResult()->getLoginResult()->LoginResult;
+ }
+ else
+ {
+ throw new
Exception('vfs_fileoperation_braArkiv::Login failed');
+ }
}
@@ -130,6 +133,7 @@
{
$sql = "SELECT external_id FROM phpgw_vfs WHERE
directory='{$p->fake_leading_dirs_clean}' AND name='{$p->fake_name_clean}'"
. " AND ((mime_type != 'journal' AND mime_type
!= 'journal-deleted') OR mime_type IS NULL)";
+// _debug_array($sql);
$this->db->query($sql, __LINE__, __FILE__);
$this->db->next_record();
return $this->db->f('external_id');
@@ -158,28 +162,21 @@
if($fileid)
{
- $getAvailableFileVariants = new
getAvailableFileVariants();
- $getAvailableFileVariants->secKey =
$this->secKey;
- $getAvailableFileVariants->documentId = $fileid;
+ $bra5ServiceGet = new Bra5ServiceGet();
- $getAvailableFileVariantsResponse =
$this->Services->getAvailableFileVariants($getAvailableFileVariants);
-
- $getFileAsByteArray = new getFileAsByteArray();
- $getFileAsByteArray->secKey = $this->secKey;
- $getFileAsByteArray->documentId = $fileid;
- $getFileAsByteArray->variant =
$getAvailableFileVariantsResponse->getAvailableFileVariantsResult->string[0];
- $getFileAsByteArray->versjon = 1;
-
- $getFileAsByteArrayResponse =
$this->Services->getFileAsByteArray($getFileAsByteArray);
-
- $getFileAsByteArrayResult =
$getFileAsByteArrayResponse->getFileAsByteArrayResult;
-
- if($getFileAsByteArrayResult)
+ if($bra5ServiceGet->getFileAsByteArray(new
Bra5StructGetFileAsByteArray($this->secKey, $fileid)))
{
- $file =
base64_decode($getFileAsByteArrayResult);
+//
_debug_array($bra5ServiceGet->getResult());
+ $file_result =
$bra5ServiceGet->getResult()->getFileAsByteArrayResult;
+ $file =
base64_decode($file_result->getFileAsByteArrayResult);
}
+ else
+ {
+
_debug_array($bra5ServiceGet->getLastError());
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
}
-
+//die();
return $file;
}
@@ -188,10 +185,22 @@
* @param object $p path_parts
* @return boolean. True if copy is ok, False otherwise.
*/
- public function copy($from, $to)
+ public function copy($from, $to, $document_id = 0)
{
- $document_id = $this->touch($to);//creates the document
+/*
+ //FIXME
+ //$filesize = filesize($from->real_full_path);
+ $content = $this->read($from);
+ $document_id = $this->get_file_id($from);
+ return $this->write($to, $content,$document_id);
+*/
+
+ if(!$document_id)
+ {
+ $document_id = $this->get_file_id($from);
+ }
+
$filesize = filesize($from->real_full_path);
$content = false;
if( $filesize > 0 && $fp =
fopen($from->real_full_path, 'rb'))
@@ -202,6 +211,7 @@
return $this->write($to, $content,$document_id);
+
}
/**
@@ -216,54 +226,41 @@
{
$fileid = $this->get_file_id($to); //this
represent the document
}
-/*
- $putFileAsByteArray = new putFileAsByteArray();
- $putFileAsByteArray->secKey = $this->secKey;
- $putFileAsByteArray->documentId = $fileid;
- $putFileAsByteArray->filename = $to->fake_name_clean;
- $putFileAsByteArray->file = base64_encode($content);
- $putFileAsByteArrayResponse =
$this->Services->putFileAsByteArray($putFileAsByteArray);
-*/
- $fileTransferSendChunkedInit = new
fileTransferSendChunkedInit();
- $fileTransferSendChunkedInit->secKey = $this->secKey;
- $fileTransferSendChunkedInit->docid = $fileid;
- $fileTransferSendChunkedInit->filename =
$to->fake_name_clean;
- $fileTransferSendChunkedInitResponse =
$this->Services->fileTransferSendChunkedInit($fileTransferSendChunkedInit);
- $transaction_id =
$fileTransferSendChunkedInitResponse->fileTransferSendChunkedInitResult;
-// _debug_array($transaction_id);die();
+ $bra5ServiceFile = new Bra5ServiceFile();
+ if($bra5ServiceFile->fileTransferSendChunkedInit(new
Bra5StructFileTransferSendChunkedInit($this->secKey, $fileid,
$to->fake_name_clean)))
+ {
+ $transaction_id =
$bra5ServiceFile->getResult()->getfileTransferSendChunkedInitResult()->fileTransferSendChunkedInitResult;
+ }
+ else
+ {
+ _debug_array($bra5ServiceFile->getLastError());
+ die();
+ }
+
$new_string =
chunk_split(base64_encode($content),1048576);// Definerer en
bufferstørrelse/pakkestørrelse på ca 1mb.
$content_arr = explode('\r\n', $new_string);
foreach($content_arr as $content_part)
{
- $fileTransferSendChunk = new
fileTransferSendChunk();
- $fileTransferSendChunk->secKey = $this->secKey;
- $fileTransferSendChunk->fileid =
$transaction_id; //internal transcation id - not the file/document id
- $fileTransferSendChunk->chunk = $content_part;
-
-
$this->Services->fileTransferSendChunk($fileTransferSendChunk);
+ $bra5ServiceFile->fileTransferSendChunk(new
Bra5StructFileTransferSendChunk($this->secKey, $transaction_id, $content_part));
}
+
- $fileTransferSendChunkedEnd = new
fileTransferSendChunkedEnd();
- $fileTransferSendChunkedEnd->secKey = $this->secKey;
- $fileTransferSendChunkedEnd->fileid = $transaction_id;
+ $ok =
!!$bra5ServiceFile->fileTransferSendChunkedEnd(new
Bra5StructFileTransferSendChunkedEnd($this->secKey, $transaction_id));
+/*
+ _debug_array($bra5ServiceFile->getResult());
+*/
+// die();
- try
+ if ( !$ok )
{
- $fileTransferSendChunkedEndResponse =
$this->Services->fileTransferSendChunkedEnd($fileTransferSendChunkedEnd);
+ _debug_array($bra5ServiceFile->getLastError());
}
- catch(Exception $e)
- {
- if ( $e )
- {
- throw $e;
- }
- }
-
- return true;
+// _debug_array($fileid);
+ return $ok;
}
@@ -278,103 +275,198 @@
if($check_document[$p>real_full_path])
{
- return true;
+ return $check_document[$p>real_full_path];
}
- $check_document[$p>real_full_path] = true;
/*
$bt = debug_backtrace();
echo "<b>db::{$bt[0]['function']} Called from file:
{$bt[0]['file']} line: {$bt[0]['line']}</b><br/>";
unset($bt);
*/
- $document = new Document();
- $document->BBRegTime = date('Y-m-d');
- $document->BaseClassName = "Eiendomsarkiver";
- $document->ClassName = "Byggesak";
+/*
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVLONGTEXT
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVINT
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVFLOAT
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVDATE
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVMATRIKKEL
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVADDRESS
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVPAIR
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVBOOLEAN
+ * @uses Bra5EnumBraArkivAttributeType::VALUE_UNKNOWN
+*/
+/*
+- * @param boolean $_bFDoubleSided
+- * @param boolean $_bFSeparateKeySheet
+- * @param boolean $_classified
+- * @param int $_priority
+ * @param int $_productionLineID
+ * @param int $_docSplitTypeID
+ * @param Bra5StructArrayOfAttribute $_attributes
+ * @param string $_iD
+ * @param string $_bFDocKey
+ * @param string $_bFNoSheets
+ * @param string $_bBRegTime
+ * @param string $_name
+ * @param string $_className
+ * @param string $_baseClassName
+
+*/
+ $document = new Bra5StructDocument();
+ $document->setBFDoubleSided(false);
+ $document->setBFSeparateKeySheet(false);
+ $document->setClassified(false);
+ $document->setPriority(0);
+ $document->setProductionLineID(1);
+// $document->setDocSplitTypeID(0);
+// $document->setID('');
+// $document->setBFDocKey('');
+// $document->setBFNoSheets('');
+ $document->setBBRegTime(date('Y-m-d'));
+// $document->setName('');
+ $document->setClassName("Byggesak");
+ $document->setBaseClassName("Eiendomsarkiver");
+
$attributter = array();
- $att1 = new Attribute();
- $att1->AttribType = 'braArkivDate';
- $att1->Name = "Saksdato";
-// $att1->Value = array(date('Y-m-d'));
- $att1->Value = date('Y-m-d');
+ $att0 = new Bra5StructAttribute();
+ $att0->setUsesLookupValues(false);
+
$att0->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVADDRESS);
+ $att0->setName("Adresse");
+ // $att0->setValue(new Bra5StructArrayOfAnyType());
+ $_gate = 'Lønborglien'; $_nummer = 285; $_bokstav =
NULL;
+ $att0->setValue(new Bra5StructArrayOfAnyType(new
Bra5StructAddress($_gate, $_nummer, $_bokstav)));
+ $attributter[] = $att0;
+
+
+ $att1 = new Bra5StructAttribute();
+ $att1->setUsesLookupValues(true);
+
$att1->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att1->setName("Sakstype");
+// $att1->setValue(new Bra5StructArrayOfAnyType(100));
+ $att1->setValue(array('100'));
$attributter[] = $att1;
- $att2 = new Attribute();
- $att2->AttribType = 'braArkivString';
- $att2->Name = "Tiltakstype";
- $att2->Value = array("Testtittel");
- $att2->Value = "Tiltakstype";
+ $att2 = new Bra5StructAttribute();
+ $att2->setUsesLookupValues(false);
+
$att2->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att2->setName("ASTA_Signatur");
+ $att2->setValue(new
Bra5StructArrayOfAnyType("BBA/A-0430/H/Ha/L1002"));
$attributter[] = $att2;
- $att3 = new Attribute();
- $att3->AttribType = 'braArkivString';
- $att3->Name = "Tiltaksart";
-// $att3->Value = array("Testtittel");
- $att3->Value = 'Tiltaksart';
+ $att3 = new Bra5StructAttribute();
+ $att3->setUsesLookupValues(false);
+
$att3->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVMATRIKKEL);
+ $att3->setName("Eiendom");
+ $_gNr = 164;
+ $_bNr = 1401;
+ $_fNr = 0;
+ $_sNr = 0;
+ $att3->setValue(new Bra5StructArrayOfAnyType(new
Bra5StructMatrikkel($_gNr, $_bNr, $_fNr, $_sNr)));
$attributter[] = $att3;
- $att4 = new Attribute();
- $att4->AttribType = 'braArkivString';
- $att4->Name = "ASTA_Signatur";
- $att4->Value = array("1");
- $att4->Value = "ASTA_Signatur";
+ $att4 = new Bra5StructAttribute();
+ $att4->setUsesLookupValues(false);
+
$att4->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att4->setName("Byggnr");
+ // $att4->setValue(new
Bra5StructArrayOfAnyType(array('139276655')));
+ $att4->setValue(array('139276655'));
+
+ //$att4->setValue("139276655");
$attributter[] = $att4;
- $att5 = new Attribute();
- $att5->AttribType = 'braArkivDate';
- $att5->Name = "Dokumentdato";
-// $att5->Value = array(date('Y-m-d'));
- $att5->Value = date('Y-m-d');
+ $att5 = new Bra5StructAttribute();
+ $att5->setUsesLookupValues(false);
+
$att5->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att5->setName("Saksnr");
+ $att5->setValue(array(1));
+
$attributter[] = $att5;
-
- $att6 = new Attribute();
- $att6->AttribType = 'braArkivString';
- $att6->Name = "BrukerID";
-// $att6->Value = array("1");
- $att6->Value = "BrukerID";
+/*
+ $att6 = new Bra5StructAttribute();
+ $att6->setUsesLookupValues(false);
+
$att6->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVDATE);
+ $att6->setName("Saksdato");
+ $att6->setValue(array(date('Y-m-d')));
$attributter[] = $att6;
- $att7 = new Attribute();
- $att7->AttribType = 'braArkivString';
- $att7->Name = "Team";
-// $att7->Value = array("Testtittel");
- $att7->Value = "Team";
+ $att7 = new Bra5StructAttribute();
+ $att7->setUsesLookupValues(false);
+
$att7->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVDATE);
+ $att7->setName("Dokumentdato");
+ $att7->setValue(array(date('Y-m-d')));
$attributter[] = $att7;
-
- $att8 = new Attribute();
- $att8->AttribType = 'braArkivString';
- $att8->Name = "Sakstype";
-// $att8->Value = array("Testtittel");
- $att8->Value = "Sakstype";
+*/
+ $att8 = new Bra5StructAttribute();
+ $att8->setUsesLookupValues(true);
+
$att8->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att8->setName("Tiltakstype");
+ $att8->setValue( array('BOL3'));
$attributter[] = $att8;
- $att9 = new Attribute();
- $att9->AttribType = 'braArkivString';
- $att9->Name = "Dokumentkategori";
-// $att9->Value = array("Testtittel");
- $att9->Value = "Dokumentkategori";
+ $att9 = new Bra5StructAttribute();
+ $att9->setUsesLookupValues(true);
+
$att9->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att9->setName("Tiltaksart");
+ $att9->setValue(array('10'));
$attributter[] = $att9;
- $att10 = new Attribute();
- $att10->AttribType = 'braArkivString';
- $att10->Name = "Dokumentstatus";
- $att10->Value = array("Testtittel");
- $att10->Value = "Dokumentstatus";
+ $att10 = new Bra5StructAttribute();
+ $att10->setUsesLookupValues(true);
+
$att10->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att10->setName("Dokumentstatus");
+ $att10->setValue( array('Gjeldende'));
$attributter[] = $att10;
-
- $document->Attributes = $attributter;
- $createDocument = new createDocument();
- $createDocument->secKey = $this->secKey;
- $createDocument->assignDocKey = 0;
- $createDocument->doc = $document;
+ $att11 = new Bra5StructAttribute();
+ $att11->setUsesLookupValues(true);
+
$att11->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att11->setName("Dokumentkategori");
+ $att11->setValue(array('Søknad'));
+ $attributter[] = $att11;
-//_debug_array($createDocument);//die();
+ $att12 = new Bra5StructAttribute();
+ $att12->setUsesLookupValues(true);
+
$att12->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att12->setName("Merknad");
+ $att12->setValue( array(''));
+ $attributter[] = $att12;
+/*
+ $att13 = new Bra5StructAttribute();
+ $att13->setUsesLookupValues(true);
+
$att13->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVINT);
+ $att13->setName("BrukerID");
+ $att13->setValue(array(13));
+ $attributter[] = $att13;
+*/
+ $att14 = new Bra5StructAttribute();
+ $att14->setUsesLookupValues(true);
+
$att14->setAttribType(Bra5EnumBraArkivAttributeType::VALUE_BRAARKIVSTRING);
+ $att14->setName("Gradering");
+ $att14->setValue(array(''));
+ $attributter[] = $att14;
- $createDocumentResponse =
$this->Services->createDocument($createDocument);
- $document_id =
$createDocumentResponse->createDocumentResult->ID;
+ $document->setAttributes($attributter);
+
+ $bra5ServiceCreate = new Bra5ServiceCreate();
+ $bra5ServiceCreateDocument = new
Bra5StructCreateDocument($_assignDocKey = false, $this->secKey, $document);
+// _debug_array($bra5ServiceCreateDocument);
+// die();
+
if($bra5ServiceCreate->createDocument($bra5ServiceCreateDocument))
+ {
+// _debug_array($bra5ServiceCreate->getResult());
+ }
+ else
+ {
+
_debug_array($bra5ServiceCreate->getLastError());
+ }
+
+ $document_id =
$bra5ServiceCreate->getResult()->getCreateDocumentResult()->getcreateDocumentResult()->ID;
+ $check_document[$p>real_full_path] = $document_id;
+
+// _debug_array($document_id);
+//die();
return $document_id;
}
@@ -389,39 +481,25 @@
public function rename($from, $to)
{
$fileid = $this->get_file_id($from);
+
+ $bra5ServiceGet = new Bra5ServiceGet();
+ $bra5ServiceGet->getDocument(new
Bra5StructGetDocument($this->secKey, $fileid));
+ $document =
$bra5ServiceGet->getResult()->getGetDocumentResult();
- $getDocument = new getDocument();
- $getDocument->secKey = $this->secKey;
- $getDocument->documentId = $fileid;
- $getDocumentResponse =
$this->Services->getDocument($getDocument);
-
- $document = $getDocumentResponse->getDocumentResult;
-
foreach($document->Attributes as & $Attribute)
{
- if($Attribute->Name == 'Tittel')
+ if($Attribute->getName() == 'Tittel')
{
- $Attribute->Value =
$to->fake_name_clean;
+
$Attribute->setValue(array($to->fake_name_clean));
}
}
- $updateDocument = new $updateDocument();
- $updateDocument->secKey = $this->secKey;
- $updateDocument->document = $document;
-
- try
+ $bra5ServiceUpdate = new Bra5ServiceUpdate();
+ $ok = false;
+ if(!$ok = $bra5ServiceUpdate->updateDocument(new
Bra5StructUpdateDocument($this->secKey, $document)))
{
- $updateDocumentResponse =
$this->Services->updateDocument($getDocument);
+ _debug_array($bra5ServiceUpdate->getResult());
}
-
- catch(Exception $e)
- {
- if ( $e )
- {
- throw $e;
- }
- }
-
- return true;
+ return $ok;
}
/**
@@ -432,24 +510,13 @@
public function unlink($p)
{
$fileid = $this->get_file_id($p);
- $deleteDocument = new deleteDocument();
- $deleteDocument->secKey = $this->secKey;
- $deleteDocument->documentId = $fileid;
- try
+ $bra5ServiceDelete = new bra5ServiceDelete();
+
+ if($bra5ServiceDelete->deleteDocument(new
Bra5StructDeleteDocument($this->secKey,$fileid)))
{
- $deleteDocumentResponse =
$this->Services->deleteDocument($deleteDocument);
+ return true;
}
-
- catch(Exception $e)
- {
- if ( $e )
- {
- throw $e;
- }
- }
-
- return true;
}
@@ -461,19 +528,14 @@
public function file_exists($p)
{
$fileid = $this->get_file_id($p);
+
if($fileid)
{
- $getAvailableFileVariants = new
getAvailableFileVariants();
- $getAvailableFileVariants->secKey =
$this->secKey;
- $getAvailableFileVariants->documentId = $fileid;
-
- $getAvailableFileVariantsResponse =
$this->Services->getAvailableFileVariants($getAvailableFileVariants);
+ $bra5ServiceGet = new Bra5ServiceGet();
+ return
!!$bra5ServiceGet->getFileAsByteArray(new
Bra5StructGetFileAsByteArray($this->secKey, $fileid));
}
-
- return
!!$getAvailableFileVariantsResponse->getAvailableFileVariantsResult->string[0];
}
-
/**
* Removes directory
* Does not apply to braArkiv
Modified: trunk/phpgwapi/inc/class.vfs_sql.inc.php
===================================================================
--- trunk/phpgwapi/inc/class.vfs_sql.inc.php 2015-03-12 23:39:27 UTC (rev
12857)
+++ trunk/phpgwapi/inc/class.vfs_sql.inc.php 2015-03-13 13:59:50 UTC (rev
12858)
@@ -871,7 +871,7 @@
If 'string' doesn't exist, touch() creates both the
file and the database entry
If 'string' does exist, touch() sets the
modification time and modified by
*/
- $this->touch(array(
+ $_document_id = $this->touch(array(
'string' => $p->fake_full_path,
'relatives' => array($p->mask)
)
@@ -887,8 +887,12 @@
if($this->file_actions)
{
$set_attributes_array = array(
- 'size' =>
strlen($data['content']),
+ 'size' =>
strlen($data['content'])
);
+
if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+
$set_attributes_array['external_id'] = $_document_id;
+ }
}
else
{
@@ -927,7 +931,7 @@
/*
* See vfs_shared
*/
- function touch($data)
+ function touch($data,$p = array())
{
if(!is_array($data))
{
@@ -944,11 +948,14 @@
$account_id =
$GLOBALS['phpgw_info']['user']['account_id'];
$currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
- $p = $this->path_parts(array(
- 'string' => $data['string'],
- 'relatives' =>
array($data['relatives'][0])
- )
- );
+ if(!$p)
+ {
+ $p = $this->path_parts(array(
+ 'string' =>
$data['string'],
+ 'relatives' =>
array($data['relatives'][0])
+ )
+ );
+ }
umask(000);
@@ -1008,9 +1015,24 @@
return false;
}
- $query = $GLOBALS['phpgw']->db->query("INSERT
INTO phpgw_vfs (owner_id, directory, name)"
- . "
VALUES({$this->working_id},'{$p->fake_leading_dirs_clean}',
'{$p->fake_name_clean}')", __LINE__, __FILE__);
+ $value_set = array
+ (
+ 'owner_id' => $this->working_id,
+ 'directory' =>
$p->fake_leading_dirs_clean,
+ 'name' => $p->fake_name_clean
+ );
+ if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+ $value_set['external_id'] = $rr;
+ }
+
+ $cols = implode(',', array_keys($value_set));
+ $values =
$GLOBALS['phpgw']->db->validate_insert(array_values($value_set));
+ $sql = "INSERT INTO phpgw_vfs ({$cols}) VALUES
({$values})";
+
+ $query = $GLOBALS['phpgw']->db->query($sql,
__LINE__, __FILE__);
+
$this->set_attributes(array(
'string' =>
$p->fake_full_path,
'relatives' =>
array($p->mask),
@@ -1039,6 +1061,10 @@
if($rr || $vr || $query)
{
+ if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+ return $rr;
+ }
return true;
}
else
@@ -1146,8 +1172,14 @@
{
if($this->file_actions)
{
- if(!$this->fileoperation->copy($f, $t))
+// if(!$this->fileoperation->touch($data,
$t) && !$this->fileoperation->copy($f, $t))
+
if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
{
+ $_document_id =
$this->fileoperation->touch($data, $t);
+ }
+
+ if(!$this->fileoperation->copy($f, $t,
$_document_id))
+ {
return false;
}
@@ -1223,7 +1255,7 @@
}
else
{
- $this->touch(array(
+ $_document_id = $this->touch(array(
'string' =>
$t->fake_full_path,
'relatives' =>
array($t->mask)
)
@@ -1240,6 +1272,11 @@
'app' =>
$record['app']
);
+
if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+
$set_attributes_array['external_id'] = $_document_id;
+ }
+
if(!$this->file_actions)
{
$set_attributes_array['content'] = $content;
@@ -1492,7 +1529,7 @@
}
else
{
- $this->touch(array(
+ $_document_id = $this->touch(array(
'string' =>
$t->fake_full_path,
'relatives' =>
array($t->mask)
)
@@ -1509,6 +1546,11 @@
'app'
=> $record['app']
);
+
if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+
$set_attributes_array['external_id'] = $_document_id;
+ }
+
if(!$this->file_actions)
{
$set_attributes_array['content'] = $content;
@@ -1741,7 +1783,7 @@
_debug_array($f);
$size = 1;
}
- $this->touch(array(
+ $_document_id = $this->touch(array(
'string' =>
$t->fake_full_path,
'relatives' =>
array($t->mask)
)
@@ -1762,7 +1804,8 @@
'relatives' =>
array($t->mask),
'attributes' => array(
'modifiedby_id' => $account_id,
-
'modified' => $this->now
+
'modified' => $this->now,
+
'external_id' => isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref ? $_document_id : false
)
)
);
@@ -2762,12 +2805,17 @@
))
)
{
- $this->touch(array(
+ $_document_id =
$this->touch(array(
'string'
=> $p2->fake_full_path,
'relatives'
=> array(RELATIVE_NONE)
)
);
+
if(isset($this->fileoperation->external_ref) &&
$this->fileoperation->external_ref)
+ {
+
$set_attributes_array['external_id'] = $_document_id;
+ }
+
$this->set_attributes(array(
'string'
=> $p2->fake_full_path,
'relatives'
=> array(RELATIVE_NONE),
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [12858] api: update integration with external filesystem,
Sigurd Nes <=