(function(global) {
class ShareModel extends Observable {
constructor(pydio, node, dataModel = null){
super();
this._node = node;
if(dataModel){
this._dataModel = dataModel;
}
this._status = 'idle';
this._data = {link:{}};
this._pendingData = {};
this._pydio = pydio;
if(this._node.isLeaf()){
this._previewEditors = pydio.Registry.findEditorsForMime(this._node.getAjxpMime()).filter(function(entry){
return !(entry.editorClass == "OtherEditorChooser" || entry.editorClass == "BrowserOpener");
});
}
}
initLoad(){
if(this._node.getMetadata().get('ajxp_shared')){
this.load();
}else{
this._setStatus('loaded');
}
}
getNode(){
return this._node;
}
hasActiveShares(){
if(this.hasPublicLink()) return true;
var total = this.getSharedUsers().length + this.getOcsLinks().length;
return total > 0;
}
getSelectionLabel(){
return this._node.getLabel();
}
getStatus(){
return this._status;
}
currentRepoIsUserScope(){
var repo = this._pydio.user.getRepositoriesList().get(this._pydio.user.getActiveRepository());
return repo.hasUserScope();
}
hasPublicLink(){
var publicLinks = this.getPublicLinks();
return publicLinks.length > 0;
}
getLinkData(linkId){
return this._data['links'][linkId];
}
getPublicLink(linkId){
return this._data['links'][linkId]['public_link'];
}
getPublicLinkHash(linkId){
return this._data['links'][linkId]['hash'];
}
publicLinkIsShorten(linkId){
return this._data['links'][linkId]['hash_is_shorten'];
}
fileHasWriteableEditors(){
return this._previewEditors.filter(function(entry){
return (entry.canWrite);
}).length > 0;
}
togglePublicLink(){
var publicLinks = this.getPublicLinks();
this._pendingData['enable_public_link'] = !publicLinks.length;
if(!this._data['links']){
this._data['links'] = {};
}
this.save();
}
enablePublicLinkWithPassword(mandatoryPassword){
this._pendingData['enable_public_link'] = true;
this._initPendingData();
this._pendingData['links']['ajxp_create_public_link'] = {'password':mandatoryPassword};
if(!this._data['links']){
this._data['links'] = {};
}
this.save();
}
_initPendingData(){
if(!this._pendingData['links']){
this._pendingData['links'] = {};
if(this._data['links']){
for(var k in this._data['links']){
if(this._data['links'].hasOwnProperty(k)){
this._pendingData['links'][k] = {};
}
}
}
}
if(!this._pendingData['entries']){
this._pendingData['entries'] = [];
if(this._data['entries']){
// Deep duplicate
this._pendingData['entries'] = JSON.parse(JSON.stringify(this._data['entries']));
}
}
if(!this._pendingData['ocs_links']){
var links = {};
this.getOcsLinks().map(function(l){
links[l.hash] = JSON.parse(JSON.stringify(l));
});
this._pendingData['ocs_links'] = links;
}
}
revertChanges(){
this._pendingData = {};
this._setStatus('idle');
}
getSharedUsers(){
let data = [], sharedData = [];
if(this._pendingData['entries']){
data = this._pendingData['entries'];
}else if(this._data['entries']){
data = this._data['entries'];
}
// Skip minisite temporary user
data.map(function(entry){
if(!entry['HIDDEN']) sharedData.push(entry);
});
return sharedData;
}
getSharedUser(userId){
let data = [], user = null;
if(this._pendingData['entries']){
data = this._pendingData['entries'];
}else if(this._data['entries']){
data = this._data['entries'];
}
data.map(function(entry){
if(entry['ID'] == userId) {
user = entry;
}
});
return user;
}
getSharedUsersAsObjects(){
var map = {};
this.getSharedUsers().map(function(uData){
map[uData.ID] = new PydioUsers.User(
uData["ID"], uData["LABEL"], uData["TYPE"]
);
});
return map;
}
getSharedUserAsObject(userId){
const map = this.getSharedUsersAsObjects();
return map[userId];
}
updateSharedUser(operation, userId, userData){
this._initPendingData();
if(userData['ID']) {
userData['ID'] = userId;
}
var updatedData = [];
if(operation == 'add'){
let pluginsConfig = pydio.getPluginConfigs("action.share");
if(pluginsConfig.get('WATCHER_SHARES_AUTO_USERS')){
userData['WATCH'] = true;
}
this._pendingData['entries'].push(userData);
}else if(operation == 'remove'){
this._pendingData['entries'].map(function(entry){
if(entry['ID'] != userId) updatedData.push(entry);
});
this._pendingData['entries'] = updatedData;
}else if(operation == 'update') {
this._pendingData['entries'].map(function (entry) {
if (entry['ID'] != userId) updatedData.push(entry);
else updatedData.push(userData);
});
this._pendingData['entries'] = updatedData;
}else if(operation == 'update_right'){
// UserData is {right:'read'|'right', add:true|false}
this._pendingData['entries'].map(function (entry) {
if (entry['ID'] != userId) {
updatedData.push(entry);
}
else {
if(userData['right'] == 'watch'){
entry.WATCH = userData['add'];
}else{
var crtRead = (entry.RIGHT.indexOf('r') !== -1 || (userData['right'] == 'read' && userData['add'])) && !(userData['right'] == 'read' && !userData['add']);
var crtWrite = (entry.RIGHT.indexOf('w') !== -1 || (userData['right'] == 'write' && userData['add'])) && !(userData['right'] == 'write' && !userData['add']);
if(!crtRead && !crtWrite){
crtRead = true;
}
entry.RIGHT = (crtRead ? 'r' : '') + (crtWrite ? 'w' : '');
}
updatedData.push(entry);
}
});
this._pendingData['entries'] = updatedData;
}else{
throw new Error('Unsupported operation, should be add, update, update_right or remove');
}
this._setStatus('modified');
}
_sharedUsersToParameters(params){
var entries = this.getSharedUsers();
var index = 0;
entries.map(function(e){
params['user_' + index] = (e.TYPE && e.TYPE === 'team' ? '/AJXP_TEAM/' : '') + e.ID;
params['right_read_' + index] = (e.RIGHT.indexOf('r') !== -1) ? 'true' : 'false';
params['right_write_' + index] = (e.RIGHT.indexOf('w') !== -1) ? 'true' : 'false';
if(e.WATCH){
params['right_watch_' + index] = 'true';
}
params['entry_type_' + index] = (e.TYPE === 'group' || e.TYPE === 'team') ? 'group' : 'user';
index ++;
});
}
saveSelectionAsTeam(teamName){
let userIds = [], commonRight;
this.getSharedUsers().map((e) => {
if(e.TYPE === 'user' || e.TYPE === 'tmp_user') {
userIds.push(e.ID);
if(commonRight === undefined) commonRight = e.RIGHT;
else if(commonRight !== e.RIGHT) commonRight = false;
}
});
PydioUsers.Client.saveSelectionAsTeam(teamName, userIds, (jsonResponse) => {
const {message, error, insertId} = jsonResponse;
if(error){
this._pydio.displayMessage('ERROR', error);
}else{
this._pydio.displayMessage('SUCCESS', message);
}
});
}
/**********************************************/
/* GLOBAL PARAMETERS : label, desc, notif */
/**********************************************/
getGlobal(name){
if(this._pendingData[name] !== undefined){
return this._pendingData[name];
}
if(name == 'watch') {
if(this._data["element_watch"] !== undefined){
return this._data["element_watch"] == 'META_WATCH_BOTH';
}else{
let pluginConfigs = pydio.getPluginConfigs("action.share");
return pluginConfigs.get('WATCHER_SHARES_AUTO_OWNER');
}
}else{
return this._data[name];
}
}
setGlobal(name, value){
this._pendingData[name] = value;
this._setStatus('modified');
}
_globalsAsParameters(params){
params['repo_label'] = this.getGlobal("label") || '';
params['repo_description'] = this.getGlobal("description") || '';
params['self_watch_folder'] = this.getGlobal("watch") ? 'true' : 'false';
}
/**************************/
/* SHARE VISIBILITY */
/**************************/
isPublic(){
if(this._pendingData["scope"] !== undefined){
return this._pendingData["scope"];
}
return this._data["share_scope"] == 'public';
}
toggleVisibility(){
this._pendingData['scope'] = !this.isPublic();
this._setStatus('modified');
}
getShareOwner(){
return this._data['share_owner'];
}
currentIsOwner(){
return (this._pydio.user.id == this.getShareOwner());
}
setNewShareOwner(owner){
this._pendingData['new_owner'] = owner;
this.save();
}
_visibilityDataToParameters(params){
params['share_scope'] = this.isPublic() ? 'public' : 'private';
if(this._pendingData['new_owner'] && this._pendingData['new_owner'] != this._data['owner']){
params['transfer_owner'] = this._pendingData['new_owner'];
}
}
/*****************************************/
/* DETECT PUBLIC LINKS VS. REMOTE LINKS
/*****************************************/
getPublicLinks(){
if(!this._data["links"]) return [];
var result = [];
for(var key in this._data['links']){
if(!this._data['links'].hasOwnProperty(key)) continue;
if(this._data['links'][key]['public_link']){
result.push(this._data['links'][key]);
}
}
return result;
}
getOcsLinks(){
if(this._pendingData["ocs_links"]){
return Object.values(this._pendingData["ocs_links"]);
}
if(!this._data["links"]) return [];
var key, result = [];
for(key in this._data['links']){
if(!this._data['links'].hasOwnProperty(key)) continue;
if(!this._data['links'][key]['public_link']){
result.push(this._data['links'][key]);
}
}
return result;
}
getOcsLinksByStatus() {
return this.getOcsLinks().sort(function(a, b) {
if (!a.invitation || !b.invitation) return 0
return b.invitation.STATUS - a.invitation.STATUS;
});
}
userEntryForLink(linkId){
var linkData;
if(this._pendingData["ocs_links"] && this._pendingData["ocs_links"][linkId]){
linkData = this._pendingData["ocs_links"][linkId];
}else{
for(var key in this._data['links']){
if(!this._data['links'].hasOwnProperty(key)) continue;
if(this._data['links'][key]['hash'] == linkId){
linkData = this._data['links'][key];
}
}
}
if(linkData && linkData['internal_user_id']){
return this.getSharedUser(linkData['internal_user_id']);
}
return false;
}
findPendingKeyForLink(linkId, key){
var result;
try{
result = this._pendingData['links'][linkId][key];
return result;
}catch(e){
return null;
}
}
/****************************/
/* PUBLIC LINK PASSWORD */
/****************************/
hasHiddenPassword(linkId){
return this._data['links'][linkId] && this._data['links'][linkId]['has_password'];
}
getPassword(linkId){
return this.findPendingKeyForLink(linkId, 'password') || '';
}
updatePassword(linkId, newValue){
this._initPendingData();
this._pendingData['links'][linkId]['password'] = newValue;
this._setStatus('modified');
}
resetPassword(linkId){
this._data['links'][linkId]['has_password'] = false;
this._data['links'][linkId]['password_cleared'] = true;
this.updatePassword(linkId, '');
}
_passwordAsParameter(linkId, params){
if(this._pendingData['links'] && this._pendingData['links'][linkId] && this._pendingData['links'][linkId]['password']){
params['guest_user_pass'] = this._pendingData['links'][linkId]['password'];
}else if(this._data['links'] && this._data['links'][linkId] && this._data['links'][linkId]['password_cleared']){
params['guest_user_pass'] = '';
}
}
/****************************/
/* PUBLIC LINK EXPIRATION */
/****************************/
getExpirationFor(linkId, name){
var pendingExpiration = this.findPendingKeyForLink(linkId, 'expiration');
if(pendingExpiration && pendingExpiration[name] !== undefined){
return pendingExpiration[name];
}
var current; var defaults={days:0, downloads:0};
if(this._data['links'] && this._data['links'][linkId]){
if(name == 'days'){
current = this._data['links'][linkId]['expire_after'];
}else if(name == 'downloads'){
current = this._data['links'][linkId]['download_limit'];
}
}else{
current = defaults[name];
}
return current;
}
getDownloadCounter(linkId){
if(this._data['links'] && this._data['links'][linkId] && this._data['links'][linkId]['download_counter']){
return this._data['links'][linkId]['download_counter'];
}
return 0;
}
setExpirationFor(linkId, name, value){
this._initPendingData();
var expiration = this.findPendingKeyForLink(linkId, "expiration") || {};
expiration[name] = value;
this._pendingData['links'][linkId]['expiration'] = expiration;
this._setStatus('modified');
}
_expirationsToParameters(linkId, params){
if(this.getExpirationFor(linkId, 'days')) {
params['expiration'] = this.getExpirationFor(linkId, 'days');
}else{
params['expiration'] = '';
}
if(this.getExpirationFor(linkId, 'downloads')) {
params['downloadlimit'] = this.getExpirationFor(linkId, 'downloads');
}else{
params['downloadlimit'] = '';
}
}
isExpired(linkId){
return (this._data['links'] && this._data['links'][linkId] && this._data["links"][linkId]['is_expired']);
}
/****************************/
/* PUBLIC LINKS PERMISSIONS */
/****************************/
getPublicLinkPermission(linkId, name){
var permissions = this.findPendingKeyForLink(linkId, "permissions");
if(permissions && permissions[name] !== undefined){
return permissions[name];
}
var userEntry = this.userEntryForLink(linkId);
var current;
var defaults = {
read : (!this._previewEditors || this._previewEditors.length > 0),
download: true,
write:false
};
var json;
if(this._data['ocs_links'] && this._data['ocs_links'][linkId]) {
json = this._data['ocs_links'][linkId];
}else if(this._data['links'] && this._data['links'][linkId]){
json = this._data['links'][linkId];
}
if(json){
if(name == 'download'){
current = ! json['disable_download'];
}else if(name == 'read'){
current = (userEntry.RIGHT.indexOf('r') !== -1 && json['minisite_layout']!='ajxp_unique_dl');
}else if(name == 'write'){
current = (userEntry.RIGHT.indexOf('w') !== -1);
}
}else{
current = defaults[name];
}
return current;
}
isPublicLinkPreviewDisabled(){
return (this._previewEditors && this._previewEditors.length == 0);
}
setPublicLinkPermission(linkId, name, value){
this._initPendingData();
var permissions = this._pendingData['links'][linkId]['permissions'] || {};
permissions[name] = value;
this._pendingData['links'][linkId]['permissions'] = permissions;
this._setStatus('modified');
}
_permissionsToParameters(linkId, params, isSharedLink = false){
if(this.getPublicLinkPermission(linkId, 'read')){
params['simple_right_read'] = 'on';
}
if(!isSharedLink && this.getPublicLinkPermission(linkId, 'download')){
params['simple_right_download'] = 'on';
}
if(this.getPublicLinkPermission(linkId, 'write')){
params['simple_right_write'] = 'on';
}
}
/****************************/
/* PUBLIC LINKS TEMPLATE */
/****************************/
getTemplate(linkId){
if(this._pendingData["links"] && this._pendingData["links"][linkId] && this._pendingData["links"][linkId]["layout"]){
return this._pendingData["links"][linkId]["layout"];
}
if(this._node.isLeaf()){
if(this.getPublicLinkPermission(linkId, 'read')){
return 'ajxp_unique_strip';
}else{
return 'ajxp_unique_dl';
}
}
if(this._data['links'] && this._data['links'][linkId] && this._data['links'][linkId]['minisite_layout']){
return this._data['links'][linkId]['minisite_layout'];
}
}
setTemplate(linkId, tplName){
this._initPendingData();
this._pendingData["links"][linkId]["layout"] = tplName;
this._setStatus('modified');
}
_templateToParameter(linkId, params){
if(this.getTemplate(linkId)){
params['minisite_layout'] = this.getTemplate(linkId);
}
}
/**********************/
/* CUSTOM LINK HANDLE */
/**********************/
updateCustomLink(linkId, newValue){
if(newValue == linkId){
return;
}
this._initPendingData();
this._pendingData['links'][linkId]['custom_link'] = newValue;
this.save();
}
/*********************************/
/* OCS DATA */
/*********************************/
createRemoteLink(host, user){
this._initPendingData();
var newId = Math.random();
this._pendingData['ocs_links'][newId] = {
hash:newId,
NEW:true,
HOST:host,
USER:user
};
this.save();
}
removeRemoteLink(linkId){
this._initPendingData();
if(this._pendingData["ocs_links"][linkId]){
delete this._pendingData["ocs_links"][linkId];
}
this.save();
}
_ocsLinksToParameters(params){
var ocsData = {
LINKS:[],
REMOVE:[]
};
if(this._pendingData["ocs_links"]){
for(var key in this._data["links"]){
if(!this._data["links"].hasOwnProperty(key) || this._data["links"][key]["public_link"]) {
continue;
}
if(!this._pendingData["ocs_links"][key]){
ocsData.REMOVE.push(key);
}
}
}
this.getOcsLinks().map(function(link){
var pLinkId = link.hash;
this._permissionsToParameters(pLinkId, link, true);
this._expirationsToParameters(pLinkId, link);
this._passwordAsParameter(pLinkId, link);
this._templateToParameter(pLinkId, link);
if(link.NEW){
delete link['hash'];
delete link['NEW'];
}
ocsData.LINKS.push(link);
}.bind(this));
params["ocs_data"] = JSON.stringify(ocsData);
}
/*********************************/
/* GENERIC: STATUS / LOAD / SAVE */
/*********************************/
setValidStatus(status){
this.notify('valid_status', status);
}
_setStatus(status){
this._status = status;
this.notify('status_changed', {
status: status,
model: this
});
}
load(replaceCache = false){
if(this._status == 'loading') return;
this._setStatus('loading');
let cacheService = MetaCacheService.getInstance();
cacheService.registerMetaStream('action.share', MetaCacheService.EXPIRATION_LOCAL_NODE);
if(replaceCache){
cacheService.invalidateMetaForKeys('action.share', this._node.getPath());
}
let remoteLoader = function(transport){
if(transport.responseJSON){
this._data = transport.responseJSON;
if(this._data instanceof Array) this._data = {};
this._pendingData = {};
this._setStatus('idle');
return this._data;
}else if(transport.responseXML && XMLUtils.XPathGetSingleNodeText(transport.responseXML, '//message[@type="ERROR"]')){
this._setStatus('error');
return null;
}
}.bind(this);
let cacheLoader = function(data){
this._data = data;
this._pendingData = {};
this._setStatus('idle');
}.bind(this);
cacheService.metaForNode('action.share', this._node, ShareModel.loadSharedElementData, remoteLoader, cacheLoader);
}
save(){
if(Object.keys(this._pendingData).length){
this.submitToServer();
}
}
stopSharing(callbackFunc = null){
var params = {
get_action:'unshare'
};
if(this._data && this._data['share_scope']){
params['share_scope'] = this._data['share_scope'];
}
ShareModel.prepareShareActionParameters(this.getNode(), params);
PydioApi.getClient().request(params, function(response){
try{
if(this._dataModel && this._pydio.getContextHolder() !== this._dataModel) {
this._dataModel.requireContextChange(this._dataModel.getRootNode(), true);
}else{
this._pydio.fireNodeRefresh(this._node);
}
}catch(e){
}
if(callbackFunc){
callbackFunc(response);
}else{
this.load();
}
}.bind(this), null);
}
submitToServer(){
var params = {
get_action:'share',
sub_action:'share_node',
return_json:'true'
};
if(this._pendingData["enable_public_link"] !== undefined){
if(this._pendingData["enable_public_link"]) {
params["enable_public_link"] = "true";
} else {
params["disable_public_link"] = this.getPublicLinks()[0]['hash'];
}
}else if(this.getPublicLinks().length){
params["enable_public_link"] = "true";
}
if(this._node.getMetadata().get('shared_element_hash')){
params["tmp_repository_id"] = this._node.getMetadata().get('shared_element_parent_repository');
params["file"] = this._node.getMetadata().get("original_path");
}else{
params["file"] = this._node.getPath();
}
if(this._data['repositoryId']){
params['repository_id'] = this._data['repositoryId'];
}else{
params["element_type"] = this._node.isLeaf() ? "file" : this._node.getMetadata().get("ajxp_shared_minisite")? "minisite" : "repository";
params['create_guest_user'] = 'true';
}
this._globalsAsParameters(params);
if(!params['repo_label']){
params['repo_label'] = this._node.getLabel();
}
this.notify('saving');
var publicLinks = this.getPublicLinks();
if(publicLinks.length){
var pLinkId = publicLinks[0]['hash'];
var userEntry = this.userEntryForLink(pLinkId);
params['guest_user_id'] = userEntry['internal_user_id'];
params['hash'] = pLinkId;
// PUBLIC LINKS
this._permissionsToParameters(pLinkId, params);
this._expirationsToParameters(pLinkId, params);
this._passwordAsParameter(pLinkId, params);
this._templateToParameter(pLinkId, params);
if(this._pendingData['links'] && this._pendingData['links'][pLinkId] && this._pendingData['links'][pLinkId]['custom_link']){
params['custom_handle'] = this._pendingData['links'][pLinkId]['custom_link'];
}
}else if(this._pendingData["enable_public_link"] === true){
this._permissionsToParameters('ajxp_create_public_link', params);
this._expirationsToParameters('ajxp_create_public_link', params);
this._passwordAsParameter('ajxp_create_public_link', params);
this._templateToParameter('ajxp_create_public_link', params);
}
// GENERIC
this._visibilityDataToParameters(params);
this._sharedUsersToParameters(params);
// OCS LINK
this._ocsLinksToParameters(params);
PydioApi.getClient().request(params, function(transport){
var _data = transport.responseJSON;
if(_data !== null && _data !== undefined){
this._data = _data;
if(this._data instanceof Array) this._data = {};
this._pendingData = {};
this._setStatus('saved');
this._pydio.fireNodeRefresh(this._node);
}else{
// There must have been an error, revert
this.revertChanges();
}
this.notify('saved');
}.bind(this), function(){
// The must have been an error, revert
this.revertChanges();
this.notify('saved');
}.bind(this));
}
resetDownloadCounter(linkId, callback = function(){}){
var params = {
"get_action":"reset_counter",
"element_id" : linkId
};
ShareModel.prepareShareActionParameters(this.getNode(), params);
PydioApi.getClient().request(params, function(){
this.load(true);
callback();
}.bind(this));
}
static prepareShareActionParameters(uniqueNode, params){
var meta = uniqueNode.getMetadata();
if(meta.get('shared_element_hash')){
params["hash"] = meta.get('shared_element_hash');
params["tmp_repository_id"] = meta.get('shared_element_parent_repository');
params["element_type"] = meta.get('share_type');
params["file"] = meta.get("original_path");
}else{
params["file"] = uniqueNode.getPath();
params["element_type"] = uniqueNode.isLeaf() ? "file" : meta.get("ajxp_shared_minisite")? "minisite" : "repository";
}
}
static loadSharedElementData(node, completeCallback=null, errorCallback=null, settings={}){
var meta = node.getMetadata();
var options = {
get_action : 'load_shared_element_data',
merged : 'true'
};
if(meta.get('shared_element_hash')){
options["tmp_repository_id"] = meta.get('shared_element_parent_repository');
options["file"] = meta.get("original_path");
options["owner"] = meta.get("owner");
}else{
options["file"] = node.getPath();
}
PydioApi.getClient().request(options, completeCallback, errorCallback, settings);
}
static getAuthorizations(pydio){
var pluginConfigs = pydio.getPluginConfigs("action.share");
var authorizations = {
folder_public_link : pluginConfigs.get("ENABLE_FOLDER_PUBLIC_LINK"),
folder_workspaces : pluginConfigs.get("ENABLE_FOLDER_INTERNAL_SHARING"),
file_public_link : pluginConfigs.get("ENABLE_FILE_PUBLIC_LINK"),
file_workspaces : pluginConfigs.get("ENABLE_FILE_INTERNAL_SHARING"),
editable_hash : pluginConfigs.get("HASH_USER_EDITABLE"),
pass_mandatory: false,
max_expiration : pluginConfigs.get("FILE_MAX_EXPIRATION"),
max_downloads : pluginConfigs.get("FILE_MAX_DOWNLOAD")
};
var pass_mandatory = pluginConfigs.get("SHARE_FORCE_PASSWORD");
if(pass_mandatory){
authorizations.password_mandatory = true;
}
authorizations.password_placeholder = pass_mandatory ? pydio.MessageHash['share_center.176'] : pydio.MessageHash['share_center.148'];
return authorizations;
}
static compileLayoutData(pydio, node){
// Search registry for template nodes starting with minisite_
var tmpl;
if(node.isLeaf()){
var currentExt = node.getAjxpMime();
tmpl = XMLUtils.XPathSelectNodes(pydio.getXmlRegistry(), "//template[contains(@name, 'unique_preview_')]");
}else{
tmpl = XMLUtils.XPathSelectNodes(pydio.getXmlRegistry(), "//template[contains(@name, 'minisite_')]");
}
if(!tmpl.length){
return [];
}
if(tmpl.length == 1){
return [{LAYOUT_NAME:tmpl[0].getAttribute('element'), LAYOUT_LABEL:''}];
}
var crtTheme = pydio.Parameters.get('theme');
var values = [];
var noEditorsFound = false;
tmpl.map(function(node){
var theme = node.getAttribute('theme');
if(theme && theme != crtTheme) return;
var element = node.getAttribute('element');
var name = node.getAttribute('name');
var label = node.getAttribute('label');
if(currentExt && name == "unique_preview_file"){
var editors = pydio.Registry.findEditorsForMime(currentExt);
if(!editors.length || (editors.length == 1 && editors[0].editorClass == "OtherEditorChooser")) {
noEditorsFound = true;
return;
}
}
if(label) {
if(MessageHash[label]) label = MessageHash[label];
}else{
label = node.getAttribute('name');
}
values[name] = element;
//chooser.insert(new Element('option', {value:element}).update(label));
values.push({LAYOUT_NAME:name, LAYOUT_ELEMENT:element, LAYOUT_LABEL: label});
});
return values;
}
static mailerActive(){
return global.pydio.Registry.hasPluginOfType("mailer");
}
static forceMailerOldSchool(){
return global.pydio.getPluginConfigs("action.share").get("EMAIL_INVITE_EXTERNAL");
}
static federatedSharingEnabled(){
return global.pydio.getPluginConfigs("core.ocs").get("ENABLE_FEDERATED_SHARING");
}
static buildDirectDownloadUrl(node, publicLink, contentProvider = false){
let ctString = contentProvider ? '?ct=true' : '';
let link = publicLink.split('--').shift();
return link + (link.endsWith('/')? '' : '/') + 'dl/'+encodeURIComponent(node.getLabel()) + ctString;
}
static qrcodeEnabled(){
return global.pydio.getPluginConfigs("action.share").get("CREATE_QRCODE");
}
prepareEmail(shareType, linkId = null){
var MessageHash = global.pydio.MessageHash;
var ApplicationTitle = global.pydio.appTitle;
var s, message, link = '';
if(shareType == "link"){
s = MessageHash["share_center.42"];
if(s) s = s.replace("%s", ApplicationTitle);
link = this.getPublicLink(linkId);
let additionalData = '';
let password = this.hasHiddenPassword(linkId);
if(password){
additionalData += '\n - ' + MessageHash['share_center.170'];
}
let dlLimit = this.getExpirationFor(linkId, 'downloads');
if(dlLimit){
additionalData += '\n - ' + MessageHash['share_center.22'] + ': ' + dlLimit;
}
let expirationDate = this.getExpirationFor(linkId, 'days');
if(expirationDate){
let today = new Date();
let expDate = new Date();
expDate.setDate(today.getDate() + parseInt(expirationDate));
additionalData += '\n - ' + MessageHash['share_center.21'] + ': ' + expDate.toLocaleDateString();
}
if(ShareModel.forceMailerOldSchool()){
message = s + additionalData + "\n\n: " + link;
}else{
message = s + additionalData + "\n\n" + ""+link+"";
}
}else{
if(!this._data['repository_url']){
throw new Error(MessageHash['share_center.230']);
}
s = MessageHash["share_center." + (this.getNode().isLeaf() ? "42" : "43")];
if(s) s = s.replace("%s", ApplicationTitle);
let linkMessage = '';
if(this._data['repository_url']){
if(this.getNode().isLeaf()){
link = this._data['repository_url'].split('/ws-').shift() + '/ws-inbox';
let sharedFilesString = MessageHash["share_center.100"];
if(ShareModel.forceMailerOldSchool()){
linkMessage = MessageHash["share_center.234"].replace('%s', sharedFilesString) + " ("+ link +")";
}else{
linkMessage = MessageHash["share_center.234"].replace('%s', ''+ sharedFilesString +'');
}
}else{
link = this._data['repository_url'];
if(ShareModel.forceMailerOldSchool()){
linkMessage = ": " + link;
}else{
linkMessage = "" + MessageHash["share_center.46"].replace("%s1", this.getGlobal("label")).replace("%s2", ApplicationTitle) + "";
}
}
}
message = s + "\n\n " + linkMessage;
}
var usersList = null;
if(this.shareFolderMode == 'workspace' && oForm) {
usersList = oForm.down(".editable_users_list");
}
var subject = MessageHash["share_center.44"].replace("%s", ApplicationTitle);
var panelTitle = MessageHash["share_center.45"];
return {
subject: subject,
message: message
};
}
}
var ReactModel = global.ReactModel || {};
ReactModel['Share'] = ShareModel;
global.ReactModel = ReactModel;
// Set for dependencies management
global.ReactModelShare = ShareModel;
})(window);