2014-07-03 11:19:14 +00:00
/* global escapeHTML */
/ * *
* @ namespace
* /
2012-05-05 18:56:52 +00:00
OC . Share = {
2012-06-25 23:27:57 +00:00
SHARE _TYPE _USER : 0 ,
SHARE _TYPE _GROUP : 1 ,
2012-08-28 00:05:51 +00:00
SHARE _TYPE _LINK : 3 ,
2012-07-31 14:18:26 +00:00
SHARE _TYPE _EMAIL : 4 ,
2014-12-04 18:51:04 +00:00
SHARE _TYPE _REMOTE : 6 ,
2014-07-03 11:19:14 +00:00
/ * *
* Regular expression for splitting parts of remote share owners :
* "user@example.com/path/to/owncloud"
* " user @ anotherexample . com @ example . com / path / to / owncloud
* /
2015-05-16 12:22:10 +00:00
_REMOTE _OWNER _REGEXP : new RegExp ( "^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$" ) ,
2014-07-03 11:19:14 +00:00
2014-06-04 08:37:04 +00:00
/ * *
* @ deprecated use OC . Share . currentShares instead
* /
2012-07-31 17:06:32 +00:00
itemShares : [ ] ,
2014-06-04 08:37:04 +00:00
/ * *
* Full list of all share statuses
* /
2013-10-17 09:59:13 +00:00
statuses : { } ,
2014-06-04 08:37:04 +00:00
/ * *
* Shares for the currently selected file .
* ( for which the dropdown is open )
*
* Key is item type and value is an array or
* shares of the given item type .
* /
currentShares : { } ,
/ * *
* Whether the share dropdown is opened .
* /
2012-08-08 21:50:09 +00:00
droppedDown : false ,
2013-10-17 09:59:13 +00:00
/ * *
2014-03-01 01:46:27 +00:00
* Loads ALL share statuses from server , stores them in
* OC . Share . statuses then calls OC . Share . updateIcons ( ) to update the
* files "Share" icon to "Shared" according to their share status and
* share type .
2014-05-19 13:20:44 +00:00
*
2014-07-01 19:32:04 +00:00
* If a callback is specified , the update step is skipped .
*
2014-05-19 13:20:44 +00:00
* @ param itemType item type
* @ param fileList file list instance , defaults to OCA . Files . App . fileList
2014-07-01 19:32:04 +00:00
* @ param callback function to call after the shares were loaded
2013-10-17 09:59:13 +00:00
* /
2014-07-01 19:32:04 +00:00
loadIcons : function ( itemType , fileList , callback ) {
2012-06-24 23:16:50 +00:00
// Load all share icons
2014-03-01 01:46:27 +00:00
$ . get (
OC . filePath ( 'core' , 'ajax' , 'share.php' ) ,
{
fetch : 'getItemsSharedStatuses' ,
itemType : itemType
} , function ( result ) {
if ( result && result . status === 'success' ) {
OC . Share . statuses = { } ;
$ . each ( result . data , function ( item , data ) {
OC . Share . statuses [ item ] = data ;
} ) ;
2014-07-01 19:32:04 +00:00
if ( _ . isFunction ( callback ) ) {
callback ( OC . Share . statuses ) ;
} else {
OC . Share . updateIcons ( itemType , fileList ) ;
}
2014-03-01 01:46:27 +00:00
}
2013-10-17 09:59:13 +00:00
}
2014-03-01 01:46:27 +00:00
) ;
2013-10-17 09:59:13 +00:00
} ,
/ * *
* Updates the files ' "Share" icons according to the known
* sharing states stored in OC . Share . statuses .
* ( not reloaded from server )
2014-05-19 13:20:44 +00:00
*
* @ param itemType item type
2014-05-21 10:54:34 +00:00
* @ param fileList file list instance
2014-05-19 13:20:44 +00:00
* defaults to OCA . Files . App . fileList
2013-10-17 09:59:13 +00:00
* /
2014-05-19 13:20:44 +00:00
updateIcons : function ( itemType , fileList ) {
2013-10-17 12:39:20 +00:00
var item ;
2014-05-28 14:34:00 +00:00
var $fileList ;
var currentDir ;
if ( ! fileList && OCA . Files ) {
fileList = OCA . Files . App . fileList ;
}
// fileList is usually only defined in the files app
if ( fileList ) {
$fileList = fileList . $fileList ;
currentDir = fileList . getCurrentDirectory ( ) ;
}
2014-06-02 15:23:52 +00:00
// TODO: iterating over the files might be more efficient
2013-10-17 09:59:13 +00:00
for ( item in OC . Share . statuses ) {
2014-06-02 13:59:06 +00:00
var image = OC . imagePath ( 'core' , 'actions/share' ) ;
2013-10-17 09:59:13 +00:00
var data = OC . Share . statuses [ item ] ;
2014-05-21 10:54:34 +00:00
var hasLink = data . link ;
2013-10-17 09:59:13 +00:00
// Links override shared in terms of icon display
if ( hasLink ) {
2014-05-21 10:54:34 +00:00
image = OC . imagePath ( 'core' , 'actions/public' ) ;
2013-10-17 09:59:13 +00:00
}
2014-05-21 10:54:34 +00:00
if ( itemType !== 'file' && itemType !== 'folder' ) {
2014-05-28 16:39:29 +00:00
$ ( 'a.share[data-item="' + item + '"]' ) . css ( 'background' , 'url(' + image + ') no-repeat center' ) ;
2013-10-17 09:59:13 +00:00
} else {
2014-05-28 16:39:29 +00:00
// TODO: ultimately this part should be moved to files_sharing app
2014-05-19 13:20:44 +00:00
var file = $fileList . find ( 'tr[data-id="' + item + '"]' ) ;
2014-05-28 10:13:55 +00:00
var shareFolder = OC . imagePath ( 'core' , 'filetypes/folder-shared' ) ;
var img ;
2013-10-17 09:59:13 +00:00
if ( file . length > 0 ) {
2014-06-02 15:23:52 +00:00
this . markFileAsShared ( file , true , hasLink ) ;
2013-10-17 09:59:13 +00:00
} else {
2014-05-21 10:54:34 +00:00
var dir = currentDir ;
2013-10-17 09:59:13 +00:00
if ( dir . length > 1 ) {
var last = '' ;
var path = dir ;
// Search for possible parent folders that are shared
while ( path != last ) {
2014-05-21 10:54:34 +00:00
if ( path === data . path && ! data . link ) {
2014-05-19 13:20:44 +00:00
var actions = $fileList . find ( '.fileactions .action[data-action="Share"]' ) ;
2014-05-28 10:13:55 +00:00
var files = $fileList . find ( '.filename' ) ;
var i ;
for ( i = 0 ; i < actions . length ; i ++ ) {
2014-05-28 16:39:29 +00:00
// TODO: use this.markFileAsShared()
2014-05-28 10:13:55 +00:00
img = $ ( actions [ i ] ) . find ( 'img' ) ;
2014-05-21 10:54:34 +00:00
if ( img . attr ( 'src' ) !== OC . imagePath ( 'core' , 'actions/public' ) ) {
2013-10-17 09:59:13 +00:00
img . attr ( 'src' , image ) ;
2014-05-28 10:13:55 +00:00
$ ( actions [ i ] ) . addClass ( 'permanent' ) ;
2015-08-26 08:27:55 +00:00
$ ( actions [ i ] ) . html ( '<span> ' + t ( 'core' , 'Shared' ) + '</span>' ) . prepend ( img ) ;
2014-05-28 10:13:55 +00:00
}
}
for ( i = 0 ; i < files . length ; i ++ ) {
if ( $ ( files [ i ] ) . closest ( 'tr' ) . data ( 'type' ) === 'dir' ) {
2014-12-11 16:36:14 +00:00
$ ( files [ i ] ) . find ( '.thumbnail' ) . css ( 'background-image' , 'url(' + shareFolder + ')' ) ;
2012-10-28 20:01:50 +00:00
}
2014-05-28 10:13:55 +00:00
}
2012-10-28 20:01:50 +00:00
}
2013-10-17 09:59:13 +00:00
last = path ;
path = OC . Share . dirname ( path ) ;
2012-06-24 23:16:50 +00:00
}
2012-05-05 18:56:52 +00:00
}
2013-10-17 09:59:13 +00:00
}
2012-05-05 18:56:52 +00:00
}
2013-10-17 09:59:13 +00:00
}
2012-05-05 18:56:52 +00:00
} ,
2012-08-24 19:32:06 +00:00
updateIcon : function ( itemType , itemSource ) {
var shares = false ;
2012-09-19 05:44:15 +00:00
var link = false ;
var image = OC . imagePath ( 'core' , 'actions/share' ) ;
2012-08-24 19:32:06 +00:00
$ . each ( OC . Share . itemShares , function ( index ) {
2012-09-19 05:44:15 +00:00
if ( OC . Share . itemShares [ index ] ) {
if ( index == OC . Share . SHARE _TYPE _LINK ) {
if ( OC . Share . itemShares [ index ] == true ) {
shares = true ;
image = OC . imagePath ( 'core' , 'actions/public' ) ;
link = true ;
return ;
}
} else if ( OC . Share . itemShares [ index ] . length > 0 ) {
shares = true ;
2014-06-02 13:59:06 +00:00
image = OC . imagePath ( 'core' , 'actions/share' ) ;
2012-09-19 05:44:15 +00:00
}
2012-08-24 19:32:06 +00:00
}
} ) ;
2012-09-19 05:44:15 +00:00
if ( itemType != 'file' && itemType != 'folder' ) {
$ ( 'a.share[data-item="' + itemSource + '"]' ) . css ( 'background' , 'url(' + image + ') no-repeat center' ) ;
2013-01-26 18:25:15 +00:00
} else {
2014-05-28 16:39:29 +00:00
var $tr = $ ( 'tr' ) . filterAttr ( 'data-id' , String ( itemSource ) ) ;
if ( $tr . length > 0 ) {
2014-06-02 15:23:52 +00:00
// it might happen that multiple lists exist in the DOM
// with the same id
$tr . each ( function ( ) {
OC . Share . markFileAsShared ( $ ( this ) , shares , link ) ;
2014-05-21 10:54:34 +00:00
} ) ;
2013-01-26 18:25:15 +00:00
}
2012-09-19 05:44:15 +00:00
}
2012-08-24 19:32:06 +00:00
if ( shares ) {
2013-07-22 18:02:56 +00:00
OC . Share . statuses [ itemSource ] = OC . Share . statuses [ itemSource ] || { } ;
2013-03-08 03:30:12 +00:00
OC . Share . statuses [ itemSource ] [ 'link' ] = link ;
2012-08-24 19:32:06 +00:00
} else {
delete OC . Share . statuses [ itemSource ] ;
}
} ,
2014-07-03 11:19:14 +00:00
/ * *
2015-05-16 12:22:10 +00:00
* Format a remote address
2014-07-03 11:19:14 +00:00
*
2015-05-16 12:22:10 +00:00
* @ param { String } remoteAddress full remote share
* @ return { String } HTML code to display
2014-07-03 11:19:14 +00:00
* /
2015-05-16 12:22:10 +00:00
_formatRemoteShare : function ( remoteAddress ) {
var parts = this . _REMOTE _OWNER _REGEXP . exec ( remoteAddress ) ;
2014-07-03 11:19:14 +00:00
if ( ! parts ) {
// display as is, most likely to be a simple owner name
2015-05-16 12:22:10 +00:00
return escapeHTML ( remoteAddress ) ;
2014-07-03 11:19:14 +00:00
}
var userName = parts [ 1 ] ;
var userDomain = parts [ 3 ] ;
var server = parts [ 4 ] ;
2015-05-16 12:22:10 +00:00
var dir = parts [ 6 ] ;
2014-07-03 11:19:14 +00:00
var tooltip = userName ;
if ( userDomain ) {
tooltip += '@' + userDomain ;
}
if ( server ) {
2015-01-27 10:06:18 +00:00
if ( ! userDomain ) {
userDomain = '…' ;
}
2014-07-03 11:19:14 +00:00
tooltip += '@' + server ;
}
2015-05-16 12:22:10 +00:00
var html = '<span class="remoteAddress" title="' + escapeHTML ( tooltip ) + '">' ;
2014-07-03 11:19:14 +00:00
html += '<span class="username">' + escapeHTML ( userName ) + '</span>' ;
if ( userDomain ) {
html += '<span class="userDomain">@' + escapeHTML ( userDomain ) + '</span>' ;
}
html += '</span>' ;
2014-07-11 13:16:26 +00:00
return html ;
2014-07-03 11:19:14 +00:00
} ,
2015-05-16 12:22:10 +00:00
/ * *
2015-08-25 12:45:39 +00:00
* Loop over all recipients in the list and format them using
2015-05-16 12:22:10 +00:00
* all kind of fancy magic .
*
* @ param { String [ ] } recipients array of all the recipients
* @ return { String [ ] } modified list of recipients
* /
_formatShareList : function ( recipients ) {
var _parent = this ;
return $ . map ( recipients , function ( recipient ) {
recipient = _parent . _formatRemoteShare ( recipient ) ;
return recipient ;
} ) ;
} ,
2014-05-28 16:39:29 +00:00
/ * *
2014-06-02 15:23:52 +00:00
* Marks / unmarks a given file as shared by changing its action icon
* and folder icon .
2014-05-28 16:39:29 +00:00
*
* @ param $tr file element to mark as shared
2014-06-02 15:23:52 +00:00
* @ param hasShares whether shares are available
* @ param hasLink whether link share is available
2014-05-28 16:39:29 +00:00
* /
2014-06-02 15:23:52 +00:00
markFileAsShared : function ( $tr , hasShares , hasLink ) {
2014-05-28 16:39:29 +00:00
var action = $tr . find ( '.fileactions .action[data-action="Share"]' ) ;
var type = $tr . data ( 'type' ) ;
var img = action . find ( 'img' ) ;
var message ;
var recipients ;
2014-06-03 09:04:57 +00:00
var owner = $tr . attr ( 'data-share-owner' ) ;
2014-05-28 16:39:29 +00:00
var shareFolderIcon ;
2014-06-02 15:23:52 +00:00
var image = OC . imagePath ( 'core' , 'actions/share' ) ;
2015-08-25 12:45:39 +00:00
action . removeClass ( 'shared-style' ) ;
2014-06-02 15:23:52 +00:00
// update folder icon
2014-08-15 14:19:50 +00:00
if ( type === 'dir' && ( hasShares || hasLink || owner ) ) {
2014-06-02 15:23:52 +00:00
if ( hasLink ) {
shareFolderIcon = OC . imagePath ( 'core' , 'filetypes/folder-public' ) ;
}
else {
shareFolderIcon = OC . imagePath ( 'core' , 'filetypes/folder-shared' ) ;
}
2014-12-11 16:36:14 +00:00
$tr . find ( '.filename .thumbnail' ) . css ( 'background-image' , 'url(' + shareFolderIcon + ')' ) ;
2014-05-28 16:39:29 +00:00
} else if ( type === 'dir' ) {
shareFolderIcon = OC . imagePath ( 'core' , 'filetypes/folder' ) ;
2014-12-11 16:36:14 +00:00
$tr . find ( '.filename .thumbnail' ) . css ( 'background-image' , 'url(' + shareFolderIcon + ')' ) ;
2014-05-28 16:39:29 +00:00
}
2014-06-02 15:23:52 +00:00
// update share action text / icon
2014-06-03 09:04:57 +00:00
if ( hasShares || owner ) {
2014-05-28 16:39:29 +00:00
recipients = $tr . attr ( 'data-share-recipients' ) ;
2015-08-25 12:45:39 +00:00
action . addClass ( 'shared-style' ) ;
2014-05-28 16:39:29 +00:00
message = t ( 'core' , 'Shared' ) ;
2014-06-03 09:04:57 +00:00
// even if reshared, only show "Shared by"
if ( owner ) {
2015-05-16 12:22:10 +00:00
message = this . _formatRemoteShare ( owner ) ;
2014-05-28 16:39:29 +00:00
}
2014-06-03 09:04:57 +00:00
else if ( recipients ) {
2015-05-16 12:22:10 +00:00
message = t ( 'core' , 'Shared with {recipients}' , { recipients : this . _formatShareList ( recipients . split ( ", " ) ) . join ( ", " ) } , 0 , { escape : false } ) ;
2014-05-28 16:39:29 +00:00
}
2015-08-26 08:27:55 +00:00
action . html ( '<span> ' + message + '</span>' ) . prepend ( img ) ;
2015-05-16 12:22:10 +00:00
if ( owner || recipients ) {
action . find ( '.remoteAddress' ) . tipsy ( { gravity : 's' } ) ;
2014-07-03 11:19:14 +00:00
}
2014-05-28 16:39:29 +00:00
}
else {
2015-08-10 13:57:21 +00:00
action . html ( '<span></span>' ) . prepend ( img ) ;
2014-05-28 16:39:29 +00:00
}
2014-06-02 15:23:52 +00:00
if ( hasLink ) {
image = OC . imagePath ( 'core' , 'actions/public' ) ;
}
2014-05-28 16:39:29 +00:00
img . attr ( 'src' , image ) ;
} ,
2012-08-22 15:35:30 +00:00
loadItem : function ( itemType , itemSource ) {
2012-06-25 23:27:57 +00:00
var data = '' ;
2012-08-24 14:43:42 +00:00
var checkReshare = true ;
2013-03-08 03:30:12 +00:00
if ( typeof OC . Share . statuses [ itemSource ] === 'undefined' ) {
2012-09-21 10:05:01 +00:00
// NOTE: Check does not always work and misses some shares, fix later
2013-07-31 19:21:02 +00:00
var checkShares = true ;
2012-08-22 15:35:30 +00:00
} else {
2013-07-31 19:21:02 +00:00
var checkShares = true ;
2012-08-06 17:30:44 +00:00
}
2012-08-24 14:43:42 +00:00
$ . ajax ( { type : 'GET' , url : OC . filePath ( 'core' , 'ajax' , 'share.php' ) , data : { fetch : 'getItem' , itemType : itemType , itemSource : itemSource , checkReshare : checkReshare , checkShares : checkShares } , async : false , success : function ( result ) {
2012-08-21 00:00:29 +00:00
if ( result && result . status === 'success' ) {
data = result . data ;
} else {
data = false ;
}
} } ) ;
2013-08-30 13:39:43 +00:00
2012-06-25 23:27:57 +00:00
return data ;
2012-05-05 18:56:52 +00:00
} ,
2015-07-23 07:39:26 +00:00
share : function ( itemType , itemSource , shareType , shareWith , permissions , itemSourceName , expirationDate , callback , errorCallback ) {
2014-05-07 10:17:46 +00:00
// Add a fallback for old share() calls without expirationDate.
// We should remove this in a later version,
// after the Apps have been updated.
if ( typeof callback === 'undefined' &&
typeof expirationDate === 'function' ) {
callback = expirationDate ;
expirationDate = '' ;
console . warn (
"Call to 'OC.Share.share()' with too few arguments. " +
"'expirationDate' was assumed to be 'callback'. " +
"Please revisit the call and fix the list of arguments."
) ;
}
2014-09-25 17:46:30 +00:00
return $ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) ,
2013-10-23 16:39:37 +00:00
{
action : 'share' ,
itemType : itemType ,
itemSource : itemSource ,
shareType : shareType ,
shareWith : shareWith ,
permissions : permissions ,
2014-05-07 10:17:46 +00:00
itemSourceName : itemSourceName ,
expirationDate : expirationDate
2013-10-23 16:39:37 +00:00
} , function ( result ) {
2014-03-01 01:46:27 +00:00
if ( result && result . status === 'success' ) {
if ( callback ) {
callback ( result . data ) ;
}
2013-07-22 18:02:18 +00:00
} else {
2015-07-23 07:39:26 +00:00
if ( _ . isUndefined ( errorCallback ) ) {
2014-03-01 01:46:27 +00:00
var msg = t ( 'core' , 'Error' ) ;
2015-07-23 07:39:26 +00:00
if ( result . data && result . data . message ) {
msg = result . data . message ;
}
OC . dialogs . alert ( msg , t ( 'core' , 'Error while sharing' ) ) ;
} else {
errorCallback ( result ) ;
2014-03-01 01:46:27 +00:00
}
2013-07-22 18:02:18 +00:00
}
2012-05-05 18:56:52 +00:00
}
2014-03-01 01:46:27 +00:00
) ;
2012-05-05 18:56:52 +00:00
} ,
2012-08-21 00:00:29 +00:00
unshare : function ( itemType , itemSource , shareType , shareWith , callback ) {
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : 'unshare' , itemType : itemType , itemSource : itemSource , shareType : shareType , shareWith : shareWith } , function ( result ) {
2012-05-05 18:56:52 +00:00
if ( result && result . status === 'success' ) {
if ( callback ) {
callback ( ) ;
}
} else {
2013-04-09 11:22:34 +00:00
OC . dialogs . alert ( t ( 'core' , 'Error while unsharing' ) , t ( 'core' , 'Error' ) ) ;
2012-05-05 18:56:52 +00:00
}
} ) ;
} ,
2012-08-21 00:00:29 +00:00
setPermissions : function ( itemType , itemSource , shareType , shareWith , permissions ) {
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : 'setPermissions' , itemType : itemType , itemSource : itemSource , shareType : shareType , shareWith : shareWith , permissions : permissions } , function ( result ) {
2012-05-05 18:56:52 +00:00
if ( ! result || result . status !== 'success' ) {
2013-04-09 11:22:34 +00:00
OC . dialogs . alert ( t ( 'core' , 'Error while changing permissions' ) , t ( 'core' , 'Error' ) ) ;
2012-05-05 18:56:52 +00:00
}
} ) ;
} ,
2013-10-23 16:39:37 +00:00
showDropDown : function ( itemType , itemSource , appendTo , link , possiblePermissions , filename ) {
2012-08-22 15:35:30 +00:00
var data = OC . Share . loadItem ( itemType , itemSource ) ;
2014-01-10 14:02:26 +00:00
var dropDownEl ;
2014-09-25 17:46:30 +00:00
var html = '<div id="dropdown" class="drop shareDropDown" data-item-type="' + itemType + '" data-item-source="' + itemSource + '">' ;
2015-04-21 10:47:16 +00:00
if ( data !== false && data . reshare !== false && data . reshare . uid _owner !== undefined && data . reshare . uid _owner !== OC . currentUser ) {
2015-02-24 20:46:24 +00:00
html += '<span class="reshare">' ;
if ( oc _config . enable _avatars === true ) {
html += '<div class="avatar"></div> ' ;
}
2012-09-21 10:05:01 +00:00
if ( data . reshare . share _type == OC . Share . SHARE _TYPE _GROUP ) {
2015-02-24 20:46:24 +00:00
html += t ( 'core' , 'Shared with you and the group {group} by {owner}' , { group : data . reshare . share _with , owner : data . reshare . displayname _owner } ) ;
2012-08-21 00:00:29 +00:00
} else {
2015-02-24 20:46:24 +00:00
html += t ( 'core' , 'Shared with you by {owner}' , { owner : data . reshare . displayname _owner } ) ;
2012-08-21 00:00:29 +00:00
}
2015-02-24 20:46:24 +00:00
html += '</span><br />' ;
2015-01-09 14:19:53 +00:00
// reduce possible permissions to what the original share allowed
possiblePermissions = possiblePermissions & data . reshare . permissions ;
2012-08-21 00:00:29 +00:00
}
2013-11-18 10:58:42 +00:00
2012-08-30 23:05:36 +00:00
if ( possiblePermissions & OC . PERMISSION _SHARE ) {
2013-06-25 10:24:14 +00:00
// Determine the Allow Public Upload status.
// Used later on to determine if the
// respective checkbox should be checked or
// not.
2013-07-12 15:03:51 +00:00
var publicUploadEnabled = $ ( '#filestable' ) . data ( 'allow-public-upload' ) ;
if ( typeof publicUploadEnabled == 'undefined' ) {
publicUploadEnabled = 'no' ;
}
2013-06-25 10:24:14 +00:00
var allowPublicUploadStatus = false ;
2013-07-12 15:03:51 +00:00
2013-06-25 10:24:14 +00:00
$ . each ( data . shares , function ( key , value ) {
2013-09-17 16:11:43 +00:00
if ( value . share _type === OC . Share . SHARE _TYPE _LINK ) {
allowPublicUploadStatus = ( value . permissions & OC . PERMISSION _CREATE ) ? true : false ;
2013-07-05 09:23:08 +00:00
return true ;
}
2013-06-25 10:24:14 +00:00
} ) ;
2015-03-26 17:30:55 +00:00
var sharePlaceholder = t ( 'core' , 'Share with users or groups …' ) ;
if ( oc _appconfig . core . remoteShareAllowed ) {
2015-03-26 19:30:51 +00:00
sharePlaceholder = t ( 'core' , 'Share with users, groups or remote users …' ) ;
2015-03-26 17:30:55 +00:00
}
2014-12-18 14:37:46 +00:00
html += '<label for="shareWith" class="hidden-visually">' + t ( 'core' , 'Share' ) + '</label>' ;
2015-03-26 17:30:55 +00:00
html += '<input id="shareWith" type="text" placeholder="' + sharePlaceholder + '" />' ;
2015-04-09 08:16:29 +00:00
if ( oc _appconfig . core . remoteShareAllowed ) {
2015-04-09 10:30:18 +00:00
var federatedCloudSharingDoc = '<a target="_blank" class="icon-info svg shareWithRemoteInfo" href="{docLink}" '
+ 'title="' + t ( 'core' , 'Share with people on other ownClouds using the syntax username@example.com/owncloud' ) + '"></a>' ;
html += federatedCloudSharingDoc . replace ( '{docLink}' , oc _appconfig . core . federatedCloudShareDoc ) ;
2015-04-09 08:16:29 +00:00
}
2014-09-25 17:46:30 +00:00
html += '<span class="shareWithLoading icon-loading-small hidden"></span>' ;
2012-08-23 18:48:35 +00:00
html += '<ul id="shareWithList">' ;
html += '</ul>' ;
2013-10-21 09:29:40 +00:00
var linksAllowed = $ ( '#allowShareWithLink' ) . val ( ) === 'yes' ;
2013-05-02 15:59:11 +00:00
if ( link && linksAllowed ) {
2014-09-25 17:46:30 +00:00
html += '<div id="link" class="linkShare">' ;
html += '<span class="icon-loading-small hidden"></span>' ;
2013-10-23 14:57:06 +00:00
html += '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">' + t ( 'core' , 'Share link' ) + '</label>' ;
2012-08-23 18:48:35 +00:00
html += '<br />' ;
2014-05-09 14:36:20 +00:00
var defaultExpireMessage = '' ;
2014-07-03 08:52:27 +00:00
if ( ( itemType === 'folder' || itemType === 'file' ) && oc _appconfig . core . defaultExpireDateEnforced ) {
2014-12-08 08:42:20 +00:00
defaultExpireMessage = t ( 'core' , 'The public link will expire no later than {days} days after it is created' , { 'days' : oc _appconfig . core . defaultExpireDate } ) + '<br/>' ;
2014-05-09 14:36:20 +00:00
}
2014-05-13 13:27:56 +00:00
2014-12-18 14:37:46 +00:00
html += '<label for="linkText" class="hidden-visually">' + t ( 'core' , 'Link' ) + '</label>' ;
2012-08-28 19:10:06 +00:00
html += '<input id="linkText" type="text" readonly="readonly" />' ;
2012-12-05 13:17:21 +00:00
html += '<input type="checkbox" name="showPassword" id="showPassword" value="1" style="display:none;" /><label for="showPassword" style="display:none;">' + t ( 'core' , 'Password protect' ) + '</label>' ;
2012-08-28 19:10:06 +00:00
html += '<div id="linkPass">' ;
2014-12-18 14:37:46 +00:00
html += '<label for="linkPassText" class="hidden-visually">' + t ( 'core' , 'Password' ) + '</label>' ;
2014-05-12 10:19:07 +00:00
html += '<input id="linkPassText" type="password" placeholder="' + t ( 'core' , 'Choose a password for the public link' ) + '" />' ;
2014-09-25 17:46:30 +00:00
html += '<span class="icon-loading-small hidden"></span>' ;
2012-09-05 20:17:33 +00:00
html += '</div>' ;
2014-05-12 10:19:07 +00:00
2013-07-12 15:03:51 +00:00
if ( itemType === 'folder' && ( possiblePermissions & OC . PERMISSION _CREATE ) && publicUploadEnabled === 'yes' ) {
2013-07-05 13:27:14 +00:00
html += '<div id="allowPublicUploadWrapper" style="display:none;">' ;
2014-09-25 17:46:30 +00:00
html += '<span class="icon-loading-small hidden"></span>' ;
2013-07-05 13:27:14 +00:00
html += '<input type="checkbox" value="1" name="allowPublicUpload" id="sharingDialogAllowPublicUpload"' + ( ( allowPublicUploadStatus ) ? 'checked="checked"' : '' ) + ' />' ;
2014-12-18 21:39:32 +00:00
html += '<label for="sharingDialogAllowPublicUpload">' + t ( 'core' , 'Allow editing' ) + '</label>' ;
2013-07-05 13:27:14 +00:00
html += '</div>' ;
}
2014-09-22 10:13:44 +00:00
html += '</div>' ;
var mailPublicNotificationEnabled = $ ( 'input:hidden[name=mailPublicNotificationEnabled]' ) . val ( ) ;
if ( mailPublicNotificationEnabled === 'yes' ) {
html += '<form id="emailPrivateLink">' ;
html += '<input id="email" style="display:none; width:62%;" value="" placeholder="' + t ( 'core' , 'Email link to person' ) + '" type="text" />' ;
html += '<input id="emailButton" style="display:none;" type="submit" value="' + t ( 'core' , 'Send' ) + '" />' ;
html += '</form>' ;
}
2012-08-23 18:48:35 +00:00
}
2013-06-25 10:24:14 +00:00
2012-09-01 22:53:48 +00:00
html += '<div id="expiration">' ;
2012-09-21 09:48:20 +00:00
html += '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" /><label for="expirationCheckbox">' + t ( 'core' , 'Set expiration date' ) + '</label>' ;
2014-12-18 14:37:46 +00:00
html += '<label for="expirationDate" class="hidden-visually">' + t ( 'core' , 'Expiration' ) + '</label>' ;
2012-09-21 09:48:20 +00:00
html += '<input id="expirationDate" type="text" placeholder="' + t ( 'core' , 'Expiration date' ) + '" style="display:none; width:90%;" />' ;
2014-06-30 12:08:36 +00:00
html += '<em id="defaultExpireMessage">' + defaultExpireMessage + '</em>' ;
2012-07-03 21:00:23 +00:00
html += '</div>' ;
2014-01-10 14:02:26 +00:00
dropDownEl = $ ( html ) ;
dropDownEl = dropDownEl . appendTo ( appendTo ) ;
2015-02-03 16:22:24 +00:00
2015-04-09 08:16:29 +00:00
// trigger remote share info tooltip
if ( oc _appconfig . core . remoteShareAllowed ) {
$ ( '.shareWithRemoteInfo' ) . tipsy ( { gravity : 'e' } ) ;
}
2015-02-03 16:22:24 +00:00
//Get owner avatars
2015-02-13 11:08:14 +00:00
if ( oc _config . enable _avatars === true && data !== false && data . reshare !== false && data . reshare . uid _owner !== undefined ) {
2015-02-24 20:46:24 +00:00
dropDownEl . find ( ".avatar" ) . avatar ( data . reshare . uid _owner , 32 ) ;
2015-02-03 16:22:24 +00:00
}
2012-08-23 18:48:35 +00:00
// Reset item shares
OC . Share . itemShares = [ ] ;
2014-06-04 08:37:04 +00:00
OC . Share . currentShares = { } ;
2012-08-23 18:48:35 +00:00
if ( data . shares ) {
$ . each ( data . shares , function ( index , share ) {
2012-08-28 00:05:51 +00:00
if ( share . share _type == OC . Share . SHARE _TYPE _LINK ) {
2014-06-27 15:56:09 +00:00
if ( itemSource === share . file _source || itemSource === share . item _source ) {
2013-10-30 16:03:53 +00:00
OC . Share . showLink ( share . token , share . share _with , itemSource ) ;
}
2012-07-30 19:30:21 +00:00
} else {
2012-09-09 18:44:08 +00:00
if ( share . collection ) {
2013-08-30 11:53:49 +00:00
OC . Share . addShareWith ( share . share _type , share . share _with , share . share _with _displayname , share . permissions , possiblePermissions , share . mail _send , share . collection ) ;
2012-09-09 18:44:08 +00:00
} else {
2014-12-04 18:51:04 +00:00
if ( share . share _type === OC . Share . SHARE _TYPE _REMOTE ) {
OC . Share . addShareWith ( share . share _type , share . share _with , share . share _with _displayname , share . permissions , OC . PERMISSION _READ | OC . PERMISSION _UPDATE | OC . PERMISSION _CREATE , share . mail _send , false ) ;
} else {
OC . Share . addShareWith ( share . share _type , share . share _with , share . share _with _displayname , share . permissions , possiblePermissions , share . mail _send , false ) ;
}
2012-09-09 18:44:08 +00:00
}
2012-08-23 18:48:35 +00:00
}
2012-10-04 09:18:37 +00:00
if ( share . expiration != null ) {
2014-07-14 14:05:46 +00:00
OC . Share . showExpirationDate ( share . expiration , share . stime ) ;
2012-09-26 04:04:27 +00:00
}
2012-08-23 18:48:35 +00:00
} ) ;
}
2014-10-17 15:55:32 +00:00
$ ( '#shareWith' ) . autocomplete ( { minLength : 2 , delay : 750 , source : function ( search , response ) {
2014-09-25 17:46:30 +00:00
var $loading = $ ( '#dropdown .shareWithLoading' ) ;
$loading . removeClass ( 'hidden' ) ;
2014-11-24 21:13:42 +00:00
$ . get ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { fetch : 'getShareWith' , search : search . term . trim ( ) , limit : 200 , itemShares : OC . Share . itemShares , itemType : itemType } , function ( result ) {
2014-09-25 17:46:30 +00:00
$loading . addClass ( 'hidden' ) ;
if ( result . status == 'success' && result . data . length > 0 ) {
$ ( "#shareWith" ) . autocomplete ( "option" , "autoFocus" , true ) ;
response ( result . data ) ;
} else {
response ( ) ;
}
2015-04-01 12:28:28 +00:00
} ) . fail ( function ( ) {
$ ( '#dropdown' ) . find ( '.shareWithLoading' ) . addClass ( 'hidden' ) ;
OC . Notification . show ( t ( 'core' , 'An error occured. Please try again' ) ) ;
window . setTimeout ( OC . Notification . hide , 5000 ) ;
2014-09-25 17:46:30 +00:00
} ) ;
2012-08-23 18:48:35 +00:00
} ,
focus : function ( event , focused ) {
event . preventDefault ( ) ;
} ,
select : function ( event , selected ) {
2012-09-26 03:18:36 +00:00
event . stopPropagation ( ) ;
2014-09-25 17:46:30 +00:00
var $dropDown = $ ( '#dropdown' ) ;
var itemType = $dropDown . data ( 'item-type' ) ;
var itemSource = $dropDown . data ( 'item-source' ) ;
var itemSourceName = $dropDown . data ( 'item-source-name' ) ;
2014-05-07 10:17:46 +00:00
var expirationDate = '' ;
if ( $ ( '#expirationCheckbox' ) . is ( ':checked' ) === true ) {
expirationDate = $ ( "#expirationDate" ) . val ( ) ;
}
2012-08-23 18:48:35 +00:00
var shareType = selected . item . value . shareType ;
var shareWith = selected . item . value . shareWith ;
$ ( this ) . val ( shareWith ) ;
2013-08-13 22:25:07 +00:00
// Default permissions are Edit (CRUD) and Share
2013-11-18 10:58:42 +00:00
// Check if these permissions are possible
var permissions = OC . PERMISSION _READ ;
2014-12-04 18:51:04 +00:00
if ( shareType === OC . Share . SHARE _TYPE _REMOTE ) {
permissions = OC . PERMISSION _CREATE | OC . PERMISSION _UPDATE | OC . PERMISSION _READ ;
} else {
if ( possiblePermissions & OC . PERMISSION _UPDATE ) {
permissions = permissions | OC . PERMISSION _UPDATE ;
}
if ( possiblePermissions & OC . PERMISSION _CREATE ) {
permissions = permissions | OC . PERMISSION _CREATE ;
}
if ( possiblePermissions & OC . PERMISSION _DELETE ) {
permissions = permissions | OC . PERMISSION _DELETE ;
}
if ( oc _appconfig . core . resharingAllowed && ( possiblePermissions & OC . PERMISSION _SHARE ) ) {
permissions = permissions | OC . PERMISSION _SHARE ;
}
2013-11-18 10:58:42 +00:00
}
2014-09-25 17:46:30 +00:00
var $input = $ ( this ) ;
var $loading = $dropDown . find ( '.shareWithLoading' ) ;
$loading . removeClass ( 'hidden' ) ;
$input . val ( t ( 'core' , 'Adding user...' ) ) ;
$input . prop ( 'disabled' , true ) ;
2014-05-07 10:17:46 +00:00
OC . Share . share ( itemType , itemSource , shareType , shareWith , permissions , itemSourceName , expirationDate , function ( ) {
2014-09-25 17:46:30 +00:00
$input . prop ( 'disabled' , false ) ;
$loading . addClass ( 'hidden' ) ;
2014-12-04 18:51:04 +00:00
var posPermissions = possiblePermissions ;
if ( shareType === OC . Share . SHARE _TYPE _REMOTE ) {
posPermissions = permissions ;
}
OC . Share . addShareWith ( shareType , shareWith , selected . item . label , permissions , posPermissions ) ;
2012-08-23 18:48:35 +00:00
$ ( '#shareWith' ) . val ( '' ) ;
2014-06-04 08:37:04 +00:00
$ ( '#dropdown' ) . trigger ( new $ . Event ( 'sharesChanged' , { shares : OC . Share . currentShares } ) ) ;
2012-08-24 19:32:06 +00:00
OC . Share . updateIcon ( itemType , itemSource ) ;
2012-07-30 19:30:21 +00:00
} ) ;
2012-08-23 18:48:35 +00:00
return false ;
}
2013-03-21 21:41:44 +00:00
} )
// customize internal _renderItem function to display groups and users differently
. data ( "ui-autocomplete" ) . _renderItem = function ( ul , item ) {
2013-10-21 13:31:31 +00:00
var insert = $ ( "<a>" ) ;
2014-12-04 18:51:04 +00:00
var text = item . label ;
if ( item . value . shareType === OC . Share . SHARE _TYPE _GROUP ) {
text = text + ' (' + t ( 'core' , 'group' ) + ')' ;
} else if ( item . value . shareType === OC . Share . SHARE _TYPE _REMOTE ) {
text = text + ' (' + t ( 'core' , 'remote' ) + ')' ;
}
2013-10-21 13:31:31 +00:00
insert . text ( text ) ;
2014-12-04 18:51:04 +00:00
if ( item . value . shareType === OC . Share . SHARE _TYPE _GROUP ) {
2013-10-21 13:31:31 +00:00
insert = insert . wrapInner ( '<strong></strong>' ) ;
2013-03-21 21:41:44 +00:00
}
return $ ( "<li>" )
2014-12-04 18:51:04 +00:00
. addClass ( ( item . value . shareType === OC . Share . SHARE _TYPE _GROUP ) ? 'group' : 'user' )
2013-03-22 08:59:19 +00:00
. append ( insert )
2013-03-21 21:41:44 +00:00
. appendTo ( ul ) ;
} ;
2014-09-22 10:13:44 +00:00
if ( link && linksAllowed && $ ( '#email' ) . length != 0 ) {
2014-04-16 20:41:57 +00:00
$ ( '#email' ) . autocomplete ( {
minLength : 1 ,
source : function ( search , response ) {
$ . get ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { fetch : 'getShareWithEmail' , search : search . term } , function ( result ) {
if ( result . status == 'success' && result . data . length > 0 ) {
response ( result . data ) ;
}
} ) ;
} ,
select : function ( event , item ) {
$ ( '#email' ) . val ( item . item . email ) ;
return false ;
}
} )
. data ( "ui-autocomplete" ) . _renderItem = function ( ul , item ) {
2014-05-12 09:30:47 +00:00
return $ ( '<li>' )
. append ( '<a>' + escapeHTML ( item . displayname ) + "<br>" + escapeHTML ( item . email ) + '</a>' )
2014-04-16 20:41:57 +00:00
. appendTo ( ul ) ;
} ;
}
2013-11-14 08:38:55 +00:00
2012-08-23 18:48:35 +00:00
} else {
2012-09-21 09:48:20 +00:00
html += '<input id="shareWith" type="text" placeholder="' + t ( 'core' , 'Resharing is not allowed' ) + '" style="width:90%;" disabled="disabled"/>' ;
2012-08-23 18:48:35 +00:00
html += '</div>' ;
2014-01-10 14:02:26 +00:00
dropDownEl = $ ( html ) ;
dropDownEl . appendTo ( appendTo ) ;
2012-07-30 19:30:21 +00:00
}
2014-01-10 14:02:26 +00:00
dropDownEl . attr ( 'data-item-source-name' , filename ) ;
2015-03-26 11:21:40 +00:00
$ ( '#dropdown' ) . slideDown ( OC . menuSpeed , function ( ) {
2012-08-08 21:50:09 +00:00
OC . Share . droppedDown = true ;
} ) ;
2013-10-23 16:51:25 +00:00
if ( $ ( 'html' ) . hasClass ( 'lte9' ) ) {
$ ( '#dropdown input[placeholder]' ) . placeholder ( ) ;
}
2012-07-31 18:48:19 +00:00
$ ( '#shareWith' ) . focus ( ) ;
2012-05-05 18:56:52 +00:00
} ,
hideDropDown : function ( callback ) {
2014-06-04 08:37:04 +00:00
OC . Share . currentShares = null ;
2015-03-26 11:21:40 +00:00
$ ( '#dropdown' ) . slideUp ( OC . menuSpeed , function ( ) {
2012-08-08 21:50:09 +00:00
OC . Share . droppedDown = false ;
2012-05-05 18:56:52 +00:00
$ ( '#dropdown' ) . remove ( ) ;
2012-08-08 21:50:09 +00:00
if ( typeof FileActions !== 'undefined' ) {
$ ( 'tr' ) . removeClass ( 'mouseOver' ) ;
}
2012-05-05 18:56:52 +00:00
if ( callback ) {
callback . call ( ) ;
}
} ) ;
} ,
2013-08-30 11:53:49 +00:00
addShareWith : function ( shareType , shareWith , shareWithDisplayName , permissions , possiblePermissions , mailSend , collection ) {
2014-06-04 08:37:04 +00:00
var shareItem = {
share _type : shareType ,
share _with : shareWith ,
share _with _displayname : shareWithDisplayName ,
permissions : permissions
} ;
2014-12-04 18:51:04 +00:00
if ( shareType === OC . Share . SHARE _TYPE _GROUP ) {
2013-10-14 18:17:45 +00:00
shareWithDisplayName = shareWithDisplayName + " (" + t ( 'core' , 'group' ) + ')' ;
}
2014-12-04 18:51:04 +00:00
if ( shareType === OC . Share . SHARE _TYPE _REMOTE ) {
shareWithDisplayName = shareWithDisplayName + " (" + t ( 'core' , 'remote' ) + ')' ;
}
2012-07-31 17:06:32 +00:00
if ( ! OC . Share . itemShares [ shareType ] ) {
OC . Share . itemShares [ shareType ] = [ ] ;
}
OC . Share . itemShares [ shareType ] . push ( shareWith ) ;
2012-09-09 18:44:08 +00:00
if ( collection ) {
if ( collection . item _type == 'file' || collection . item _type == 'folder' ) {
var item = collection . path ;
2012-08-01 22:03:00 +00:00
} else {
2012-09-09 18:44:08 +00:00
var item = collection . item _source ;
2012-08-01 22:03:00 +00:00
}
2012-09-09 18:44:08 +00:00
var collectionList = $ ( '#shareWithList li' ) . filterAttr ( 'data-collection' , item ) ;
if ( collectionList . length > 0 ) {
2013-03-27 20:17:58 +00:00
$ ( collectionList ) . append ( ', ' + shareWithDisplayName ) ;
2012-09-09 18:44:08 +00:00
} else {
2014-12-08 08:42:20 +00:00
var html = '<li style="clear: both;" data-collection="' + item + '">' + t ( 'core' , 'Shared in {item} with {user}' , { 'item' : item , user : shareWithDisplayName } ) + '</li>' ;
2012-09-09 18:44:08 +00:00
$ ( '#shareWithList' ) . prepend ( html ) ;
2012-07-27 14:13:23 +00:00
}
2012-09-09 18:44:08 +00:00
} else {
var editChecked = createChecked = updateChecked = deleteChecked = shareChecked = '' ;
if ( permissions & OC . PERMISSION _CREATE ) {
createChecked = 'checked="checked"' ;
editChecked = 'checked="checked"' ;
2012-07-27 14:13:23 +00:00
}
2012-09-09 18:44:08 +00:00
if ( permissions & OC . PERMISSION _UPDATE ) {
updateChecked = 'checked="checked"' ;
editChecked = 'checked="checked"' ;
2012-07-27 14:13:23 +00:00
}
2012-09-09 18:44:08 +00:00
if ( permissions & OC . PERMISSION _DELETE ) {
deleteChecked = 'checked="checked"' ;
editChecked = 'checked="checked"' ;
2012-07-27 14:13:23 +00:00
}
2012-09-09 18:44:08 +00:00
if ( permissions & OC . PERMISSION _SHARE ) {
shareChecked = 'checked="checked"' ;
}
2013-03-03 23:54:21 +00:00
var html = '<li style="clear: both;" data-share-type="' + escapeHTML ( shareType ) + '" data-share-with="' + escapeHTML ( shareWith ) + '" title="' + escapeHTML ( shareWith ) + '">' ;
2013-10-23 15:56:28 +00:00
var showCrudsButton ;
2014-05-27 20:09:55 +00:00
html += '<a href="#" class="unshare"><img class="svg" alt="' + t ( 'core' , 'Unshare' ) + '" title="' + t ( 'core' , 'Unshare' ) + '" src="' + OC . imagePath ( 'core' , 'actions/delete' ) + '"/></a>' ;
2015-02-13 11:08:14 +00:00
if ( oc _config . enable _avatars === true ) {
2015-02-24 20:46:24 +00:00
html += '<div class="avatar"></div>' ;
2015-02-03 16:22:24 +00:00
}
2013-10-23 15:56:28 +00:00
html += '<span class="username">' + escapeHTML ( shareWithDisplayName ) + '</span>' ;
2013-09-24 16:32:57 +00:00
var mailNotificationEnabled = $ ( 'input:hidden[name=mailNotificationEnabled]' ) . val ( ) ;
2014-12-04 18:51:04 +00:00
if ( mailNotificationEnabled === 'yes' && shareType !== OC . Share . SHARE _TYPE _REMOTE ) {
2013-09-24 16:32:57 +00:00
var checked = '' ;
2013-08-30 13:39:43 +00:00
if ( mailSend === '1' ) {
2013-08-30 11:53:49 +00:00
checked = 'checked' ;
}
2013-10-23 15:56:28 +00:00
html += '<label><input type="checkbox" name="mailNotification" class="mailNotification" ' + checked + ' />' + t ( 'core' , 'notify by email' ) + '</label> ' ;
2013-08-30 11:53:49 +00:00
}
2014-08-05 08:57:13 +00:00
if ( oc _appconfig . core . resharingAllowed && ( possiblePermissions & OC . PERMISSION _SHARE ) ) {
2015-03-23 13:40:56 +00:00
html += '<label><input id="canShare-' + escapeHTML ( shareWith ) + '" type="checkbox" name="share" class="permissions" ' + shareChecked + ' data-permissions="' + OC . PERMISSION _SHARE + '" />' + t ( 'core' , 'can share' ) + '</label>' ;
2014-06-25 14:32:24 +00:00
}
2012-09-09 18:44:08 +00:00
if ( possiblePermissions & OC . PERMISSION _CREATE || possiblePermissions & OC . PERMISSION _UPDATE || possiblePermissions & OC . PERMISSION _DELETE ) {
2015-03-23 13:40:56 +00:00
html += '<label><input id="canEdit-' + escapeHTML ( shareWith ) + '" type="checkbox" name="edit" class="permissions" ' + editChecked + ' />' + t ( 'core' , 'can edit' ) + '</label>' ;
2012-09-09 18:44:08 +00:00
}
2014-12-04 18:51:04 +00:00
if ( shareType !== OC . Share . SHARE _TYPE _REMOTE ) {
showCrudsButton = '<a href="#" class="showCruds"><img class="svg" alt="' + t ( 'core' , 'access control' ) + '" src="' + OC . imagePath ( 'core' , 'actions/triangle-s' ) + '"/></a>' ;
}
2012-09-09 18:44:08 +00:00
html += '<div class="cruds" style="display:none;">' ;
2014-12-04 18:51:04 +00:00
if ( possiblePermissions & OC . PERMISSION _CREATE ) {
2015-03-23 13:40:56 +00:00
html += '<label><input id="canCreate-' + escapeHTML ( shareWith ) + '" type="checkbox" name="create" class="permissions" ' + createChecked + ' data-permissions="' + OC . PERMISSION _CREATE + '"/>' + t ( 'core' , 'create' ) + '</label>' ;
2014-12-04 18:51:04 +00:00
}
if ( possiblePermissions & OC . PERMISSION _UPDATE ) {
2015-03-23 13:40:56 +00:00
html += '<label><input id="canUpdate-' + escapeHTML ( shareWith ) + '" type="checkbox" name="update" class="permissions" ' + updateChecked + ' data-permissions="' + OC . PERMISSION _UPDATE + '"/>' + t ( 'core' , 'change' ) + '</label>' ;
2014-12-04 18:51:04 +00:00
}
if ( possiblePermissions & OC . PERMISSION _DELETE ) {
2015-03-23 13:40:56 +00:00
html += '<label><input id="canDelete-' + escapeHTML ( shareWith ) + '" type="checkbox" name="delete" class="permissions" ' + deleteChecked + ' data-permissions="' + OC . PERMISSION _DELETE + '"/>' + t ( 'core' , 'delete' ) + '</label>' ;
2014-12-04 18:51:04 +00:00
}
2012-09-09 18:44:08 +00:00
html += '</div>' ;
html += '</li>' ;
2013-10-23 15:56:28 +00:00
html = $ ( html ) . appendTo ( '#shareWithList' ) ;
2015-02-24 20:46:24 +00:00
if ( oc _config . enable _avatars === true ) {
if ( shareType === OC . Share . SHARE _TYPE _USER ) {
html . find ( '.avatar' ) . avatar ( escapeHTML ( shareWith ) , 32 ) ;
} else {
//Add sharetype to generate different seed if there is a group and use with the same name
html . find ( '.avatar' ) . imageplaceholder ( escapeHTML ( shareWith ) + ' ' + shareType ) ;
}
2015-02-03 16:22:24 +00:00
}
2013-10-23 15:56:28 +00:00
// insert cruds button into last label element
var lastLabel = html . find ( '>label:last' ) ;
if ( lastLabel . exists ( ) ) {
lastLabel . append ( showCrudsButton ) ;
}
else {
html . find ( '.cruds' ) . before ( showCrudsButton ) ;
}
2014-06-04 08:37:04 +00:00
if ( ! OC . Share . currentShares [ shareType ] ) {
OC . Share . currentShares [ shareType ] = [ ] ;
}
OC . Share . currentShares [ shareType ] . push ( shareItem ) ;
2012-09-09 18:44:08 +00:00
}
2012-05-05 18:56:52 +00:00
} ,
2012-11-23 14:51:57 +00:00
showLink : function ( token , password , itemSource ) {
2012-09-19 05:44:15 +00:00
OC . Share . itemShares [ OC . Share . SHARE _TYPE _LINK ] = true ;
2012-08-28 00:05:51 +00:00
$ ( '#linkCheckbox' ) . attr ( 'checked' , true ) ;
2014-05-28 10:13:55 +00:00
2014-03-14 11:10:05 +00:00
//check itemType
var linkSharetype = $ ( '#dropdown' ) . data ( 'item-type' ) ;
2014-05-28 10:13:55 +00:00
2012-11-23 14:51:57 +00:00
if ( ! token ) {
//fallback to pre token link
var filename = $ ( 'tr' ) . filterAttr ( 'data-id' , String ( itemSource ) ) . data ( 'file' ) ;
var type = $ ( 'tr' ) . filterAttr ( 'data-id' , String ( itemSource ) ) . data ( 'type' ) ;
if ( $ ( '#dir' ) . val ( ) == '/' ) {
var file = $ ( '#dir' ) . val ( ) + filename ;
} else {
var file = $ ( '#dir' ) . val ( ) + '/' + filename ;
}
file = '/' + OC . currentUser + '/files' + file ;
2014-06-27 16:21:02 +00:00
// TODO: use oc webroot ?
2012-11-23 14:51:57 +00:00
var link = parent . location . protocol + '//' + location . host + OC . linkTo ( '' , 'public.php' ) + '?service=files&' + type + '=' + encodeURIComponent ( file ) ;
} else {
//TODO add path param when showing a link to file in a subfolder of a public link share
2014-03-14 11:10:05 +00:00
var service = '' ;
if ( linkSharetype === 'folder' || linkSharetype === 'file' ) {
service = 'files' ;
} else {
service = linkSharetype ;
}
2014-05-28 10:13:55 +00:00
2014-06-27 16:21:02 +00:00
// TODO: use oc webroot ?
2014-04-07 21:16:25 +00:00
if ( service !== 'files' ) {
var link = parent . location . protocol + '//' + location . host + OC . linkTo ( '' , 'public.php' ) + '?service=' + service + '&t=' + token ;
} else {
2014-08-03 09:31:28 +00:00
var link = parent . location . protocol + '//' + location . host + OC . generateUrl ( '/s/' ) + token ;
2014-04-07 21:16:25 +00:00
}
2012-11-23 14:51:57 +00:00
}
2012-08-28 00:05:51 +00:00
$ ( '#linkText' ) . val ( link ) ;
2015-03-26 11:21:40 +00:00
$ ( '#linkText' ) . slideDown ( OC . menuSpeed ) ;
2012-12-05 13:17:21 +00:00
$ ( '#linkText' ) . css ( 'display' , 'block' ) ;
2014-05-12 10:19:07 +00:00
if ( oc _appconfig . core . enforcePasswordForPublicLink === false || password === null ) {
$ ( '#showPassword' ) . show ( ) ;
$ ( '#showPassword+label' ) . show ( ) ;
}
2012-09-01 17:52:12 +00:00
if ( password != null ) {
2015-03-26 11:21:40 +00:00
$ ( '#linkPass' ) . slideDown ( OC . menuSpeed ) ;
2012-12-05 13:17:21 +00:00
$ ( '#showPassword' ) . attr ( 'checked' , true ) ;
2013-11-26 19:17:13 +00:00
$ ( '#linkPassText' ) . attr ( 'placeholder' , '**********' ) ;
2012-08-29 18:06:33 +00:00
}
2012-09-19 05:02:57 +00:00
$ ( '#expiration' ) . show ( ) ;
2013-02-08 10:05:56 +00:00
$ ( '#emailPrivateLink #email' ) . show ( ) ;
$ ( '#emailPrivateLink #emailButton' ) . show ( ) ;
2013-06-25 10:24:14 +00:00
$ ( '#allowPublicUploadWrapper' ) . show ( ) ;
2012-05-05 18:56:52 +00:00
} ,
2012-08-28 00:05:51 +00:00
hideLink : function ( ) {
2015-03-26 11:21:40 +00:00
$ ( '#linkText' ) . slideUp ( OC . menuSpeed ) ;
2014-05-09 14:36:20 +00:00
$ ( '#defaultExpireMessage' ) . hide ( ) ;
2012-08-29 18:01:09 +00:00
$ ( '#showPassword' ) . hide ( ) ;
2012-12-05 13:17:21 +00:00
$ ( '#showPassword+label' ) . hide ( ) ;
2015-03-26 11:21:40 +00:00
$ ( '#linkPass' ) . slideUp ( OC . menuSpeed ) ;
2013-02-08 10:05:56 +00:00
$ ( '#emailPrivateLink #email' ) . hide ( ) ;
$ ( '#emailPrivateLink #emailButton' ) . hide ( ) ;
2013-06-25 10:24:14 +00:00
$ ( '#allowPublicUploadWrapper' ) . hide ( ) ;
2013-02-08 10:05:56 +00:00
} ,
dirname : function ( path ) {
2012-05-05 18:56:52 +00:00
return path . replace ( /\\/g , '/' ) . replace ( /\/[^\/]*$/ , '' ) ;
2012-09-26 04:04:27 +00:00
} ,
2015-07-08 13:23:01 +00:00
/ * *
* Parses a string to an valid integer ( unix timestamp )
* @ param time
* @ returns { * }
* @ internal Only used to work around a bug in the backend
* /
_parseTime : function ( time ) {
if ( _ . isString ( time ) ) {
2015-07-28 12:20:55 +00:00
// skip empty strings and hex values
if ( time === '' || ( time . length > 1 && time [ 0 ] === '0' && time [ 1 ] === 'x' ) ) {
return null ;
}
2015-07-08 13:23:01 +00:00
time = parseInt ( time , 10 ) ;
if ( isNaN ( time ) ) {
time = null ;
}
}
return time ;
} ,
2014-07-14 14:05:46 +00:00
/ * *
* Displays the expiration date field
*
* @ param { Date } date current expiration date
* @ param { int } [ shareTime ] share timestamp in seconds , defaults to now
* /
showExpirationDate : function ( date , shareTime ) {
var now = new Date ( ) ;
2014-08-08 09:09:17 +00:00
// min date should always be the next day
var minDate = new Date ( ) ;
minDate . setDate ( minDate . getDate ( ) + 1 ) ;
2014-07-14 14:05:46 +00:00
var datePickerOptions = {
2014-08-08 09:09:17 +00:00
minDate : minDate ,
2014-07-14 14:05:46 +00:00
maxDate : null
} ;
2015-07-08 13:23:01 +00:00
// TODO: hack: backend returns string instead of integer
shareTime = OC . Share . _parseTime ( shareTime ) ;
2014-07-14 14:05:46 +00:00
if ( _ . isNumber ( shareTime ) ) {
shareTime = new Date ( shareTime * 1000 ) ;
}
if ( ! shareTime ) {
shareTime = now ;
}
2012-09-26 04:04:27 +00:00
$ ( '#expirationCheckbox' ) . attr ( 'checked' , true ) ;
$ ( '#expirationDate' ) . val ( date ) ;
2015-03-26 11:21:40 +00:00
$ ( '#expirationDate' ) . slideDown ( OC . menuSpeed ) ;
2014-04-10 19:54:25 +00:00
$ ( '#expirationDate' ) . css ( 'display' , 'block' ) ;
2012-09-26 04:04:27 +00:00
$ ( '#expirationDate' ) . datepicker ( {
dateFormat : 'dd-mm-yy'
} ) ;
2014-06-03 13:15:04 +00:00
if ( oc _appconfig . core . defaultExpireDateEnforced ) {
$ ( '#expirationCheckbox' ) . attr ( 'disabled' , true ) ;
2014-07-14 14:05:46 +00:00
shareTime = OC . Util . stripTime ( shareTime ) . getTime ( ) ;
// max date is share date + X days
datePickerOptions . maxDate = new Date ( shareTime + oc _appconfig . core . defaultExpireDate * 24 * 3600 * 1000 ) ;
2014-06-03 13:15:04 +00:00
}
if ( oc _appconfig . core . defaultExpireDateEnabled ) {
2015-03-26 11:21:40 +00:00
$ ( '#defaultExpireMessage' ) . slideDown ( OC . menuSpeed ) ;
2014-06-03 13:15:04 +00:00
}
2014-07-14 14:05:46 +00:00
$ . datepicker . setDefaults ( datePickerOptions ) ;
2015-04-17 07:36:50 +00:00
} ,
/ * *
* Get the default Expire date
*
* @ return { String } The expire date
* /
getDefaultExpirationDate : function ( ) {
var expireDateString = '' ;
if ( oc _appconfig . core . defaultExpireDateEnabled ) {
var date = new Date ( ) . getTime ( ) ;
var expireAfterMs = oc _appconfig . core . defaultExpireDate * 24 * 60 * 60 * 1000 ;
var expireDate = new Date ( date + expireAfterMs ) ;
var month = expireDate . getMonth ( ) + 1 ;
var year = expireDate . getFullYear ( ) ;
var day = expireDate . getDate ( ) ;
expireDateString = year + "-" + month + '-' + day + ' 00:00:00' ;
}
return expireDateString ;
2012-05-05 18:56:52 +00:00
}
2013-09-11 10:45:32 +00:00
} ;
2012-05-05 18:56:52 +00:00
2011-07-27 01:27:40 +00:00
$ ( document ) . ready ( function ( ) {
2013-03-27 20:18:19 +00:00
2012-11-14 15:47:52 +00:00
if ( typeof monthNames != 'undefined' ) {
2014-08-08 09:09:17 +00:00
// min date should always be the next day
var minDate = new Date ( ) ;
minDate . setDate ( minDate . getDate ( ) + 1 ) ;
2013-02-08 10:05:56 +00:00
$ . datepicker . setDefaults ( {
monthNames : monthNames ,
2015-08-21 07:17:36 +00:00
monthNamesShort : monthNamesShort ,
2013-02-08 10:05:56 +00:00
dayNames : dayNames ,
2015-08-21 07:17:36 +00:00
dayNamesMin : dayNamesMin ,
dayNamesShort : dayNamesShort ,
2014-06-06 15:40:16 +00:00
firstDay : firstDay ,
2014-08-08 09:09:17 +00:00
minDate : minDate
2013-02-08 10:05:56 +00:00
} ) ;
}
$ ( document ) . on ( 'click' , 'a.share' , function ( event ) {
2012-08-08 21:50:09 +00:00
event . stopPropagation ( ) ;
2012-08-23 03:00:47 +00:00
if ( $ ( this ) . data ( 'item-type' ) !== undefined && $ ( this ) . data ( 'item' ) !== undefined ) {
2012-08-08 21:50:09 +00:00
var itemType = $ ( this ) . data ( 'item-type' ) ;
2012-08-23 03:00:47 +00:00
var itemSource = $ ( this ) . data ( 'item' ) ;
2012-08-08 21:50:09 +00:00
var appendTo = $ ( this ) . parent ( ) . parent ( ) ;
2012-08-28 00:05:51 +00:00
var link = false ;
2012-08-08 21:50:09 +00:00
var possiblePermissions = $ ( this ) . data ( 'possible-permissions' ) ;
2012-08-28 00:05:51 +00:00
if ( $ ( this ) . data ( 'link' ) !== undefined && $ ( this ) . data ( 'link' ) == true ) {
link = true ;
2012-07-03 21:00:23 +00:00
}
2012-08-08 21:50:09 +00:00
if ( OC . Share . droppedDown ) {
2012-08-23 03:00:47 +00:00
if ( itemSource != $ ( '#dropdown' ) . data ( 'item' ) ) {
2012-08-08 21:50:09 +00:00
OC . Share . hideDropDown ( function ( ) {
2012-08-28 00:05:51 +00:00
OC . Share . showDropDown ( itemType , itemSource , appendTo , link , possiblePermissions ) ;
2012-08-08 21:50:09 +00:00
} ) ;
} else {
OC . Share . hideDropDown ( ) ;
}
} else {
2012-08-28 00:05:51 +00:00
OC . Share . showDropDown ( itemType , itemSource , appendTo , link , possiblePermissions ) ;
2012-08-08 21:50:09 +00:00
}
2012-06-24 23:16:50 +00:00
}
} ) ;
2012-08-08 21:50:09 +00:00
$ ( this ) . click ( function ( event ) {
2012-10-08 19:03:16 +00:00
var target = $ ( event . target ) ;
2013-03-27 20:18:19 +00:00
var isMatched = ! target . is ( '.drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon' )
2013-10-07 11:25:30 +00:00
&& ! target . closest ( '#ui-datepicker-div' ) . length && ! target . closest ( '.ui-autocomplete' ) . length ;
2012-10-08 19:03:16 +00:00
if ( OC . Share . droppedDown && isMatched && $ ( '#dropdown' ) . has ( event . target ) . length === 0 ) {
2012-08-08 21:50:09 +00:00
OC . Share . hideDropDown ( ) ;
}
} ) ;
2012-05-05 18:56:52 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'click' , '#dropdown .showCruds' , function ( ) {
2013-10-23 15:56:28 +00:00
$ ( this ) . closest ( 'li' ) . find ( '.cruds' ) . toggle ( ) ;
2013-10-07 11:11:34 +00:00
return false ;
2012-07-27 01:56:22 +00:00
} ) ;
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'click' , '#dropdown .unshare' , function ( ) {
2013-10-21 14:14:23 +00:00
var $li = $ ( this ) . closest ( 'li' ) ;
2012-08-24 19:32:06 +00:00
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
2013-10-21 14:14:23 +00:00
var shareType = $li . data ( 'share-type' ) ;
2014-03-28 18:08:59 +00:00
var shareWith = $li . attr ( 'data-share-with' ) ;
2014-09-25 17:46:30 +00:00
var $button = $ ( this ) ;
if ( ! $button . is ( 'a' ) ) {
$button = $button . closest ( 'a' ) ;
}
if ( $button . hasClass ( 'icon-loading-small' ) ) {
// deletion in progress
return false ;
}
$button . empty ( ) . addClass ( 'icon-loading-small' ) ;
2012-08-24 19:32:06 +00:00
OC . Share . unshare ( itemType , itemSource , shareType , shareWith , function ( ) {
2013-10-21 14:14:23 +00:00
$li . remove ( ) ;
2012-08-06 18:45:45 +00:00
var index = OC . Share . itemShares [ shareType ] . indexOf ( shareWith ) ;
OC . Share . itemShares [ shareType ] . splice ( index , 1 ) ;
2014-06-04 08:37:04 +00:00
// updated list of shares
OC . Share . currentShares [ shareType ] . splice ( index , 1 ) ;
$ ( '#dropdown' ) . trigger ( new $ . Event ( 'sharesChanged' , { shares : OC . Share . currentShares } ) ) ;
2012-08-24 19:32:06 +00:00
OC . Share . updateIcon ( itemType , itemSource ) ;
2012-09-19 05:02:57 +00:00
if ( typeof OC . Share . statuses [ itemSource ] === 'undefined' ) {
2015-03-26 11:21:40 +00:00
$ ( '#expiration' ) . slideUp ( OC . menuSpeed ) ;
2012-09-19 05:02:57 +00:00
}
2011-08-03 19:21:53 +00:00
} ) ;
2014-09-25 17:46:30 +00:00
2013-10-07 11:11:34 +00:00
return false ;
2011-08-03 19:21:53 +00:00
} ) ;
2012-08-23 03:00:47 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'change' , '#dropdown .permissions' , function ( ) {
2013-10-21 14:14:23 +00:00
var li = $ ( this ) . closest ( 'li' ) ;
2012-07-27 01:56:22 +00:00
if ( $ ( this ) . attr ( 'name' ) == 'edit' ) {
var checkboxes = $ ( '.permissions' , li ) ;
var checked = $ ( this ) . is ( ':checked' ) ;
// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
$ ( checkboxes ) . filter ( 'input[name="create"]' ) . attr ( 'checked' , checked ) ;
$ ( checkboxes ) . filter ( 'input[name="update"]' ) . attr ( 'checked' , checked ) ;
$ ( checkboxes ) . filter ( 'input[name="delete"]' ) . attr ( 'checked' , checked ) ;
} else {
var checkboxes = $ ( '.permissions' , li ) ;
// Uncheck Edit if Create, Update, and Delete are not checked
2013-02-08 10:05:56 +00:00
if ( ! $ ( this ) . is ( ':checked' )
&& ! $ ( checkboxes ) . filter ( 'input[name="create"]' ) . is ( ':checked' )
&& ! $ ( checkboxes ) . filter ( 'input[name="update"]' ) . is ( ':checked' )
&& ! $ ( checkboxes ) . filter ( 'input[name="delete"]' ) . is ( ':checked' ) )
{
2012-07-27 01:56:22 +00:00
$ ( checkboxes ) . filter ( 'input[name="edit"]' ) . attr ( 'checked' , false ) ;
// Check Edit if Create, Update, or Delete is checked
2013-02-08 10:05:56 +00:00
} else if ( ( $ ( this ) . attr ( 'name' ) == 'create'
2014-03-05 14:47:12 +00:00
|| $ ( this ) . attr ( 'name' ) == 'update'
|| $ ( this ) . attr ( 'name' ) == 'delete' ) )
2013-02-08 10:05:56 +00:00
{
2012-07-27 01:56:22 +00:00
$ ( checkboxes ) . filter ( 'input[name="edit"]' ) . attr ( 'checked' , true ) ;
}
}
2012-08-30 23:05:36 +00:00
var permissions = OC . PERMISSION _READ ;
2012-07-27 01:56:22 +00:00
$ ( checkboxes ) . filter ( ':not(input[name="edit"])' ) . filter ( ':checked' ) . each ( function ( index , checkbox ) {
permissions |= $ ( checkbox ) . data ( 'permissions' ) ;
} ) ;
2013-02-08 10:05:56 +00:00
OC . Share . setPermissions ( $ ( '#dropdown' ) . data ( 'item-type' ) ,
$ ( '#dropdown' ) . data ( 'item-source' ) ,
2013-10-21 14:14:23 +00:00
li . data ( 'share-type' ) ,
2014-03-28 18:08:59 +00:00
li . attr ( 'data-share-with' ) ,
2013-02-08 10:05:56 +00:00
permissions ) ;
2012-05-05 18:56:52 +00:00
} ) ;
2012-08-23 03:00:47 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'change' , '#dropdown #linkCheckbox' , function ( ) {
2014-09-25 17:46:30 +00:00
var $dropDown = $ ( '#dropdown' ) ;
var itemType = $dropDown . data ( 'item-type' ) ;
var itemSource = $dropDown . data ( 'item-source' ) ;
var itemSourceName = $dropDown . data ( 'item-source-name' ) ;
var $loading = $dropDown . find ( '#link .icon-loading-small' ) ;
var $button = $ ( this ) ;
if ( ! $loading . hasClass ( 'hidden' ) ) {
// already in progress
return false ;
}
2014-06-03 13:15:04 +00:00
2011-08-03 19:21:53 +00:00
if ( this . checked ) {
2015-04-14 13:13:46 +00:00
// Reset password placeholder
$ ( '#linkPassText' ) . attr ( 'placeholder' , t ( 'core' , 'Choose a password for the public link' ) ) ;
// Reset link
$ ( '#linkText' ) . val ( '' ) ;
2015-04-24 14:14:08 +00:00
$ ( '#showPassword' ) . prop ( 'checked' , false ) ;
$ ( '#linkPass' ) . hide ( ) ;
$ ( '#sharingDialogAllowPublicUpload' ) . prop ( 'checked' , false ) ;
$ ( '#expirationCheckbox' ) . prop ( 'checked' , false ) ;
$ ( '#expirationDate' ) . hide ( ) ;
2014-06-03 13:15:04 +00:00
var expireDateString = '' ;
2012-08-28 00:05:51 +00:00
// Create a link
2014-05-12 10:19:07 +00:00
if ( oc _appconfig . core . enforcePasswordForPublicLink === false ) {
2015-04-17 07:36:50 +00:00
expireDateString = OC . Share . getDefaultExpirationDate ( ) ;
2014-09-25 17:46:30 +00:00
$loading . removeClass ( 'hidden' ) ;
$button . addClass ( 'hidden' ) ;
2014-09-26 15:06:16 +00:00
$button . prop ( 'disabled' , true ) ;
2014-06-03 13:15:04 +00:00
OC . Share . share ( itemType , itemSource , OC . Share . SHARE _TYPE _LINK , '' , OC . PERMISSION _READ , itemSourceName , expireDateString , function ( data ) {
2014-09-25 17:46:30 +00:00
$loading . addClass ( 'hidden' ) ;
$button . removeClass ( 'hidden' ) ;
2014-09-26 15:06:16 +00:00
$button . prop ( 'disabled' , false ) ;
2014-05-12 10:19:07 +00:00
OC . Share . showLink ( data . token , null , itemSource ) ;
2014-06-04 08:37:04 +00:00
$ ( '#dropdown' ) . trigger ( new $ . Event ( 'sharesChanged' , { shares : OC . Share . currentShares } ) ) ;
2014-05-12 10:19:07 +00:00
OC . Share . updateIcon ( itemType , itemSource ) ;
} ) ;
} else {
2015-03-26 11:21:40 +00:00
$ ( '#linkPass' ) . slideToggle ( OC . menuSpeed ) ;
2015-03-26 10:55:50 +00:00
// TODO drop with IE8 drop
2015-04-16 13:53:51 +00:00
if ( $ ( 'html' ) . hasClass ( 'ie8' ) ) {
2015-03-26 10:55:50 +00:00
$ ( '#linkPassText' ) . attr ( 'placeholder' , null ) ;
$ ( '#linkPassText' ) . val ( '' ) ;
}
2014-05-12 10:19:07 +00:00
$ ( '#linkPassText' ) . focus ( ) ;
}
2014-06-03 13:15:04 +00:00
if ( expireDateString !== '' ) {
OC . Share . showExpirationDate ( expireDateString ) ;
}
2011-08-03 19:21:53 +00:00
} else {
2012-05-05 18:56:52 +00:00
// Delete private link
2014-05-12 10:19:07 +00:00
OC . Share . hideLink ( ) ;
2015-03-26 11:21:40 +00:00
$ ( '#expiration' ) . slideUp ( OC . menuSpeed ) ;
2014-05-12 10:19:07 +00:00
if ( $ ( '#linkText' ) . val ( ) !== '' ) {
2014-09-25 17:46:30 +00:00
$loading . removeClass ( 'hidden' ) ;
$button . addClass ( 'hidden' ) ;
2014-09-26 15:06:16 +00:00
$button . prop ( 'disabled' , true ) ;
2014-05-12 10:19:07 +00:00
OC . Share . unshare ( itemType , itemSource , OC . Share . SHARE _TYPE _LINK , '' , function ( ) {
2014-09-25 17:46:30 +00:00
$loading . addClass ( 'hidden' ) ;
$button . removeClass ( 'hidden' ) ;
2014-09-26 15:06:16 +00:00
$button . prop ( 'disabled' , false ) ;
2014-05-12 10:19:07 +00:00
OC . Share . itemShares [ OC . Share . SHARE _TYPE _LINK ] = false ;
2014-06-04 08:37:04 +00:00
$ ( '#dropdown' ) . trigger ( new $ . Event ( 'sharesChanged' , { shares : OC . Share . currentShares } ) ) ;
2014-05-12 10:19:07 +00:00
OC . Share . updateIcon ( itemType , itemSource ) ;
if ( typeof OC . Share . statuses [ itemSource ] === 'undefined' ) {
2015-03-26 11:21:40 +00:00
$ ( '#expiration' ) . slideUp ( OC . menuSpeed ) ;
2014-05-12 10:19:07 +00:00
}
} ) ;
}
2011-08-03 19:21:53 +00:00
}
2011-07-27 01:27:40 +00:00
} ) ;
2012-08-23 03:00:47 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'click' , '#dropdown #linkText' , function ( ) {
2011-08-07 19:20:57 +00:00
$ ( this ) . focus ( ) ;
$ ( this ) . select ( ) ;
} ) ;
2012-04-26 14:33:06 +00:00
2013-06-25 10:24:14 +00:00
// Handle the Allow Public Upload Checkbox
$ ( document ) . on ( 'click' , '#sharingDialogAllowPublicUpload' , function ( ) {
// Gather data
2014-09-25 17:46:30 +00:00
var $dropDown = $ ( '#dropdown' ) ;
2013-06-25 10:24:14 +00:00
var allowPublicUpload = $ ( this ) . is ( ':checked' ) ;
2014-09-25 17:46:30 +00:00
var itemType = $dropDown . data ( 'item-type' ) ;
var itemSource = $dropDown . data ( 'item-source' ) ;
var itemSourceName = $dropDown . data ( 'item-source-name' ) ;
2014-05-07 10:17:46 +00:00
var expirationDate = '' ;
if ( $ ( '#expirationCheckbox' ) . is ( ':checked' ) === true ) {
expirationDate = $ ( "#expirationDate" ) . val ( ) ;
}
2013-06-25 10:24:14 +00:00
var permissions = 0 ;
2014-09-25 17:46:30 +00:00
var $button = $ ( this ) ;
var $loading = $dropDown . find ( '#allowPublicUploadWrapper .icon-loading-small' ) ;
if ( ! $loading . hasClass ( 'hidden' ) ) {
// already in progress
return false ;
}
2013-06-25 10:24:14 +00:00
// Calculate permissions
if ( allowPublicUpload ) {
permissions = OC . PERMISSION _UPDATE + OC . PERMISSION _CREATE + OC . PERMISSION _READ ;
} else {
permissions = OC . PERMISSION _READ ;
}
// Update the share information
2014-09-25 17:46:30 +00:00
$button . addClass ( 'hidden' ) ;
$button . prop ( 'disabled' , true ) ;
$loading . removeClass ( 'hidden' ) ;
2014-05-07 10:17:46 +00:00
OC . Share . share ( itemType , itemSource , OC . Share . SHARE _TYPE _LINK , '' , permissions , itemSourceName , expirationDate , function ( data ) {
2014-09-25 17:46:30 +00:00
$loading . addClass ( 'hidden' ) ;
$button . removeClass ( 'hidden' ) ;
$button . prop ( 'disabled' , false ) ;
2013-06-25 10:24:14 +00:00
} ) ;
} ) ;
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'click' , '#dropdown #showPassword' , function ( ) {
2015-03-26 11:21:40 +00:00
$ ( '#linkPass' ) . slideToggle ( OC . menuSpeed ) ;
2012-12-05 13:17:21 +00:00
if ( ! $ ( '#showPassword' ) . is ( ':checked' ) ) {
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
2013-10-23 16:39:37 +00:00
var itemSourceName = $ ( '#dropdown' ) . data ( 'item-source-name' ) ;
2013-09-20 11:11:05 +00:00
var allowPublicUpload = $ ( '#sharingDialogAllowPublicUpload' ) . is ( ':checked' ) ;
2013-09-20 13:47:33 +00:00
var permissions = 0 ;
2014-09-25 17:46:30 +00:00
var $loading = $ ( '#showPassword .icon-loading-small' ) ;
2013-09-20 11:11:05 +00:00
// Calculate permissions
if ( allowPublicUpload ) {
permissions = OC . PERMISSION _UPDATE + OC . PERMISSION _CREATE + OC . PERMISSION _READ ;
} else {
permissions = OC . PERMISSION _READ ;
}
2014-09-25 17:46:30 +00:00
$loading . removeClass ( 'hidden' ) ;
OC . Share . share ( itemType , itemSource , OC . Share . SHARE _TYPE _LINK , '' , permissions , itemSourceName ) . then ( function ( ) {
$loading . addClass ( 'hidden' ) ;
2014-10-15 10:30:31 +00:00
$ ( '#linkPassText' ) . attr ( 'placeholder' , t ( 'core' , 'Choose a password for the public link' ) ) ;
2014-09-25 17:46:30 +00:00
} ) ;
2012-12-14 12:13:01 +00:00
} else {
$ ( '#linkPassText' ) . focus ( ) ;
2012-12-05 13:17:21 +00:00
}
2012-08-28 00:05:51 +00:00
} ) ;
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'focusout keyup' , '#dropdown #linkPassText' , function ( event ) {
2013-07-30 08:26:42 +00:00
var linkPassText = $ ( '#linkPassText' ) ;
if ( linkPassText . val ( ) != '' && ( event . type == 'focusout' || event . keyCode == 13 ) ) {
var allowPublicUpload = $ ( '#sharingDialogAllowPublicUpload' ) . is ( ':checked' ) ;
var dropDown = $ ( '#dropdown' ) ;
var itemType = dropDown . data ( 'item-type' ) ;
var itemSource = dropDown . data ( 'item-source' ) ;
2013-10-23 16:39:37 +00:00
var itemSourceName = $ ( '#dropdown' ) . data ( 'item-source-name' ) ;
2013-07-30 08:26:42 +00:00
var permissions = 0 ;
2014-09-25 17:46:30 +00:00
var $loading = dropDown . find ( '#linkPass .icon-loading-small' ) ;
2013-07-30 08:26:42 +00:00
// Calculate permissions
if ( allowPublicUpload ) {
permissions = OC . PERMISSION _UPDATE + OC . PERMISSION _CREATE + OC . PERMISSION _READ ;
} else {
permissions = OC . PERMISSION _READ ;
}
2015-04-17 07:36:50 +00:00
var expireDateString = OC . Share . getDefaultExpirationDate ( ) ;
2014-09-25 17:46:30 +00:00
$loading . removeClass ( 'hidden' ) ;
2015-04-17 07:36:50 +00:00
OC . Share . share ( itemType , itemSource , OC . Share . SHARE _TYPE _LINK , $ ( '#linkPassText' ) . val ( ) , permissions , itemSourceName , expireDateString , function ( data ) {
2014-09-25 17:46:30 +00:00
$loading . addClass ( 'hidden' ) ;
2013-07-30 08:26:42 +00:00
linkPassText . val ( '' ) ;
linkPassText . attr ( 'placeholder' , t ( 'core' , 'Password protected' ) ) ;
2014-05-12 10:19:07 +00:00
if ( oc _appconfig . core . enforcePasswordForPublicLink ) {
OC . Share . showLink ( data . token , "password set" , itemSource ) ;
OC . Share . updateIcon ( itemType , itemSource ) ;
}
2015-04-17 07:36:50 +00:00
$ ( '#dropdown' ) . trigger ( new $ . Event ( 'sharesChanged' , { shares : OC . Share . currentShares } ) ) ;
2015-07-23 07:39:26 +00:00
} , function ( result ) {
$loading . addClass ( 'hidden' ) ;
linkPassText . val ( '' ) ;
linkPassText . attr ( 'placeholder' , result . data . message ) ;
2012-12-14 12:13:01 +00:00
} ) ;
2014-05-12 10:19:07 +00:00
2015-04-17 07:36:50 +00:00
if ( expireDateString !== '' ) {
OC . Share . showExpirationDate ( expireDateString ) ;
}
2012-12-04 13:06:44 +00:00
}
2012-08-28 00:05:51 +00:00
} ) ;
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'click' , '#dropdown #expirationCheckbox' , function ( ) {
2012-09-01 22:53:48 +00:00
if ( this . checked ) {
2012-09-26 04:04:27 +00:00
OC . Share . showExpirationDate ( '' ) ;
2012-09-01 22:53:48 +00:00
} else {
2012-09-26 04:09:35 +00:00
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : 'setExpirationDate' , itemType : itemType , itemSource : itemSource , date : '' } , function ( result ) {
if ( ! result || result . status !== 'success' ) {
2013-04-09 11:22:34 +00:00
OC . dialogs . alert ( t ( 'core' , 'Error unsetting expiration date' ) , t ( 'core' , 'Error' ) ) ;
2012-09-26 04:09:35 +00:00
}
2015-03-26 11:21:40 +00:00
$ ( '#expirationDate' ) . slideUp ( OC . menuSpeed ) ;
2014-06-03 13:15:04 +00:00
if ( oc _appconfig . core . defaultExpireDateEnforced === false ) {
2015-03-26 11:21:40 +00:00
$ ( '#defaultExpireMessage' ) . slideDown ( OC . menuSpeed ) ;
2014-05-13 09:56:04 +00:00
}
2012-09-26 04:09:35 +00:00
} ) ;
2012-09-01 22:53:48 +00:00
}
} ) ;
2013-03-27 20:18:19 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'change' , '#dropdown #expirationDate' , function ( ) {
2012-09-01 22:53:48 +00:00
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
2014-03-19 11:11:14 +00:00
$ ( this ) . tipsy ( 'hide' ) ;
$ ( this ) . removeClass ( 'error' ) ;
2012-09-01 22:53:48 +00:00
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : 'setExpirationDate' , itemType : itemType , itemSource : itemSource , date : $ ( this ) . val ( ) } , function ( result ) {
if ( ! result || result . status !== 'success' ) {
2014-03-19 11:11:14 +00:00
var expirationDateField = $ ( '#dropdown #expirationDate' ) ;
2014-03-05 12:12:58 +00:00
if ( ! result . data . message ) {
2014-03-19 11:11:14 +00:00
expirationDateField . attr ( 'original-title' , t ( 'core' , 'Error setting expiration date' ) ) ;
2014-03-05 12:12:58 +00:00
} else {
2014-03-19 11:11:14 +00:00
expirationDateField . attr ( 'original-title' , result . data . message ) ;
2014-03-05 12:12:58 +00:00
}
2015-04-15 10:25:10 +00:00
expirationDateField . tipsy ( { gravity : 'n' } ) ;
2014-03-19 11:11:14 +00:00
expirationDateField . tipsy ( 'show' ) ;
expirationDateField . addClass ( 'error' ) ;
2014-05-13 09:56:04 +00:00
} else {
if ( oc _appconfig . core . defaultExpireDateEnforced === 'no' ) {
2015-03-26 11:21:40 +00:00
$ ( '#defaultExpireMessage' ) . slideUp ( OC . menuSpeed ) ;
2014-05-13 09:56:04 +00:00
}
2012-09-01 22:53:48 +00:00
}
} ) ;
} ) ;
2012-12-10 22:22:42 +00:00
2013-02-08 10:05:56 +00:00
$ ( document ) . on ( 'submit' , '#dropdown #emailPrivateLink' , function ( event ) {
event . preventDefault ( ) ;
var link = $ ( '#linkText' ) . val ( ) ;
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
var file = $ ( 'tr' ) . filterAttr ( 'data-id' , String ( itemSource ) ) . data ( 'file' ) ;
var email = $ ( '#email' ) . val ( ) ;
2014-01-23 10:18:23 +00:00
var expirationDate = '' ;
if ( $ ( '#expirationCheckbox' ) . is ( ':checked' ) === true ) {
expirationDate = $ ( "#expirationDate" ) . val ( ) ;
}
2013-02-08 10:05:56 +00:00
if ( email != '' ) {
2013-10-04 11:10:51 +00:00
$ ( '#email' ) . prop ( 'disabled' , true ) ;
2013-02-08 10:05:56 +00:00
$ ( '#email' ) . val ( t ( 'core' , 'Sending ...' ) ) ;
2013-10-04 11:10:51 +00:00
$ ( '#emailButton' ) . prop ( 'disabled' , true ) ;
2012-12-12 11:34:28 +00:00
2014-01-23 10:18:23 +00:00
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : 'email' , toaddress : email , link : link , itemType : itemType , itemSource : itemSource , file : file , expiration : expirationDate } ,
2013-02-08 10:05:56 +00:00
function ( result ) {
2013-10-04 11:10:51 +00:00
$ ( '#email' ) . prop ( 'disabled' , false ) ;
$ ( '#emailButton' ) . prop ( 'disabled' , false ) ;
2013-02-08 10:05:56 +00:00
if ( result && result . status == 'success' ) {
2015-03-23 14:26:28 +00:00
$ ( '#email' ) . css ( 'font-weight' , 'bold' ) . val ( t ( 'core' , 'Email sent' ) ) ;
setTimeout ( function ( ) {
$ ( '#email' ) . css ( 'font-weight' , 'normal' ) . val ( '' ) ;
} , 2000 ) ;
2013-02-08 10:05:56 +00:00
} else {
OC . dialogs . alert ( result . data . message , t ( 'core' , 'Error while sharing' ) ) ;
}
} ) ;
}
} ) ;
2012-12-10 22:22:42 +00:00
2013-08-30 14:29:22 +00:00
$ ( document ) . on ( 'click' , '#dropdown input[name=mailNotification]' , function ( ) {
2013-10-21 14:14:23 +00:00
var $li = $ ( this ) . closest ( 'li' ) ;
2013-08-30 11:53:49 +00:00
var itemType = $ ( '#dropdown' ) . data ( 'item-type' ) ;
var itemSource = $ ( '#dropdown' ) . data ( 'item-source' ) ;
2013-09-24 16:32:57 +00:00
var action = '' ;
2013-08-30 11:53:49 +00:00
if ( this . checked ) {
action = 'informRecipients' ;
} else {
action = 'informRecipientsDisabled' ;
}
2013-10-21 14:14:23 +00:00
var shareType = $li . data ( 'share-type' ) ;
2014-03-28 18:08:59 +00:00
var shareWith = $li . attr ( 'data-share-with' ) ;
2013-08-30 11:53:49 +00:00
$ . post ( OC . filePath ( 'core' , 'ajax' , 'share.php' ) , { action : action , recipient : shareWith , shareType : shareType , itemSource : itemSource , itemType : itemType } , function ( result ) {
if ( result . status !== 'success' ) {
OC . dialogs . alert ( t ( 'core' , result . data . message ) , t ( 'core' , 'Warning' ) ) ;
}
} ) ;
} ) ;
2012-12-10 22:22:42 +00:00
2012-06-25 18:55:49 +00:00
} ) ;