Initial merging of files_sharing and files_publiclink

This commit is contained in:
Michael Gapczynski 2011-08-16 20:21:18 -04:00
parent 9c3a836044
commit 582dca4d91
2 changed files with 64 additions and 49 deletions

View file

@ -136,23 +136,29 @@ $(document).ready(function() {
$('#makelink').live('change', function() {
if (this.checked) {
var data = 'path='+$('#dropdown').data('file')+'&expire=0';
var source = $('#dropdown').data('file');
var uid_shared_with = "public";
var permissions = 0;
var data = 'sources='+encodeURIComponent(source)+'&uid_shared_with='+encodeURIComponent(uid_shared_with)+'&permissions='+encodeURIComponent(permissions);
$.ajax({
type: 'GET',
url: OC.linkTo('files_publiclink','ajax/makelink.php'),
type: 'POST',
url: OC.linkTo('files_sharing','ajax/share.php'),
cache: false,
data: data,
success: function(token) {
if (token) {
success: function(result) {
if (result !== 'false') {
var token = 1234;
showPublicLink(token);
}
}
});
} else {
var data = 'token='+$('#link').data('token');
var source = $('#dropdown').data('file');
var uid_shared_with = "public";
var data = 'source='+encodeURIComponent(source)+'&uid_shared_with='+encodeURIComponent(uid_shared_with);
$.ajax({
type: 'GET',
url: OC.linkTo('files_publiclink','ajax/deletelink.php'),
url: OC.linkTo('files_sharing','ajax/unshare.php'),
cache: false,
data: data,
success: function(){
@ -207,11 +213,11 @@ function createDropdown(filename, files) {
});
}
});
$.getJSON(OC.linkTo('files_publiclink', 'ajax/getlink.php'), { path: files }, function(token) {
if (token) {
showPublicLink(token);
}
});
// $.getJSON(OC.linkTo('files_publiclink', 'ajax/getlink.php'), { path: files }, function(token) {
// if (token) {
// showPublicLink(token);
// }
// });
$('#dropdown').show('blind');
$('#share_with').chosen();
}

View file

@ -30,6 +30,9 @@ class OC_Share {
const WRITE = 1;
const DELETE = 2;
const PUBLICLINK = "public";
private $token;
/**
* Share an item, adds an entry into the database
@ -39,48 +42,54 @@ class OC_Share {
*/
public function __construct($source, $uid_shared_with, $permissions) {
$uid_owner = OC_User::getUser();
if (OC_Group::groupExists($uid_shared_with)) {
$gid = $uid_shared_with;
$uid_shared_with = OC_Group::usersInGroup($gid);
// Remove the owner from the list of users in the group
$uid_shared_with = array_diff($uid_shared_with, array($uid_owner));
} else if (OC_User::userExists($uid_shared_with)) {
$gid = null;
$uid_shared_with = array($uid_shared_with);
$query = OC_DB::prepare("INSERT INTO *PREFIX*sharing VALUES(?,?,?,?,?)");
if ($uid_shared_with == self::PUBLICLINK) {
$token = sha1("$uid_shared_with-$source");
$query->execute(array($uid_owner, self::PUBLICLINK, $source, $token, $permissions));
$this->token = $token;
} else {
throw new Exception($uid_shared_with." is not a user");
}
foreach ($uid_shared_with as $uid) {
// Check if this item is already shared with the user
$checkSource = OC_DB::prepare("SELECT source FROM *PREFIX*sharing WHERE source = ? AND uid_shared_with ".self::getUsersAndGroups($uid));
$resultCheckSource = $checkSource->execute(array($source, $uid))->fetchAll();
// TODO Check if the source is inside a folder
if (count($resultCheckSource) > 0 && !isset($gid)) {
throw new Exception("This item is already shared with ".$uid);
if (OC_Group::groupExists($uid_shared_with)) {
$gid = $uid_shared_with;
$uid_shared_with = OC_Group::usersInGroup($gid);
// Remove the owner from the list of users in the group
$uid_shared_with = array_diff($uid_shared_with, array($uid_owner));
} else if (OC_User::userExists($uid_shared_with)) {
$gid = null;
$uid_shared_with = array($uid_shared_with);
} else {
throw new Exception($uid_shared_with." is not a user");
}
// Check if the target already exists for the user, if it does append a number to the name
$target = "/".$uid."/files/Shared/".basename($source);
if (self::getSource($target)) {
if ($pos = strrpos($target, ".")) {
$name = substr($target, 0, $pos);
$ext = substr($target, $pos);
} else {
$name = $target;
$ext = "";
foreach ($uid_shared_with as $uid) {
// Check if this item is already shared with the user
$checkSource = OC_DB::prepare("SELECT source FROM *PREFIX*sharing WHERE source = ? AND uid_shared_with ".self::getUsersAndGroups($uid));
$resultCheckSource = $checkSource->execute(array($source, $uid))->fetchAll();
// TODO Check if the source is inside a folder
if (count($resultCheckSource) > 0 && !isset($gid)) {
throw new Exception("This item is already shared with ".$uid);
}
$counter = 1;
while ($checkTarget !== false) {
$newTarget = $name."_".$counter.$ext;
$checkTarget = self::getSource($newTarget);
$counter++;
// Check if the target already exists for the user, if it does append a number to the name
$target = "/".$uid."/files/Shared/".basename($source);
if (self::getSource($target)) {
if ($pos = strrpos($target, ".")) {
$name = substr($target, 0, $pos);
$ext = substr($target, $pos);
} else {
$name = $target;
$ext = "";
}
$counter = 1;
while ($checkTarget !== false) {
$newTarget = $name."_".$counter.$ext;
$checkTarget = self::getSource($newTarget);
$counter++;
}
$target = $newTarget;
}
$target = $newTarget;
if (isset($gid)) {
$uid = $uid."@".$gid;
}
$query->execute(array($uid_owner, $uid, $source, $target, $permissions));
}
if (isset($gid)) {
$uid = $uid."@".$gid;
}
$query = OC_DB::prepare("INSERT INTO *PREFIX*sharing VALUES(?,?,?,?,?)");
$query->execute(array($uid_owner, $uid, $source, $target, $permissions));
}
}