diff --git a/.htaccess b/.htaccess
index 92825ea92d..1812482675 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,5 +1,7 @@
ErrorDocument 404 //owncloud/core/templates/404.php
-php_value upload_max_filesize 512M
-php_value post_max_size 512M
-SetEnv htaccessWorking true
+
+ php_value upload_max_filesize 512M
+ php_value post_max_size 512M
+ SetEnv htaccessWorking true
+
Options -Indexes
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 771d91b93b..c175142319 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -1,9 +1,11 @@
"string"));
+OC::$CLASSPATH['OC_Share'] = "apps/files_sharing/lib_share.php";
+OC_Hook::connect("OC_Filesystem", "post_delete", "OC_Share", "deleteItem");
+OC_Hook::connect("OC_Filesystem", "post_rename", "OC_Share", "renameItem");
+OC_Filesystem::registerStorageType("shared", "OC_Filestorage_Shared", array("datadir" => "string"));
OC_Util::addScript("files_sharing", "share");
OC_Util::addScript("3rdparty", "chosen/chosen.jquery.min");
OC_Util::addStyle( 'files_sharing', 'sharing' );
diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php
index df704c131e..dd73a20051 100644
--- a/apps/files_sharing/lib_share.php
+++ b/apps/files_sharing/lib_share.php
@@ -20,9 +20,6 @@
*
*/
-OC_Hook::connect("OC_FILESYSTEM","post_delete", "OC_Share", "deleteItem");
-OC_Hook::connect("OC_FILESYSTEM","post_rename", "OC_Share", "renameItem");
-
/**
* This class manages shared items within the database.
*/
@@ -177,6 +174,7 @@ class OC_Share {
$query = OC_DB::prepare("SELECT uid_shared_with, permissions FROM *PREFIX*sharing WHERE source = ? AND uid_owner = ?");
return $query->execute(array($source, OC_User::getUser()))->fetchAll();
}
+
/**
* Get all items the current user is sharing
* @return An array with all items the user is sharing
@@ -185,7 +183,7 @@ class OC_Share {
$query = OC_DB::prepare("SELECT uid_shared_with, source, permissions FROM *PREFIX*sharing WHERE uid_owner = ?");
return $query->execute(array(OC_User::getUser()))->fetchAll();
}
-
+
/**
* Get the items within a shared folder that have their own entry for the purpose of name, location, or permissions that differ from the folder itself
*
@@ -204,7 +202,7 @@ class OC_Share {
$query = OC_DB::prepare("SELECT uid_owner, source, target, permissions FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? OR SUBSTR(target, 1, ?) = ? AND uid_shared_with ".self::getUsersAndGroups());
return $query->execute(array($length, $folder, $length, $folder))->fetchAll();
}
-
+
/**
* Get the source and target parent folders of the specified target location
* @param $target The target location of the item
@@ -301,18 +299,6 @@ class OC_Share {
}
}
- /**
- * Set the source location to a new value
- * @param $oldSource The current source location
- * @param $newTarget The new source location
- */
- public static function setSource($oldSource, $newSource) {
- $oldSource = self::cleanPath($oldSource);
- $newSource = self::cleanPath($newSource);
- $query = OC_DB::prepare("UPDATE *PREFIX*sharing SET source = REPLACE(source, ?, ?) WHERE uid_owner = ?");
- $query->execute(array($oldSource, $newSource, OC_User::getUser()));
- }
-
/**
* Set the target location to a new value
*
@@ -327,7 +313,7 @@ class OC_Share {
$query = OC_DB::prepare("UPDATE *PREFIX*sharing SET target = REPLACE(target, ?, ?) WHERE uid_shared_with ".self::getUsersAndGroups());
$query->execute(array($oldTarget, $newTarget));
}
-
+
/**
* Change the permissions for the specified item and user
*
@@ -342,7 +328,7 @@ class OC_Share {
$query = OC_DB::prepare("UPDATE *PREFIX*sharing SET permissions = ? WHERE SUBSTR(source, 1, ?) = ? AND uid_owner = ? AND uid_shared_with ".self::getUsersAndGroups($uid_shared_with));
$query->execute(array($permissions, strlen($source), $source, OC_User::getUser()));
}
-
+
/**
* Unshare the item, removes it from all specified users
*
@@ -356,13 +342,14 @@ class OC_Share {
$query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? AND uid_owner = ? AND uid_shared_with ".self::getUsersAndGroups($uid_shared_with));
$query->execute(array(strlen($source), $source, OC_User::getUser()));
}
-
+
/**
* Unshare the item from the current user, removes it only from the database and doesn't touch the source file
*
- * You must use the pullOutOfFolder() function to unshare a file inside a shared folder and set $newTarget to nothing
+ * You must use the pullOutOfFolder() function before you call unshareFromMySelf() and set the delete parameter to false to unshare from self a file inside a shared folder
*
* @param $target The target location of the item
+ * @param $delete (Optional) If true delete the entry from the database, if false the permission is set to UNSHARED
*/
public static function unshareFromMySelf($target, $delete = true) {
$target = self::cleanPath($target);
@@ -377,25 +364,23 @@ class OC_Share {
/**
* Remove the item from the database, the owner deleted the file
- * @param $arguments Array of arguments passed from OC_HOOK
+ * @param $arguments Array of arguments passed from OC_Hook
*/
public static function deleteItem($arguments) {
- $source = "/".OC_User::getUser()."/files".$arguments['path'];
- $source = self::cleanPath($source);
+ $source = "/".OC_User::getUser()."/files".self::cleanPath($arguments['path']);
$query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? AND uid_owner = ?");
$query->execute(array(strlen($source), $source, OC_User::getUser()));
}
/**
* Rename the item in the database, the owner renamed the file
- * @param $arguments Array of arguments passed from OC_HOOK
+ * @param $arguments Array of arguments passed from OC_Hook
*/
public static function renameItem($arguments) {
- $oldSource = "/".OC_User::getUser()."/files".$arguments['oldpath'];
- $oldSource = self::cleanPath($oldSource);
- $newSource = "/".OC_User::getUser()."/files".$arguments['newpath'];
- $newSource = self::cleanPath($newSource);
- self::setSource($oldSource, $newSource);
+ $oldSource = "/".OC_User::getUser()."/files".self::cleanPath($arguments['oldpath']);
+ $newSource = "/".OC_User::getUser()."/files".self::cleanPath($arguments['newpath']);
+ $query = OC_DB::prepare("UPDATE *PREFIX*sharing SET source = REPLACE(source, ?, ?) WHERE uid_owner = ?");
+ $query->execute(array($oldSource, $newSource, OC_User::getUser()));
}
}
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index 48fc59aac3..53f25b60e9 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -79,37 +79,37 @@ class OC_Filestorage_Shared extends OC_Filestorage {
public function opendir($path) {
if ($path == "" || $path == "/") {
- global $FAKEDIRS;
$path = $this->datadir.$path;
$sharedItems = OC_Share::getItemsInFolder($path);
if (empty($sharedItems)) {
return false;
- }
- $files = array();
- foreach ($sharedItems as $item) {
- // If item is in the root of the shared storage provider add it to the fakedirs
- if (dirname($item['target'])."/" == $path) {
- $files[] = basename($item['target']);
+ } else {
+ global $FAKEDIRS;
+ $files = array();
+ foreach ($sharedItems as $item) {
+ // If item is in the root of the shared storage provider and the item exists add it to the fakedirs
+ if (dirname($item['target'])."/" == $path && $this->file_exists(basename($item['target']))) {
+ $files[] = basename($item['target']);
+ }
}
+ $FAKEDIRS['shared'] = $files;
+ return opendir('fakedir://shared');
}
- $FAKEDIRS['shared'] = $files;
- return opendir('fakedir://shared');
} else {
$source = $this->getSource($path);
if ($source) {
$storage = OC_Filesystem::getStorage($source);
$dh = $storage->opendir($this->getInternalPath($source));
- // Remove any duplicate or trailing '/'
- $path = rtrim($this->datadir.$path, "/");
- $path = preg_replace('{(/)\1+}', "/", $path);
$modifiedItems = OC_Share::getItemsInFolder($source);
if ($modifiedItems && $dh) {
- global $FAKEDIRS;
$sources = array();
$targets = array();
+ // Remove any duplicate or trailing '/'
+ $path = preg_replace('{(/)\1+}', "/", $path);
+ $targetFolder = rtrim($this->datadir.$path, "/");
foreach ($modifiedItems as $item) {
- // If the item is in the current directory and has a different name than the source, add it to the arrays
- if (dirname($item['target']) == $path) {
+ // If the item is in the current directory and the item exists add it to the arrays
+ if (dirname($item['target']) == $targetFolder && $this->file_exists($path."/".basename($item['target']))) {
// If the item was unshared from self, add it it to the arrays
if ($item['permissions'] == OC_Share::UNSHARED) {
$sources[] = basename($item['source']);
@@ -124,6 +124,7 @@ class OC_Filestorage_Shared extends OC_Filestorage {
if (empty($sources)) {
return $dh;
} else {
+ global $FAKEDIRS;
$files = array();
while (($filename = readdir($dh)) !== false) {
if ($filename != "." && $filename != "..") {
diff --git a/lib/setup.php b/lib/setup.php
index 8386846358..9f31b47c0e 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -273,12 +273,14 @@ class OC_Setup {
* create .htaccess files for apache hosts
*/
private static function createHtaccess() {
- global $SERVERROOT;
- global $WEBROOT;
+ $SERVERROOT=OC::$SERVERROOT;
+ $WEBROOT=OC::$WEBROOT;
$content = "ErrorDocument 404 /$WEBROOT/core/templates/404.php\n";//custom 404 error page
- $content.= "php_value upload_max_filesize 20M\n";//upload limit
- $content.= "php_value post_max_size 20M\n";
- $content.= "SetEnv htaccessWorking true\n";
+ $content.= '';
+ $content.= 'php_value upload_max_filesize 512M';//upload limit
+ $content.= 'php_value post_max_size 512M';
+ $content.= 'SetEnv htaccessWorking true';
+ $content.= '';
$content.= "Options -Indexes\n";
@file_put_contents($SERVERROOT.'/.htaccess', $content); //supress errors in case we don't have permissions for it