"use strict"; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(_x11, _x12, _x13) { var _again = true; _function: while (_again) { var object = _x11, property = _x12, receiver = _x13; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x11 = parent; _x12 = property; _x13 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } (function (global) { var ShareModel = (function (_Observable) { _inherits(ShareModel, _Observable); function ShareModel(pydio, node) { var dataModel = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; _classCallCheck(this, ShareModel); _get(Object.getPrototypeOf(ShareModel.prototype), "constructor", this).call(this); 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"); }); } } _createClass(ShareModel, [{ key: "initLoad", value: function initLoad() { if (this._node.getMetadata().get('ajxp_shared')) { this.load(); } else { this._setStatus('loaded'); } } }, { key: "getNode", value: function getNode() { return this._node; } }, { key: "hasActiveShares", value: function hasActiveShares() { if (this.hasPublicLink()) return true; var total = this.getSharedUsers().length + this.getOcsLinks().length; return total > 0; } }, { key: "getSelectionLabel", value: function getSelectionLabel() { return this._node.getLabel(); } }, { key: "getStatus", value: function getStatus() { return this._status; } }, { key: "currentRepoIsUserScope", value: function currentRepoIsUserScope() { var repo = this._pydio.user.getRepositoriesList().get(this._pydio.user.getActiveRepository()); return repo.hasUserScope(); } }, { key: "hasPublicLink", value: function hasPublicLink() { var publicLinks = this.getPublicLinks(); return publicLinks.length > 0; } }, { key: "getLinkData", value: function getLinkData(linkId) { return this._data['links'][linkId]; } }, { key: "getPublicLink", value: function getPublicLink(linkId) { return this._data['links'][linkId]['public_link']; } }, { key: "getPublicLinkHash", value: function getPublicLinkHash(linkId) { return this._data['links'][linkId]['hash']; } }, { key: "publicLinkIsShorten", value: function publicLinkIsShorten(linkId) { return this._data['links'][linkId]['hash_is_shorten']; } }, { key: "fileHasWriteableEditors", value: function fileHasWriteableEditors() { return this._previewEditors.filter(function (entry) { return entry.canWrite; }).length > 0; } }, { key: "togglePublicLink", value: function togglePublicLink() { var publicLinks = this.getPublicLinks(); this._pendingData['enable_public_link'] = !publicLinks.length; if (!this._data['links']) { this._data['links'] = {}; } this.save(); } }, { key: "enablePublicLinkWithPassword", value: function 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(); } }, { key: "_initPendingData", value: function _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; } } }, { key: "revertChanges", value: function revertChanges() { this._pendingData = {}; this._setStatus('idle'); } }, { key: "getSharedUsers", value: function getSharedUsers() { var 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; } }, { key: "getSharedUser", value: function getSharedUser(userId) { var 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; } }, { key: "getSharedUsersAsObjects", value: function getSharedUsersAsObjects() { var map = {}; this.getSharedUsers().map(function (uData) { map[uData.ID] = new PydioUsers.User(uData["ID"], uData["LABEL"], uData["TYPE"]); }); return map; } }, { key: "getSharedUserAsObject", value: function getSharedUserAsObject(userId) { var map = this.getSharedUsersAsObjects(); return map[userId]; } }, { key: "updateSharedUser", value: function updateSharedUser(operation, userId, userData) { this._initPendingData(); if (userData['ID']) { userData['ID'] = userId; } var updatedData = []; if (operation == 'add') { var 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'); } }, { key: "_sharedUsersToParameters", value: function _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++; }); } }, { key: "saveSelectionAsTeam", value: function saveSelectionAsTeam(teamName) { var _this = this; var userIds = [], commonRight = undefined; this.getSharedUsers().map(function (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, function (jsonResponse) { var message = jsonResponse.message; var error = jsonResponse.error; var insertId = jsonResponse.insertId; if (error) { _this._pydio.displayMessage('ERROR', error); } else { _this._pydio.displayMessage('SUCCESS', message); } }); } /**********************************************/ /* GLOBAL PARAMETERS : label, desc, notif */ /**********************************************/ }, { key: "getGlobal", value: function 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 { var pluginConfigs = pydio.getPluginConfigs("action.share"); return pluginConfigs.get('WATCHER_SHARES_AUTO_OWNER'); } } else { return this._data[name]; } } }, { key: "setGlobal", value: function setGlobal(name, value) { this._pendingData[name] = value; this._setStatus('modified'); } }, { key: "_globalsAsParameters", value: function _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 */ /**************************/ }, { key: "isPublic", value: function isPublic() { if (this._pendingData["scope"] !== undefined) { return this._pendingData["scope"]; } return this._data["share_scope"] == 'public'; } }, { key: "toggleVisibility", value: function toggleVisibility() { this._pendingData['scope'] = !this.isPublic(); this._setStatus('modified'); } }, { key: "getShareOwner", value: function getShareOwner() { return this._data['share_owner']; } }, { key: "currentIsOwner", value: function currentIsOwner() { return this._pydio.user.id == this.getShareOwner(); } }, { key: "setNewShareOwner", value: function setNewShareOwner(owner) { this._pendingData['new_owner'] = owner; this.save(); } }, { key: "_visibilityDataToParameters", value: function _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 /*****************************************/ }, { key: "getPublicLinks", value: function 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; } }, { key: "getOcsLinks", value: function 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; } }, { key: "getOcsLinksByStatus", value: function getOcsLinksByStatus() { return this.getOcsLinks().sort(function (a, b) { if (!a.invitation || !b.invitation) return 0; return b.invitation.STATUS - a.invitation.STATUS; }); } }, { key: "userEntryForLink", value: function 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; } }, { key: "findPendingKeyForLink", value: function findPendingKeyForLink(linkId, key) { var result; try { result = this._pendingData['links'][linkId][key]; return result; } catch (e) { return null; } } /****************************/ /* PUBLIC LINK PASSWORD */ /****************************/ }, { key: "hasHiddenPassword", value: function hasHiddenPassword(linkId) { return this._data['links'][linkId] && this._data['links'][linkId]['has_password']; } }, { key: "getPassword", value: function getPassword(linkId) { return this.findPendingKeyForLink(linkId, 'password') || ''; } }, { key: "updatePassword", value: function updatePassword(linkId, newValue) { this._initPendingData(); this._pendingData['links'][linkId]['password'] = newValue; this._setStatus('modified'); } }, { key: "resetPassword", value: function resetPassword(linkId) { this._data['links'][linkId]['has_password'] = false; this._data['links'][linkId]['password_cleared'] = true; this.updatePassword(linkId, ''); } }, { key: "_passwordAsParameter", value: function _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 */ /****************************/ }, { key: "getExpirationFor", value: function 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; } }, { key: "getDownloadCounter", value: function 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; } }, { key: "setExpirationFor", value: function setExpirationFor(linkId, name, value) { this._initPendingData(); var expiration = this.findPendingKeyForLink(linkId, "expiration") || {}; expiration[name] = value; this._pendingData['links'][linkId]['expiration'] = expiration; this._setStatus('modified'); } }, { key: "_expirationsToParameters", value: function _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'] = ''; } } }, { key: "isExpired", value: function isExpired(linkId) { return this._data['links'] && this._data['links'][linkId] && this._data["links"][linkId]['is_expired']; } /****************************/ /* PUBLIC LINKS PERMISSIONS */ /****************************/ }, { key: "getPublicLinkPermission", value: function 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; } }, { key: "isPublicLinkPreviewDisabled", value: function isPublicLinkPreviewDisabled() { return this._previewEditors && this._previewEditors.length == 0; } }, { key: "setPublicLinkPermission", value: function 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'); } }, { key: "_permissionsToParameters", value: function _permissionsToParameters(linkId, params) { var isSharedLink = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; 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 */ /****************************/ }, { key: "getTemplate", value: function 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']; } } }, { key: "setTemplate", value: function setTemplate(linkId, tplName) { this._initPendingData(); this._pendingData["links"][linkId]["layout"] = tplName; this._setStatus('modified'); } }, { key: "_templateToParameter", value: function _templateToParameter(linkId, params) { if (this.getTemplate(linkId)) { params['minisite_layout'] = this.getTemplate(linkId); } } /**********************/ /* CUSTOM LINK HANDLE */ /**********************/ }, { key: "updateCustomLink", value: function updateCustomLink(linkId, newValue) { if (newValue == linkId) { return; } this._initPendingData(); this._pendingData['links'][linkId]['custom_link'] = newValue; this.save(); } /*********************************/ /* OCS DATA */ /*********************************/ }, { key: "createRemoteLink", value: function createRemoteLink(host, user) { this._initPendingData(); var newId = Math.random(); this._pendingData['ocs_links'][newId] = { hash: newId, NEW: true, HOST: host, USER: user }; this.save(); } }, { key: "removeRemoteLink", value: function removeRemoteLink(linkId) { this._initPendingData(); if (this._pendingData["ocs_links"][linkId]) { delete this._pendingData["ocs_links"][linkId]; } this.save(); } }, { key: "_ocsLinksToParameters", value: function _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 */ /*********************************/ }, { key: "setValidStatus", value: function setValidStatus(status) { this.notify('valid_status', status); } }, { key: "_setStatus", value: function _setStatus(status) { this._status = status; this.notify('status_changed', { status: status, model: this }); } }, { key: "load", value: function load() { var replaceCache = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0]; if (this._status == 'loading') return; this._setStatus('loading'); var cacheService = MetaCacheService.getInstance(); cacheService.registerMetaStream('action.share', MetaCacheService.EXPIRATION_LOCAL_NODE); if (replaceCache) { cacheService.invalidateMetaForKeys('action.share', this._node.getPath()); } var 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); var cacheLoader = (function (data) { this._data = data; this._pendingData = {}; this._setStatus('idle'); }).bind(this); cacheService.metaForNode('action.share', this._node, ShareModel.loadSharedElementData, remoteLoader, cacheLoader); } }, { key: "save", value: function save() { if (Object.keys(this._pendingData).length) { this.submitToServer(); } } }, { key: "stopSharing", value: function stopSharing() { var callbackFunc = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0]; 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); } }, { key: "submitToServer", value: function 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)); } }, { key: "resetDownloadCounter", value: function resetDownloadCounter(linkId) { var callback = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1]; 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)); } }, { key: "prepareEmail", value: function prepareEmail(shareType) { var linkId = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; 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); var additionalData = ''; var password = this.hasHiddenPassword(linkId); if (password) { additionalData += '\n - ' + MessageHash['share_center.170']; } var dlLimit = this.getExpirationFor(linkId, 'downloads'); if (dlLimit) { additionalData += '\n - ' + MessageHash['share_center.22'] + ': ' + dlLimit; } var expirationDate = this.getExpirationFor(linkId, 'days'); if (expirationDate) { var today = new Date(); var 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); var linkMessage = ''; if (this._data['repository_url']) { if (this.getNode().isLeaf()) { link = this._data['repository_url'].split('/ws-').shift() + '/ws-inbox'; var 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 }; } }], [{ key: "prepareShareActionParameters", value: function 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"; } } }, { key: "loadSharedElementData", value: function loadSharedElementData(node) { var completeCallback = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; var errorCallback = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; var settings = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; 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); } }, { key: "getAuthorizations", value: function 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; } }, { key: "compileLayoutData", value: function 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; } }, { key: "mailerActive", value: function mailerActive() { return global.pydio.Registry.hasPluginOfType("mailer"); } }, { key: "forceMailerOldSchool", value: function forceMailerOldSchool() { return global.pydio.getPluginConfigs("action.share").get("EMAIL_INVITE_EXTERNAL"); } }, { key: "federatedSharingEnabled", value: function federatedSharingEnabled() { return global.pydio.getPluginConfigs("core.ocs").get("ENABLE_FEDERATED_SHARING"); } }, { key: "buildDirectDownloadUrl", value: function buildDirectDownloadUrl(node, publicLink) { var contentProvider = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; var ctString = contentProvider ? '?ct=true' : ''; var link = publicLink.split('--').shift(); return link + (link.endsWith('/') ? '' : '/') + 'dl/' + encodeURIComponent(node.getLabel()) + ctString; } }, { key: "qrcodeEnabled", value: function qrcodeEnabled() { return global.pydio.getPluginConfigs("action.share").get("CREATE_QRCODE"); } }]); return ShareModel; })(Observable); var ReactModel = global.ReactModel || {}; ReactModel['Share'] = ShareModel; global.ReactModel = ReactModel; // Set for dependencies management global.ReactModelShare = ShareModel; })(window);