--- /dev/null
+(window["webpackJsonpSettings"] = window["webpackJsonpSettings"] || []).push([[2],{
+
+/***/ "./apps/settings/src/components/UserList.vue":
+/*!***************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue ***!
+ \***************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserList.vue?vue&type=template&id=6cba3aca& */ "./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&");
+/* harmony import */ var _UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserList.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&":
+/*!****************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib!../../../../node_modules/vue-loader/lib??vue-loader-options!./UserList.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&":
+/*!**********************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca& ***!
+ \**********************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue":
+/*!***********************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue ***!
+ \***********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserRow.vue?vue&type=template&id=77960baa& */ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&");
+/* harmony import */ var _UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserRow.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList/UserRow.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib!../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserRow.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&":
+/*!******************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa& ***!
+ \******************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserRow.vue?vue&type=template&id=77960baa& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue":
+/*!*****************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue ***!
+ \*****************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true& */ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&");
+/* harmony import */ var _UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserRowSimple.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ "ff154a08",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList/UserRowSimple.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib!../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&":
+/*!************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true& ***!
+ \************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib??vue-loader-options!./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/mixins/UserRowMixin.js":
+/*!**************************************************!*\
+ !*** ./apps/settings/src/mixins/UserRowMixin.js ***!
+ \**************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ settings: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ groups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ subAdminsGroups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ quotaOptions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ languages: {
+ type: Array,
+ required: true
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ },
+ computed: {
+ /* GROUPS MANAGEMENT */
+ userGroups: function userGroups() {
+ var _this = this;
+
+ var userGroups = this.groups.filter(function (group) {
+ return _this.user.groups.includes(group.id);
+ });
+ return userGroups;
+ },
+ userSubAdminsGroups: function userSubAdminsGroups() {
+ var _this2 = this;
+
+ var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {
+ return _this2.user.subadmin.includes(group.id);
+ });
+ return userSubAdminsGroups;
+ },
+ availableGroups: function availableGroups() {
+ var _this3 = this;
+
+ return this.groups.map(function (group) {
+ // clone object because we don't want
+ // to edit the original groups
+ var groupClone = Object.assign({}, group); // two settings here:
+ // 1. user NOT in group but no permission to add
+ // 2. user is in group but no permission to remove
+
+ groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);
+ return groupClone;
+ });
+ },
+
+ /* QUOTA MANAGEMENT */
+ usedSpace: function usedSpace() {
+ if (this.user.quota.used) {
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(this.user.quota.used)
+ });
+ }
+
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(0)
+ });
+ },
+ usedQuota: function usedQuota() {
+ var quota = this.user.quota.quota;
+
+ if (quota > 0) {
+ quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));
+ } else {
+ var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota
+
+ quota = 95 * (1 - 1 / (usedInGB + 1));
+ }
+
+ return isNaN(quota) ? 0 : quota;
+ },
+ // Mapping saved values to objects
+ userQuota: function userQuota() {
+ if (this.user.quota.quota >= 0) {
+ // if value is valid, let's map the quotaOptions or return custom quota
+ var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);
+ var userQuota = this.quotaOptions.find(function (quota) {
+ return quota.id === humanQuota;
+ });
+ return userQuota || {
+ id: humanQuota,
+ label: humanQuota
+ };
+ } else if (this.user.quota.quota === 'default') {
+ // default quota is replaced by the proper value on load
+ return this.quotaOptions[0];
+ }
+
+ return this.quotaOptions[1]; // unlimited
+ },
+
+ /* PASSWORD POLICY? */
+ minPasswordLength: function minPasswordLength() {
+ return this.$store.getters.getPasswordPolicyMinLength;
+ },
+
+ /* LANGUAGE */
+ userLanguage: function userLanguage() {
+ var _this4 = this;
+
+ var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);
+ var userLang = availableLanguages.find(function (lang) {
+ return lang.code === _this4.user.language;
+ });
+
+ if (_typeof(userLang) !== 'object' && this.user.language !== '') {
+ return {
+ code: this.user.language,
+ name: this.user.language
+ };
+ } else if (this.user.language === '') {
+ return false;
+ }
+
+ return userLang;
+ },
+
+ /* LAST LOGIN */
+ userLastLoginTooltip: function userLastLoginTooltip() {
+ if (this.user.lastLogin > 0) {
+ return OC.Util.formatDate(this.user.lastLogin);
+ }
+
+ return '';
+ },
+ userLastLogin: function userLastLogin() {
+ if (this.user.lastLogin > 0) {
+ return OC.Util.relativeModifiedDate(this.user.lastLogin);
+ }
+
+ return t('settings', 'Never');
+ }
+ },
+ methods: {
+ /**
+ * Generate avatar url
+ *
+ * @param {string} user The user name
+ * @param {int} size Size integer, default 32
+ * @returns {string}
+ */
+ generateAvatar: function generateAvatar(user) {
+ var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;
+ return OC.generateUrl('/avatar/{user}/{size}?v={version}', {
+ user: user,
+ size: size,
+ version: oc_userconfig.avatar.version
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue":
+/*!*******************************************!*\
+ !*** ./apps/settings/src/views/Users.vue ***!
+ \*******************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Users.vue?vue&type=template&id=889b7562& */ "./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&");
+/* harmony import */ var _Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Users.vue?vue&type=script&lang=js& */ "./apps/settings/src/views/Users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+
+var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__["render"],
+ _Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"],
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/views/Users.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue?vue&type=script&lang=js&":
+/*!********************************************************************!*\
+ !*** ./apps/settings/src/views/Users.vue?vue&type=script&lang=js& ***!
+ \********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib!../../../../node_modules/vue-loader/lib??vue-loader-options!./Users.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/views/Users.vue?vue&type=script&lang=js&");
+/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&":
+/*!**************************************************************************!*\
+ !*** ./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562& ***!
+ \**************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./Users.vue?vue&type=template&id=889b7562& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&");
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__["render"]; });
+
+/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; });
+
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserList_UserRow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserList/UserRow */ "./apps/settings/src/components/UserList/UserRow.vue");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nextcloud-vue */ "./node_modules/nextcloud-vue/dist/ncvuecomponents.js");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var vue_infinite_loading__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-infinite-loading */ "./node_modules/vue-infinite-loading/dist/vue-infinite-loading.js");
+/* harmony import */ var vue_infinite_loading__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue_infinite_loading__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+var unlimitedQuota = {
+ id: 'none',
+ label: t('settings', 'Unlimited')
+};
+var defaultQuota = {
+ id: 'default',
+ label: t('settings', 'Default quota')
+};
+var newUser = {
+ id: '',
+ displayName: '',
+ password: '',
+ mailAddress: '',
+ groups: [],
+ subAdminsGroups: [],
+ quota: defaultQuota,
+ language: {
+ code: 'en',
+ name: t('settings', 'Default language')
+ }
+};
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserList',
+ components: {
+ userRow: _UserList_UserRow__WEBPACK_IMPORTED_MODULE_0__["default"],
+ Multiselect: nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__["Multiselect"],
+ InfiniteLoading: vue_infinite_loading__WEBPACK_IMPORTED_MODULE_2___default.a
+ },
+ props: {
+ users: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ required: true
+ },
+ selectedGroup: {
+ type: String,
+ default: null
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ },
+ data: function data() {
+ return {
+ unlimitedQuota: unlimitedQuota,
+ defaultQuota: defaultQuota,
+ loading: {
+ all: false,
+ groups: false
+ },
+ scrolled: false,
+ searchQuery: '',
+ newUser: Object.assign({}, newUser)
+ };
+ },
+ computed: {
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ },
+ filteredUsers: function filteredUsers() {
+ if (this.selectedGroup === 'disabled') {
+ return this.users.filter(function (user) {
+ return user.enabled === false;
+ });
+ }
+
+ if (!this.settings.isAdmin) {
+ // we don't want subadmins to edit themselves
+ return this.users.filter(function (user) {
+ return user.enabled !== false && user.id !== OC.getCurrentUser().uid;
+ });
+ }
+
+ return this.users.filter(function (user) {
+ return user.enabled !== false;
+ });
+ },
+ groups: function groups() {
+ // data provided php side + remove the disabled group
+ return this.$store.getters.getGroups.filter(function (group) {
+ return group.id !== 'disabled';
+ }).sort(function (a, b) {
+ return a.name.localeCompare(b.name);
+ });
+ },
+ canAddGroups: function canAddGroups() {
+ // disabled if no permission to add new users to group
+ return this.groups.map(function (group) {
+ // clone object because we don't want
+ // to edit the original groups
+ group = Object.assign({}, group);
+ group.$isDisabled = group.canAdd === false;
+ return group;
+ });
+ },
+ subAdminsGroups: function subAdminsGroups() {
+ // data provided php side
+ return this.$store.getters.getSubadminGroups;
+ },
+ quotaOptions: function quotaOptions() {
+ // convert the preset array into objects
+ var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {
+ return acc.concat({
+ id: cur,
+ label: cur
+ });
+ }, []); // add default presets
+
+ quotaPreset.unshift(this.unlimitedQuota);
+ quotaPreset.unshift(this.defaultQuota);
+ return quotaPreset;
+ },
+ minPasswordLength: function minPasswordLength() {
+ return this.$store.getters.getPasswordPolicyMinLength;
+ },
+ usersOffset: function usersOffset() {
+ return this.$store.getters.getUsersOffset;
+ },
+ usersLimit: function usersLimit() {
+ return this.$store.getters.getUsersLimit;
+ },
+ usersCount: function usersCount() {
+ return this.users.length;
+ },
+
+ /* LANGUAGES */
+ languages: function languages() {
+ return [{
+ label: t('settings', 'Common languages'),
+ languages: this.settings.languages.commonlanguages
+ }, {
+ label: t('settings', 'All languages'),
+ languages: this.settings.languages.languages
+ }];
+ }
+ },
+ watch: {
+ // watch url change and group select
+ selectedGroup: function selectedGroup(val, old) {
+ // if selected is the disabled group but it's empty
+ this.redirectIfDisabled();
+ this.$store.commit('resetUsers');
+ this.$refs.infiniteLoading.stateChanger.reset();
+ this.setNewUserDefaultGroup(val);
+ },
+ // make sure the infiniteLoading state is changed if we manually
+ // add/remove data from the store
+ usersCount: function usersCount(val, old) {
+ // deleting the last user, reset the list
+ if (val === 0 && old === 1) {
+ this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that
+ // the list is not empty anymore (we don't fetch the newly
+ // added user as we already have all the info we need)
+ } else if (val === 1 && old === 0) {
+ this.$refs.infiniteLoading.stateChanger.loaded();
+ }
+ }
+ },
+ mounted: function mounted() {
+ if (!this.settings.canChangePassword) {
+ OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));
+ }
+ /**
+ * Reset and init new user form
+ */
+
+
+ this.resetForm();
+ /**
+ * Register search
+ */
+
+ this.userSearch = new OCA.Search(this.search, this.resetSearch);
+ /**
+ * If disabled group but empty, redirect
+ */
+
+ this.redirectIfDisabled();
+ },
+ methods: {
+ onScroll: function onScroll(event) {
+ this.scrolled = event.target.scrollTo > 0;
+ },
+
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @returns {Object}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+
+ if (validQuota !== null && validQuota >= 0) {
+ // unify format output
+ quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));
+ this.newUser.quota = {
+ id: quota,
+ label: quota
+ };
+ return this.newUser.quota;
+ } // Default is unlimited
+
+
+ this.newUser.quota = this.quotaOptions[0];
+ return this.quotaOptions[0];
+ },
+ infiniteHandler: function infiniteHandler($state) {
+ this.$store.dispatch('getUsers', {
+ offset: this.usersOffset,
+ limit: this.usersLimit,
+ group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',
+ search: this.searchQuery
+ }).then(function (response) {
+ response ? $state.loaded() : $state.complete();
+ });
+ },
+
+ /* SEARCH */
+ search: function search(query) {
+ this.searchQuery = query;
+ this.$store.commit('resetUsers');
+ this.$refs.infiniteLoading.stateChanger.reset();
+ },
+ resetSearch: function resetSearch() {
+ this.search('');
+ },
+ resetForm: function resetForm() {
+ // revert form to original state
+ this.newUser = Object.assign({}, newUser);
+ /**
+ * Init default language from server data. The use of this.settings
+ * requires a computed variable, which break the v-model binding of the form,
+ * this is a much easier solution than getter and setter on a computed var
+ */
+
+ if (this.settings.defaultLanguage) {
+ vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(this.newUser.language, 'code', this.settings.defaultLanguage);
+ }
+ /**
+ * In case the user directly loaded the user list within a group
+ * the watch won't be triggered. We need to initialize it.
+ */
+
+
+ this.setNewUserDefaultGroup(this.selectedGroup);
+ this.loading.all = false;
+ },
+ createUser: function createUser() {
+ var _this = this;
+
+ this.loading.all = true;
+ this.$store.dispatch('addUser', {
+ userid: this.newUser.id,
+ password: this.newUser.password,
+ displayName: this.newUser.displayName,
+ email: this.newUser.mailAddress,
+ groups: this.newUser.groups.map(function (group) {
+ return group.id;
+ }),
+ subadmin: this.newUser.subAdminsGroups.map(function (group) {
+ return group.id;
+ }),
+ quota: this.newUser.quota.id,
+ language: this.newUser.language.code
+ }).then(function () {
+ _this.resetForm();
+
+ _this.$refs.newusername.focus();
+ }).catch(function (error) {
+ _this.loading.all = false;
+
+ if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {
+ var statuscode = error.response.data.ocs.meta.statuscode;
+
+ if (statuscode === 102) {
+ // wrong username
+ _this.$refs.newusername.focus();
+ } else if (statuscode === 107) {
+ // wrong password
+ _this.$refs.newuserpassword.focus();
+ }
+ }
+ });
+ },
+ setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {
+ if (value && value.length > 0) {
+ // setting new user default group to the current selected one
+ var currentGroup = this.groups.find(function (group) {
+ return group.id === value;
+ });
+
+ if (currentGroup) {
+ this.newUser.groups = [currentGroup];
+ return;
+ }
+ } // fallback, empty selected group
+
+
+ this.newUser.groups = [];
+ },
+
+ /**
+ * Create a new group
+ *
+ * @param {string} gid Group id
+ * @returns {Promise}
+ */
+ createGroup: function createGroup(gid) {
+ var _this2 = this;
+
+ this.loading.groups = true;
+ this.$store.dispatch('addGroup', gid).then(function (group) {
+ _this2.newUser.groups.push(_this2.groups.find(function (group) {
+ return group.id === gid;
+ }));
+
+ _this2.loading.groups = false;
+ }).catch(function () {
+ _this2.loading.groups = false;
+ });
+ return this.$store.getters.getGroups[this.groups.length];
+ },
+
+ /**
+ * If the selected group is the disabled group but the count is 0
+ * redirect to the all users page.
+ * * we only check for 0 because we don't have the count on ldap
+ * * and we therefore set the usercount to -1 in this specific case
+ */
+ redirectIfDisabled: function redirectIfDisabled() {
+ var allGroups = this.$store.getters.getGroups;
+
+ if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {
+ return group.id === 'disabled' && group.usercount === 0;
+ }) > -1) {
+ // disabled group is empty, redirection to all users
+ this.$router.push({
+ name: 'users'
+ });
+ this.$refs.infiniteLoading.stateChanger.reset();
+ }
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js");
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+/* harmony import */ var v_tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! v-tooltip */ "./node_modules/v-tooltip/dist/v-tooltip.esm.js");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! nextcloud-vue */ "./node_modules/nextcloud-vue/dist/ncvuecomponents.js");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _UserRowSimple__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UserRowSimple */ "./apps/settings/src/components/UserList/UserRowSimple.vue");
+/* harmony import */ var _mixins_UserRowMixin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/UserRowMixin */ "./apps/settings/src/mixins/UserRowMixin.js");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+
+
+vue__WEBPACK_IMPORTED_MODULE_1__["default"].use(v_tooltip__WEBPACK_IMPORTED_MODULE_2__["default"]);
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserRow',
+ components: {
+ UserRowSimple: _UserRowSimple__WEBPACK_IMPORTED_MODULE_4__["default"],
+ PopoverMenu: nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__["PopoverMenu"],
+ Actions: nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__["Actions"],
+ ActionButton: nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__["ActionButton"],
+ Multiselect: nextcloud_vue__WEBPACK_IMPORTED_MODULE_3__["Multiselect"]
+ },
+ directives: {
+ ClickOutside: vue_click_outside__WEBPACK_IMPORTED_MODULE_0___default.a
+ },
+ mixins: [_mixins_UserRowMixin__WEBPACK_IMPORTED_MODULE_5__["default"]],
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ settings: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ groups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ subAdminsGroups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ quotaOptions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ languages: {
+ type: Array,
+ required: true
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ },
+ data: function data() {
+ return {
+ rand: parseInt(Math.random() * 1000),
+ openedMenu: false,
+ feedbackMessage: '',
+ editing: false,
+ loading: {
+ all: false,
+ displayName: false,
+ password: false,
+ mailAddress: false,
+ groups: false,
+ subadmins: false,
+ quota: false,
+ delete: false,
+ disable: false,
+ languages: false,
+ wipe: false
+ }
+ };
+ },
+ computed: {
+ /* USER POPOVERMENU ACTIONS */
+ userActions: function userActions() {
+ var actions = [{
+ icon: 'icon-delete',
+ text: t('settings', 'Delete user'),
+ action: this.deleteUser
+ }, {
+ icon: 'icon-delete',
+ text: t('settings', 'Wipe all devices'),
+ action: this.wipeUserDevices
+ }, {
+ icon: this.user.enabled ? 'icon-close' : 'icon-add',
+ text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),
+ action: this.enableDisableUser
+ }];
+
+ if (this.user.email !== null && this.user.email !== '') {
+ actions.push({
+ icon: 'icon-mail',
+ text: t('settings', 'Resend welcome email'),
+ action: this.sendWelcomeMail
+ });
+ }
+
+ return actions.concat(this.externalActions);
+ }
+ },
+ methods: {
+ /* MENU HANDLING */
+ toggleMenu: function toggleMenu() {
+ this.openedMenu = !this.openedMenu;
+ },
+ hideMenu: function hideMenu() {
+ this.openedMenu = false;
+ },
+ wipeUserDevices: function wipeUserDevices() {
+ var _this = this;
+
+ var userid = this.user.id;
+ OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {
+ userid: userid
+ }), t('settings', 'Remote wipe of devices'), {
+ type: OC.dialogs.YES_NO_BUTTONS,
+ confirm: t('settings', 'Wipe {userid}\'s devices', {
+ userid: userid
+ }),
+ confirmClasses: 'error',
+ cancel: t('settings', 'Cancel')
+ }, function (result) {
+ if (result) {
+ _this.loading.wipe = true;
+ _this.loading.all = true;
+
+ _this.$store.dispatch('wipeUserDevices', userid).then(function () {
+ _this.loading.wipe = false;
+ _this.loading.all = false;
+ });
+ }
+ }, true);
+ },
+ deleteUser: function deleteUser() {
+ var _this2 = this;
+
+ var userid = this.user.id;
+ OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\'s account including all their personal files, app data, etc.', {
+ userid: userid
+ }), t('settings', 'Account deletion'), {
+ type: OC.dialogs.YES_NO_BUTTONS,
+ confirm: t('settings', 'Delete {userid}\'s account', {
+ userid: userid
+ }),
+ confirmClasses: 'error',
+ cancel: t('settings', 'Cancel')
+ }, function (result) {
+ if (result) {
+ _this2.loading.delete = true;
+ _this2.loading.all = true;
+ return _this2.$store.dispatch('deleteUser', userid).then(function () {
+ _this2.loading.delete = false;
+ _this2.loading.all = false;
+ });
+ }
+ }, true);
+ },
+ enableDisableUser: function enableDisableUser() {
+ var _this3 = this;
+
+ this.loading.delete = true;
+ this.loading.all = true;
+ var userid = this.user.id;
+ var enabled = !this.user.enabled;
+ return this.$store.dispatch('enableDisableUser', {
+ userid: userid,
+ enabled: enabled
+ }).then(function () {
+ _this3.loading.delete = false;
+ _this3.loading.all = false;
+ });
+ },
+
+ /**
+ * Set user displayName
+ *
+ * @param {string} displayName The display name
+ */
+ updateDisplayName: function updateDisplayName() {
+ var _this4 = this;
+
+ var displayName = this.$refs.displayName.value;
+ this.loading.displayName = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'displayname',
+ value: displayName
+ }).then(function () {
+ _this4.loading.displayName = false;
+ _this4.$refs.displayName.value = displayName;
+ });
+ },
+
+ /**
+ * Set user password
+ *
+ * @param {string} password The email adress
+ */
+ updatePassword: function updatePassword() {
+ var _this5 = this;
+
+ var password = this.$refs.password.value;
+ this.loading.password = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'password',
+ value: password
+ }).then(function () {
+ _this5.loading.password = false;
+ _this5.$refs.password.value = ''; // empty & show placeholder
+ });
+ },
+
+ /**
+ * Set user mailAddress
+ *
+ * @param {string} mailAddress The email adress
+ */
+ updateEmail: function updateEmail() {
+ var _this6 = this;
+
+ var mailAddress = this.$refs.mailAddress.value;
+ this.loading.mailAddress = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'email',
+ value: mailAddress
+ }).then(function () {
+ _this6.loading.mailAddress = false;
+ _this6.$refs.mailAddress.value = mailAddress;
+ });
+ },
+
+ /**
+ * Create a new group and add user to it
+ *
+ * @param {string} gid Group id
+ */
+ createGroup: function createGroup(gid) {
+ var userid;
+ return regeneratorRuntime.async(function createGroup$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ this.loading = {
+ groups: true,
+ subadmins: true
+ };
+ _context.prev = 1;
+ _context.next = 4;
+ return regeneratorRuntime.awrap(this.$store.dispatch('addGroup', gid));
+
+ case 4:
+ userid = this.user.id;
+ _context.next = 7;
+ return regeneratorRuntime.awrap(this.$store.dispatch('addUserGroup', {
+ userid: userid,
+ gid: gid
+ }));
+
+ case 7:
+ _context.next = 12;
+ break;
+
+ case 9:
+ _context.prev = 9;
+ _context.t0 = _context["catch"](1);
+ console.error(_context.t0);
+
+ case 12:
+ _context.prev = 12;
+ this.loading = {
+ groups: false,
+ subadmins: false
+ };
+ return _context.finish(12);
+
+ case 15:
+ return _context.abrupt("return", this.$store.getters.getGroups[this.groups.length]);
+
+ case 16:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, null, this, [[1, 9, 12, 15]]);
+ },
+
+ /**
+ * Add user to group
+ *
+ * @param {object} group Group object
+ */
+ addUserGroup: function addUserGroup(group) {
+ var userid, gid;
+ return regeneratorRuntime.async(function addUserGroup$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ if (!(group.canAdd === false)) {
+ _context2.next = 2;
+ break;
+ }
+
+ return _context2.abrupt("return", false);
+
+ case 2:
+ this.loading.groups = true;
+ userid = this.user.id;
+ gid = group.id;
+ _context2.prev = 5;
+ _context2.next = 8;
+ return regeneratorRuntime.awrap(this.$store.dispatch('addUserGroup', {
+ userid: userid,
+ gid: gid
+ }));
+
+ case 8:
+ _context2.next = 13;
+ break;
+
+ case 10:
+ _context2.prev = 10;
+ _context2.t0 = _context2["catch"](5);
+ console.error(_context2.t0);
+
+ case 13:
+ _context2.prev = 13;
+ this.loading.groups = false;
+ return _context2.finish(13);
+
+ case 16:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, null, this, [[5, 10, 13, 16]]);
+ },
+
+ /**
+ * Remove user from group
+ *
+ * @param {object} group Group object
+ */
+ removeUserGroup: function removeUserGroup(group) {
+ var userid, gid;
+ return regeneratorRuntime.async(function removeUserGroup$(_context3) {
+ while (1) {
+ switch (_context3.prev = _context3.next) {
+ case 0:
+ if (!(group.canRemove === false)) {
+ _context3.next = 2;
+ break;
+ }
+
+ return _context3.abrupt("return", false);
+
+ case 2:
+ this.loading.groups = true;
+ userid = this.user.id;
+ gid = group.id;
+ _context3.prev = 5;
+ _context3.next = 8;
+ return regeneratorRuntime.awrap(this.$store.dispatch('removeUserGroup', {
+ userid: userid,
+ gid: gid
+ }));
+
+ case 8:
+ this.loading.groups = false; // remove user from current list if current list is the removed group
+
+ if (this.$route.params.selectedGroup === gid) {
+ this.$store.commit('deleteUser', userid);
+ }
+
+ _context3.next = 15;
+ break;
+
+ case 12:
+ _context3.prev = 12;
+ _context3.t0 = _context3["catch"](5);
+ this.loading.groups = false;
+
+ case 15:
+ case "end":
+ return _context3.stop();
+ }
+ }
+ }, null, this, [[5, 12]]);
+ },
+
+ /**
+ * Add user to group
+ *
+ * @param {object} group Group object
+ */
+ addUserSubAdmin: function addUserSubAdmin(group) {
+ var userid, gid;
+ return regeneratorRuntime.async(function addUserSubAdmin$(_context4) {
+ while (1) {
+ switch (_context4.prev = _context4.next) {
+ case 0:
+ this.loading.subadmins = true;
+ userid = this.user.id;
+ gid = group.id;
+ _context4.prev = 3;
+ _context4.next = 6;
+ return regeneratorRuntime.awrap(this.$store.dispatch('addUserSubAdmin', {
+ userid: userid,
+ gid: gid
+ }));
+
+ case 6:
+ this.loading.subadmins = false;
+ _context4.next = 12;
+ break;
+
+ case 9:
+ _context4.prev = 9;
+ _context4.t0 = _context4["catch"](3);
+ console.error(_context4.t0);
+
+ case 12:
+ case "end":
+ return _context4.stop();
+ }
+ }
+ }, null, this, [[3, 9]]);
+ },
+
+ /**
+ * Remove user from group
+ *
+ * @param {object} group Group object
+ */
+ removeUserSubAdmin: function removeUserSubAdmin(group) {
+ var userid, gid;
+ return regeneratorRuntime.async(function removeUserSubAdmin$(_context5) {
+ while (1) {
+ switch (_context5.prev = _context5.next) {
+ case 0:
+ this.loading.subadmins = true;
+ userid = this.user.id;
+ gid = group.id;
+ _context5.prev = 3;
+ _context5.next = 6;
+ return regeneratorRuntime.awrap(this.$store.dispatch('removeUserSubAdmin', {
+ userid: userid,
+ gid: gid
+ }));
+
+ case 6:
+ _context5.next = 11;
+ break;
+
+ case 8:
+ _context5.prev = 8;
+ _context5.t0 = _context5["catch"](3);
+ console.error(_context5.t0);
+
+ case 11:
+ _context5.prev = 11;
+ this.loading.subadmins = false;
+ return _context5.finish(11);
+
+ case 14:
+ case "end":
+ return _context5.stop();
+ }
+ }
+ }, null, this, [[3, 8, 11, 14]]);
+ },
+
+ /**
+ * Dispatch quota set request
+ *
+ * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}
+ * @returns {string}
+ */
+ setUserQuota: function setUserQuota() {
+ var quota,
+ _args6 = arguments;
+ return regeneratorRuntime.async(function setUserQuota$(_context6) {
+ while (1) {
+ switch (_context6.prev = _context6.next) {
+ case 0:
+ quota = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : 'none';
+ this.loading.quota = true; // ensure we only send the preset id
+
+ quota = quota.id ? quota.id : quota;
+ _context6.prev = 3;
+ _context6.next = 6;
+ return regeneratorRuntime.awrap(this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'quota',
+ value: quota
+ }));
+
+ case 6:
+ _context6.next = 11;
+ break;
+
+ case 8:
+ _context6.prev = 8;
+ _context6.t0 = _context6["catch"](3);
+ console.error(_context6.t0);
+
+ case 11:
+ _context6.prev = 11;
+ this.loading.quota = false;
+ return _context6.finish(11);
+
+ case 14:
+ return _context6.abrupt("return", quota);
+
+ case 15:
+ case "end":
+ return _context6.stop();
+ }
+ }
+ }, null, this, [[3, 8, 11, 14]]);
+ },
+
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @returns {Promise|boolean}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+
+ if (validQuota !== null && validQuota >= 0) {
+ // unify format output
+ return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));
+ } // if no valid do not change
+
+
+ return false;
+ },
+
+ /**
+ * Dispatch language set request
+ *
+ * @param {Object} lang language object {code:'en', name:'English'}
+ * @returns {Object}
+ */
+ setUserLanguage: function setUserLanguage(lang) {
+ return regeneratorRuntime.async(function setUserLanguage$(_context7) {
+ while (1) {
+ switch (_context7.prev = _context7.next) {
+ case 0:
+ this.loading.languages = true; // ensure we only send the preset id
+
+ _context7.prev = 1;
+ _context7.next = 4;
+ return regeneratorRuntime.awrap(this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'language',
+ value: lang.code
+ }));
+
+ case 4:
+ _context7.next = 9;
+ break;
+
+ case 6:
+ _context7.prev = 6;
+ _context7.t0 = _context7["catch"](1);
+ console.error(_context7.t0);
+
+ case 9:
+ _context7.prev = 9;
+ this.loading.languages = false;
+ return _context7.finish(9);
+
+ case 12:
+ return _context7.abrupt("return", lang);
+
+ case 13:
+ case "end":
+ return _context7.stop();
+ }
+ }
+ }, null, this, [[1, 6, 9, 12]]);
+ },
+
+ /**
+ * Dispatch new welcome mail request
+ */
+ sendWelcomeMail: function sendWelcomeMail() {
+ var _this7 = this;
+
+ this.loading.all = true;
+ this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {
+ if (success) {
+ // Show feedback to indicate the success
+ _this7.feedbackMessage = t('setting', 'Welcome mail sent!');
+ setTimeout(function () {
+ _this7.feedbackMessage = '';
+ }, 2000);
+ }
+
+ _this7.loading.all = false;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! nextcloud-vue */ "./node_modules/nextcloud-vue/dist/ncvuecomponents.js");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js");
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.js");
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _mixins_UserRowMixin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/UserRowMixin */ "./apps/settings/src/mixins/UserRowMixin.js");
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserRowSimple',
+ components: {
+ PopoverMenu: nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__["PopoverMenu"],
+ ActionButton: nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__["ActionButton"],
+ Actions: nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__["Actions"]
+ },
+ directives: {
+ ClickOutside: vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default.a
+ },
+ mixins: [_mixins_UserRowMixin__WEBPACK_IMPORTED_MODULE_3__["default"]],
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ loading: {
+ type: Object,
+ required: true
+ },
+ showConfig: {
+ type: Object,
+ required: true
+ },
+ userActions: {
+ type: Array,
+ required: true
+ },
+ openedMenu: {
+ type: Boolean,
+ required: true
+ },
+ feedbackMessage: {
+ type: String,
+ required: true
+ },
+ subAdminsGroups: {
+ type: Array,
+ required: true
+ },
+ settings: {
+ type: Object,
+ required: true
+ }
+ },
+ computed: {
+ userGroupsLabels: function userGroupsLabels() {
+ return this.userGroups.map(function (group) {
+ return group.name;
+ }).join(', ');
+ },
+ userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {
+ return this.userSubAdminsGroups.map(function (group) {
+ return group.name;
+ }).join(', ');
+ },
+ usedSpace: function usedSpace() {
+ if (this.user.quota.used) {
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(this.user.quota.used)
+ });
+ }
+
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(0)
+ });
+ },
+ canEdit: function canEdit() {
+ return Object(_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__["getCurrentUser"])().uid !== this.user.id && this.user.id !== 'admin';
+ }
+ },
+ methods: {
+ hideMenu: function hideMenu() {
+ this.$emit('hideMenu');
+ },
+ toggleEdit: function toggleEdit() {
+ this.$emit('update:editing', true);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/views/Users.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-localstorage */ "./node_modules/vue-localstorage/dist/vue-local-storage.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_localstorage__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! nextcloud-vue */ "./node_modules/nextcloud-vue/dist/ncvuecomponents.js");
+/* harmony import */ var nextcloud_vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _components_UserList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/UserList */ "./apps/settings/src/components/UserList.vue");
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+
+vue__WEBPACK_IMPORTED_MODULE_0__["default"].use(vue_localstorage__WEBPACK_IMPORTED_MODULE_1___default.a);
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'Users',
+ components: {
+ AppContent: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["AppContent"],
+ AppNavigation: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["AppNavigation"],
+ AppNavigationItem: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["AppNavigationItem"],
+ AppNavigationNew: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["AppNavigationNew"],
+ AppNavigationSettings: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["AppNavigationSettings"],
+ Content: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["Content"],
+ UserList: _components_UserList__WEBPACK_IMPORTED_MODULE_3__["default"],
+ Multiselect: nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__["Multiselect"]
+ },
+ props: {
+ selectedGroup: {
+ type: String,
+ default: null
+ }
+ },
+ data: function data() {
+ return {
+ // default quota is set to unlimited
+ unlimitedQuota: {
+ id: 'none',
+ label: t('settings', 'Unlimited')
+ },
+ // temporary value used for multiselect change
+ selectedQuota: false,
+ externalActions: [],
+ showAddGroupEntry: false,
+ loadingAddGroup: false,
+ showConfig: {
+ showStoragePath: false,
+ showUserBackend: false,
+ showLastLogin: false,
+ showNewUserForm: false,
+ showLanguages: false
+ }
+ };
+ },
+ computed: {
+ users: function users() {
+ return this.$store.getters.getUsers;
+ },
+ usersOffset: function usersOffset() {
+ return this.$store.getters.getUsersOffset;
+ },
+ usersLimit: function usersLimit() {
+ return this.$store.getters.getUsersLimit;
+ },
+ // Local settings
+ showLanguages: {
+ get: function get() {
+ return this.getLocalstorage('showLanguages');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showLanguages', status);
+ }
+ },
+ showLastLogin: {
+ get: function get() {
+ return this.getLocalstorage('showLastLogin');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showLastLogin', status);
+ }
+ },
+ showUserBackend: {
+ get: function get() {
+ return this.getLocalstorage('showUserBackend');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showUserBackend', status);
+ }
+ },
+ showStoragePath: {
+ get: function get() {
+ return this.getLocalstorage('showStoragePath');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showStoragePath', status);
+ }
+ },
+ userCount: function userCount() {
+ return this.$store.getters.getUserCount;
+ },
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ },
+ // default quota
+ quotaOptions: function quotaOptions() {
+ // convert the preset array into objects
+ var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {
+ return acc.concat({
+ id: cur,
+ label: cur
+ });
+ }, []); // add default presets
+
+ quotaPreset.unshift(this.unlimitedQuota);
+ return quotaPreset;
+ },
+ // mapping saved values to objects
+ defaultQuota: {
+ get: function get() {
+ if (this.selectedQuota !== false) {
+ return this.selectedQuota;
+ }
+
+ if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {
+ // if value is valid, let's map the quotaOptions or return custom quota
+ return {
+ id: this.settings.defaultQuota,
+ label: this.settings.defaultQuota
+ };
+ }
+
+ return this.unlimitedQuota; // unlimited
+ },
+ set: function set(quota) {
+ this.selectedQuota = quota;
+ }
+ },
+ // BUILD APP NAVIGATION MENU OBJECT
+ menu: function menu() {
+ var _this = this;
+
+ // Data provided php side
+ var self = this;
+ var groups = this.$store.getters.getGroups;
+ groups = Array.isArray(groups) ? groups : []; // Map groups
+
+ groups = groups.map(function (group) {
+ var item = {};
+ item.id = group.id.replace(' ', '_');
+ item.key = item.id;
+ item.utils = {}; // router link to
+
+ item.router = {
+ name: 'group',
+ params: {
+ selectedGroup: group.id
+ }
+ }; // group name
+
+ item.text = group.name;
+ item.title = group.name; // users count for all groups
+
+ if (group.usercount - group.disabled > 0 || group.usercount === -1) {
+ item.utils.counter = group.usercount - group.disabled;
+ }
+
+ if (item.id !== 'admin' && item.id !== 'disabled' && _this.settings.isAdmin) {
+ // add delete button on real groups
+ item.utils.actions = [{
+ icon: 'icon-delete',
+ text: t('settings', 'Remove group'),
+ action: function action() {
+ self.removeGroup(group.id);
+ }
+ }];
+ }
+
+ return item;
+ }); // Every item is added on top of the array, so we're going backward
+ // Groups, separator, disabled, admin, everyone
+ // Add separator
+
+ var realGroups = groups.find(function (group) {
+ return group.id !== 'disabled' && group.id !== 'admin';
+ });
+ realGroups = typeof realGroups === 'undefined' ? [] : realGroups;
+ realGroups = Array.isArray(realGroups) ? realGroups : [realGroups];
+
+ if (realGroups.length > 0) {
+ var separator = {
+ caption: true,
+ text: t('settings', 'Groups')
+ };
+ groups.unshift(separator);
+ } // Adjust admin and disabled groups
+
+
+ var adminGroup = groups.find(function (group) {
+ return group.id === 'admin';
+ });
+ var disabledGroup = groups.find(function (group) {
+ return group.id === 'disabled';
+ }); // filter out admin and disabled
+
+ groups = groups.filter(function (group) {
+ return ['admin', 'disabled'].indexOf(group.id) === -1;
+ });
+
+ if (adminGroup && adminGroup.text) {
+ adminGroup.text = t('settings', 'Admins'); // rename admin group
+
+ adminGroup.icon = 'icon-user-admin'; // set icon
+
+ groups.unshift(adminGroup); // add admin group if present
+ }
+
+ if (disabledGroup && disabledGroup.text) {
+ disabledGroup.text = t('settings', 'Disabled users'); // rename disabled group
+
+ disabledGroup.icon = 'icon-disabled-users'; // set icon
+
+ if (disabledGroup.utils && (disabledGroup.utils.counter > 0 // add disabled if not empty
+ || disabledGroup.utils.counter === -1) // add disabled if ldap enabled
+ ) {
+ groups.unshift(disabledGroup);
+
+ if (disabledGroup.utils.counter === -1) {
+ // hides the counter instead of showing -1
+ delete disabledGroup.utils.counter;
+ }
+ }
+ } // Add everyone group
+
+
+ var everyoneGroup = {
+ id: 'everyone',
+ key: 'everyone',
+ icon: 'icon-contacts-dark',
+ router: {
+ name: 'users'
+ },
+ text: t('settings', 'Everyone')
+ }; // users count
+
+ if (this.userCount > 0) {
+ vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(everyoneGroup, 'utils', {
+ counter: this.userCount
+ });
+ }
+
+ groups.unshift(everyoneGroup);
+ var addGroup = {
+ id: 'addgroup',
+ key: 'addgroup',
+ icon: 'icon-add',
+ text: t('settings', 'Add group'),
+ classes: this.loadingAddGroup ? 'icon-loading-small' : ''
+ };
+
+ if (this.showAddGroupEntry) {
+ vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(addGroup, 'edit', {
+ text: t('settings', 'Add group'),
+ action: this.createGroup,
+ reset: function reset() {
+ self.showAddGroupEntry = false;
+ }
+ });
+ addGroup.classes = 'editing';
+ } else {
+ vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(addGroup, 'action', function () {
+ self.showAddGroupEntry = true; // focus input
+
+ vue__WEBPACK_IMPORTED_MODULE_0__["default"].nextTick(function () {
+ window.addgroup.querySelector('form > input[type="text"]').focus();
+ });
+ });
+ }
+
+ groups.unshift(addGroup);
+ return groups;
+ }
+ },
+ beforeMount: function beforeMount() {
+ this.$store.commit('initGroups', {
+ groups: this.$store.getters.getServerData.groups,
+ orderBy: this.$store.getters.getServerData.sortGroups,
+ userCount: this.$store.getters.getServerData.userCount
+ });
+ this.$store.dispatch('getPasswordPolicyMinLength');
+ },
+ created: function created() {
+ // init the OCA.Settings.UserList object
+ // and add the registerAction method
+ Object.assign(OCA, {
+ Settings: {
+ UserList: {
+ registerAction: this.registerAction
+ }
+ }
+ });
+ },
+ methods: {
+ toggleNewUserMenu: function toggleNewUserMenu() {
+ this.showConfig.showNewUserForm = !this.showConfig.showNewUserForm;
+
+ if (this.showConfig.showNewUserForm) {
+ vue__WEBPACK_IMPORTED_MODULE_0__["default"].nextTick(function () {
+ window.newusername.focus();
+ });
+ }
+ },
+ getLocalstorage: function getLocalstorage(key) {
+ // force initialization
+ var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values
+
+ this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];
+ return this.showConfig[key];
+ },
+ setLocalStorage: function setLocalStorage(key, status) {
+ this.showConfig[key] = status;
+ this.$localStorage.set(key, status);
+ return status;
+ },
+ removeGroup: function removeGroup(groupid) {
+ var self = this; // TODO migrate to a vue js confirm dialog component
+
+ OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {
+ group: groupid
+ }), t('settings', 'Please confirm the group removal '), function (success) {
+ if (success) {
+ self.$store.dispatch('removeGroup', groupid);
+ }
+ });
+ },
+
+ /**
+ * Dispatch default quota set request
+ *
+ * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}
+ */
+ setDefaultQuota: function setDefaultQuota() {
+ var _this2 = this;
+
+ var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';
+ this.$store.dispatch('setAppConfig', {
+ app: 'files',
+ key: 'default_quota',
+ // ensure we only send the preset id
+ value: quota.id ? quota.id : quota
+ }).then(function () {
+ if (_typeof(quota) !== 'object') {
+ quota = {
+ id: quota,
+ label: quota
+ };
+ }
+
+ _this2.defaultQuota = quota;
+ });
+ },
+
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @returns {Promise|boolean}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+
+ if (validQuota === null) {
+ return this.setDefaultQuota('none');
+ } else {
+ // unify format output
+ return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));
+ }
+ },
+
+ /**
+ * Register a new action for the user menu
+ *
+ * @param {string} icon the icon class
+ * @param {string} text the text to display
+ * @param {Function} action the function to run
+ * @returns {Array}
+ */
+ registerAction: function registerAction(icon, text, action) {
+ this.externalActions.push({
+ icon: icon,
+ text: text,
+ action: action
+ });
+ return this.externalActions;
+ },
+
+ /**
+ * Create a new group
+ *
+ * @param {Object} event The form submit event
+ */
+ createGroup: function createGroup(event) {
+ var _this3 = this;
+
+ var gid = event.target[0].value;
+ this.loadingAddGroup = true;
+ this.$store.dispatch('addGroup', gid).then(function () {
+ _this3.showAddGroupEntry = false;
+ _this3.loadingAddGroup = false;
+
+ _this3.$router.push({
+ name: 'group',
+ params: {
+ selectedGroup: gid
+ }
+ });
+ }).catch(function () {
+ _this3.loadingAddGroup = false;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&":
+/*!****************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca& ***!
+ \****************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass: "user-list-grid",
+ attrs: { id: "app-content" },
+ on: {
+ "&scroll": function($event) {
+ return _vm.onScroll($event)
+ }
+ }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "row",
+ class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },
+ attrs: { id: "grid-header" }
+ },
+ [
+ _c("div", { staticClass: "avatar", attrs: { id: "headerAvatar" } }),
+ _vm._v(" "),
+ _c("div", { staticClass: "name", attrs: { id: "headerName" } }, [
+ _vm._v(
+ "\n\t\t\t" + _vm._s(_vm.t("settings", "Username")) + "\n\n\t\t\t"
+ ),
+ _c("div", { staticClass: "subtitle" }, [
+ _vm._v(
+ "\n\t\t\t\t" +
+ _vm._s(_vm.t("settings", "Display name")) +
+ "\n\t\t\t"
+ )
+ ])
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "password", attrs: { id: "headerPassword" } },
+ [
+ _vm._v(
+ "\n\t\t\t" + _vm._s(_vm.t("settings", "Password")) + "\n\t\t"
+ )
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "mailAddress", attrs: { id: "headerAddress" } },
+ [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Email")) + "\n\t\t")]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "groups", attrs: { id: "headerGroups" } }, [
+ _vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Groups")) + "\n\t\t")
+ ]),
+ _vm._v(" "),
+ _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin
+ ? _c(
+ "div",
+ { staticClass: "subadmins", attrs: { id: "headerSubAdmins" } },
+ [
+ _vm._v(
+ "\n\t\t\t" +
+ _vm._s(_vm.t("settings", "Group admin for")) +
+ "\n\t\t"
+ )
+ ]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c("div", { staticClass: "quota", attrs: { id: "headerQuota" } }, [
+ _vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Quota")) + "\n\t\t")
+ ]),
+ _vm._v(" "),
+ _vm.showConfig.showLanguages
+ ? _c(
+ "div",
+ { staticClass: "languages", attrs: { id: "headerLanguages" } },
+ [
+ _vm._v(
+ "\n\t\t\t" +
+ _vm._s(_vm.t("settings", "Language")) +
+ "\n\t\t"
+ )
+ ]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath
+ ? _c("div", { staticClass: "headerUserBackend userBackend" }, [
+ _vm.showConfig.showUserBackend
+ ? _c("div", { staticClass: "userBackend" }, [
+ _vm._v(
+ "\n\t\t\t\t" +
+ _vm._s(_vm.t("settings", "User backend")) +
+ "\n\t\t\t"
+ )
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showStoragePath
+ ? _c("div", { staticClass: "subtitle storageLocation" }, [
+ _vm._v(
+ "\n\t\t\t\t" +
+ _vm._s(_vm.t("settings", "Storage location")) +
+ "\n\t\t\t"
+ )
+ ])
+ : _vm._e()
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showLastLogin
+ ? _c("div", { staticClass: "headerLastLogin lastLogin" }, [
+ _vm._v(
+ "\n\t\t\t" +
+ _vm._s(_vm.t("settings", "Last login")) +
+ "\n\t\t"
+ )
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _c("div", { staticClass: "userActions" })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "form",
+ {
+ directives: [
+ {
+ name: "show",
+ rawName: "v-show",
+ value: _vm.showConfig.showNewUserForm,
+ expression: "showConfig.showNewUserForm"
+ }
+ ],
+ staticClass: "row",
+ class: { sticky: _vm.scrolled && _vm.showConfig.showNewUserForm },
+ attrs: { id: "new-user", disabled: _vm.loading.all },
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.createUser($event)
+ }
+ }
+ },
+ [
+ _c("div", {
+ class: _vm.loading.all ? "icon-loading-small" : "icon-add"
+ }),
+ _vm._v(" "),
+ _c("div", { staticClass: "name" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.id,
+ expression: "newUser.id"
+ }
+ ],
+ ref: "newusername",
+ attrs: {
+ id: "newusername",
+ disabled: _vm.settings.newUserGenerateUserID,
+ placeholder: _vm.settings.newUserGenerateUserID
+ ? _vm.t("settings", "Will be autogenerated")
+ : _vm.t("settings", "Username"),
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "username",
+ pattern: "[a-zA-Z0-9 _\\.@\\-']+",
+ required: "",
+ type: "text"
+ },
+ domProps: { value: _vm.newUser.id },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.$set(_vm.newUser, "id", $event.target.value)
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "displayName" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.displayName,
+ expression: "newUser.displayName"
+ }
+ ],
+ attrs: {
+ id: "newdisplayname",
+ placeholder: _vm.t("settings", "Display name"),
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "displayname",
+ type: "text"
+ },
+ domProps: { value: _vm.newUser.displayName },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.$set(_vm.newUser, "displayName", $event.target.value)
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "password" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.password,
+ expression: "newUser.password"
+ }
+ ],
+ ref: "newuserpassword",
+ attrs: {
+ id: "newuserpassword",
+ minlength: _vm.minPasswordLength,
+ placeholder: _vm.t("settings", "Password"),
+ required: _vm.newUser.mailAddress === "",
+ autocapitalize: "none",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ name: "password",
+ type: "password"
+ },
+ domProps: { value: _vm.newUser.password },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.$set(_vm.newUser, "password", $event.target.value)
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "mailAddress" }, [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.mailAddress,
+ expression: "newUser.mailAddress"
+ }
+ ],
+ attrs: {
+ id: "newemail",
+ placeholder: _vm.t("settings", "Email"),
+ required:
+ _vm.newUser.password === "" ||
+ _vm.settings.newUserRequireEmail,
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "email",
+ type: "email"
+ },
+ domProps: { value: _vm.newUser.mailAddress },
+ on: {
+ input: function($event) {
+ if ($event.target.composing) {
+ return
+ }
+ _vm.$set(_vm.newUser, "mailAddress", $event.target.value)
+ }
+ }
+ })
+ ]),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "groups" },
+ [
+ !_vm.settings.isAdmin
+ ? _c("input", {
+ class: { "icon-loading-small": _vm.loading.groups },
+ attrs: {
+ id: "newgroups",
+ required: !_vm.settings.isAdmin,
+ tabindex: "-1",
+ type: "text"
+ },
+ domProps: { value: _vm.newUser.groups }
+ })
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "Multiselect",
+ {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.groups || _vm.loading.all,
+ multiple: true,
+ options: _vm.canAddGroups,
+ placeholder: _vm.t("settings", "Add user in group"),
+ "tag-width": 60,
+ taggable: true,
+ label: "name",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: { tag: _vm.createGroup },
+ model: {
+ value: _vm.newUser.groups,
+ callback: function($$v) {
+ _vm.$set(_vm.newUser, "groups", $$v)
+ },
+ expression: "newUser.groups"
+ }
+ },
+ [
+ _c(
+ "span",
+ { attrs: { slot: "noResult" }, slot: "noResult" },
+ [_vm._v(_vm._s(_vm.t("settings", "No results")))]
+ )
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin
+ ? _c(
+ "div",
+ { staticClass: "subadmins" },
+ [
+ _c(
+ "Multiselect",
+ {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ multiple: true,
+ options: _vm.subAdminsGroups,
+ placeholder: _vm.t("settings", "Set user as admin for"),
+ "tag-width": 60,
+ label: "name",
+ "track-by": "id"
+ },
+ model: {
+ value: _vm.newUser.subAdminsGroups,
+ callback: function($$v) {
+ _vm.$set(_vm.newUser, "subAdminsGroups", $$v)
+ },
+ expression: "newUser.subAdminsGroups"
+ }
+ },
+ [
+ _c(
+ "span",
+ { attrs: { slot: "noResult" }, slot: "noResult" },
+ [_vm._v(_vm._s(_vm.t("settings", "No results")))]
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ { staticClass: "quota" },
+ [
+ _c("Multiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ options: _vm.quotaOptions,
+ placeholder: _vm.t("settings", "Select user quota"),
+ taggable: true,
+ label: "label",
+ "track-by": "id"
+ },
+ on: { tag: _vm.validateQuota },
+ model: {
+ value: _vm.newUser.quota,
+ callback: function($$v) {
+ _vm.$set(_vm.newUser, "quota", $$v)
+ },
+ expression: "newUser.quota"
+ }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm.showConfig.showLanguages
+ ? _c(
+ "div",
+ { staticClass: "languages" },
+ [
+ _c("Multiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ options: _vm.languages,
+ placeholder: _vm.t("settings", "Default language"),
+ "group-label": "label",
+ "group-values": "languages",
+ label: "name",
+ "track-by": "code"
+ },
+ model: {
+ value: _vm.newUser.language,
+ callback: function($$v) {
+ _vm.$set(_vm.newUser, "language", $$v)
+ },
+ expression: "newUser.language"
+ }
+ })
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showStoragePath
+ ? _c("div", { staticClass: "storageLocation" })
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showUserBackend
+ ? _c("div", { staticClass: "userBackend" })
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showLastLogin
+ ? _c("div", { staticClass: "lastLogin" })
+ : _vm._e(),
+ _vm._v(" "),
+ _c("div", { staticClass: "userActions" }, [
+ _c("input", {
+ staticClass: "button primary icon-checkmark-white has-tooltip",
+ attrs: {
+ id: "newsubmit",
+ title: _vm.t("settings", "Add a new user"),
+ type: "submit",
+ value: ""
+ }
+ })
+ ])
+ ]
+ ),
+ _vm._v(" "),
+ _vm._l(_vm.filteredUsers, function(user, key) {
+ return _c("user-row", {
+ key: key,
+ attrs: {
+ "external-actions": _vm.externalActions,
+ groups: _vm.groups,
+ languages: _vm.languages,
+ "quota-options": _vm.quotaOptions,
+ settings: _vm.settings,
+ "show-config": _vm.showConfig,
+ "sub-admins-groups": _vm.subAdminsGroups,
+ user: user
+ }
+ })
+ }),
+ _vm._v(" "),
+ _c(
+ "InfiniteLoading",
+ { ref: "infiniteLoading", on: { infinite: _vm.infiniteHandler } },
+ [
+ _c("div", { attrs: { slot: "spinner" }, slot: "spinner" }, [
+ _c("div", { staticClass: "users-icon-loading icon-loading" })
+ ]),
+ _vm._v(" "),
+ _c("div", { attrs: { slot: "no-more" }, slot: "no-more" }, [
+ _c("div", { staticClass: "users-list-end" })
+ ]),
+ _vm._v(" "),
+ _c("div", { attrs: { slot: "no-results" }, slot: "no-results" }, [
+ _c("div", { attrs: { id: "emptycontent" } }, [
+ _c("div", { staticClass: "icon-contacts-dark" }),
+ _vm._v(" "),
+ _c("h2", [_vm._v(_vm._s(_vm.t("settings", "No users in here")))])
+ ])
+ ])
+ ]
+ )
+ ],
+ 2
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&":
+/*!************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa& ***!
+ \************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return Object.keys(_vm.user).length === 1
+ ? _c("div", { staticClass: "row", attrs: { "data-id": _vm.user.id } }, [
+ _c(
+ "div",
+ {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small":
+ _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ },
+ [
+ !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe
+ ? _c("img", {
+ attrs: {
+ src: _vm.generateAvatar(_vm.user.id, 32),
+ srcset:
+ _vm.generateAvatar(_vm.user.id, 64) +
+ " 2x, " +
+ _vm.generateAvatar(_vm.user.id, 128) +
+ " 4x",
+ alt: "",
+ height: "32",
+ width: "32"
+ }
+ })
+ : _vm._e()
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "name" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.user.id) + "\n\t")
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "obfuscated" }, [
+ _vm._v(
+ "\n\t\t" +
+ _vm._s(
+ _vm.t(
+ "settings",
+ "You do not have permissions to see the details of this user"
+ )
+ ) +
+ "\n\t"
+ )
+ ])
+ ])
+ : !_vm.editing
+ ? _c("UserRowSimple", {
+ attrs: {
+ editing: _vm.editing,
+ "feedback-message": _vm.feedbackMessage,
+ groups: _vm.groups,
+ languages: _vm.languages,
+ loading: _vm.loading,
+ "opened-menu": _vm.openedMenu,
+ settings: _vm.settings,
+ "show-config": _vm.showConfig,
+ "sub-admins-groups": _vm.subAdminsGroups,
+ "user-actions": _vm.userActions,
+ user: _vm.user
+ },
+ on: {
+ "update:editing": function($event) {
+ _vm.editing = $event
+ },
+ hideMenu: _vm.hideMenu,
+ toggleMenu: _vm.toggleMenu
+ }
+ })
+ : _c(
+ "div",
+ {
+ staticClass: "row row--editable",
+ class: { disabled: _vm.loading.delete || _vm.loading.disable },
+ attrs: { "data-id": _vm.user.id }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small":
+ _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ },
+ [
+ !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe
+ ? _c("img", {
+ attrs: {
+ src: _vm.generateAvatar(_vm.user.id, 32),
+ srcset:
+ _vm.generateAvatar(_vm.user.id, 64) +
+ " 2x, " +
+ _vm.generateAvatar(_vm.user.id, 128) +
+ " 4x",
+ alt: "",
+ height: "32",
+ width: "32"
+ }
+ })
+ : _vm._e()
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "displayName" }, [
+ _c(
+ "form",
+ {
+ staticClass: "displayName",
+ class: { "icon-loading-small": _vm.loading.displayName },
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.updateDisplayName($event)
+ }
+ }
+ },
+ [
+ _vm.user.backendCapabilities.setDisplayName
+ ? [
+ _vm.user.backendCapabilities.setDisplayName
+ ? _c("input", {
+ ref: "displayName",
+ attrs: {
+ id: "displayName" + _vm.user.id + _vm.rand,
+ disabled:
+ _vm.loading.displayName || _vm.loading.all,
+ autocapitalize: "off",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ spellcheck: "false",
+ type: "text"
+ },
+ domProps: { value: _vm.user.displayname }
+ })
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.user.backendCapabilities.setDisplayName
+ ? _c("input", {
+ staticClass: "icon-confirm",
+ attrs: { type: "submit", value: "" }
+ })
+ : _vm._e()
+ ]
+ : _c("div", {
+ directives: [
+ {
+ name: "tooltip",
+ rawName: "v-tooltip.auto",
+ value: _vm.t(
+ "settings",
+ "The backend does not support changing the display name"
+ ),
+ expression:
+ "t('settings', 'The backend does not support changing the display name')",
+ modifiers: { auto: true }
+ }
+ ],
+ staticClass: "name"
+ })
+ ],
+ 2
+ )
+ ]),
+ _vm._v(" "),
+ _vm.settings.canChangePassword &&
+ _vm.user.backendCapabilities.setPassword
+ ? _c(
+ "form",
+ {
+ staticClass: "password",
+ class: { "icon-loading-small": _vm.loading.password },
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.updatePassword($event)
+ }
+ }
+ },
+ [
+ _c("input", {
+ ref: "password",
+ attrs: {
+ id: "password" + _vm.user.id + _vm.rand,
+ disabled: _vm.loading.password || _vm.loading.all,
+ minlength: _vm.minPasswordLength,
+ placeholder: _vm.t("settings", "Add new password"),
+ autocapitalize: "off",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ required: "",
+ spellcheck: "false",
+ type: "password",
+ value: ""
+ }
+ }),
+ _vm._v(" "),
+ _c("input", {
+ staticClass: "icon-confirm",
+ attrs: { type: "submit", value: "" }
+ })
+ ]
+ )
+ : _c("div"),
+ _vm._v(" "),
+ _c(
+ "form",
+ {
+ staticClass: "mailAddress",
+ class: { "icon-loading-small": _vm.loading.mailAddress },
+ on: {
+ submit: function($event) {
+ $event.preventDefault()
+ return _vm.updateEmail($event)
+ }
+ }
+ },
+ [
+ _c("input", {
+ ref: "mailAddress",
+ attrs: {
+ id: "mailAddress" + _vm.user.id + _vm.rand,
+ disabled: _vm.loading.mailAddress || _vm.loading.all,
+ placeholder: _vm.t("settings", "Add new email address"),
+ autocapitalize: "off",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ spellcheck: "false",
+ type: "email"
+ },
+ domProps: { value: _vm.user.email }
+ }),
+ _vm._v(" "),
+ _c("input", {
+ staticClass: "icon-confirm",
+ attrs: { type: "submit", value: "" }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "groups",
+ class: { "icon-loading-small": _vm.loading.groups }
+ },
+ [
+ _c(
+ "Multiselect",
+ {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.groups || _vm.loading.all,
+ limit: 2,
+ multiple: true,
+ options: _vm.availableGroups,
+ placeholder: _vm.t("settings", "Add user in group"),
+ "tag-width": 60,
+ taggable: _vm.settings.isAdmin,
+ value: _vm.userGroups,
+ label: "name",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: {
+ remove: _vm.removeUserGroup,
+ select: _vm.addUserGroup,
+ tag: _vm.createGroup
+ }
+ },
+ [
+ _c(
+ "span",
+ { attrs: { slot: "noResult" }, slot: "noResult" },
+ [_vm._v(_vm._s(_vm.t("settings", "No results")))]
+ )
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin
+ ? _c(
+ "div",
+ {
+ staticClass: "subadmins",
+ class: { "icon-loading-small": _vm.loading.subadmins }
+ },
+ [
+ _c(
+ "Multiselect",
+ {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.subadmins || _vm.loading.all,
+ limit: 2,
+ multiple: true,
+ options: _vm.subAdminsGroups,
+ placeholder: _vm.t("settings", "Set user as admin for"),
+ "tag-width": 60,
+ value: _vm.userSubAdminsGroups,
+ label: "name",
+ "track-by": "id"
+ },
+ on: {
+ remove: _vm.removeUserSubAdmin,
+ select: _vm.addUserSubAdmin
+ }
+ },
+ [
+ _c(
+ "span",
+ { attrs: { slot: "noResult" }, slot: "noResult" },
+ [_vm._v(_vm._s(_vm.t("settings", "No results")))]
+ )
+ ]
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ directives: [
+ {
+ name: "tooltip",
+ rawName: "v-tooltip.auto",
+ value: _vm.usedSpace,
+ expression: "usedSpace",
+ modifiers: { auto: true }
+ }
+ ],
+ staticClass: "quota",
+ class: { "icon-loading-small": _vm.loading.quota }
+ },
+ [
+ _c("Multiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ disabled: _vm.loading.quota || _vm.loading.all,
+ options: _vm.quotaOptions,
+ placeholder: _vm.t("settings", "Select user quota"),
+ taggable: true,
+ value: _vm.userQuota,
+ label: "label",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: { input: _vm.setUserQuota, tag: _vm.validateQuota }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _vm.showConfig.showLanguages
+ ? _c(
+ "div",
+ {
+ staticClass: "languages",
+ class: { "icon-loading-small": _vm.loading.languages }
+ },
+ [
+ _c("Multiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ disabled: _vm.loading.languages || _vm.loading.all,
+ options: _vm.languages,
+ placeholder: _vm.t("settings", "No language set"),
+ value: _vm.userLanguage,
+ "group-label": "label",
+ "group-values": "languages",
+ label: "name",
+ "track-by": "code"
+ },
+ on: { input: _vm.setUserLanguage }
+ })
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend
+ ? _c("div", { staticClass: "storageLocation" })
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showLastLogin ? _c("div") : _vm._e(),
+ _vm._v(" "),
+ _c("div", { staticClass: "userActions" }, [
+ _vm.OC.currentUser !== _vm.user.id &&
+ _vm.user.id !== "admin" &&
+ !_vm.loading.all
+ ? _c(
+ "div",
+ { staticClass: "toggleUserActions" },
+ [
+ _c(
+ "Actions",
+ [
+ _c(
+ "ActionButton",
+ {
+ attrs: { icon: "icon-checkmark" },
+ on: {
+ click: function($event) {
+ _vm.editing = false
+ }
+ }
+ },
+ [
+ _vm._v(
+ "\n\t\t\t\t\t" +
+ _vm._s(_vm.t("settings", "Done")) +
+ "\n\t\t\t\t"
+ )
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", {
+ directives: [
+ {
+ name: "click-outside",
+ rawName: "v-click-outside",
+ value: _vm.hideMenu,
+ expression: "hideMenu"
+ }
+ ],
+ staticClass: "icon-more",
+ on: { click: _vm.toggleMenu }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "popovermenu",
+ class: { open: _vm.openedMenu }
+ },
+ [_c("PopoverMenu", { attrs: { menu: _vm.userActions } })],
+ 1
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "feedback",
+ style: { opacity: _vm.feedbackMessage !== "" ? 1 : 0 }
+ },
+ [
+ _c("div", { staticClass: "icon-checkmark" }),
+ _vm._v("\n\t\t\t" + _vm._s(_vm.feedbackMessage) + "\n\t\t")
+ ]
+ )
+ ])
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&":
+/*!******************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true& ***!
+ \******************************************************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "div",
+ {
+ staticClass: "row",
+ class: { disabled: _vm.loading.delete || _vm.loading.disable },
+ attrs: { "data-id": _vm.user.id }
+ },
+ [
+ _c(
+ "div",
+ {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small":
+ _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ },
+ [
+ !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe
+ ? _c("img", {
+ attrs: {
+ alt: "",
+ width: "32",
+ height: "32",
+ src: _vm.generateAvatar(_vm.user.id, 32),
+ srcset:
+ _vm.generateAvatar(_vm.user.id, 64) +
+ " 2x, " +
+ _vm.generateAvatar(_vm.user.id, 128) +
+ " 4x"
+ }
+ })
+ : _vm._e()
+ ]
+ ),
+ _vm._v(" "),
+ _c("div", { staticClass: "name" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.user.id) + "\n\t\t"),
+ _c("div", { staticClass: "displayName subtitle" }, [
+ _vm._v("\n\t\t\t" + _vm._s(_vm.user.displayname) + "\n\t\t")
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div"),
+ _vm._v(" "),
+ _c("div", { staticClass: "mailAddress" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.user.email) + "\n\t")
+ ]),
+ _vm._v(" "),
+ _c("div", { staticClass: "groups" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.userGroupsLabels) + "\n\t")
+ ]),
+ _vm._v(" "),
+ _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin
+ ? _c("div", { staticClass: "subAdminsGroups" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.userSubAdminsGroupsLabels) + "\n\t")
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ directives: [
+ {
+ name: "tooltip",
+ rawName: "v-tooltip.auto",
+ value: _vm.usedSpace,
+ expression: "usedSpace",
+ modifiers: { auto: true }
+ }
+ ],
+ staticClass: "quota"
+ },
+ [
+ _c("progress", {
+ staticClass: "quota-user-progress",
+ class: { warn: _vm.usedQuota > 80 },
+ attrs: { max: "100" },
+ domProps: { value: _vm.usedQuota }
+ })
+ ]
+ ),
+ _vm._v(" "),
+ _vm.showConfig.showLanguages
+ ? _c("div", { staticClass: "languages" }, [
+ _vm._v("\n\t\t" + _vm._s(_vm.userLanguage.name) + "\n\t")
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath
+ ? _c("div", { staticClass: "userBackend" }, [
+ _vm.showConfig.showUserBackend
+ ? _c("div", { staticClass: "userBackend" }, [
+ _vm._v("\n\t\t\t" + _vm._s(_vm.user.backend) + "\n\t\t")
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showStoragePath
+ ? _c("div", { staticClass: "storageLocation subtitle" }, [
+ _vm._v(
+ "\n\t\t\t" + _vm._s(_vm.user.storageLocation) + "\n\t\t"
+ )
+ ])
+ : _vm._e()
+ ])
+ : _vm._e(),
+ _vm._v(" "),
+ _vm.showConfig.showLastLogin
+ ? _c(
+ "div",
+ {
+ directives: [
+ {
+ name: "tooltip",
+ rawName: "v-tooltip.auto",
+ value: _vm.userLastLoginTooltip,
+ expression: "userLastLoginTooltip",
+ modifiers: { auto: true }
+ }
+ ],
+ staticClass: "lastLogin"
+ },
+ [_vm._v("\n\t\t" + _vm._s(_vm.userLastLogin) + "\n\t")]
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c("div", { staticClass: "userActions" }, [
+ _vm.canEdit && !_vm.loading.all
+ ? _c(
+ "div",
+ { staticClass: "toggleUserActions" },
+ [
+ _c(
+ "Actions",
+ [
+ _c(
+ "ActionButton",
+ {
+ attrs: { icon: "icon-rename" },
+ on: { click: _vm.toggleEdit }
+ },
+ [
+ _vm._v(
+ "\n\t\t\t\t\t" +
+ _vm._s(_vm.t("settings", "Edit User")) +
+ "\n\t\t\t\t"
+ )
+ ]
+ )
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", {
+ directives: [
+ {
+ name: "click-outside",
+ rawName: "v-click-outside",
+ value: _vm.hideMenu,
+ expression: "hideMenu"
+ }
+ ],
+ staticClass: "icon-more",
+ on: {
+ click: function($event) {
+ return _vm.$emit("toggleMenu")
+ }
+ }
+ }),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "popovermenu",
+ class: { open: _vm.openedMenu }
+ },
+ [_c("PopoverMenu", { attrs: { menu: _vm.userActions } })],
+ 1
+ )
+ ],
+ 1
+ )
+ : _vm._e(),
+ _vm._v(" "),
+ _c(
+ "div",
+ {
+ staticClass: "feedback",
+ style: { opacity: _vm.feedbackMessage !== "" ? 1 : 0 }
+ },
+ [
+ _c("div", { staticClass: "icon-checkmark" }),
+ _vm._v("\n\t\t\t" + _vm._s(_vm.feedbackMessage) + "\n\t\t")
+ ]
+ )
+ ])
+ ]
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ }),
+
+/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&":
+/*!********************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562& ***!
+ \********************************************************************************************************************************************************************************************************/
+/*! exports provided: render, staticRenderFns */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; });
+var render = function() {
+ var _vm = this
+ var _h = _vm.$createElement
+ var _c = _vm._self._c || _h
+ return _c(
+ "Content",
+ {
+ attrs: {
+ "app-name": "settings",
+ "navigation-class": { "icon-loading": _vm.loadingAddGroup }
+ }
+ },
+ [
+ _c(
+ "AppNavigation",
+ [
+ _c("AppNavigationNew", {
+ attrs: {
+ "button-id": "new-user-button",
+ text: _vm.t("settings", "New user"),
+ "button-class": "icon-add"
+ },
+ on: { click: _vm.toggleNewUserMenu }
+ }),
+ _vm._v(" "),
+ _c(
+ "ul",
+ { attrs: { id: "usergrouplist" } },
+ _vm._l(_vm.menu, function(item) {
+ return _c("AppNavigationItem", {
+ key: item.key,
+ attrs: { item: item }
+ })
+ }),
+ 1
+ ),
+ _vm._v(" "),
+ _c("AppNavigationSettings", [
+ _c(
+ "div",
+ [
+ _c("p", [_vm._v(_vm._s(_vm.t("settings", "Default quota:")))]),
+ _vm._v(" "),
+ _c("Multiselect", {
+ attrs: {
+ value: _vm.defaultQuota,
+ options: _vm.quotaOptions,
+ "tag-placeholder": "create",
+ placeholder: _vm.t("settings", "Select default quota"),
+ label: "label",
+ "track-by": "id",
+ "allow-empty": false,
+ taggable: true
+ },
+ on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota }
+ })
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c("div", [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showLanguages,
+ expression: "showLanguages"
+ }
+ ],
+ staticClass: "checkbox",
+ attrs: { id: "showLanguages", type: "checkbox" },
+ domProps: {
+ checked: Array.isArray(_vm.showLanguages)
+ ? _vm._i(_vm.showLanguages, null) > -1
+ : _vm.showLanguages
+ },
+ on: {
+ change: function($event) {
+ var $$a = _vm.showLanguages,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v)
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]))
+ } else {
+ $$i > -1 &&
+ (_vm.showLanguages = $$a
+ .slice(0, $$i)
+ .concat($$a.slice($$i + 1)))
+ }
+ } else {
+ _vm.showLanguages = $$c
+ }
+ }
+ }
+ }),
+ _vm._v(" "),
+ _c("label", { attrs: { for: "showLanguages" } }, [
+ _vm._v(_vm._s(_vm.t("settings", "Show Languages")))
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div", [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showLastLogin,
+ expression: "showLastLogin"
+ }
+ ],
+ staticClass: "checkbox",
+ attrs: { id: "showLastLogin", type: "checkbox" },
+ domProps: {
+ checked: Array.isArray(_vm.showLastLogin)
+ ? _vm._i(_vm.showLastLogin, null) > -1
+ : _vm.showLastLogin
+ },
+ on: {
+ change: function($event) {
+ var $$a = _vm.showLastLogin,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v)
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]))
+ } else {
+ $$i > -1 &&
+ (_vm.showLastLogin = $$a
+ .slice(0, $$i)
+ .concat($$a.slice($$i + 1)))
+ }
+ } else {
+ _vm.showLastLogin = $$c
+ }
+ }
+ }
+ }),
+ _vm._v(" "),
+ _c("label", { attrs: { for: "showLastLogin" } }, [
+ _vm._v(_vm._s(_vm.t("settings", "Show last login")))
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div", [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showUserBackend,
+ expression: "showUserBackend"
+ }
+ ],
+ staticClass: "checkbox",
+ attrs: { id: "showUserBackend", type: "checkbox" },
+ domProps: {
+ checked: Array.isArray(_vm.showUserBackend)
+ ? _vm._i(_vm.showUserBackend, null) > -1
+ : _vm.showUserBackend
+ },
+ on: {
+ change: function($event) {
+ var $$a = _vm.showUserBackend,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v)
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]))
+ } else {
+ $$i > -1 &&
+ (_vm.showUserBackend = $$a
+ .slice(0, $$i)
+ .concat($$a.slice($$i + 1)))
+ }
+ } else {
+ _vm.showUserBackend = $$c
+ }
+ }
+ }
+ }),
+ _vm._v(" "),
+ _c("label", { attrs: { for: "showUserBackend" } }, [
+ _vm._v(_vm._s(_vm.t("settings", "Show user backend")))
+ ])
+ ]),
+ _vm._v(" "),
+ _c("div", [
+ _c("input", {
+ directives: [
+ {
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showStoragePath,
+ expression: "showStoragePath"
+ }
+ ],
+ staticClass: "checkbox",
+ attrs: { id: "showStoragePath", type: "checkbox" },
+ domProps: {
+ checked: Array.isArray(_vm.showStoragePath)
+ ? _vm._i(_vm.showStoragePath, null) > -1
+ : _vm.showStoragePath
+ },
+ on: {
+ change: function($event) {
+ var $$a = _vm.showStoragePath,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v)
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]))
+ } else {
+ $$i > -1 &&
+ (_vm.showStoragePath = $$a
+ .slice(0, $$i)
+ .concat($$a.slice($$i + 1)))
+ }
+ } else {
+ _vm.showStoragePath = $$c
+ }
+ }
+ }
+ }),
+ _vm._v(" "),
+ _c("label", { attrs: { for: "showStoragePath" } }, [
+ _vm._v(_vm._s(_vm.t("settings", "Show storage path")))
+ ])
+ ])
+ ])
+ ],
+ 1
+ ),
+ _vm._v(" "),
+ _c(
+ "AppContent",
+ [
+ _c("UserList", {
+ attrs: {
+ users: _vm.users,
+ "show-config": _vm.showConfig,
+ "selected-group": _vm.selectedGroup,
+ "external-actions": _vm.externalActions
+ },
+ scopedSlots: _vm._u([
+ {
+ key: "content",
+ fn: function() {
+ return undefined
+ },
+ proxy: true
+ }
+ ])
+ })
+ ],
+ 1
+ )
+ ],
+ 1
+ )
+}
+var staticRenderFns = []
+render._withStripped = true
+
+
+
+/***/ })
+
+}]);
+//# sourceMappingURL=vue-2.js.map?v=1f67c05b89d62d76974e
\ No newline at end of file
--- /dev/null
+{"version":3,"file":"vue-2.js?v=1f67c05b89d62d76974e","sources":["webpack:///./apps/settings/src/components/UserList.vue","webpack:///./apps/settings/src/components/UserList.vue?69dd","webpack:///./apps/settings/src/components/UserList.vue?bf93","webpack:///./apps/settings/src/components/UserList/UserRow.vue","webpack:///./apps/settings/src/components/UserList/UserRow.vue?4147","webpack:///./apps/settings/src/components/UserList/UserRow.vue?9742","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?6483","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?2ff0","webpack:///./apps/settings/src/mixins/UserRowMixin.js","webpack:///./apps/settings/src/views/Users.vue","webpack:///./apps/settings/src/views/Users.vue?83c0","webpack:///./apps/settings/src/views/Users.vue?cc08","webpack:///./apps/settings/src/components/UserList.vue?1138","webpack:///./apps/settings/src/components/UserList/UserRow.vue?68e3","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?4ab0","webpack:///./apps/settings/src/views/Users.vue?0f11","webpack:///./apps/settings/src/components/UserList.vue?6b70","webpack:///./apps/settings/src/components/UserList/UserRow.vue?ad6a","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?d051","webpack:///./apps/settings/src/views/Users.vue?d4fd"],"sourcesContent":["import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=6cba3aca&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/user/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6cba3aca')) {\n api.createRecord('6cba3aca', component.options)\n } else {\n api.reload('6cba3aca', component.options)\n }\n module.hot.accept(\"./UserList.vue?vue&type=template&id=6cba3aca&\", function () {\n api.rerender('6cba3aca', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca&\"","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=77960baa&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/user/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('77960baa')) {\n api.createRecord('77960baa', component.options)\n } else {\n api.reload('77960baa', component.options)\n }\n module.hot.accept(\"./UserRow.vue?vue&type=template&id=77960baa&\", function () {\n api.rerender('77960baa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRow.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=template&id=77960baa&\"","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ff154a08\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/user/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('ff154a08')) {\n api.createRecord('ff154a08', component.options)\n } else {\n api.reload('ff154a08', component.options)\n }\n module.hot.accept(\"./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\", function () {\n api.rerender('ff154a08', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRowSimple.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=template&id=ff154a08&scoped=true&\"","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport default {\n props: {\n user: {\n type: Object,\n required: true\n },\n settings: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n groups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n subAdminsGroups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n quotaOptions: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n languages: {\n type: Array,\n required: true\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n computed: {\n /* GROUPS MANAGEMENT */\n userGroups: function userGroups() {\n var _this = this;\n\n var userGroups = this.groups.filter(function (group) {\n return _this.user.groups.includes(group.id);\n });\n return userGroups;\n },\n userSubAdminsGroups: function userSubAdminsGroups() {\n var _this2 = this;\n\n var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n return _this2.user.subadmin.includes(group.id);\n });\n return userSubAdminsGroups;\n },\n availableGroups: function availableGroups() {\n var _this3 = this;\n\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n var groupClone = Object.assign({}, group); // two settings here:\n // 1. user NOT in group but no permission to add\n // 2. user is in group but no permission to remove\n\n groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n return groupClone;\n });\n },\n\n /* QUOTA MANAGEMENT */\n usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n usedQuota: function usedQuota() {\n var quota = this.user.quota.quota;\n\n if (quota > 0) {\n quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n } else {\n var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\n quota = 95 * (1 - 1 / (usedInGB + 1));\n }\n\n return isNaN(quota) ? 0 : quota;\n },\n // Mapping saved values to objects\n userQuota: function userQuota() {\n if (this.user.quota.quota >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n var userQuota = this.quotaOptions.find(function (quota) {\n return quota.id === humanQuota;\n });\n return userQuota || {\n id: humanQuota,\n label: humanQuota\n };\n } else if (this.user.quota.quota === 'default') {\n // default quota is replaced by the proper value on load\n return this.quotaOptions[0];\n }\n\n return this.quotaOptions[1]; // unlimited\n },\n\n /* PASSWORD POLICY? */\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n\n /* LANGUAGE */\n userLanguage: function userLanguage() {\n var _this4 = this;\n\n var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n var userLang = availableLanguages.find(function (lang) {\n return lang.code === _this4.user.language;\n });\n\n if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n return {\n code: this.user.language,\n name: this.user.language\n };\n } else if (this.user.language === '') {\n return false;\n }\n\n return userLang;\n },\n\n /* LAST LOGIN */\n userLastLoginTooltip: function userLastLoginTooltip() {\n if (this.user.lastLogin > 0) {\n return OC.Util.formatDate(this.user.lastLogin);\n }\n\n return '';\n },\n userLastLogin: function userLastLogin() {\n if (this.user.lastLogin > 0) {\n return OC.Util.relativeModifiedDate(this.user.lastLogin);\n }\n\n return t('settings', 'Never');\n }\n },\n methods: {\n /**\n * Generate avatar url\n *\n * @param {string} user The user name\n * @param {int} size Size integer, default 32\n * @returns {string}\n */\n generateAvatar: function generateAvatar(user) {\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n return OC.generateUrl('/avatar/{user}/{size}?v={version}', {\n user: user,\n size: size,\n version: oc_userconfig.avatar.version\n });\n }\n }\n};","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=889b7562&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/user/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('889b7562')) {\n api.createRecord('889b7562', component.options)\n } else {\n api.reload('889b7562', component.options)\n }\n module.hot.accept(\"./Users.vue?vue&type=template&id=889b7562&\", function () {\n api.rerender('889b7562', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/Users.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=889b7562&\"","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport userRow from './UserList/UserRow';\nimport { Multiselect } from 'nextcloud-vue';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nvar unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited')\n};\nvar defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota')\n};\nvar newUser = {\n id: '',\n displayName: '',\n password: '',\n mailAddress: '',\n groups: [],\n subAdminsGroups: [],\n quota: defaultQuota,\n language: {\n code: 'en',\n name: t('settings', 'Default language')\n }\n};\nexport default {\n name: 'UserList',\n components: {\n userRow: userRow,\n Multiselect: Multiselect,\n InfiniteLoading: InfiniteLoading\n },\n props: {\n users: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n required: true\n },\n selectedGroup: {\n type: String,\n default: null\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n unlimitedQuota: unlimitedQuota,\n defaultQuota: defaultQuota,\n loading: {\n all: false,\n groups: false\n },\n scrolled: false,\n searchQuery: '',\n newUser: Object.assign({}, newUser)\n };\n },\n computed: {\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n filteredUsers: function filteredUsers() {\n if (this.selectedGroup === 'disabled') {\n return this.users.filter(function (user) {\n return user.enabled === false;\n });\n }\n\n if (!this.settings.isAdmin) {\n // we don't want subadmins to edit themselves\n return this.users.filter(function (user) {\n return user.enabled !== false && user.id !== OC.getCurrentUser().uid;\n });\n }\n\n return this.users.filter(function (user) {\n return user.enabled !== false;\n });\n },\n groups: function groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n canAddGroups: function canAddGroups() {\n // disabled if no permission to add new users to group\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n group = Object.assign({}, group);\n group.$isDisabled = group.canAdd === false;\n return group;\n });\n },\n subAdminsGroups: function subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n quotaPreset.unshift(this.defaultQuota);\n return quotaPreset;\n },\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n usersCount: function usersCount() {\n return this.users.length;\n },\n\n /* LANGUAGES */\n languages: function languages() {\n return [{\n label: t('settings', 'Common languages'),\n languages: this.settings.languages.commonlanguages\n }, {\n label: t('settings', 'All languages'),\n languages: this.settings.languages.languages\n }];\n }\n },\n watch: {\n // watch url change and group select\n selectedGroup: function selectedGroup(val, old) {\n // if selected is the disabled group but it's empty\n this.redirectIfDisabled();\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n this.setNewUserDefaultGroup(val);\n },\n // make sure the infiniteLoading state is changed if we manually\n // add/remove data from the store\n usersCount: function usersCount(val, old) {\n // deleting the last user, reset the list\n if (val === 0 && old === 1) {\n this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that\n // the list is not empty anymore (we don't fetch the newly\n // added user as we already have all the info we need)\n } else if (val === 1 && old === 0) {\n this.$refs.infiniteLoading.stateChanger.loaded();\n }\n }\n },\n mounted: function mounted() {\n if (!this.settings.canChangePassword) {\n OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n }\n /**\n * Reset and init new user form\n */\n\n\n this.resetForm();\n /**\n * Register search\n */\n\n this.userSearch = new OCA.Search(this.search, this.resetSearch);\n /**\n * If disabled group but empty, redirect\n */\n\n this.redirectIfDisabled();\n },\n methods: {\n onScroll: function onScroll(event) {\n this.scrolled = event.target.scrollTo > 0;\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Object}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n this.newUser.quota = {\n id: quota,\n label: quota\n };\n return this.newUser.quota;\n } // Default is unlimited\n\n\n this.newUser.quota = this.quotaOptions[0];\n return this.quotaOptions[0];\n },\n infiniteHandler: function infiniteHandler($state) {\n this.$store.dispatch('getUsers', {\n offset: this.usersOffset,\n limit: this.usersLimit,\n group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n search: this.searchQuery\n }).then(function (response) {\n response ? $state.loaded() : $state.complete();\n });\n },\n\n /* SEARCH */\n search: function search(query) {\n this.searchQuery = query;\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n },\n resetSearch: function resetSearch() {\n this.search('');\n },\n resetForm: function resetForm() {\n // revert form to original state\n this.newUser = Object.assign({}, newUser);\n /**\n * Init default language from server data. The use of this.settings\n * requires a computed variable, which break the v-model binding of the form,\n * this is a much easier solution than getter and setter on a computed var\n */\n\n if (this.settings.defaultLanguage) {\n Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n }\n /**\n * In case the user directly loaded the user list within a group\n * the watch won't be triggered. We need to initialize it.\n */\n\n\n this.setNewUserDefaultGroup(this.selectedGroup);\n this.loading.all = false;\n },\n createUser: function createUser() {\n var _this = this;\n\n this.loading.all = true;\n this.$store.dispatch('addUser', {\n userid: this.newUser.id,\n password: this.newUser.password,\n displayName: this.newUser.displayName,\n email: this.newUser.mailAddress,\n groups: this.newUser.groups.map(function (group) {\n return group.id;\n }),\n subadmin: this.newUser.subAdminsGroups.map(function (group) {\n return group.id;\n }),\n quota: this.newUser.quota.id,\n language: this.newUser.language.code\n }).then(function () {\n _this.resetForm();\n\n _this.$refs.newusername.focus();\n }).catch(function (error) {\n _this.loading.all = false;\n\n if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n var statuscode = error.response.data.ocs.meta.statuscode;\n\n if (statuscode === 102) {\n // wrong username\n _this.$refs.newusername.focus();\n } else if (statuscode === 107) {\n // wrong password\n _this.$refs.newuserpassword.focus();\n }\n }\n });\n },\n setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n if (value && value.length > 0) {\n // setting new user default group to the current selected one\n var currentGroup = this.groups.find(function (group) {\n return group.id === value;\n });\n\n if (currentGroup) {\n this.newUser.groups = [currentGroup];\n return;\n }\n } // fallback, empty selected group\n\n\n this.newUser.groups = [];\n },\n\n /**\n * Create a new group\n *\n * @param {string} gid Group id\n * @returns {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this2 = this;\n\n this.loading.groups = true;\n this.$store.dispatch('addGroup', gid).then(function (group) {\n _this2.newUser.groups.push(_this2.groups.find(function (group) {\n return group.id === gid;\n }));\n\n _this2.loading.groups = false;\n }).catch(function () {\n _this2.loading.groups = false;\n });\n return this.$store.getters.getGroups[this.groups.length];\n },\n\n /**\n * If the selected group is the disabled group but the count is 0\n * redirect to the all users page.\n * * we only check for 0 because we don't have the count on ldap\n * * and we therefore set the usercount to -1 in this specific case\n */\n redirectIfDisabled: function redirectIfDisabled() {\n var allGroups = this.$store.getters.getGroups;\n\n if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {\n return group.id === 'disabled' && group.usercount === 0;\n }) > -1) {\n // disabled group is empty, redirection to all users\n this.$router.push({\n name: 'users'\n });\n this.$refs.infiniteLoading.stateChanger.reset();\n }\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { PopoverMenu, Multiselect, Actions, ActionButton } from 'nextcloud-vue';\nimport UserRowSimple from './UserRowSimple';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nVue.use(VTooltip);\nexport default {\n name: 'UserRow',\n components: {\n UserRowSimple: UserRowSimple,\n PopoverMenu: PopoverMenu,\n Actions: Actions,\n ActionButton: ActionButton,\n Multiselect: Multiselect\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mixins: [UserRowMixin],\n props: {\n user: {\n type: Object,\n required: true\n },\n settings: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n groups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n subAdminsGroups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n quotaOptions: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n languages: {\n type: Array,\n required: true\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n rand: parseInt(Math.random() * 1000),\n openedMenu: false,\n feedbackMessage: '',\n editing: false,\n loading: {\n all: false,\n displayName: false,\n password: false,\n mailAddress: false,\n groups: false,\n subadmins: false,\n quota: false,\n delete: false,\n disable: false,\n languages: false,\n wipe: false\n }\n };\n },\n computed: {\n /* USER POPOVERMENU ACTIONS */\n userActions: function userActions() {\n var actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Delete user'),\n action: this.deleteUser\n }, {\n icon: 'icon-delete',\n text: t('settings', 'Wipe all devices'),\n action: this.wipeUserDevices\n }, {\n icon: this.user.enabled ? 'icon-close' : 'icon-add',\n text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n action: this.enableDisableUser\n }];\n\n if (this.user.email !== null && this.user.email !== '') {\n actions.push({\n icon: 'icon-mail',\n text: t('settings', 'Resend welcome email'),\n action: this.sendWelcomeMail\n });\n }\n\n return actions.concat(this.externalActions);\n }\n },\n methods: {\n /* MENU HANDLING */\n toggleMenu: function toggleMenu() {\n this.openedMenu = !this.openedMenu;\n },\n hideMenu: function hideMenu() {\n this.openedMenu = false;\n },\n wipeUserDevices: function wipeUserDevices() {\n var _this = this;\n\n var userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {\n userid: userid\n }), t('settings', 'Remote wipe of devices'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Wipe {userid}\\'s devices', {\n userid: userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, function (result) {\n if (result) {\n _this.loading.wipe = true;\n _this.loading.all = true;\n\n _this.$store.dispatch('wipeUserDevices', userid).then(function () {\n _this.loading.wipe = false;\n _this.loading.all = false;\n });\n }\n }, true);\n },\n deleteUser: function deleteUser() {\n var _this2 = this;\n\n var userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', {\n userid: userid\n }), t('settings', 'Account deletion'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Delete {userid}\\'s account', {\n userid: userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, function (result) {\n if (result) {\n _this2.loading.delete = true;\n _this2.loading.all = true;\n return _this2.$store.dispatch('deleteUser', userid).then(function () {\n _this2.loading.delete = false;\n _this2.loading.all = false;\n });\n }\n }, true);\n },\n enableDisableUser: function enableDisableUser() {\n var _this3 = this;\n\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n var enabled = !this.user.enabled;\n return this.$store.dispatch('enableDisableUser', {\n userid: userid,\n enabled: enabled\n }).then(function () {\n _this3.loading.delete = false;\n _this3.loading.all = false;\n });\n },\n\n /**\n \t * Set user displayName\n \t *\n \t * @param {string} displayName The display name\n \t */\n updateDisplayName: function updateDisplayName() {\n var _this4 = this;\n\n var displayName = this.$refs.displayName.value;\n this.loading.displayName = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'displayname',\n value: displayName\n }).then(function () {\n _this4.loading.displayName = false;\n _this4.$refs.displayName.value = displayName;\n });\n },\n\n /**\n \t * Set user password\n \t *\n \t * @param {string} password The email adress\n \t */\n updatePassword: function updatePassword() {\n var _this5 = this;\n\n var password = this.$refs.password.value;\n this.loading.password = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'password',\n value: password\n }).then(function () {\n _this5.loading.password = false;\n _this5.$refs.password.value = ''; // empty & show placeholder\n });\n },\n\n /**\n \t * Set user mailAddress\n \t *\n \t * @param {string} mailAddress The email adress\n \t */\n updateEmail: function updateEmail() {\n var _this6 = this;\n\n var mailAddress = this.$refs.mailAddress.value;\n this.loading.mailAddress = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'email',\n value: mailAddress\n }).then(function () {\n _this6.loading.mailAddress = false;\n _this6.$refs.mailAddress.value = mailAddress;\n });\n },\n\n /**\n \t * Create a new group and add user to it\n \t *\n \t * @param {string} gid Group id\n \t */\n createGroup: function createGroup(gid) {\n var userid;\n return regeneratorRuntime.async(function createGroup$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n this.loading = {\n groups: true,\n subadmins: true\n };\n _context.prev = 1;\n _context.next = 4;\n return regeneratorRuntime.awrap(this.$store.dispatch('addGroup', gid));\n\n case 4:\n userid = this.user.id;\n _context.next = 7;\n return regeneratorRuntime.awrap(this.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n }));\n\n case 7:\n _context.next = 12;\n break;\n\n case 9:\n _context.prev = 9;\n _context.t0 = _context[\"catch\"](1);\n console.error(_context.t0);\n\n case 12:\n _context.prev = 12;\n this.loading = {\n groups: false,\n subadmins: false\n };\n return _context.finish(12);\n\n case 15:\n return _context.abrupt(\"return\", this.$store.getters.getGroups[this.groups.length]);\n\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, null, this, [[1, 9, 12, 15]]);\n },\n\n /**\n \t * Add user to group\n \t *\n \t * @param {object} group Group object\n \t */\n addUserGroup: function addUserGroup(group) {\n var userid, gid;\n return regeneratorRuntime.async(function addUserGroup$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(group.canAdd === false)) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt(\"return\", false);\n\n case 2:\n this.loading.groups = true;\n userid = this.user.id;\n gid = group.id;\n _context2.prev = 5;\n _context2.next = 8;\n return regeneratorRuntime.awrap(this.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n }));\n\n case 8:\n _context2.next = 13;\n break;\n\n case 10:\n _context2.prev = 10;\n _context2.t0 = _context2[\"catch\"](5);\n console.error(_context2.t0);\n\n case 13:\n _context2.prev = 13;\n this.loading.groups = false;\n return _context2.finish(13);\n\n case 16:\n case \"end\":\n return _context2.stop();\n }\n }\n }, null, this, [[5, 10, 13, 16]]);\n },\n\n /**\n \t * Remove user from group\n \t *\n \t * @param {object} group Group object\n \t */\n removeUserGroup: function removeUserGroup(group) {\n var userid, gid;\n return regeneratorRuntime.async(function removeUserGroup$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(group.canRemove === false)) {\n _context3.next = 2;\n break;\n }\n\n return _context3.abrupt(\"return\", false);\n\n case 2:\n this.loading.groups = true;\n userid = this.user.id;\n gid = group.id;\n _context3.prev = 5;\n _context3.next = 8;\n return regeneratorRuntime.awrap(this.$store.dispatch('removeUserGroup', {\n userid: userid,\n gid: gid\n }));\n\n case 8:\n this.loading.groups = false; // remove user from current list if current list is the removed group\n\n if (this.$route.params.selectedGroup === gid) {\n this.$store.commit('deleteUser', userid);\n }\n\n _context3.next = 15;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3[\"catch\"](5);\n this.loading.groups = false;\n\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }\n }, null, this, [[5, 12]]);\n },\n\n /**\n \t * Add user to group\n \t *\n \t * @param {object} group Group object\n \t */\n addUserSubAdmin: function addUserSubAdmin(group) {\n var userid, gid;\n return regeneratorRuntime.async(function addUserSubAdmin$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n this.loading.subadmins = true;\n userid = this.user.id;\n gid = group.id;\n _context4.prev = 3;\n _context4.next = 6;\n return regeneratorRuntime.awrap(this.$store.dispatch('addUserSubAdmin', {\n userid: userid,\n gid: gid\n }));\n\n case 6:\n this.loading.subadmins = false;\n _context4.next = 12;\n break;\n\n case 9:\n _context4.prev = 9;\n _context4.t0 = _context4[\"catch\"](3);\n console.error(_context4.t0);\n\n case 12:\n case \"end\":\n return _context4.stop();\n }\n }\n }, null, this, [[3, 9]]);\n },\n\n /**\n \t * Remove user from group\n \t *\n \t * @param {object} group Group object\n \t */\n removeUserSubAdmin: function removeUserSubAdmin(group) {\n var userid, gid;\n return regeneratorRuntime.async(function removeUserSubAdmin$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n this.loading.subadmins = true;\n userid = this.user.id;\n gid = group.id;\n _context5.prev = 3;\n _context5.next = 6;\n return regeneratorRuntime.awrap(this.$store.dispatch('removeUserSubAdmin', {\n userid: userid,\n gid: gid\n }));\n\n case 6:\n _context5.next = 11;\n break;\n\n case 8:\n _context5.prev = 8;\n _context5.t0 = _context5[\"catch\"](3);\n console.error(_context5.t0);\n\n case 11:\n _context5.prev = 11;\n this.loading.subadmins = false;\n return _context5.finish(11);\n\n case 14:\n case \"end\":\n return _context5.stop();\n }\n }\n }, null, this, [[3, 8, 11, 14]]);\n },\n\n /**\n \t * Dispatch quota set request\n \t *\n \t * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n \t * @returns {string}\n \t */\n setUserQuota: function setUserQuota() {\n var quota,\n _args6 = arguments;\n return regeneratorRuntime.async(function setUserQuota$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n quota = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : 'none';\n this.loading.quota = true; // ensure we only send the preset id\n\n quota = quota.id ? quota.id : quota;\n _context6.prev = 3;\n _context6.next = 6;\n return regeneratorRuntime.awrap(this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'quota',\n value: quota\n }));\n\n case 6:\n _context6.next = 11;\n break;\n\n case 8:\n _context6.prev = 8;\n _context6.t0 = _context6[\"catch\"](3);\n console.error(_context6.t0);\n\n case 11:\n _context6.prev = 11;\n this.loading.quota = false;\n return _context6.finish(11);\n\n case 14:\n return _context6.abrupt(\"return\", quota);\n\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }\n }, null, this, [[3, 8, 11, 14]]);\n },\n\n /**\n \t * Validate quota string to make sure it's a valid human file size\n \t *\n \t * @param {string} quota Quota in readable format '5 GB'\n \t * @returns {Promise|boolean}\n \t */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n } // if no valid do not change\n\n\n return false;\n },\n\n /**\n \t * Dispatch language set request\n \t *\n \t * @param {Object} lang language object {code:'en', name:'English'}\n \t * @returns {Object}\n \t */\n setUserLanguage: function setUserLanguage(lang) {\n return regeneratorRuntime.async(function setUserLanguage$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n this.loading.languages = true; // ensure we only send the preset id\n\n _context7.prev = 1;\n _context7.next = 4;\n return regeneratorRuntime.awrap(this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'language',\n value: lang.code\n }));\n\n case 4:\n _context7.next = 9;\n break;\n\n case 6:\n _context7.prev = 6;\n _context7.t0 = _context7[\"catch\"](1);\n console.error(_context7.t0);\n\n case 9:\n _context7.prev = 9;\n this.loading.languages = false;\n return _context7.finish(9);\n\n case 12:\n return _context7.abrupt(\"return\", lang);\n\n case 13:\n case \"end\":\n return _context7.stop();\n }\n }\n }, null, this, [[1, 6, 9, 12]]);\n },\n\n /**\n \t * Dispatch new welcome mail request\n \t */\n sendWelcomeMail: function sendWelcomeMail() {\n var _this7 = this;\n\n this.loading.all = true;\n this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n if (success) {\n // Show feedback to indicate the success\n _this7.feedbackMessage = t('setting', 'Welcome mail sent!');\n setTimeout(function () {\n _this7.feedbackMessage = '';\n }, 2000);\n }\n\n _this7.loading.all = false;\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { PopoverMenu, Actions, ActionButton } from 'nextcloud-vue';\nimport ClickOutside from 'vue-click-outside';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport UserRowMixin from '../../mixins/UserRowMixin';\nexport default {\n name: 'UserRowSimple',\n components: {\n PopoverMenu: PopoverMenu,\n ActionButton: ActionButton,\n Actions: Actions\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mixins: [UserRowMixin],\n props: {\n user: {\n type: Object,\n required: true\n },\n loading: {\n type: Object,\n required: true\n },\n showConfig: {\n type: Object,\n required: true\n },\n userActions: {\n type: Array,\n required: true\n },\n openedMenu: {\n type: Boolean,\n required: true\n },\n feedbackMessage: {\n type: String,\n required: true\n },\n subAdminsGroups: {\n type: Array,\n required: true\n },\n settings: {\n type: Object,\n required: true\n }\n },\n computed: {\n userGroupsLabels: function userGroupsLabels() {\n return this.userGroups.map(function (group) {\n return group.name;\n }).join(', ');\n },\n userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {\n return this.userSubAdminsGroups.map(function (group) {\n return group.name;\n }).join(', ');\n },\n usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n canEdit: function canEdit() {\n return getCurrentUser().uid !== this.user.id && this.user.id !== 'admin';\n }\n },\n methods: {\n hideMenu: function hideMenu() {\n this.$emit('hideMenu');\n },\n toggleEdit: function toggleEdit() {\n this.$emit('update:editing', true);\n }\n }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport { AppContent, AppNavigation, AppNavigationItem, AppNavigationNew, AppNavigationSettings, Content, Multiselect } from 'nextcloud-vue';\nimport UserList from '../components/UserList';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Users',\n components: {\n AppContent: AppContent,\n AppNavigation: AppNavigation,\n AppNavigationItem: AppNavigationItem,\n AppNavigationNew: AppNavigationNew,\n AppNavigationSettings: AppNavigationSettings,\n Content: Content,\n UserList: UserList,\n Multiselect: Multiselect\n },\n props: {\n selectedGroup: {\n type: String,\n default: null\n }\n },\n data: function data() {\n return {\n // default quota is set to unlimited\n unlimitedQuota: {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n // temporary value used for multiselect change\n selectedQuota: false,\n externalActions: [],\n showAddGroupEntry: false,\n loadingAddGroup: false,\n showConfig: {\n showStoragePath: false,\n showUserBackend: false,\n showLastLogin: false,\n showNewUserForm: false,\n showLanguages: false\n }\n };\n },\n computed: {\n users: function users() {\n return this.$store.getters.getUsers;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n // Local settings\n showLanguages: {\n get: function get() {\n return this.getLocalstorage('showLanguages');\n },\n set: function set(status) {\n this.setLocalStorage('showLanguages', status);\n }\n },\n showLastLogin: {\n get: function get() {\n return this.getLocalstorage('showLastLogin');\n },\n set: function set(status) {\n this.setLocalStorage('showLastLogin', status);\n }\n },\n showUserBackend: {\n get: function get() {\n return this.getLocalstorage('showUserBackend');\n },\n set: function set(status) {\n this.setLocalStorage('showUserBackend', status);\n }\n },\n showStoragePath: {\n get: function get() {\n return this.getLocalstorage('showStoragePath');\n },\n set: function set(status) {\n this.setLocalStorage('showStoragePath', status);\n }\n },\n userCount: function userCount() {\n return this.$store.getters.getUserCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // default quota\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n return quotaPreset;\n },\n // mapping saved values to objects\n defaultQuota: {\n get: function get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n\n if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n\n return this.unlimitedQuota; // unlimited\n },\n set: function set(quota) {\n this.selectedQuota = quota;\n }\n },\n // BUILD APP NAVIGATION MENU OBJECT\n menu: function menu() {\n var _this = this;\n\n // Data provided php side\n var self = this;\n var groups = this.$store.getters.getGroups;\n groups = Array.isArray(groups) ? groups : []; // Map groups\n\n groups = groups.map(function (group) {\n var item = {};\n item.id = group.id.replace(' ', '_');\n item.key = item.id;\n item.utils = {}; // router link to\n\n item.router = {\n name: 'group',\n params: {\n selectedGroup: group.id\n }\n }; // group name\n\n item.text = group.name;\n item.title = group.name; // users count for all groups\n\n if (group.usercount - group.disabled > 0 || group.usercount === -1) {\n item.utils.counter = group.usercount - group.disabled;\n }\n\n if (item.id !== 'admin' && item.id !== 'disabled' && _this.settings.isAdmin) {\n // add delete button on real groups\n item.utils.actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Remove group'),\n action: function action() {\n self.removeGroup(group.id);\n }\n }];\n }\n\n return item;\n }); // Every item is added on top of the array, so we're going backward\n // Groups, separator, disabled, admin, everyone\n // Add separator\n\n var realGroups = groups.find(function (group) {\n return group.id !== 'disabled' && group.id !== 'admin';\n });\n realGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n realGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\n if (realGroups.length > 0) {\n var separator = {\n caption: true,\n text: t('settings', 'Groups')\n };\n groups.unshift(separator);\n } // Adjust admin and disabled groups\n\n\n var adminGroup = groups.find(function (group) {\n return group.id === 'admin';\n });\n var disabledGroup = groups.find(function (group) {\n return group.id === 'disabled';\n }); // filter out admin and disabled\n\n groups = groups.filter(function (group) {\n return ['admin', 'disabled'].indexOf(group.id) === -1;\n });\n\n if (adminGroup && adminGroup.text) {\n adminGroup.text = t('settings', 'Admins'); // rename admin group\n\n adminGroup.icon = 'icon-user-admin'; // set icon\n\n groups.unshift(adminGroup); // add admin group if present\n }\n\n if (disabledGroup && disabledGroup.text) {\n disabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\n disabledGroup.icon = 'icon-disabled-users'; // set icon\n\n if (disabledGroup.utils && (disabledGroup.utils.counter > 0 // add disabled if not empty\n || disabledGroup.utils.counter === -1) // add disabled if ldap enabled\n ) {\n groups.unshift(disabledGroup);\n\n if (disabledGroup.utils.counter === -1) {\n // hides the counter instead of showing -1\n delete disabledGroup.utils.counter;\n }\n }\n } // Add everyone group\n\n\n var everyoneGroup = {\n id: 'everyone',\n key: 'everyone',\n icon: 'icon-contacts-dark',\n router: {\n name: 'users'\n },\n text: t('settings', 'Everyone')\n }; // users count\n\n if (this.userCount > 0) {\n Vue.set(everyoneGroup, 'utils', {\n counter: this.userCount\n });\n }\n\n groups.unshift(everyoneGroup);\n var addGroup = {\n id: 'addgroup',\n key: 'addgroup',\n icon: 'icon-add',\n text: t('settings', 'Add group'),\n classes: this.loadingAddGroup ? 'icon-loading-small' : ''\n };\n\n if (this.showAddGroupEntry) {\n Vue.set(addGroup, 'edit', {\n text: t('settings', 'Add group'),\n action: this.createGroup,\n reset: function reset() {\n self.showAddGroupEntry = false;\n }\n });\n addGroup.classes = 'editing';\n } else {\n Vue.set(addGroup, 'action', function () {\n self.showAddGroupEntry = true; // focus input\n\n Vue.nextTick(function () {\n window.addgroup.querySelector('form > input[type=\"text\"]').focus();\n });\n });\n }\n\n groups.unshift(addGroup);\n return groups;\n }\n },\n beforeMount: function beforeMount() {\n this.$store.commit('initGroups', {\n groups: this.$store.getters.getServerData.groups,\n orderBy: this.$store.getters.getServerData.sortGroups,\n userCount: this.$store.getters.getServerData.userCount\n });\n this.$store.dispatch('getPasswordPolicyMinLength');\n },\n created: function created() {\n // init the OCA.Settings.UserList object\n // and add the registerAction method\n Object.assign(OCA, {\n Settings: {\n UserList: {\n registerAction: this.registerAction\n }\n }\n });\n },\n methods: {\n toggleNewUserMenu: function toggleNewUserMenu() {\n this.showConfig.showNewUserForm = !this.showConfig.showNewUserForm;\n\n if (this.showConfig.showNewUserForm) {\n Vue.nextTick(function () {\n window.newusername.focus();\n });\n }\n },\n getLocalstorage: function getLocalstorage(key) {\n // force initialization\n var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values\n\n this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n return this.showConfig[key];\n },\n setLocalStorage: function setLocalStorage(key, status) {\n this.showConfig[key] = status;\n this.$localStorage.set(key, status);\n return status;\n },\n removeGroup: function removeGroup(groupid) {\n var self = this; // TODO migrate to a vue js confirm dialog component\n\n OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n group: groupid\n }), t('settings', 'Please confirm the group removal '), function (success) {\n if (success) {\n self.$store.dispatch('removeGroup', groupid);\n }\n });\n },\n\n /**\n * Dispatch default quota set request\n *\n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n */\n setDefaultQuota: function setDefaultQuota() {\n var _this2 = this;\n\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.$store.dispatch('setAppConfig', {\n app: 'files',\n key: 'default_quota',\n // ensure we only send the preset id\n value: quota.id ? quota.id : quota\n }).then(function () {\n if (_typeof(quota) !== 'object') {\n quota = {\n id: quota,\n label: quota\n };\n }\n\n _this2.defaultQuota = quota;\n });\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota === null) {\n return this.setDefaultQuota('none');\n } else {\n // unify format output\n return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n }\n },\n\n /**\n * Register a new action for the user menu\n *\n * @param {string} icon the icon class\n * @param {string} text the text to display\n * @param {Function} action the function to run\n * @returns {Array}\n */\n registerAction: function registerAction(icon, text, action) {\n this.externalActions.push({\n icon: icon,\n text: text,\n action: action\n });\n return this.externalActions;\n },\n\n /**\n * Create a new group\n *\n * @param {Object} event The form submit event\n */\n createGroup: function createGroup(event) {\n var _this3 = this;\n\n var gid = event.target[0].value;\n this.loadingAddGroup = true;\n this.$store.dispatch('addGroup', gid).then(function () {\n _this3.showAddGroupEntry = false;\n _this3.loadingAddGroup = false;\n\n _this3.$router.push({\n name: 'group',\n params: {\n selectedGroup: gid\n }\n });\n }).catch(function () {\n _this3.loadingAddGroup = false;\n });\n }\n }\n};","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"user-list-grid\",\n attrs: { id: \"app-content\" },\n on: {\n \"&scroll\": function($event) {\n return _vm.onScroll($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },\n attrs: { id: \"grid-header\" }\n },\n [\n _c(\"div\", { staticClass: \"avatar\", attrs: { id: \"headerAvatar\" } }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\", attrs: { id: \"headerName\" } }, [\n _vm._v(\n \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Username\")) + \"\\n\\n\\t\\t\\t\"\n ),\n _c(\"div\", { staticClass: \"subtitle\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Display name\")) +\n \"\\n\\t\\t\\t\"\n )\n ])\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"password\", attrs: { id: \"headerPassword\" } },\n [\n _vm._v(\n \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Password\")) + \"\\n\\t\\t\"\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mailAddress\", attrs: { id: \"headerAddress\" } },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Email\")) + \"\\n\\t\\t\")]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"groups\", attrs: { id: \"headerGroups\" } }, [\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Groups\")) + \"\\n\\t\\t\")\n ]),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\", attrs: { id: \"headerSubAdmins\" } },\n [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Group admin for\")) +\n \"\\n\\t\\t\"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"quota\", attrs: { id: \"headerQuota\" } }, [\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Quota\")) + \"\\n\\t\\t\")\n ]),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\", attrs: { id: \"headerLanguages\" } },\n [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Language\")) +\n \"\\n\\t\\t\"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"headerUserBackend userBackend\" }, [\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"User backend\")) +\n \"\\n\\t\\t\\t\"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"subtitle storageLocation\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Storage location\")) +\n \"\\n\\t\\t\\t\"\n )\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"headerLastLogin lastLogin\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Last login\")) +\n \"\\n\\t\\t\"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showConfig.showNewUserForm,\n expression: \"showConfig.showNewUserForm\"\n }\n ],\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && _vm.showConfig.showNewUserForm },\n attrs: { id: \"new-user\", disabled: _vm.loading.all },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.createUser($event)\n }\n }\n },\n [\n _c(\"div\", {\n class: _vm.loading.all ? \"icon-loading-small\" : \"icon-add\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.id,\n expression: \"newUser.id\"\n }\n ],\n ref: \"newusername\",\n attrs: {\n id: \"newusername\",\n disabled: _vm.settings.newUserGenerateUserID,\n placeholder: _vm.settings.newUserGenerateUserID\n ? _vm.t(\"settings\", \"Will be autogenerated\")\n : _vm.t(\"settings\", \"Username\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"username\",\n pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\n required: \"\",\n type: \"text\"\n },\n domProps: { value: _vm.newUser.id },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"id\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"displayName\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.displayName,\n expression: \"newUser.displayName\"\n }\n ],\n attrs: {\n id: \"newdisplayname\",\n placeholder: _vm.t(\"settings\", \"Display name\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"displayname\",\n type: \"text\"\n },\n domProps: { value: _vm.newUser.displayName },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"displayName\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"password\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.password,\n expression: \"newUser.password\"\n }\n ],\n ref: \"newuserpassword\",\n attrs: {\n id: \"newuserpassword\",\n minlength: _vm.minPasswordLength,\n placeholder: _vm.t(\"settings\", \"Password\"),\n required: _vm.newUser.mailAddress === \"\",\n autocapitalize: \"none\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n name: \"password\",\n type: \"password\"\n },\n domProps: { value: _vm.newUser.password },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"password\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mailAddress\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.mailAddress,\n expression: \"newUser.mailAddress\"\n }\n ],\n attrs: {\n id: \"newemail\",\n placeholder: _vm.t(\"settings\", \"Email\"),\n required:\n _vm.newUser.password === \"\" ||\n _vm.settings.newUserRequireEmail,\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"email\",\n type: \"email\"\n },\n domProps: { value: _vm.newUser.mailAddress },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"groups\" },\n [\n !_vm.settings.isAdmin\n ? _c(\"input\", {\n class: { \"icon-loading-small\": _vm.loading.groups },\n attrs: {\n id: \"newgroups\",\n required: !_vm.settings.isAdmin,\n tabindex: \"-1\",\n type: \"text\"\n },\n domProps: { value: _vm.newUser.groups }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"Multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.groups || _vm.loading.all,\n multiple: true,\n options: _vm.canAddGroups,\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n \"tag-width\": 60,\n taggable: true,\n label: \"name\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: { tag: _vm.createGroup },\n model: {\n value: _vm.newUser.groups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"groups\", $$v)\n },\n expression: \"newUser.groups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\" },\n [\n _c(\n \"Multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n multiple: true,\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n \"tag-width\": 60,\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.newUser.subAdminsGroups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)\n },\n expression: \"newUser.subAdminsGroups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"quota\" },\n [\n _c(\"Multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n taggable: true,\n label: \"label\",\n \"track-by\": \"id\"\n },\n on: { tag: _vm.validateQuota },\n model: {\n value: _vm.newUser.quota,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"quota\", $$v)\n },\n expression: \"newUser.quota\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\" },\n [\n _c(\"Multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"Default language\"),\n \"group-label\": \"label\",\n \"group-values\": \"languages\",\n label: \"name\",\n \"track-by\": \"code\"\n },\n model: {\n value: _vm.newUser.language,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"language\", $$v)\n },\n expression: \"newUser.language\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"lastLogin\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _c(\"input\", {\n staticClass: \"button primary icon-checkmark-white has-tooltip\",\n attrs: {\n id: \"newsubmit\",\n title: _vm.t(\"settings\", \"Add a new user\"),\n type: \"submit\",\n value: \"\"\n }\n })\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.filteredUsers, function(user, key) {\n return _c(\"user-row\", {\n key: key,\n attrs: {\n \"external-actions\": _vm.externalActions,\n groups: _vm.groups,\n languages: _vm.languages,\n \"quota-options\": _vm.quotaOptions,\n settings: _vm.settings,\n \"show-config\": _vm.showConfig,\n \"sub-admins-groups\": _vm.subAdminsGroups,\n user: user\n }\n })\n }),\n _vm._v(\" \"),\n _c(\n \"InfiniteLoading\",\n { ref: \"infiniteLoading\", on: { infinite: _vm.infiniteHandler } },\n [\n _c(\"div\", { attrs: { slot: \"spinner\" }, slot: \"spinner\" }, [\n _c(\"div\", { staticClass: \"users-icon-loading icon-loading\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-more\" }, slot: \"no-more\" }, [\n _c(\"div\", { staticClass: \"users-list-end\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-results\" }, slot: \"no-results\" }, [\n _c(\"div\", { attrs: { id: \"emptycontent\" } }, [\n _c(\"div\", { staticClass: \"icon-contacts-dark\" }),\n _vm._v(\" \"),\n _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))])\n ])\n ])\n ]\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return Object.keys(_vm.user).length === 1\n ? _c(\"div\", { staticClass: \"row\", attrs: { \"data-id\": _vm.user.id } }, [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\":\n _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n ? _c(\"img\", {\n attrs: {\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\",\n alt: \"\",\n height: \"32\",\n width: \"32\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\")\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"obfuscated\" }, [\n _vm._v(\n \"\\n\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"You do not have permissions to see the details of this user\"\n )\n ) +\n \"\\n\\t\"\n )\n ])\n ])\n : !_vm.editing\n ? _c(\"UserRowSimple\", {\n attrs: {\n editing: _vm.editing,\n \"feedback-message\": _vm.feedbackMessage,\n groups: _vm.groups,\n languages: _vm.languages,\n loading: _vm.loading,\n \"opened-menu\": _vm.openedMenu,\n settings: _vm.settings,\n \"show-config\": _vm.showConfig,\n \"sub-admins-groups\": _vm.subAdminsGroups,\n \"user-actions\": _vm.userActions,\n user: _vm.user\n },\n on: {\n \"update:editing\": function($event) {\n _vm.editing = $event\n },\n hideMenu: _vm.hideMenu,\n toggleMenu: _vm.toggleMenu\n }\n })\n : _c(\n \"div\",\n {\n staticClass: \"row row--editable\",\n class: { disabled: _vm.loading.delete || _vm.loading.disable },\n attrs: { \"data-id\": _vm.user.id }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\":\n _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n ? _c(\"img\", {\n attrs: {\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\",\n alt: \"\",\n height: \"32\",\n width: \"32\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"displayName\" }, [\n _c(\n \"form\",\n {\n staticClass: \"displayName\",\n class: { \"icon-loading-small\": _vm.loading.displayName },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateDisplayName($event)\n }\n }\n },\n [\n _vm.user.backendCapabilities.setDisplayName\n ? [\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n ref: \"displayName\",\n attrs: {\n id: \"displayName\" + _vm.user.id + _vm.rand,\n disabled:\n _vm.loading.displayName || _vm.loading.all,\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n spellcheck: \"false\",\n type: \"text\"\n },\n domProps: { value: _vm.user.displayname }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n : _vm._e()\n ]\n : _c(\"div\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"The backend does not support changing the display name\"\n ),\n expression:\n \"t('settings', 'The backend does not support changing the display name')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"name\"\n })\n ],\n 2\n )\n ]),\n _vm._v(\" \"),\n _vm.settings.canChangePassword &&\n _vm.user.backendCapabilities.setPassword\n ? _c(\n \"form\",\n {\n staticClass: \"password\",\n class: { \"icon-loading-small\": _vm.loading.password },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updatePassword($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"password\",\n attrs: {\n id: \"password\" + _vm.user.id + _vm.rand,\n disabled: _vm.loading.password || _vm.loading.all,\n minlength: _vm.minPasswordLength,\n placeholder: _vm.t(\"settings\", \"Add new password\"),\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n required: \"\",\n spellcheck: \"false\",\n type: \"password\",\n value: \"\"\n }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n )\n : _c(\"div\"),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n staticClass: \"mailAddress\",\n class: { \"icon-loading-small\": _vm.loading.mailAddress },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateEmail($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"mailAddress\",\n attrs: {\n id: \"mailAddress\" + _vm.user.id + _vm.rand,\n disabled: _vm.loading.mailAddress || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"Add new email address\"),\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n spellcheck: \"false\",\n type: \"email\"\n },\n domProps: { value: _vm.user.email }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"groups\",\n class: { \"icon-loading-small\": _vm.loading.groups }\n },\n [\n _c(\n \"Multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.groups || _vm.loading.all,\n limit: 2,\n multiple: true,\n options: _vm.availableGroups,\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n \"tag-width\": 60,\n taggable: _vm.settings.isAdmin,\n value: _vm.userGroups,\n label: \"name\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: {\n remove: _vm.removeUserGroup,\n select: _vm.addUserGroup,\n tag: _vm.createGroup\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n {\n staticClass: \"subadmins\",\n class: { \"icon-loading-small\": _vm.loading.subadmins }\n },\n [\n _c(\n \"Multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.subadmins || _vm.loading.all,\n limit: 2,\n multiple: true,\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n \"tag-width\": 60,\n value: _vm.userSubAdminsGroups,\n label: \"name\",\n \"track-by\": \"id\"\n },\n on: {\n remove: _vm.removeUserSubAdmin,\n select: _vm.addUserSubAdmin\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.usedSpace,\n expression: \"usedSpace\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"quota\",\n class: { \"icon-loading-small\": _vm.loading.quota }\n },\n [\n _c(\"Multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n disabled: _vm.loading.quota || _vm.loading.all,\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n taggable: true,\n value: _vm.userQuota,\n label: \"label\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: { input: _vm.setUserQuota, tag: _vm.validateQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n {\n staticClass: \"languages\",\n class: { \"icon-loading-small\": _vm.loading.languages }\n },\n [\n _c(\"Multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n disabled: _vm.loading.languages || _vm.loading.all,\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"No language set\"),\n value: _vm.userLanguage,\n \"group-label\": \"label\",\n \"group-values\": \"languages\",\n label: \"name\",\n \"track-by\": \"code\"\n },\n on: { input: _vm.setUserLanguage }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"storageLocation\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin ? _c(\"div\") : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _vm.OC.currentUser !== _vm.user.id &&\n _vm.user.id !== \"admin\" &&\n !_vm.loading.all\n ? _c(\n \"div\",\n { staticClass: \"toggleUserActions\" },\n [\n _c(\n \"Actions\",\n [\n _c(\n \"ActionButton\",\n {\n attrs: { icon: \"icon-checkmark\" },\n on: {\n click: function($event) {\n _vm.editing = false\n }\n }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Done\")) +\n \"\\n\\t\\t\\t\\t\"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n directives: [\n {\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }\n ],\n staticClass: \"icon-more\",\n on: { click: _vm.toggleMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"popovermenu\",\n class: { open: _vm.openedMenu }\n },\n [_c(\"PopoverMenu\", { attrs: { menu: _vm.userActions } })],\n 1\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"feedback\",\n style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n },\n [\n _c(\"div\", { staticClass: \"icon-checkmark\" }),\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n ]\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { disabled: _vm.loading.delete || _vm.loading.disable },\n attrs: { \"data-id\": _vm.user.id }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\":\n _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe\n ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\\t\"),\n _c(\"div\", { staticClass: \"displayName subtitle\" }, [\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\")\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\"),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mailAddress\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.email) + \"\\n\\t\")\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"groups\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userGroupsLabels) + \"\\n\\t\")\n ]),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\"div\", { staticClass: \"subAdminsGroups\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userSubAdminsGroupsLabels) + \"\\n\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.usedSpace,\n expression: \"usedSpace\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"quota\"\n },\n [\n _c(\"progress\", {\n staticClass: \"quota-user-progress\",\n class: { warn: _vm.usedQuota > 80 },\n attrs: { max: \"100\" },\n domProps: { value: _vm.usedQuota }\n })\n ]\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\"div\", { staticClass: \"languages\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLanguage.name) + \"\\n\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"userBackend\" }, [\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" }, [\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.backend) + \"\\n\\t\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation subtitle\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\" + _vm._s(_vm.user.storageLocation) + \"\\n\\t\\t\"\n )\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.userLastLoginTooltip,\n expression: \"userLastLoginTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"lastLogin\"\n },\n [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLastLogin) + \"\\n\\t\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _vm.canEdit && !_vm.loading.all\n ? _c(\n \"div\",\n { staticClass: \"toggleUserActions\" },\n [\n _c(\n \"Actions\",\n [\n _c(\n \"ActionButton\",\n {\n attrs: { icon: \"icon-rename\" },\n on: { click: _vm.toggleEdit }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Edit User\")) +\n \"\\n\\t\\t\\t\\t\"\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", {\n directives: [\n {\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }\n ],\n staticClass: \"icon-more\",\n on: {\n click: function($event) {\n return _vm.$emit(\"toggleMenu\")\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"popovermenu\",\n class: { open: _vm.openedMenu }\n },\n [_c(\"PopoverMenu\", { attrs: { menu: _vm.userActions } })],\n 1\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"feedback\",\n style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n },\n [\n _c(\"div\", { staticClass: \"icon-checkmark\" }),\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n ]\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"Content\",\n {\n attrs: {\n \"app-name\": \"settings\",\n \"navigation-class\": { \"icon-loading\": _vm.loadingAddGroup }\n }\n },\n [\n _c(\n \"AppNavigation\",\n [\n _c(\"AppNavigationNew\", {\n attrs: {\n \"button-id\": \"new-user-button\",\n text: _vm.t(\"settings\", \"New user\"),\n \"button-class\": \"icon-add\"\n },\n on: { click: _vm.toggleNewUserMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { attrs: { id: \"usergrouplist\" } },\n _vm._l(_vm.menu, function(item) {\n return _c(\"AppNavigationItem\", {\n key: item.key,\n attrs: { item: item }\n })\n }),\n 1\n ),\n _vm._v(\" \"),\n _c(\"AppNavigationSettings\", [\n _c(\n \"div\",\n [\n _c(\"p\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\")))]),\n _vm._v(\" \"),\n _c(\"Multiselect\", {\n attrs: {\n value: _vm.defaultQuota,\n options: _vm.quotaOptions,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select default quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n \"allow-empty\": false,\n taggable: true\n },\n on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLanguages,\n expression: \"showLanguages\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { id: \"showLanguages\", type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.showLanguages)\n ? _vm._i(_vm.showLanguages, null) > -1\n : _vm.showLanguages\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLanguages,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLanguages = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLanguages = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLanguages\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLastLogin,\n expression: \"showLastLogin\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { id: \"showLastLogin\", type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.showLastLogin)\n ? _vm._i(_vm.showLastLogin, null) > -1\n : _vm.showLastLogin\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLastLogin,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLastLogin = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLastLogin = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLastLogin\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showUserBackend,\n expression: \"showUserBackend\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { id: \"showUserBackend\", type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.showUserBackend)\n ? _vm._i(_vm.showUserBackend, null) > -1\n : _vm.showUserBackend\n },\n on: {\n change: function($event) {\n var $$a = _vm.showUserBackend,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showUserBackend = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showUserBackend = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showUserBackend\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showStoragePath,\n expression: \"showStoragePath\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { id: \"showStoragePath\", type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.showStoragePath)\n ? _vm._i(_vm.showStoragePath, null) > -1\n : _vm.showStoragePath\n },\n on: {\n change: function($event) {\n var $$a = _vm.showStoragePath,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showStoragePath = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showStoragePath = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showStoragePath\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\")))\n ])\n ])\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"AppContent\",\n [\n _c(\"UserList\", {\n attrs: {\n users: _vm.users,\n \"show-config\": _vm.showConfig,\n \"selected-group\": _vm.selectedGroup,\n \"external-actions\": _vm.externalActions\n },\n scopedSlots: _vm._u([\n {\n key: \"content\",\n fn: function() {\n return undefined\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/MA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC11BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7fA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7dA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7MA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;A","sourceRoot":""}
\ No newline at end of file