. * */ /** * This class manages shared items within the database. */ class OC_SHARE { /** * TODO notify user a file is being shared with them? * Share an item, adds an entry into the database * @param string $item * @param user item shared with $uid_shared_with */ public function __construct($item, $uid_shared_with, $public = false) { if ($item && OC_FILESYSTEM::file_exists($item) && OC_FILESYSTEM::is_readable($item)) { $uid_owner = $_SESSION['user_id']; if ($public) { // TODO create token for public file $token = sha1("$uid_owner-$item"); } else { $query = OC_DB::prepare("INSERT INTO *PREFIX*sharing VALUES(?,?,?,?)"); foreach ($uid_shared_with as $uid) { $query->execute(array($uid_owner, $uid, $item)); } } } } /** * TODO complete lib_permissions * Change the permissions of the specified item * @param permissions $permissions */ public static function setPermissions($item, $uid_shared_with, $permissions) { $query = OC_DB::prepare("UPDATE *PREFIX*sharing SET permissions = ? WHERE item = ? AND uid_shared_with = ? AND uid_owner = ?"); $query->execute(array($permissions, $item, $uid_shared_with, $_SESSION['user_id'])); } /** * Get the permissions for the specified item * @param unknown_type $item */ public static function getPermissions($item, $uid_shared_with) { $query = OC_DB::prepare("SELECT permissions FROM *PREFIX*sharing WHERE item = ? AND uid_shared_with = ? AND uid_owner = ? "); return $query->execute(array($item, $uid_shared_with, $_SESSION['user_id']))->fetchAll(); } /** * Unshare the item, removes it from all users specified * @param array $uid_shared_with */ public static function unshare($item, $uid_shared_with) { $query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE item = ? AND uid_shared_with = ? AND uid_owner = ?"); foreach ($uid_shared_with as $uid) { $query->execute(array($item, $uid, $_SESSION['user_id'])); } } /** * Get the source location of the target item * @param $target * @return source path */ public static function getSource($target) { $query = OC_DB::prepare("SELECT source FROM *PREFIX*sharing WHERE target = ? AND uid_shared_with = ? LIMIT 1"); $result = $query->execute(array($target, $_SESSION['user_id']))->fetchAll(); if (count($result) > 0) { return $result[0]['source']; } else { // Check if the parent directory of this target is shared $parentDir = dirname($target); if ($parentDir != ".") { $result = OC_SHARE::getSource($parentDir); if ($result) { return $result."/".basename($target); } else { return false; } } else { return false; } } } /** * Set the target location to a new value * @param $oldTarget The current target location * @param $newTarget The new target location */ public static function setTarget($oldTarget, $newTarget) { $query = OC_DB::prepare("UPDATE *PREFIX*sharing SET target = ? WHERE target = ? AND uid_shared_with = ?"); $query->execute(array($newTarget, $oldTarget, $_SESSION['user_id'])); } /** * Get all items the user is sharing * @return array */ public static function getSharedItems() { $query = OC_DB::prepare("SELECT * FROM *PREFIX*sharing WHERE uid_owner = ?"); return $query->execute(array($_SESSION['user_id']))->fetchAll(); } /** * Get all items shared with the user * @return array */ public static function getItemsSharedWith() { $query = OC_DB::prepare("SELECT * FROM *PREFIX*sharing WHERE uid_shared_with = ?"); return $query->execute(array($_SESSION['user_id']))->fetchAll(); } } ?>