if (@mkdir($GO_CONFIG->file_storage_path.$user_id."/".$file_id,0700) && @copy($file,$GO_CONFIG->file_storage_path.$user_id."/".$file_id."/".$version_id))
{
return file_id;
}else
{
$sql = "DELETE FROM fbFiles WHERE id = '$file_id'";
$this->query($sql);
$sql = "DELETE FROM fbVersions WHERE file_id = '$file_id'";
$this->query($sql);
return -1;
}
}
}else
{
return -1;
}
}
function add_version($file, $filesize, $file_id, $user_id)
{
$sql = "SELECT user_id FROM fbFiles WHERE id='$file_id'";
$this->query($sql);
$this->next_record();
$owner_id = $this->f("user_id");
if ($owner_id != "")
{
global $GO_CONFIG;
$version_id = $this->nextid("fbVersions");
if ($version_id > 0)
{
$sql = "INSERT INTO fbVersions (id, file_id, size, time, user_id) ";
$sql = "DELETE FROM fbVersions WHERE id='$version_id'";
$this->query($sql);
return -1;
}
}else
{
$sql = "DELETE FROM fbVersions WHERE id='$version_id'";
$this->query($sql);
return -1;
}
}
}else
{
return -1;
}
}else
{
return -1;
}
}
function file_exists($folder_id, $filename)
{
$sql = "SELECT id FROM fbFiles WHERE name='$filename' AND folder_id='$folder_id'";
$this->query($sql);
if ($this->num_rows() > 0)
{
$this->next_record();
return $this->f("id");
}else
{
return false;
}
}
function get_all_files($folder_id)
{
$sql = "SELECT fbFiles.*, filetypes.friendly AS type, fbVersions.size, fbVersions.time ";
$sql .= "FROM fbFiles LEFT JOIN fbVersions ON (fbFiles.latest_version_id = fbVersions.id) ";
$sql .= "LEFT JOIN filetypes ON (fbFiles.filetype_id = filetypes.id) WHERE fbFiles.folder_id = '$folder_id'";
$this->query($sql);
}
function get_authorized_files($user_id, $folder_id, $sort = "name", $direction = "ASC")
{
//get the users groups
$sql = "SELECT group_id FROM users_groups WHERE user_id='$user_id'";
$this->query($sql);
if ($this->next_record())
{
$groups = $this->Record["group_id"];
}
//After the first group has been added put a ',' after each group.
while ($this->next_record())
{
$groups .= ",".$this->Record["group_id"];
}
//if user is not in groups don't check if the acl is permitted to one of his groups.
if ($groups == "")
{
$sql = "SELECT DISTINCT fbFiles.*, filetypes.friendly AS type, filetypes.type AS content, fbVersions.size, fbVersions.time, fbVersions.id as version_id ";
$sql .= "FROM fbFiles LEFT JOIN fbVersions ON (fbFiles.latest_version_id = fbVersions.id) ";
$sql .= "LEFT JOIN filetypes ON (fbFiles.filetype_id = filetypes.id) ";
$sql .= "LEFT JOIN acl ON (fbFiles.acl_read=acl.acl_id OR fbFiles.acl_write=acl.acl_id) ";
$sql .= "WHERE fbFiles.folder_id = '$folder_id' AND ((acl.user_id='$user_id') OR fbFiles.user_id='$user_id') ";
$sql .= "GROUP BY fbFiles.name ORDER BY ".$sort." ".$direction;
}else
{
$sql = "SELECT DISTINCT fbFiles.*, filetypes.friendly AS type, filetypes.type AS content, fbVersions.size, fbVersions.time, fbVersions.id as version_id ";
$sql .= "FROM fbFiles LEFT JOIN fbVersions ON (fbFiles.latest_version_id = fbVersions.id) ";
$sql .= "LEFT JOIN filetypes ON (fbFiles.filetype_id = filetypes.id) ";
$sql .= "LEFT JOIN acl ON (fbFiles.acl_read=acl.acl_id OR fbFiles.acl_write=acl.acl_id) ";
$sql .= "WHERE fbFiles.folder_id = '$folder_id' AND ((acl.user_id='$user_id') OR (acl.group_id IN($groups)) ";
$sql .= "OR fbFiles.user_id='$user_id') GROUP BY fbFiles.name ORDER BY ".$sort." ".$direction;
}
$this->query($sql);
return $this->num_rows();
}
function get_file_properties($file_id, $include_username = false)
{
if ($include_username)
{
$sql = "SELECT fbFiles.*,users.username,filetypes.friendly FROM fbFiles,users,filetypes ";
$sql .= "WHERE fbFiles.id='$file_id' AND fbFiles.user_id=users.id AND filetypes.id=fbFiles.filetype_id";
}else
{
$sql = "SELECT fbFiles.*,filetypes.friendly FROM fbFiles,filetypes WHERE fbFiles.id='$file_id' AND fbFiles.filetype_id=filetypes.id";
}
$this->query($sql);
if ($this->num_rows() > 0)
{
$this->next_record();
return $this->Record;
}else
{
return false;
}
}
function update_file($file_id,$name, $versions)
{
$sql = "UPDATE fbFiles SET name='$name', versions='$versions' WHERE id='$file_id'";
$this->query($sql);
}
function get_file($version_id)
{
$sql = "SELECT fbVersions.*, filetypes.type, fbFiles.user_id AS file_user_id, fbFiles.name, fbFiles.latest_version_id FROM fbVersions LEFT JOIN fbFiles ON fbVersions.file_id=fbFiles.id ";
$sql .= "LEFT JOIN filetypes ON fbFiles.filetype_id=filetypes.id WHERE fbVersions.id='$version_id'";
$this->query($sql);
$this->query($sql);
if ($this->num_rows() > 0)
{
$this->next_record();
return $this->Record;
}else
{
return false;
}
}
function delete_file($file_id)
{
$sql = "SELECT acl_write, acl_read, user_id FROM fbFiles WHERE id='$file_id'";
$this->query($sql);
$this->next_record();
$user_id = $this->f("user_id");
global $GO_SECURITY;
$GO_SECURITY->delete_acl($this->f("acl_read"));
$GO_SECURITY->delete_acl($this->f("acl_write"));
$sql = "DELETE FROM fbVersions WHERE file_id='$file_id'";