diff --git a/apps/files_sharing/ajax/togglesharewitheveryone.php b/apps/files_sharing/ajax/togglesharewitheveryone.php new file mode 100644 index 0000000000000000000000000000000000000000..dc1105f2f3cc8be63ecebd08f95cbc3f3891d006 --- /dev/null +++ b/apps/files_sharing/ajax/togglesharewitheveryone.php @@ -0,0 +1,9 @@ +<?php + +OCP\JSON::checkAppEnabled('files_sharing'); +OCP\JSON::checkAdminUser(); +if ($_POST['allowSharingWithEveryone'] == true) { + OCP\Config::setAppValue('files_sharing', 'allowSharingWithEveryone', 'yes'); +} else { + OCP\Config::setAppValue('files_sharing', 'allowSharingWithEveryone', 'no'); +} \ No newline at end of file diff --git a/apps/files_sharing/ajax/userautocomplete.php b/apps/files_sharing/ajax/userautocomplete.php index 0e1bf6d588ec75f653c0f278b24cdefafc55db7d..23865693a1bb4e9ef34a988ac0c6a0a189eff03a 100644 --- a/apps/files_sharing/ajax/userautocomplete.php +++ b/apps/files_sharing/ajax/userautocomplete.php @@ -6,24 +6,37 @@ OCP\JSON::checkAppEnabled('files_sharing'); $users = array(); $groups = array(); $self = OCP\USER::getUser(); -$userGroups = OC_Group::getUserGroups($self); $users[] = "<optgroup label='Users'>"; $groups[] = "<optgroup label='Groups'>"; -foreach ($userGroups as $group) { - $groupUsers = OC_Group::usersInGroup($group); - $userCount = 0; - foreach ($groupUsers as $user) { - if ($user != $self) { +if(OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no') == 'yes') { + $allGroups = OC_Group::getGroups(); + foreach($allGroups as $group) { + $groups[] = "<option value='".$group."(group)'>".$group." (group) </option>"; + } + $allUsers = OC_User::getUsers(); + foreach($allUsers as $user) { + if($user != $self) { $users[] = "<option value='".$user."'>".$user."</option>"; - $userCount++; - } + } } - // Don't include the group if only the current user is a member of it - if ($userCount > 0) { - $groups[] = "<option value='".$group."(group)'>".$group." (group) </option>"; +} else { + $userGroups = OC_Group::getUserGroups($self); + foreach ($userGroups as $group) { + $groupUsers = OC_Group::usersInGroup($group); + $userCount = 0; + foreach ($groupUsers as $user) { + if ($user != $self) { + $users[] = "<option value='".$user."'>".$user."</option>"; + $userCount++; + } + } + // Don't include the group if only the current user is a member of it + if ($userCount > 0) { + $groups[] = "<option value='".$group."(group)'>".$group." (group) </option>"; + } } + $users = array_unique($users); } -$users = array_unique($users); $users[] = "</optgroup>"; $groups[] = "</optgroup>"; $users = array_merge($users, $groups); diff --git a/apps/files_sharing/js/settings.js b/apps/files_sharing/js/settings.js index bb7d79fecbb24a2de090c0424c6a183b15018f97..c276521b7b50f2375ee9f7c429932aa0b2dda157 100644 --- a/apps/files_sharing/js/settings.js +++ b/apps/files_sharing/js/settings.js @@ -6,4 +6,11 @@ $(document).ready(function() { } $.post(OC.filePath('files_sharing','ajax','toggleresharing.php'), 'resharing='+checked); }); + $('#allowSharingWithEveryone').bind('change', function() { + var checked = 1; + if (!this.checked) { + checked = 0; + } + $.post(OC.filePath('files_sharing','ajax','togglesharewitheveryone.php'), 'allowSharingWithEveryone='+checked); + }); }); \ No newline at end of file diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php index 31170f07fd1251d81cbac77a946272d01c849747..c0d0a1f18b95c0b1991c7baf9b64d8923a2df9f9 100644 --- a/apps/files_sharing/lib_share.php +++ b/apps/files_sharing/lib_share.php @@ -21,7 +21,7 @@ */ /** - * This class manages shared items within the database. + * This class manages shared items within the database. */ class OC_Share { @@ -31,7 +31,7 @@ class OC_Share { const PUBLICLINK = "public"; private $token; - + /** * Share an item, adds an entry into the database * @param $source The source location of the item @@ -56,17 +56,22 @@ class OC_Share { // Remove the owner from the list of users in the group $uid_shared_with = array_diff($uid_shared_with, array($uid_owner)); } else if (OCP\User::userExists($uid_shared_with)) { - $userGroups = OC_Group::getUserGroups($uid_owner); - // Check if the user is in one of the owner's groups - foreach ($userGroups as $group) { - if ($inGroup = OC_Group::inGroup($uid_shared_with, $group)) { - $gid = null; - $uid_shared_with = array($uid_shared_with); - break; + if(OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no') == 'yes') { + $gid = null; + $uid_shared_with = array($uid_shared_with); + } else { + $userGroups = OC_Group::getUserGroups($uid_owner); + // Check if the user is in one of the owner's groups + foreach ($userGroups as $group) { + if ($inGroup = OC_Group::inGroup($uid_shared_with, $group)) { + $gid = null; + $uid_shared_with = array($uid_shared_with); + break; + } + } + if (!$inGroup) { + throw new Exception("You can't share with ".$uid_shared_with); } - } - if (!$inGroup) { - throw new Exception("You can't share with ".$uid_shared_with); } } else { throw new Exception($uid_shared_with." is not a user"); @@ -379,7 +384,7 @@ class OC_Share { * You must use the pullOutOfFolder() function to change the target location of a file inside a shared folder if the target location differs from the folder * * @param $oldTarget The current target location - * @param $newTarget The new target location + * @param $newTarget The new target location */ public static function setTarget($oldTarget, $newTarget) { $oldTarget = self::cleanPath($oldTarget); diff --git a/apps/files_sharing/settings.php b/apps/files_sharing/settings.php index 7b63a26515a312749b4cd8c560a36e93b18bf7ea..fcae7e0370f14a8334c38bcafa67bdf1806e1007 100644 --- a/apps/files_sharing/settings.php +++ b/apps/files_sharing/settings.php @@ -4,6 +4,7 @@ OCP\User::checkAdminUser(); OCP\Util::addscript('files_sharing', 'settings'); $tmpl = new OCP\Template('files_sharing', 'settings'); $tmpl->assign('allowResharing', OCP\Config::getAppValue('files_sharing', 'resharing', 'yes')); +$tmpl->assign('allowSharingWithEveryone', OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no')); return $tmpl->fetchPage(); ?> \ No newline at end of file diff --git a/apps/files_sharing/templates/settings.php b/apps/files_sharing/templates/settings.php index 5b6ba5f33ee1d0766e7da1adfdaf0ff640602a42..533a5c0c0c8612ee0e2a689176588a397dc8a1c0 100644 --- a/apps/files_sharing/templates/settings.php +++ b/apps/files_sharing/templates/settings.php @@ -1,6 +1,8 @@ <form id="resharing"> <fieldset class="personalblock"> - <input type="checkbox" name="allowResharing" id="allowResharing" value="1" <?php if ($_['allowResharing'] == 'yes') echo ' checked="checked"'; ?> /> <label for="allowResharing"><?php echo $l->t('Enable Resharing'); ?></label> <br/> - <em><?php echo $l->t('Allow users to reshare files they don\'t own');?></em> + <p><input type="checkbox" name="allowResharing" id="allowResharing" value="1" <?php if ($_['allowResharing'] == 'yes') echo ' checked="checked"'; ?> /> <label for="allowResharing"><?php echo $l->t('Enable Resharing'); ?></label> <br/> + <em><?php echo $l->t('Allow users to reshare files they don\'t own');?></em></p> + <p><input type="checkbox" name="allowSharingWithEveryone" id="allowSharingWithEveryone" value="1" <?php if ($_['allowSharingWithEveryone'] == 'yes') echo ' checked="checked"'; ?> /> <label for="allowSharingWithEveryone"><?php echo $l->t('Enable sharing with everyone'); ?></label> <br/> + <em><?php echo $l->t('Allow users to share files with everyone');?></em></p> </fieldset> </form> \ No newline at end of file