/* * Copyright 2007-2017 Charles du Jeu - Abstrium SAS * This file is part of Pydio. * * Pydio is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Pydio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Pydio. If not, see . * * The latest code can be found at . */ 'use strict'; exports.__esModule = true; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var XMLUtils = require('pydio/util/xml'); var InputBoolean = require('./../fields/InputBoolean'); var InputText = require('./../fields/TextField'); var ValidPassword = require('./../fields/ValidPassword'); var InputInteger = require('./../fields/InputInteger'); var InputButton = require('./../fields/InputButton'); var MonitoringLabel = require('./../fields/MonitoringLabel'); var InputImage = require('./../fields/InputImage'); var SelectBox = require('./../fields/InputSelectBox'); var AutocompleteBox = require('./../fields/AutocompleteBox'); /** * Utility class to parse / handle pydio standard form definitions/values. */ var Manager = (function () { function Manager() { _classCallCheck(this, Manager); } Manager.hasHelper = function hasHelper(pluginId, paramName) { var helpers = Manager.getHelpersCache(); return helpers[pluginId] && helpers[pluginId]['parameters'][paramName]; }; Manager.getHelpersCache = function getHelpersCache() { if (!Manager.HELPERS_CACHE) { var helperCache = {}; var helpers = XMLUtils.XPathSelectNodes(window.pydio.Registry.getXML(), 'plugins/*/client_settings/resources/js[@type="helper"]'); for (var i = 0; i < helpers.length; i++) { var helperNode = helpers[i]; var plugin = helperNode.getAttribute("plugin"); helperCache[plugin] = { namespace: helperNode.getAttribute('className'), parameters: {} }; var paramNodes = XMLUtils.XPathSelectNodes(helperNode, 'parameter'); for (var k = 0; k < paramNodes.length; k++) { var paramNode = paramNodes[k]; helperCache[plugin]['parameters'][paramNode.getAttribute('name')] = true; } } Manager.HELPERS_CACHE = helperCache; } return Manager.HELPERS_CACHE; }; Manager.parseParameters = function parseParameters(xmlDocument, query) { return XMLUtils.XPathSelectNodes(xmlDocument, query).map((function (node) { return Manager.parameterNodeToHash(node); }).bind(this)); }; Manager.parameterNodeToHash = function parameterNodeToHash(paramNode) { var paramsAtts = paramNode.attributes; var paramsObject = {}; var collectCdata = false; var MessageHash = global.pydio.MessageHash; for (var i = 0; i < paramsAtts.length; i++) { var attName = paramsAtts.item(i).nodeName; var value = paramsAtts.item(i).value; if ((attName == "label" || attName == "description" || attName == "group" || attName.indexOf("group_switch_") === 0) && MessageHash[value]) { value = MessageHash[value]; } if (attName == "cdatavalue") { collectCdata = true; continue; } paramsObject[attName] = value; } if (collectCdata) { paramsObject['value'] = paramNode.firstChild.value; } if (paramsObject['type'] == 'boolean') { if (paramsObject['value'] !== undefined) paramsObject['value'] = paramsObject['value'] == "true"; if (paramsObject['default'] !== undefined) paramsObject['default'] = paramsObject['default'] == "true"; } else if (paramsObject['type'] == 'integer') { if (paramsObject['value'] !== undefined) paramsObject['value'] = parseInt(paramsObject['value']); if (paramsObject['default'] !== undefined) paramsObject['default'] = parseInt(paramsObject['default']); } return paramsObject; }; Manager.createFormElement = function createFormElement(props) { var value = undefined; switch (props.attributes['type']) { case 'boolean': value = React.createElement(InputBoolean, props); break; case 'string': case 'textarea': case 'password': value = React.createElement(InputText, props); break; case 'valid-password': value = React.createElement(ValidPassword, props); break; case 'integer': value = React.createElement(InputInteger, props); break; case 'button': value = React.createElement(InputButton, props); break; case 'monitor': value = React.createElement(MonitoringLabel, props); break; case 'image': value = React.createElement(InputImage, props); break; case 'select': value = React.createElement(SelectBox, props); break; case 'autocomplete': value = React.createElement(AutocompleteBox, props); break; case 'legend': value = null; break; case 'hidden': value = null; break; default: if (!props.value) { value = React.createElement( 'span', { className: 'paramValue-empty' }, 'Empty' ); } else { value = props.value; } break; } return value; }; /** * * Extract POST-ready values from a combo parameters/values * * @param definitions Array Standard Form Definition array * @param values Object Key/Values of the current form * @param prefix String Optional prefix to add to all parameters (by default DRIVER_OPTION_). * @returns Object Object with all pydio-compatible POST parameters */ Manager.getValuesForPOST = function getValuesForPOST(definitions, values) { var prefix = arguments.length <= 2 || arguments[2] === undefined ? 'DRIVER_OPTION_' : arguments[2]; var additionalMetadata = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; var clientParams = {}; for (var key in values) { if (values.hasOwnProperty(key)) { clientParams[prefix + key] = values[key]; var defType = null; for (var d = 0; d < definitions.length; d++) { if (definitions[d]['name'] == key) { defType = definitions[d]['type']; break; } } if (!defType) { var parts = key.split('/'); var last, prev; if (parts.length > 1) { last = parts.pop(); prev = parts.pop(); } for (var k = 0; k < definitions.length; k++) { if (last !== undefined) { if (definitions[k]['name'] == last && definitions[k]['group_switch_name'] && definitions[k]['group_switch_name'] == prev) { defType = definitions[k]['type']; break; } } else { if (definitions[k]['name'] == key) { defType = definitions[k]['type']; break; } } } } //definitions.map(function(d){if(d.name == theKey) defType = d.type}); if (defType) { if (defType == "image") defType = "binary"; clientParams[prefix + key + '_ajxptype'] = defType; } if (additionalMetadata && additionalMetadata[key]) { for (var meta in additionalMetadata[key]) { if (additionalMetadata[key].hasOwnProperty(meta)) { clientParams[prefix + key + '_' + meta] = additionalMetadata[key][meta]; } } } } } // Reorder tree keys var allKeys = Object.keys(clientParams); allKeys.sort(); allKeys.reverse(); var treeKeys = {}; allKeys.map(function (key) { if (key.indexOf("/") === -1) return; if (key.endsWith("_ajxptype")) return; var typeKey = key + "_ajxptype"; var parts = key.split("/"); var parentName = parts.shift(); var parentKey; while (parts.length > 0) { if (!parentKey) { parentKey = treeKeys; } if (!parentKey[parentName]) { parentKey[parentName] = {}; } parentKey = parentKey[parentName]; parentName = parts.shift(); } var type = clientParams[typeKey]; delete clientParams[typeKey]; if (parentKey && !parentKey[parentName]) { if (type == "boolean") { var v = clientParams[key]; parentKey[parentName] = v == "true" || v == 1 || v === true; } else if (type == "integer") { parentKey[parentName] = parseInt(clientParams[key]); } else if (type && type.startsWith("group_switch:") && typeof clientParams[key] == "string") { parentKey[parentName] = { group_switch_value: clientParams[key] }; } else { parentKey[parentName] = clientParams[key]; } } else if (parentKey && type && type.startsWith('group_switch:')) { parentKey[parentName]["group_switch_value"] = clientParams[key]; } delete clientParams[key]; }); for (key in treeKeys) { if (!treeKeys.hasOwnProperty(key)) continue; var treeValue = treeKeys[key]; if (clientParams[key + '_ajxptype'] && clientParams[key + '_ajxptype'].indexOf('group_switch:') === 0 && !treeValue['group_switch_value']) { treeValue['group_switch_value'] = clientParams[key]; } clientParams[key] = JSON.stringify(treeValue); clientParams[key + '_ajxptype'] = "text/json"; } // Clean XXX_group_switch parameters for (var theKey in clientParams) { if (!clientParams.hasOwnProperty(theKey)) continue; if (theKey.indexOf("/") == -1 && clientParams[theKey] && clientParams[theKey + "_ajxptype"] && clientParams[theKey + "_ajxptype"].startsWith("group_switch:")) { if (typeof clientParams[theKey] == "string") { clientParams[theKey] = JSON.stringify({ group_switch_value: clientParams[theKey] }); clientParams[theKey + "_ajxptype"] = "text/json"; } } if (clientParams.hasOwnProperty(theKey)) { if (theKey.endsWith("_group_switch")) { delete clientParams[theKey]; } } } return clientParams; }; return Manager; })(); exports['default'] = Manager; module.exports = exports['default'];