芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/static/js/60.app.4880ec9ad5c0256cac3a.js
(self["webpackChunkafterlogic_aurora_platform"] = self["webpackChunkafterlogic_aurora_platform"] || []).push([[60],{ /***/ "xGhG": /*!**********************************************!*\ !*** ./modules/ContactsWebclient/js/Ajax.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var Ajax = __webpack_require__(/*! modules/CoreWebclient/js/Ajax.js */ "EFhx"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+") ; Ajax.registerAbortRequestHandler(Settings.ServerModuleName, function (oRequest, oOpenedRequest) { switch (oRequest.Method) { case 'GetContacts': return oOpenedRequest.Method === 'GetContacts'; case 'GetContact': return oOpenedRequest.Method === 'GetContact'; } return false; }); module.exports = { send: function (sMethod, oParameters, fResponseHandler, oContext, oMainParams) { Ajax.send(Settings.ServerModuleName, sMethod, oParameters, fResponseHandler, oContext, oMainParams); } }; /***/ }), /***/ "hW2p": /*!***********************************************!*\ !*** ./modules/ContactsWebclient/js/Cache.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), Ajax = __webpack_require__(/*! modules/ContactsWebclient/js/Ajax.js */ "xGhG"), CContactModel = __webpack_require__(/*! modules/ContactsWebclient/js/models/CContactModel.js */ "3nom") ; /** * @constructor */ function CContactsCache() { this.oContacts = {}; this.oResponseHandlers = {}; this.aRequestedEmails = []; this.aVcardAttachments = []; this.oNewContactParams = null; } /** * @param {string} sEmail */ CContactsCache.prototype.clearInfoAboutEmail = function (sEmail) { this.oContacts[sEmail] = undefined; }; /** * Looks for contacts in the cache and returns them by the specified handler. * If some of contacts are not found in the cache, requests them from the server by specified emails. * * @param {Array} aEmails List of emails. * @param {Function} fResponseHandler Function to call when the server response. */ CContactsCache.prototype.getContactsByEmails = function (aEmails, fResponseHandler) { var aContacts = [], aEmailsForRequest = [], sHandlerId = Math.random().toString() ; _.each(aEmails, _.bind(function (sEmail) { var oContact = this.oContacts[sEmail]; if (oContact !== undefined) { aContacts[sEmail] = oContact; } else if (_.indexOf(this.aRequestedEmails, sEmail) === -1) { aEmailsForRequest.push(sEmail); } }, this)); if (_.isFunction(fResponseHandler)) { fResponseHandler(aContacts); } if (aEmailsForRequest.length > 0) { this.oResponseHandlers[sHandlerId] = fResponseHandler; this.aRequestedEmails = _.union(this.aRequestedEmails, aEmailsForRequest); Ajax.send('GetContactsByEmails', { 'Storage': 'all', 'Emails': aEmailsForRequest, 'HandlerId': sHandlerId }, this.onGetContactsByEmailsResponse, this); } }; /** * Receives data from the server, parses them and passes on. * * @param {Object} oResponse Data obtained from the server. * @param {Object} oRequest Data has been transferred to the server. */ CContactsCache.prototype.onGetContactsByEmailsResponse = function (oResponse, oRequest) { var oParameters = oRequest.Parameters, fResponseHandler = this.oResponseHandlers[oParameters.HandlerId], oResult = oResponse.Result, aEmails = oParameters.Emails, oContacts = {} ; if (oResult) { _.each(oResult, _.bind(function (oRawContact) { var oContact = new CContactModel(); if (oContact) { oContact.parse(oRawContact); if (!this.oContacts[oContact.email()]) { this.oContacts[oContact.email()] = oContact; } else if (!oContact.pgpSettingsEmpty()) { this.oContacts[oContact.email()] = oContact; } } }, this)); } this.aRequestedEmails = _.difference(this.aRequestedEmails, aEmails); _.each(aEmails, _.bind(function (sEmail) { if (!this.oContacts[sEmail]) { this.oContacts[sEmail] = null; } oContacts[sEmail] = this.oContacts[sEmail]; }, this)); if (_.isFunction(fResponseHandler)) { fResponseHandler(oContacts); } delete this.oResponseHandlers[oParameters.HandlerId]; }; /** * @param {Object} oVcard */ CContactsCache.prototype.addVcard = function (oVcard) { this.aVcardAttachments.push(oVcard); }; /** * @param {string} sFile */ CContactsCache.prototype.getVcard = function (sFile) { return _.find(this.aVcardAttachments, function (oVcard) { return oVcard.file() === sFile; }); }; /** * @param {string} sFile */ CContactsCache.prototype.markVcardsExistentByFile = function (sFile) { _.each(this.aVcardAttachments, function (oVcard) { if (oVcard.file() === sFile) { oVcard.exists(true); } }); }; /** * @param {string} sFile * @param {string} sUid */ CContactsCache.prototype.updateVcardUid = function (sFile, sUid) { var oVcard = _.find(this.aVcardAttachments, function (oVcard) { return oVcard.file() === sFile; }); if (oVcard) { oVcard.uid(sUid); } }; /** * @param {Array} aUids */ CContactsCache.prototype.markVcardsNonexistentByUid = function (aUids) { _.each(this.aVcardAttachments, function (oVcard) { if (-1 !== _.indexOf(aUids, oVcard.uid())) { oVcard.exists(false); } }); }; /** * @param {Object} oNewContactParams */ CContactsCache.prototype.saveNewContactParams = function (oNewContactParams) { this.oNewContactParams = oNewContactParams; }; /** * @returns {Object} */ CContactsCache.prototype.getNewContactParams = function () { var oNewContactParams = this.oNewContactParams; this.oNewContactParams = null; return oNewContactParams; }; module.exports = new CContactsCache(); /***/ }), /***/ "Y40+": /*!**************************************************!*\ !*** ./modules/ContactsWebclient/js/Settings.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "KC/L"), TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "H20a") ; module.exports = { ServerModuleName: 'Contacts', HashModuleName: 'contacts', ContactsPerPage: 20, ImportContactsLink: '', AddressBooks: [], Storages: [], DefaultStorage: 'personal', AllowAddressBooksManagement: false, ContactsSortBy: {}, ImportExportFormats: [], SaveVcfServerModuleName: '', /** * Initializes settings from AppData object sections. * * @param {Object} oAppData Object contained modules settings. */ init: function (oAppData) { var oAppDataSection = oAppData[this.ServerModuleName]; if (!_.isEmpty(oAppDataSection)) { this.ContactsPerPage = Types.pPositiveInt(oAppDataSection.ContactsPerPage, this.ContactsPerPage); this.ImportContactsLink = Types.pString(oAppDataSection.ImportContactsLink, this.ImportContactsLink); var aStorages = Types.pArray(oAppDataSection.Storages, this.Storages); this.AddressBooks = _.filter(aStorages, function (oStorage) { return oStorage.CTag !== undefined; }); this.Storages = aStorages; if (this.Storages.length > 0) { this.Storages.push({'Id': 'all', 'DisplayName': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_STORAGE_ALL')}); this.Storages.push({'Id': 'group'}); } this.AllowAddressBooksManagement = Types.pBool(oAppDataSection.AllowAddressBooksManagement, this.AllowAddressBooksManagement); this.ImportExportFormats = Types.pArray(oAppDataSection.ImportExportFormats, this.ImportExportFormats); this.SaveVcfServerModuleName = Types.pString(oAppDataSection.SaveVcfServerModuleName, this.SaveVcfServerModuleName); this.ContactsSortBy = this.getSortConfig(Types.pObject(oAppDataSection.ContactsSortBy)); } }, /** * Updates contacts per page after saving to server. * * @param {number} iContactsPerPage */ update: function (iContactsPerPage) { this.ContactsPerPage = iContactsPerPage; }, getSortConfig: function (config) { return { Allow: Types.pBool(config?.Allow), DisplayOptions: config?.DisplayOptions || [], DefaultSortBy: Types.pEnum(Enums.ContactSortField[config?.DefaultSortBy], Enums.ContactSortField, Enums.ContactSortField.Name), DefaultSortOrder: Types.pEnum(Enums.SortOrder[config?.DefaultSortOrder], Enums.SortOrder, Enums.SortOrder.Desc), } } }; /***/ }), /***/ "Dj8t": /*!**********************************************************************!*\ !*** ./modules/ContactsWebclient/js/models/CContactListItemModel.js ***! \**********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var ko = __webpack_require__(/*! knockout */ "p09A"), AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "kG5I"), Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "KC/L"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+"), ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "TdEd") ; /** * @constructor */ function CContactListItemModel() { this.bIsGroup = false; this.bIsOrganization = false; this.bReadOnly = false; this.bItsMe = false; this.bTeam = false; this.sUUID = ''; this.sName = ''; this.sEmail = ''; this.bSharedToAll = false; this.aEmails = []; this.deleted = ko.observable(false); this.checked = ko.observable(false); this.selected = ko.observable(false); this.recivedAnim = ko.observable(false).extend({'autoResetToFalse': 500}); this.sStorage = Settings.DefaultStorage; this.isOpenPgpEnabled = ModulesManager.isModuleIncluded('OpenPgpWebclient'); this.HasPgpPublicKey = ko.observable(false); } /** * * @param {Object} oData */ CContactListItemModel.prototype.parse = function (oData) { this.sUUID = Types.pString(oData.UUID); this.sName = Types.pString(oData.FullName || oData.Name); this.sEmail = Types.pString(oData.ViewEmail); if (Types.isNonEmptyArray(oData.Emails)) { this.aEmails = oData.Emails; } this.bIsGroup = !!oData.IsGroup; this.bIsOrganization = !!oData.IsOrganization; this.bReadOnly = !!oData.ReadOnly; this.bItsMe = !!oData.ItsMe; this.bTeam = !!oData.IsTeam; this.bSharedToAll = oData.Storage === 'shared'; this.sStorage = oData.Storage; this.HasPgpPublicKey(!!oData.HasPgpPublicKey); }; /** * @return {boolean} */ CContactListItemModel.prototype.IsGroup = function () { return this.bIsGroup; }; /** * @return {boolean} */ CContactListItemModel.prototype.Team = function () { return this.bTeam; }; /** * @return {boolean} */ CContactListItemModel.prototype.ReadOnly = function () { return this.bReadOnly; }; /** * @return {boolean} */ CContactListItemModel.prototype.ItsMe = function () { return this.bItsMe; }; /** * @return {string} */ CContactListItemModel.prototype.UUID = function () { return this.sUUID; }; /** * @return {string} */ CContactListItemModel.prototype.Name = function () { return this.sName; }; /** * @return {string} */ CContactListItemModel.prototype.Email = function () { return this.sEmail; }; /** * @return {string} */ CContactListItemModel.prototype.getFullEmail = function () { return AddressUtils.getFullEmail(this.sName, this.sEmail); }; /** * @return {boolean} */ CContactListItemModel.prototype.IsSharedToAll = function () { return this.bSharedToAll; }; /** * @return {boolean} */ CContactListItemModel.prototype.IsOrganization = function () { return this.bIsOrganization; }; module.exports = CContactListItemModel; /***/ }), /***/ "3nom": /*!**************************************************************!*\ !*** ./modules/ContactsWebclient/js/models/CContactModel.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), $ = __webpack_require__(/*! jquery */ "M4cL"), ko = __webpack_require__(/*! knockout */ "p09A"), moment = __webpack_require__(/*! moment */ "sdEb"), AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "kG5I"), DateUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Date.js */ "injE"), TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "H20a"), Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "KC/L"), Ajax = __webpack_require__(/*! modules/ContactsWebclient/js/Ajax.js */ "xGhG"), Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "/QeJ"), App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "9kOp"), Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "REt5"), CDateModel = __webpack_require__(/*! modules/CoreWebclient/js/models/CDateModel.js */ "jNBr"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+"), ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "TdEd") ; /** * @constructor */ function CContactModel() { // Important: if new fields are added they should be added to clear method as well. Otherwise create contact functionality might work incorrectly. this.sEmailDefaultType = Enums.ContactsPrimaryEmail.Personal; this.sPhoneDefaultType = Enums.ContactsPrimaryPhone.Mobile; this.sAddressDefaultType = Enums.ContactsPrimaryAddress.Personal; this.uuid = ko.observable(''); this.idUser = ko.observable(0); this.team = ko.observable(false); this.itsMe = ko.observable(false); this.storage = ko.observable('personal'); this.isNew = ko.observable(false); this.readOnly = ko.observable(false); this.edited = ko.observable(false); this.extented = ko.observable(false); this.personalCollapsed = ko.observable(false); this.businessCollapsed = ko.observable(false); this.otherCollapsed = ko.observable(false); this.pgpSettingsCollapsed = ko.observable(false); this.groupsCollapsed = ko.observable(false); this.displayName = ko.observable(''); this.firstName = ko.observable(''); this.lastName = ko.observable(''); this.nickName = ko.observable(''); this.skype = ko.observable(''); this.facebook = ko.observable(''); this.displayNameFocused = ko.observable(false); this.primaryEmail = ko.observable(this.sEmailDefaultType); this.primaryPhone = ko.observable(this.sPhoneDefaultType); this.primaryAddress = ko.observable(this.sAddressDefaultType); this.mainPrimaryEmail = ko.computed({ 'read': this.primaryEmail, 'write': function (mValue) { if (mValue && 0 <= $.inArray(mValue, [Enums.ContactsPrimaryEmail.Personal, Enums.ContactsPrimaryEmail.Business, Enums.ContactsPrimaryEmail.Other])) { this.primaryEmail(mValue); } else { this.primaryEmail(Enums.ContactsPrimaryEmail.Personal); } }, 'owner': this }); this.mainPrimaryPhone = ko.computed({ 'read': this.primaryPhone, 'write': function (mValue) { if (mValue && 0 <= $.inArray(mValue, [Enums.ContactsPrimaryPhone.Mobile, Enums.ContactsPrimaryPhone.Personal, Enums.ContactsPrimaryPhone.Business])) { this.primaryPhone(mValue); } else { this.primaryPhone(Enums.ContactsPrimaryPhone.Mobile); } }, 'owner': this }); this.mainPrimaryAddress = ko.computed({ 'read': this.primaryAddress, 'write': function (mValue) { if (mValue && 0 <= $.inArray(mValue, [Enums.ContactsPrimaryAddress.Personal, Enums.ContactsPrimaryAddress.Business])) { this.primaryAddress(mValue); } else { this.primaryAddress(Enums.ContactsPrimaryAddress.Personal); } }, 'owner': this }); this.personalEmail = ko.observable(''); this.personalStreetAddress = ko.observable(''); this.personalCity = ko.observable(''); this.personalState = ko.observable(''); this.personalZipCode = ko.observable(''); this.personalCountry = ko.observable(''); this.personalWeb = ko.observable(''); this.personalFax = ko.observable(''); this.personalPhone = ko.observable(''); this.personalMobile = ko.observable(''); this.businessEmail = ko.observable(''); this.businessCompany = ko.observable(''); this.businessDepartment = ko.observable(''); this.businessJob = ko.observable(''); this.businessOffice = ko.observable(''); this.businessStreetAddress = ko.observable(''); this.businessCity = ko.observable(''); this.businessState = ko.observable(''); this.businessZipCode = ko.observable(''); this.businessCountry = ko.observable(''); this.businessWeb = ko.observable(''); this.businessFax = ko.observable(''); this.businessPhone = ko.observable(''); this.otherEmail = ko.observable(''); this.otherBirthMonth = ko.observable(0); this.otherBirthDay = ko.observable(0); this.otherBirthYear = ko.observable(0); this.otherNotes = ko.observable(''); this.etag = ko.observable(''); this.isOpenPgpEnabled = ModulesManager.isModuleIncluded('OpenPgpWebclient'); this.isOpenPgpInMailEnabled = ModulesManager.run('OpenPgpWebclient', 'getOpenPgpInMailEnabledObservable') || ko.observable(false); this.publicPgpKeyView = ko.observable(''); this.publicPgpKey = ko.observable(''); this.pgpEncryptMessages = ko.observable(false); this.pgpSignMessages = ko.observable(false); this.publicPgpKey.subscribe(function (sValue) { if (sValue !== '') { ModulesManager.run('OpenPgpWebclient', 'getKeyInfo', [sValue, function (oKey) { if (oKey) { this.publicPgpKeyView(oKey.getUser() + ' (' + oKey.getBitSize() + '-bit)'); } else { this.publicPgpKeyView(''); } }.bind(this)]); } else { this.publicPgpKeyView(''); } }, this); this.sharedToAll = ko.observable(false); this.birthdayIsEmpty = ko.computed(function () { var bMonthEmpty = 0 === this.otherBirthMonth(), bDayEmpty = 0 === this.otherBirthDay(), bYearEmpty = 0 === this.otherBirthYear() ; return (bMonthEmpty || bDayEmpty || bYearEmpty); }, this); this.otherBirthday = ko.computed(function () { var sBirthday = '', iYear = this.otherBirthYear(), iMonth = this.otherBirthMonth(), iDay = this.otherBirthDay(), oDateModel = new CDateModel() ; if (!this.birthdayIsEmpty()) { var fullYears = moment().diff(moment(iYear + '/' + iMonth + '/' + iDay, "YYYY/MM/DD"), 'years'), text = TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_YEARS_PLURAL', { 'COUNT': fullYears }, null, fullYears) ; oDateModel.setDate(iYear, 0 < iMonth ? iMonth - 1 : 0, iDay); sBirthday = oDateModel.getShortDate() + ' (' + text + ')'; } return sBirthday; }, this); this.groups = ko.observableArray([]); this.groupsIsEmpty = ko.computed(function () { return 0 === this.groups().length; }, this); this.email = ko.computed({ 'read': function () { var sResult = ''; switch (this.primaryEmail()) { case Enums.ContactsPrimaryEmail.Personal: sResult = this.personalEmail(); break; case Enums.ContactsPrimaryEmail.Business: sResult = this.businessEmail(); break; case Enums.ContactsPrimaryEmail.Other: sResult = this.otherEmail(); break; } return sResult; }, 'write': function (sEmail) { switch (this.primaryEmail()) { case Enums.ContactsPrimaryEmail.Personal: this.personalEmail(sEmail); break; case Enums.ContactsPrimaryEmail.Business: this.businessEmail(sEmail); break; case Enums.ContactsPrimaryEmail.Other: this.otherEmail(sEmail); break; default: this.primaryEmail(this.sEmailDefaultType); this.email(sEmail); break; } }, 'owner': this }); this.showEncryptSignFlags = ko.computed(function () { return this.isOpenPgpInMailEnabled() && this.publicPgpKeyView(); }, this); this.personalIsEmpty = ko.computed(function () { var sPersonalEmail = (this.personalEmail() !== this.email()) ? this.personalEmail() : ''; return '' === '' + sPersonalEmail + this.personalStreetAddress() + this.personalCity() + this.personalState() + this.personalZipCode() + this.personalCountry() + this.personalWeb() + this.personalFax() + this.personalPhone() + this.personalMobile() ; }, this); this.businessIsEmpty = ko.computed(function () { var sBusinessEmail = (this.businessEmail() !== this.email()) ? this.businessEmail() : ''; return '' === '' + sBusinessEmail + this.businessCompany() + this.businessDepartment() + this.businessJob() + this.businessOffice() + this.businessStreetAddress() + this.businessCity() + this.businessState() + this.businessZipCode() + this.businessCountry() + this.businessWeb() + this.businessFax() + this.businessPhone() ; }, this); this.otherIsEmpty = ko.computed(function () { var sOtherEmail = (this.otherEmail() !== this.email()) ? this.otherEmail() : ''; return ('' === ('' + sOtherEmail + this.otherNotes())) && this.birthdayIsEmpty(); }, this); this.pgpSettingsEmpty = ko.computed(function () { return typeof this.publicPgpKey() !== 'string' || this.publicPgpKey() === ''; }, this); this.phone = ko.computed({ 'read': function () { var sResult = ''; switch (this.primaryPhone()) { case Enums.ContactsPrimaryPhone.Mobile: sResult = this.personalMobile(); break; case Enums.ContactsPrimaryPhone.Personal: sResult = this.personalPhone(); break; case Enums.ContactsPrimaryPhone.Business: sResult = this.businessPhone(); break; } return sResult; }, 'write': function (sPhone) { switch (this.primaryPhone()) { case Enums.ContactsPrimaryPhone.Mobile: this.personalMobile(sPhone); break; case Enums.ContactsPrimaryPhone.Personal: this.personalPhone(sPhone); break; case Enums.ContactsPrimaryPhone.Business: this.businessPhone(sPhone); break; default: this.primaryPhone(this.sEmailDefaultType); this.phone(sPhone); break; } }, 'owner': this }); this.address = ko.computed({ 'read': function () { var sResult = ''; switch (this.primaryAddress()) { case Enums.ContactsPrimaryAddress.Personal: sResult = this.personalStreetAddress(); break; case Enums.ContactsPrimaryAddress.Business: sResult = this.businessStreetAddress(); break; } return sResult; }, 'write': function (sAddress) { switch (this.primaryAddress()) { case Enums.ContactsPrimaryAddress.Personal: this.personalStreetAddress(sAddress); break; case Enums.ContactsPrimaryAddress.Business: this.businessStreetAddress(sAddress); break; default: this.primaryAddress(this.sEmailDefaultType); this.address(sAddress); break; } }, 'owner': this }); this.emails = ko.computed(function () { var aList = []; if ('' !== this.personalEmail()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_PERSONAL') + ': ' + this.personalEmail(), 'value': Enums.ContactsPrimaryEmail.Personal}); } if ('' !== this.businessEmail()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_BUSINESS') + ': ' + this.businessEmail(), 'value': Enums.ContactsPrimaryEmail.Business}); } if ('' !== this.otherEmail()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_OTHER') + ': ' + this.otherEmail(), 'value': Enums.ContactsPrimaryEmail.Other}); } return aList; }, this); this.phones = ko.computed(function () { var aList = []; if ('' !== this.personalMobile()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_MOBILE') + ': ' + this.personalMobile(), 'value': Enums.ContactsPrimaryPhone.Mobile}); } if ('' !== this.personalPhone()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_PERSONAL') + ': ' + this.personalPhone(), 'value': Enums.ContactsPrimaryPhone.Personal}); } if ('' !== this.businessPhone()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_BUSINESS') + ': ' + this.businessPhone(), 'value': Enums.ContactsPrimaryPhone.Business}); } return aList; }, this); this.addresses = ko.computed(function () { var aList = []; if ('' !== this.personalStreetAddress()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_PERSONAL') + ': ' + this.personalStreetAddress(), 'value': Enums.ContactsPrimaryAddress.Personal}); } if ('' !== this.businessStreetAddress()) { aList.push({'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_BUSINESS') + ': ' + this.businessStreetAddress(), 'value': Enums.ContactsPrimaryAddress.Business}); } return aList; }, this); this.hasEmails = ko.computed(function () { return 0 < this.emails().length; }, this); this.allowSendThisContact = ko.computed(function () { return Settings.SaveVcfServerModuleName !== ''; }, this); this.extented.subscribe(function (bValue) { if (bValue) { this.personalCollapsed(!this.personalIsEmpty()); this.businessCollapsed(!this.businessIsEmpty()); this.otherCollapsed(!this.otherIsEmpty()); this.pgpSettingsCollapsed(!this.pgpSettingsEmpty()); this.groupsCollapsed(!this.groupsIsEmpty()); } }, this); this.birthMonthSelect = CContactModel.birthMonthSelect; this.birthDaySelect = ko.computed(function () { var iIndex = 1, iDaysInMonth = DateUtils.daysInMonth(this.otherBirthMonth(), this.otherBirthYear()), aList = [{'text': TextUtils.i18n('COREWEBCLIENT/LABEL_DAY'), 'value': 0}] ; for (; iIndex <= iDaysInMonth; iIndex++) { aList.push({'text': iIndex.toString(), 'value': iIndex}); } return aList; }, this); this.birthYearSelect = [ {'text': TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_YEAR'), 'value': 0} ]; for (var iCurrYear = (new Date()).getFullYear(), iIndex = iCurrYear, iFirstYear = iCurrYear - 100; iIndex >= iFirstYear; iIndex--) { this.birthYearSelect.push({ 'text': iIndex.toString(), 'value': iIndex }); } this.canBeSave = ko.computed(function () { return this.displayName() !== '' || !!this.emails().length; }, this); this.customCommands = ko.observableArray([]); App.broadcastEvent('ContactsWebclient::AddCustomCommand', {'Callback' : _.bind(function (oCommand) { var oNewCommand = _.extend({ 'Text': '', 'CssClass': '', 'Handler': function () {}, 'Visible': true }, oCommand); oNewCommand.Command = Utils.createCommand(this, oNewCommand.Handler, true); this.customCommands.push(oNewCommand); }, this), 'Contact': this}); } CContactModel.aBirthdayMonths = DateUtils.getMonthNamesArray(); CContactModel.birthMonthSelect = [ {'text': TextUtils.i18n('COREWEBCLIENT/LABEL_MONTH'), value: 0}, {'text': CContactModel.aBirthdayMonths[0], value: 1}, {'text': CContactModel.aBirthdayMonths[1], value: 2}, {'text': CContactModel.aBirthdayMonths[2], value: 3}, {'text': CContactModel.aBirthdayMonths[3], value: 4}, {'text': CContactModel.aBirthdayMonths[4], value: 5}, {'text': CContactModel.aBirthdayMonths[5], value: 6}, {'text': CContactModel.aBirthdayMonths[6], value: 7}, {'text': CContactModel.aBirthdayMonths[7], value: 8}, {'text': CContactModel.aBirthdayMonths[8], value: 9}, {'text': CContactModel.aBirthdayMonths[9], value: 10}, {'text': CContactModel.aBirthdayMonths[10], value: 11}, {'text': CContactModel.aBirthdayMonths[11], value: 12} ]; CContactModel.prototype.clear = function () { this.uuid(''); this.idUser(0); this.team(false); this.itsMe(false); this.storage(''); this.isNew(false); this.readOnly(false); this.edited(false); this.extented(false); this.personalCollapsed(false); this.businessCollapsed(false); this.otherCollapsed(false); this.pgpSettingsCollapsed(false); this.groupsCollapsed(false); this.displayName(''); this.firstName(''); this.lastName(''); this.nickName(''); this.skype(''); this.facebook(''); this.displayNameFocused(false); this.primaryEmail(this.sEmailDefaultType); this.primaryPhone(this.sPhoneDefaultType); this.primaryAddress(this.sAddressDefaultType); this.personalEmail(''); this.personalStreetAddress(''); this.personalCity(''); this.personalState(''); this.personalZipCode(''); this.personalCountry(''); this.personalWeb(''); this.personalFax(''); this.personalPhone(''); this.personalMobile(''); this.businessEmail(''); this.businessCompany(''); this.businessDepartment(''); this.businessJob(''); this.businessOffice(''); this.businessStreetAddress(''); this.businessCity(''); this.businessState(''); this.businessZipCode(''); this.businessCountry(''); this.businessWeb(''); this.businessFax(''); this.businessPhone(''); this.otherEmail(''); this.otherBirthMonth(0); this.otherBirthDay(0); this.otherBirthYear(0); this.otherNotes(''); this.etag(''); this.publicPgpKeyView(''); this.publicPgpKey(''); this.pgpEncryptMessages(false); this.pgpSignMessages(false); this.sharedToAll(false); this.groups([]); }; CContactModel.prototype.switchToNew = function () { this.clear(); this.edited(true); this.extented(false); this.isNew(true); if (!App.isMobile()) { this.displayNameFocused(true); } }; CContactModel.prototype.switchToView = function () { this.edited(false); this.extented(false); }; /** * @return {Object} */ CContactModel.prototype.toObject = function () { var oResult = { 'UUID': this.uuid(), 'PrimaryEmail': this.primaryEmail(), 'PrimaryPhone': this.primaryPhone(), 'PrimaryAddress': this.primaryAddress(), 'FullName': this.displayName(), 'FirstName': this.firstName(), 'LastName': this.lastName(), 'NickName': this.nickName(), 'Storage': this.storage(), 'Skype': this.skype(), 'Facebook': this.facebook(), 'PersonalEmail': this.personalEmail(), 'PersonalAddress': this.personalStreetAddress(), 'PersonalCity': this.personalCity(), 'PersonalState': this.personalState(), 'PersonalZip': this.personalZipCode(), 'PersonalCountry': this.personalCountry(), 'PersonalWeb': this.personalWeb(), 'PersonalFax': this.personalFax(), 'PersonalPhone': this.personalPhone(), 'PersonalMobile': this.personalMobile(), 'BusinessEmail': this.businessEmail(), 'BusinessCompany': this.businessCompany(), 'BusinessJobTitle': this.businessJob(), 'BusinessDepartment': this.businessDepartment(), 'BusinessOffice': this.businessOffice(), 'BusinessAddress': this.businessStreetAddress(), 'BusinessCity': this.businessCity(), 'BusinessState': this.businessState(), 'BusinessZip': this.businessZipCode(), 'BusinessCountry': this.businessCountry(), 'BusinessFax': this.businessFax(), 'BusinessPhone': this.businessPhone(), 'BusinessWeb': this.businessWeb(), 'OtherEmail': this.otherEmail(), 'Notes': this.otherNotes(), 'ETag': this.etag(), 'BirthDay': this.otherBirthDay(), 'BirthMonth': this.otherBirthMonth(), 'BirthYear': this.otherBirthYear(), 'PublicPgpKey': this.publicPgpKey(), 'PgpEncryptMessages': this.pgpEncryptMessages(), 'PgpSignMessages': this.pgpSignMessages(), 'GroupUUIDs': this.groups() }; return oResult; }; function getPgpFlagValue(data, flagName, isTeam) { const userId = App.getUserId(); if (isTeam) { return !!data[`${flagName}_${userId}`]; } return !!data[flagName]; } /** * @param {Object} oData */ CContactModel.prototype.parse = function (oData) { this.uuid(Types.pString(oData.UUID)); this.idUser(Types.pInt(oData.IdUser)); this.team(oData.Storage === 'team'); this.storage(Types.pString(oData.Storage)); this.itsMe(!!oData.ItsMe); this.readOnly(!!oData.ReadOnly); this.displayName(Types.pString(oData.FullName)); this.firstName(Types.pString(oData.FirstName)); this.lastName(Types.pString(oData.LastName)); this.nickName(Types.pString(oData.NickName)); this.skype(Types.pString(oData.Skype)); this.facebook(Types.pString(oData.Facebook)); this.primaryEmail(Types.pInt(oData.PrimaryEmail)); this.primaryPhone(Types.pInt(oData.PrimaryPhone)); this.primaryAddress(Types.pInt(oData.PrimaryAddress)); this.personalEmail(Types.pString(oData.PersonalEmail)); this.personalStreetAddress(Types.pString(oData.PersonalAddress)); this.personalCity(Types.pString(oData.PersonalCity)); this.personalState(Types.pString(oData.PersonalState)); this.personalZipCode(Types.pString(oData.PersonalZip)); this.personalCountry(Types.pString(oData.PersonalCountry)); this.personalWeb(Types.pString(oData.PersonalWeb)); this.personalFax(Types.pString(oData.PersonalFax)); this.personalPhone(Types.pString(oData.PersonalPhone)); this.personalMobile(Types.pString(oData.PersonalMobile)); this.businessEmail(Types.pString(oData.BusinessEmail)); this.businessCompany(Types.pString(oData.BusinessCompany)); this.businessDepartment(Types.pString(oData.BusinessDepartment)); this.businessJob(Types.pString(oData.BusinessJobTitle)); this.businessOffice(Types.pString(oData.BusinessOffice)); this.businessStreetAddress(Types.pString(oData.BusinessAddress)); this.businessCity(Types.pString(oData.BusinessCity)); this.businessState(Types.pString(oData.BusinessState)); this.businessZipCode(Types.pString(oData.BusinessZip)); this.businessCountry(Types.pString(oData.BusinessCountry)); this.businessWeb(Types.pString(oData.BusinessWeb)); this.businessFax(Types.pString(oData.BusinessFax)); this.businessPhone(Types.pString(oData.BusinessPhone)); this.otherEmail(Types.pString(oData.OtherEmail)); this.otherBirthMonth(Types.pInt(oData.BirthMonth)); this.otherBirthDay(Types.pInt(oData.BirthDay)); this.otherBirthYear(Types.pInt(oData.BirthYear)); this.otherNotes(Types.pString(oData.Notes)); this.etag(Types.pString(oData.ETag)); this.publicPgpKey(Types.pString(oData['OpenPgpWebclient::PgpKey'])); this.pgpEncryptMessages(getPgpFlagValue(oData, 'OpenPgpWebclient::PgpEncryptMessages', this.team())); this.pgpSignMessages(getPgpFlagValue(oData, 'OpenPgpWebclient::PgpSignMessages', this.team())); this.sharedToAll(oData.Storage === 'shared'); if (_.isArray(oData.GroupUUIDs)) { this.groups(oData.GroupUUIDs); } }; /** * @param {string} sEmail * @return {string} */ CContactModel.prototype.getFullEmail = function (sEmail) { if (!Types.isNonEmptyString(sEmail)) { sEmail = this.email(); } return AddressUtils.getFullEmail(this.displayName(), sEmail); }; CContactModel.prototype.getEmailsString = function () { return _.uniq(_.without([this.email(), this.personalEmail(), this.businessEmail(), this.otherEmail()], '')).join(','); }; CContactModel.prototype.sendThisContact = function () { var ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "TdEd"), fComposeMessageWithAttachments = ModulesManager.run('MailWebclient', 'getComposeMessageWithAttachments'), oParameters = { 'UUID': this.uuid(), 'FileName': 'contact-' + this.getFullEmail().replace('"', '').replace('<', '').replace('>', '') + '.vcf' } ; Ajax.send('SaveContactAsTempFile', oParameters, function (oResponse) { if (oResponse.Result) { if (_.isFunction(fComposeMessageWithAttachments)) { fComposeMessageWithAttachments([oResponse.Result]); } } else { Api.showErrorByCode(oResponse, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_CONTACT_AS_TEMPFAILE')); } }, this); }; /** * @param {?} mLink * @return {boolean} */ CContactModel.prototype.isStrLink = function (mLink) { return (/^http/).test(mLink); }; module.exports = CContactModel; /***/ }), /***/ "E3U2": /*!************************************************************!*\ !*** ./modules/ContactsWebclient/js/models/CGroupModel.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var ko = __webpack_require__(/*! knockout */ "p09A"), AddressUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Address.js */ "kG5I"), TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "H20a"), App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "9kOp") ; /** * @constructor */ function CGroupModel() { this.isNew = ko.observable(false); this.readOnly = ko.observable(false); this.uuid = ko.observable(''); this.idUser = ko.observable(0); this.name = ko.observable(''); this.isOrganization = ko.observable(false); this.email = ko.observable(''); this.country = ko.observable(''); this.city = ko.observable(''); this.company = ko.observable(''); this.fax = ko.observable(''); this.phone = ko.observable(''); this.state = ko.observable(''); this.street = ko.observable(''); this.web = ko.observable(''); this.zip = ko.observable(''); this.edited = ko.observable(false); this.nameFocused = ko.observable(false); this.canBeSave = ko.computed(function () { return '' !== this.name(); }, this); this.newContactsInGroupCount = ko.observable(0); this.newContactsInGroupHint = ko.computed(function () { var iCount = this.newContactsInGroupCount(); return this.isNew() && 0 < iCount ? TextUtils.i18n('CONTACTSWEBCLIENT/INFO_NEW_GROUP_CONTACTS_PLURAL', { 'COUNT' : iCount }, null, iCount) : ''; }, this); } CGroupModel.prototype.getFullEmail = function () { return AddressUtils.getFullEmail(this.name(), this.email()); }; CGroupModel.prototype.clear = function () { this.isNew(false); this.uuid(''); this.idUser(0); this.name(''); this.nameFocused(false); this.edited(false); this.isOrganization(false); this.email(''); this.country(''); this.city(''); this.company(''); this.fax(''); this.phone(''); this.state(''); this.street(''); this.web(''); this.zip(''); }; CGroupModel.prototype.populate = function (oGroup) { this.isNew(oGroup.isNew()); this.uuid(oGroup.uuid()); this.idUser(oGroup.idUser()); this.name(oGroup.name()); this.nameFocused(oGroup.nameFocused()); this.edited(oGroup.edited()); this.isOrganization(oGroup.isOrganization()); this.email(oGroup.email()); this.country(oGroup.country()); this.city(oGroup.city()); this.company(oGroup.company()); this.fax(oGroup.fax()); this.phone(oGroup.phone()); this.state(oGroup.state()); this.street(oGroup.street()); this.web(oGroup.web()); this.zip(oGroup.zip()); }; CGroupModel.prototype.switchToNew = function () { this.clear(); this.edited(true); this.isNew(true); if (!App.isMobile()) { this.nameFocused(true); } }; CGroupModel.prototype.switchToView = function () { this.edited(false); }; /** * @param {array} aContactUUIDs * @return {Object} */ CGroupModel.prototype.toObject = function (aContactUUIDs) { return { 'UUID': this.uuid(), 'Name': this.name(), 'IsOrganization': this.isOrganization() ? '1' : '0', 'Email': this.email(), 'Country': this.country(), 'City': this.city(), 'Company': this.company(), 'Fax': this.fax(), 'Phone': this.phone(), 'State': this.state(), 'Street': this.street(), 'Web': this.web(), 'Zip': this.zip(), 'Contacts': aContactUUIDs }; }; module.exports = CGroupModel; /***/ }), /***/ "rHGs": /*!*****************************************************!*\ !*** ./modules/ContactsWebclient/js/utils/Links.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "KC/L"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+"), LinksUtils = {} ; /** * @param {string} sTemp * * @return {boolean} */ function IsPageParam(sTemp) { return ('p' === sTemp.substr(0, 1) && (/^[1-9][\d]*$/).test(sTemp.substr(1))); }; /** * @param {string} sTemp * * @return {boolean} */ function IsContactParam(sTemp) { return 'cnt' === sTemp.substr(0, 3); }; /** * @param {string} sStorageId * * @return {boolean} */ LinksUtils.checkStorageExists = function (sStorageId) { return !!Settings.Storages.find(oStorage => oStorage.Id === sStorageId) }; /** * @param {number=} sStorage * @param {string=} sGroupUUID * @param {string=} sSearch * @param {number=} iPage * @param {string=} sContactUUID * @param {string=} sAction * @returns {Array} */ LinksUtils.getContacts = function (sStorage, sGroupUUID, sSearch, iPage, sContactUUID, sAction) { var aParams = [Settings.HashModuleName]; if (sStorage && sStorage !== '') { aParams.push(sStorage); } if (sGroupUUID && sGroupUUID !== '') { aParams.push(sGroupUUID); } if (sSearch && sSearch !== '') { aParams.push(sSearch); } if (Types.isNumber(iPage)) { aParams.push('p' + iPage); } if (sContactUUID && sContactUUID !== '') { aParams.push('cnt' + sContactUUID); } if (sAction && sAction !== '') { aParams.push(sAction); } return aParams; }; /** * @param {Array} aParam * * @return {Object} */ LinksUtils.parseContacts = function (aParam) { var iIndex = 0, sStorage = Settings.DefaultStorage, sGroupUUID = '', sSearch = '', iPage = 1, sContactUUID = '', sAction = '' ; if (Types.isNonEmptyArray(aParam)) { sStorage = Types.pString(aParam[iIndex]); iIndex++; if (!Settings.Storages.find(oStorage => oStorage.Id === sStorage)) { sStorage = Settings.DefaultStorage; } if (sStorage === 'group') { if (aParam.length > iIndex) { sGroupUUID = Types.pString(aParam[iIndex]); iIndex++; } else { sStorage = Settings.DefaultStorage; } } if (aParam.length > iIndex && !IsPageParam(aParam[iIndex]) && !IsContactParam(aParam[iIndex])) { sSearch = Types.pString(aParam[iIndex]); iIndex++; } if (aParam.length > iIndex && IsPageParam(aParam[iIndex])) { iPage = Types.pInt(aParam[iIndex].substr(1)); iIndex++; if (iPage <= 0) { iPage = 1; } } if (aParam.length > iIndex) { if (IsContactParam(aParam[iIndex])) { sContactUUID = Types.pString(aParam[iIndex].substr(3)); } else { sAction = Types.pString(aParam[iIndex]); } iIndex++; } } return { 'Storage': sStorage, 'GroupUUID': sGroupUUID, 'Search': sSearch, 'Page': iPage, 'ContactUUID': sContactUUID, 'Action': sAction }; }; module.exports = LinksUtils; /***/ }), /***/ "iiou": /*!*************************************************************!*\ !*** ./modules/ContactsWebclient/js/views/CContactsView.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), $ = __webpack_require__(/*! jquery */ "M4cL"), ko = __webpack_require__(/*! knockout */ "p09A"), FileSaver = __webpack_require__(/*! modules/CoreWebclient/js/vendors/FileSaver.js */ "Cox/"), TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "H20a"), Types = __webpack_require__(/*! modules/CoreWebclient/js/utils/Types.js */ "KC/L"), Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "REt5"), Api = __webpack_require__(/*! modules/CoreWebclient/js/Api.js */ "/QeJ"), App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "9kOp"), CoreAjax = __webpack_require__(/*! modules/CoreWebclient/js/Ajax.js */ "EFhx"), CJua = __webpack_require__(/*! modules/CoreWebclient/js/CJua.js */ "qBBW"), CSelector = __webpack_require__(/*! modules/CoreWebclient/js/CSelector.js */ "vdUg"), ModulesManager = __webpack_require__(/*! modules/CoreWebclient/js/ModulesManager.js */ "TdEd"), Routing = __webpack_require__(/*! modules/CoreWebclient/js/Routing.js */ "W66n"), Screens = __webpack_require__(/*! modules/CoreWebclient/js/Screens.js */ "skxT"), CAbstractScreenView = __webpack_require__(/*! modules/CoreWebclient/js/views/CAbstractScreenView.js */ "doeu"), CPageSwitcherView = __webpack_require__(/*! modules/CoreWebclient/js/views/CPageSwitcherView.js */ "yKBN"), Popups = __webpack_require__(/*! modules/CoreWebclient/js/Popups.js */ "oUN1"), ConfirmPopup = __webpack_require__(/*! modules/CoreWebclient/js/popups/ConfirmPopup.js */ "XeMN"), LinksUtils = __webpack_require__(/*! modules/ContactsWebclient/js/utils/Links.js */ "rHGs"), Ajax = __webpack_require__(/*! modules/ContactsWebclient/js/Ajax.js */ "xGhG"), ContactsCache = __webpack_require__(/*! modules/ContactsWebclient/js/Cache.js */ "hW2p"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+"), CContactListItemModel = __webpack_require__(/*! modules/ContactsWebclient/js/models/CContactListItemModel.js */ "Dj8t"), CContactModel = __webpack_require__(/*! modules/ContactsWebclient/js/models/CContactModel.js */ "3nom"), CGroupModel = __webpack_require__(/*! modules/ContactsWebclient/js/models/CGroupModel.js */ "E3U2"), CImportView = __webpack_require__(/*! modules/ContactsWebclient/js/views/CImportView.js */ "7NIm"), Enums = window.Enums ; /** * @constructor */ function CContactsView() { CAbstractScreenView.call(this, 'ContactsWebclient'); this.shareAddressbookControlView = ModulesManager.run('SharedContacts', 'getShareAddressbookControlView'), this.browserTitle = ko.observable(TextUtils.i18n('CONTACTSWEBCLIENT/HEADING_BROWSER_TAB')); this.contactCount = ko.observable(0); this.uploaderArea = ko.observable(null); this.dragActive = ko.observable(false); this.bDragActiveComp = ko.computed(function () { return this.dragActive(); }, this); this.sImportContactsLink = Settings.ImportContactsLink; this.loadingList = ko.observable(false); this.preLoadingList = ko.observable(false); this.loadingList.subscribe(function (bLoading) { this.preLoadingList(bLoading); }, this); this.loadingViewPane = ko.observable(false); this.showPersonalContacts = ko.observable(false); this.showTeamContacts = ko.observable(false); this.showSharedToAllContacts = ko.observable(false); this.showAllContacts = ko.computed(function () { return 1 < [this.showPersonalContacts() ? '1' : '', this.showTeamContacts() ? '1' : '', this.showSharedToAllContacts() ? '1' : '' ].join('').length; }, this); this.recivedAnimPersonal = ko.observable(false).extend({'autoResetToFalse': 500}); this.recivedAnimShared = ko.observable(false).extend({'autoResetToFalse': 500}); this.recivedAnimTeam = ko.observable(false).extend({'autoResetToFalse': 500}); this.isAddressBookSelected = ko.observable(false); this.isSelectedAddressbookSharedForReading = ko.observable(false); this.isTeamStorageSelected = ko.observable(false); this.isCustomAddressBookSelected = ko.observable(false); this.disableDropToPersonal = ko.observable(false); this.disableDropToSharedWithAll = ko.observable(false); this.disableDropToCustomAddressBook = ko.observable(false); this.selectedStorageValue = ko.observable(''); this.selectedStorage = ko.computed({ 'read': function () { return this.selectedStorageValue(); }, 'write': function (sValue) { if (sValue !== '') { this.selectedStorageValue(LinksUtils.checkStorageExists(sValue) ? sValue : Settings.DefaultStorage); if (this.selectedStorageValue() !== 'group') { this.selectedGroupInList(null); this.selectedItem(null); this.selector.listCheckedOrSelected(false); this.currentGroupUUID(''); } const selectedAddressbook = this.addressBooks().find(addressbook => addressbook.Id === this.selectedStorageValue()); this.isAddressBookSelected(!!selectedAddressbook); this.isSelectedAddressbookSharedForReading( selectedAddressbook && selectedAddressbook.Shared && selectedAddressbook.Access === Enums.SharedAddressbookAccess.Read ); const addressBookParts = this.selectedStorageValue().split('-'); this.isCustomAddressBookSelected(addressBookParts.length > 0 && addressBookParts[0] === 'addressbook'); this.isTeamStorageSelected(this.selectedStorageValue() === 'team'); this.disableDropToPersonal(this.selectedStorageValue() === 'team'); this.disableDropToSharedWithAll(this.selectedStorageValue() === 'team'); this.disableDropToCustomAddressBook(this.selectedStorageValue() === 'team'); } }, 'owner': this }); this.addressBooks = ko.observable(Settings.AddressBooks); App.subscribeEvent('ReceiveAjaxResponse::after', function (oParams) { if (oParams.Request.Module === 'Contacts' && oParams.Request.Method === 'GetStorages' && _.isArray(oParams.Response && oParams.Response.Result)) { this.addressBooks(oParams.Response.Result); var aBaseStorages = _.filter(Settings.Storages, (oStorage) => oStorage.Display === undefined); Settings.Storages = aBaseStorages.concat(this.addressBooks()); } }.bind(this)); this.manageAddressBooksHash = ko.computed(function () { if (ModulesManager.isModuleEnabled('SettingsWebclient') && Settings.AllowAddressBooksManagement) { return Routing.buildHashFromArray(['settings', 'manage-addressbooks']); } return '#'; }, this); this.selectedGroupInList = ko.observable(null); this.selectedGroupInList.subscribe(function () { var oPrev = this.selectedGroupInList(); if (oPrev) { oPrev.selected(false); } }, this, 'beforeChange'); this.selectedGroupInList.subscribe(function (oGroup) { if (oGroup && this.showPersonalContacts()) { oGroup.selected(true); this.selectedStorage('group'); this.requestContactList(); } }, this); this.selectedGroup = ko.observable(null); this.selectedContact = ko.observable(null); this.selectedGroupEmails = ko.observableArray([]); this.currentGroupUUID = ko.observable(''); this.oContactModel = new CContactModel(); this.oGroupModel = new CGroupModel(); this.oImportView = new CImportView(this); this.selectedOldItem = ko.observable(null); this.selectedItem = ko.computed({ 'read': function () { return this.selectedContact() || this.selectedGroup() || null; }, 'write': function (oItem) { if (oItem instanceof CContactModel) { this.selectedGroup(null); this.selectedContact(oItem); } else if (oItem instanceof CGroupModel) { this.selectedContact(null); this.selectedGroup(oItem); this.currentGroupUUID(oItem.uuid()); } else { this.selectedGroup(null); this.selectedContact(null); } this.loadingViewPane(false); }, 'owner': this }); this.collection = ko.observableArray([]); this.contactUidForRequest = ko.observable(''); this.collection.subscribe(function () { if (this.collection().length > 0 && this.contactUidForRequest() !== '') { this.requestContact(this.contactUidForRequest()); this.contactUidForRequest(''); } }, this); this.bSortEnabled = Settings.ContactsSortBy && Settings.ContactsSortBy.Allow && Settings.ContactsSortBy.DisplayOptions && Settings.ContactsSortBy.DisplayOptions.length > 0; this.sortBy = ko.observable(Settings.ContactsSortBy.DefaultSortBy); this.sortOrder = ko.observable(Settings.ContactsSortBy.DefaultSortOrder); this.aSortList = []; if (this.bSortEnabled) { _.each(Enums.ContactSortField, function (iValue, sName) { if (Settings.ContactsSortBy.DisplayOptions.indexOf(sName) >= 0) { this.aSortList.push({ sText: TextUtils.i18n('CONTACTSWEBCLIENT/SORT_OPTION_' + sName.toUpperCase()), sSortBy: iValue }); } }.bind(this)); } this.isSearchFocused = ko.observable(false); this.searchInput = ko.observable(''); this.search = ko.observable(''); this.groupUidForRequest = ko.observable(''); this.groupFullCollection = ko.observableArray([]); this.groupFullCollection.subscribe(function () { if (this.groupUidForRequest()) { this.onViewGroupClick(this.groupUidForRequest()); } }, this); this.selectedContact.subscribe(function (oContact) { if (oContact) { var aGroupUUIDs = oContact.groups(); _.each(this.groupFullCollection(), function (oItem) { oItem.checked(oItem && 0 <= $.inArray(oItem.UUID(), aGroupUUIDs)); }); } }, this); this.pageSwitcherLocked = ko.observable(false); this.oPageSwitcher = new CPageSwitcherView(0, Settings.ContactsPerPage); this.oPageSwitcher.currentPage.subscribe(function () { if (!this.pageSwitcherLocked()) { this.changeRouting(); } }, this); this.currentPage = ko.observable(1); this.search.subscribe(function (sValue) { this.searchInput(sValue); }, this); this.searchSubmitCommand = Utils.createCommand(this, function () { this.changeRouting({ Search: this.searchInput() }); }); this.searchMessagesInInbox = ModulesManager.run('MailWebclient', 'getSearchMessagesInInbox'); this.bAllowSearchMessagesInInbox = _.isFunction(this.searchMessagesInInbox); this.composeMessageToAddresses = ModulesManager.run('MailWebclient', 'getComposeMessageToAddresses'); this.bAllowComposeMessageToAddresses = _.isFunction(this.composeMessageToAddresses); this.selector = new CSelector(this.collection, _.bind(this.viewContact, this), _.bind(this.deleteContact, this), this.bAllowComposeMessageToAddresses ? _.bind(this.composeMessageToContact, this) : null); this.checkAll = this.selector.koCheckAll(); this.checkAllIncomplite = this.selector.koCheckAllIncomplete(); this.isCheckedOrSelected = ko.computed(function () { return 0 < this.selector.listCheckedOrSelected().length; }, this); this.isEnableAddContacts = this.isCheckedOrSelected; this.isEnableRemoveContactsFromGroup = this.isCheckedOrSelected; this.isEnableDeleting = this.isCheckedOrSelected; this.isDeleteVisible = ko.computed(function () { return !this.isTeamStorageSelected() && ( (this.showPersonalContacts() && this.selectedStorage() === 'personal') || (this.showSharedToAllContacts() && this.selectedStorage() === 'shared') || (this.isAddressBookSelected() && !this.isSelectedAddressbookSharedForReading()) ); }, this); this.isEnableSharing = this.isCheckedOrSelected; this.visibleShareCommand = ko.computed(function () { return this.showPersonalContacts() && this.showSharedToAllContacts() && this.selectedStorage() === 'personal'; }, this); this.visibleUnshareCommand = ko.computed(function () { return this.showPersonalContacts() && this.showSharedToAllContacts() && this.selectedStorage() === 'shared'; }, this); this.isExactlyOneContactSelected = ko.computed(function () { return 1 === this.selector.listCheckedOrSelected().length; }, this); this.isSaving = ko.observable(false); this.isEnableCreateContact = ko.computed(function () { return !this.isTeamStorageSelected() && !this.isSelectedAddressbookSharedForReading(); }, this); this.newContactCommand = Utils.createCommand(this, this.executeNewContact, this.isEnableCreateContact); this.newGroupCommand = Utils.createCommand(this, this.executeNewGroup); this.addContactsCommand = Utils.createCommand(this, function () {}, this.isEnableAddContacts); this.deleteCommand = Utils.createCommand(this, this.deleteContact, this.isEnableDeleting); this.selectedCount = ko.computed(function () { var aChecked = _.filter(this.selector.listCheckedOrSelected(), function (oItem) { return !oItem.ReadOnly(); }); return aChecked.length; }, this); this.shareCommand = Utils.createCommand(this, this.executeShare, this.isEnableSharing); this.removeFromGroupCommand = Utils.createCommand(this, this.executeRemoveFromGroup, this.isEnableRemoveContactsFromGroup); this.isImportAllowed = ko.computed(function () { return !this.isTeamStorageSelected() &&!this.isSelectedAddressbookSharedForReading(); }, this); this.importCommand = Utils.createCommand(this, this.executeImport); this.saveCommand = Utils.createCommand(this, this.executeSave); this.saveEncryptSignFlagsCommand = Utils.createCommand(this, this.executeSaveEncryptSignFlags, () => !this.isSaving()); this.updateSharedToAllCommand = Utils.createCommand(this, this.executeUpdateSharedToAll, this.isExactlyOneContactSelected); this.composeMessageCommand = Utils.createCommand(this, this.composeMessage, this.isCheckedOrSelected); this.selector.listCheckedOrSelected.subscribe(function (aList) { this.oGroupModel.newContactsInGroupCount(aList.length); }, this); this.isSearch = ko.computed(function () { return this.search() !== ''; }, this); this.isEmptyList = ko.computed(function () { return 0 === this.collection().length; }, this); this.searchText = ko.computed(function () { return TextUtils.i18n('CONTACTSWEBCLIENT/INFO_SEARCH_RESULT', { 'SEARCH': this.search() }); }, this); this.visibleDragNDropToGroupText = ko.computed(function () { return !App.isMobile() && this.selectedStorage() === 'group'; }, this); this.selectedPanel = ko.observable(Enums.MobilePanel.Items); this.enableExport = ko.computed(function () { return this.contactCount() > 0; }, this); this.aExportData = []; _.each(Settings.ImportExportFormats, function (sFormat) { if (Types.isNonEmptyString(sFormat)) { this.aExportData.push({ 'css': sFormat.toLowerCase(), 'text': TextUtils.i18n('CONTACTSWEBCLIENT/ACTION_EXPORT_AS', {'FORMAT': sFormat.toUpperCase()}), 'command': Utils.createCommand(this, function () { this.executeExport(sFormat); }, this.enableExport) }); } }, this); this.visibleCreateOrImportText = ko.computed(function () { return this.selectedStorage() !== 'all' && this.selectedStorage() !== 'shared' && this.selectedStorage() !== 'team' && this.selectedStorage() !== 'group'; }, this); this.visibleImportExport = ko.computed(function () { return this.aExportData.length > 0; }, this); this.infoCreateOrImport = this.getCreateOrImportInfo(); this.listChanged = ko.computed(function () { return [ this.selectedStorage(), this.currentGroupUUID(), this.search(), this.oPageSwitcher.currentPage(), this.oPageSwitcher.perPage() ]; }, this); this.bRefreshContactList = false; const afterRemoveContactPgpKeyHandler = () => { if (this.selectedContact() && this.selectedContact().edited()) { this.selectedContact().publicPgpKey(''); const selectedContactListItem = this.collection().find(item => item.UUID() === this.selectedContact().uuid()); if (selectedContactListItem) { selectedContactListItem.HasPgpPublicKey(false); } } else { this.onUpdateContactResponse({ Result: true }); } }; this.oPgpKeyControlsView = ModulesManager.run('OpenPgpWebclient', 'getPgpKeyControlsView', [afterRemoveContactPgpKeyHandler] ); App.broadcastEvent('ContactsWebclient::ConstructView::after', {'Name': this.ViewConstructorName, 'View': this}); } _.extendOwn(CContactsView.prototype, CAbstractScreenView.prototype); CContactsView.prototype.ViewTemplate = 'ContactsWebclient_ContactsScreenView'; CContactsView.prototype.ViewConstructorName = 'CContactsView'; CContactsView.prototype.executeSort = function (sValue) { const sCurrentSort = this.sortBy(); this.sortBy(sValue); if (sCurrentSort === sValue) { this.sortOrder(this.sortOrder() === Enums.SortOrder.Asc ? Enums.SortOrder.Desc : Enums.SortOrder.Asc); // Asc: 0, Desc: 1 } else { this.sortOrder(Settings.ContactsSortBy.DefaultSortOrder); } this.requestContactList(); } CContactsView.prototype.getFormatDependentText = function (sLangConstantName) { switch (Settings.ImportExportFormats.length) { case 0: return ''; case 1: return TextUtils.i18n('CONTACTSWEBCLIENT/' + sLangConstantName + '_SINGLE_EXT', { 'EXTENSION': Settings.ImportExportFormats[0].toUpperCase() }); default: return TextUtils.i18n('CONTACTSWEBCLIENT/' + sLangConstantName + '_PLURAL_EXT', { 'EXTENSIONS': _.initial(Settings.ImportExportFormats).join(', ').toUpperCase(), 'LASTEXTENSION': _.last(Settings.ImportExportFormats).toUpperCase() }); } }; CContactsView.prototype.getCreateOrImportInfo = function () { var sOrImportInfo = this.getFormatDependentText('INFO_OR_IMPORT'); return TextUtils.i18n('CONTACTSWEBCLIENT/INFO_CREATE') + (sOrImportInfo === '' ? '' : ' ' + sOrImportInfo) + '.'; }; CContactsView.prototype.executeSaveEncryptSignFlags = function (contact) { if (contact instanceof CContactModel) { const parameters = { UUID: contact.uuid(), PgpEncryptMessages: contact.pgpEncryptMessages(), PgpSignMessages: contact.pgpSignMessages() }; this.isSaving(true); CoreAjax.send('OpenPgpWebclient', 'UpdateContactPublicKeyFlags', parameters, (response, request) => { this.isSaving(false); if (response && response.Result) { Screens.showReport(TextUtils.i18n('CONTACTSWEBCLIENT/REPORT_PGP_SETTINGS_SAVED')); } else { Api.showErrorByCode(response, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_SAVE_PGP_SETTINGS')); } }); } }; /** * @param {Object} oData */ CContactsView.prototype.executeSave = function (oData) { var oContact = {}, aList = [], oGroup ; if (oData === this.selectedItem() && this.selectedItem().canBeSave()) { if (oData instanceof CContactModel && !oData.readOnly()) { _.each(this.groupFullCollection(), function (oItem) { if (oItem && oItem.checked()) { aList.push(oItem.UUID()); } }); oData.groups(aList); if (this.selectedItem()) { ContactsCache.clearInfoAboutEmail(this.selectedItem().email()); } oContact = oData.toObject(); if (this.selectedStorage() !== 'personal' && oContact.Storage === 'personal') { this.recivedAnimPersonal(true); } if (this.selectedStorage() !== 'team' && oContact.Storage === 'team') { this.recivedAnimTeam(true); } if (oData.isNew()) { if (this.selectedStorage() === 'all' || this.selectedStorage() === 'group') { // there are no real storages with name 'all' or 'group' on server side oContact.Storage = 'personal'; } else { // server subscribers need to know if contact should be in 'personal' or 'shared' storage oContact.Storage = this.selectedStorage(); } this.isSaving(true); oContact.ViewEmail = oData.email(); var oParams = { Contact: oContact, Callback: function (result) { if (result.Error) { Screens.showError(result.ErrorMessage); this.isSaving(false); } else { Ajax.send('CreateContact', { Contact: oContact }, this.onCreateContactResponse, this); } }.bind(this) } ; if (!App.broadcastEvent('ContactsWebclient::beforeCreateContactRequest', oParams)) { Ajax.send('CreateContact', { Contact: oContact }, this.onCreateContactResponse, this); } } else { this.isSaving(true); oContact.ViewEmail = oData.email(); var oParams = { Contact: oContact, Callback: function (result) { if (result.Error) { Screens.showError(result.ErrorMessage); this.isSaving(false); } else { Ajax.send('UpdateContact', { Contact: oContact }, this.onUpdateContactResponse, this); } }.bind(this) } ; if (!App.broadcastEvent('ContactsWebclient::beforeUpdateContactRequest', oParams)) { Ajax.send('UpdateContact', { Contact: oContact }, this.onUpdateContactResponse, this); } } } else if (oData instanceof CGroupModel && !oData.readOnly()) { var aContactUUIDs = _.map(this.selector.listCheckedOrSelected(), function (oItem) { return oItem.UUID(); }); this.isSaving(true); oGroup = oData.toObject(aContactUUIDs); if (!oData.isNew()) { oGroup.Contacts = null; } Ajax.send(oData.isNew() ? 'CreateGroup' : 'UpdateGroup', {'Group': oGroup}, this.onCreateGroupResponse, this); } } else { Screens.showError(TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_EMAIL_OR_NAME_BLANK')); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onCreateContactResponse = function (oResponse, oRequest) { this.isSaving(false); if (oResponse.Result) { this.requestContactList(); this.viewContact(oResponse.Result.UUID); Screens.showReport(TextUtils.i18n('CONTACTSWEBCLIENT/REPORT_CONTACT_SUCCESSFULLY_ADDED')); App.broadcastEvent('ContactsWebclient::createContactResponse', [oResponse.Result]); } else { Api.showErrorByCode(oResponse, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_CREATE_CONTACT')); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onUpdateContactResponse = function (oResponse, oRequest) { this.isSaving(false); if (oResponse.Result) { if (this.selectedContact() && this.selectedContact().edited()) { this.selectedContact().edited(false); } this.requestContactList(); Screens.showReport(TextUtils.i18n('CONTACTSWEBCLIENT/REPORT_CONTACT_SUCCESSFULLY_UPDATED')); App.broadcastEvent('ContactsWebclient::updateContactResponse', [oResponse.Result]); } else { Api.showErrorByCode(oResponse, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_UPDATE_CONTACT')); } }; CContactsView.prototype.changeRouting = function (oParams, bReplace) { oParams = oParams || {}; var sStorage = oParams.Storage === undefined ? this.selectedStorage() : oParams.Storage, sGroupUUID = oParams.GroupUUID === undefined ? this.currentGroupUUID() : oParams.GroupUUID, sSearch = oParams.Search === undefined ? this.search() : oParams.Search, iPage = oParams.Page === undefined ? this.oPageSwitcher.currentPage() : oParams.Page, sContactUUID = oParams.ContactUUID === undefined ? '' : oParams.ContactUUID, sAction = oParams.Action === undefined ? '' : oParams.Action ; if (bReplace) { Routing.replaceHash(LinksUtils.getContacts(sStorage, sGroupUUID, sSearch, iPage, sContactUUID, sAction)); } else { Routing.setHash(LinksUtils.getContacts(sStorage, sGroupUUID, sSearch, iPage, sContactUUID, sAction)); } }; CContactsView.prototype.executeNewContact = function () { if (this.showPersonalContacts()) { var sGroupUUID = (this.selectedStorage() === 'group') ? this.currentGroupUUID() : ''; this.changeRouting({ GroupUUID: sGroupUUID, Action: 'create-contact' }); } }; CContactsView.prototype.executeNewGroup = function () { var sGroupUUID = (this.selectedStorage() === 'group') ? this.currentGroupUUID() : ''; if (this.selector.itemSelected() instanceof CContactListItemModel) { this.selector.itemSelected().checked(true); } this.changeRouting({GroupUUID: sGroupUUID, Action: 'create-group' }); }; CContactsView.prototype.deleteContact = function () { var sStorage = this.selectedStorage(); if (sStorage === 'personal' || sStorage === 'shared' || this.isAddressBookSelected()) { var aChecked = _.filter(this.selector.listCheckedOrSelected(), function (oItem) { return !oItem.ReadOnly(); }), iCount = aChecked.length, sConfirmText = TextUtils.i18n('CONTACTSWEBCLIENT/CONFIRM_DELETE_CONTACTS_PLURAL', {}, null, iCount), fDeleteContacts = _.bind(function (bResult) { if (bResult) { this.deleteContacts(aChecked); } }, this) ; Popups.showPopup(ConfirmPopup, [sConfirmText, fDeleteContacts, '', TextUtils.i18n('COREWEBCLIENT/ACTION_DELETE')]); } else if (sStorage === 'group') { this.removeFromGroupCommand(); } }; CContactsView.prototype.deleteContacts = function (aChecked) { var self = this, oMainContact = this.selectedContact(), aContactUUIDs = _.map(aChecked, function (oItem) { return oItem.UUID(); }) ; if (0 < aContactUUIDs.length) { this.preLoadingList(true); _.each(aChecked, function (oContact) { if (oContact) { ContactsCache.clearInfoAboutEmail(oContact.Email()); if (oMainContact && !oContact.IsGroup() && !oContact.ReadOnly() && !oMainContact.readOnly() && oMainContact.uuid() === oContact.UUID()) { oMainContact = null; this.selectedContact(null); } } }, this); _.each(this.collection(), function (oContact) { if (-1 < $.inArray(oContact, aChecked)) { oContact.deleted(true); } }); _.delay(function () { self.collection.remove(function (oItem) { return oItem.deleted(); }); }, 500); Ajax.send('DeleteContacts', { 'Storage': this.selectedStorage(), 'UUIDs': aContactUUIDs }, function (oResponse) { if (!oResponse.Result) { Api.showErrorByCode(oResponse, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_DELETE_CONTACTS')); } App.broadcastEvent('ContactsWebclient::deleteContactsResponse', [oResponse.Result]); this.requestContactList(); }, this); ContactsCache.markVcardsNonexistentByUid(aContactUUIDs); } }; CContactsView.prototype.executeRemoveFromGroup = function () { var self = this, oGroup = this.selectedGroupInList(), aChecked = this.selector.listCheckedOrSelected(), aContactUUIDs = _.map(aChecked, function (oItem) { return oItem.UUID(); }) ; aContactUUIDs = _.compact(aContactUUIDs); if (oGroup && 0 < aContactUUIDs.length) { this.preLoadingList(true); _.each(this.collection(), function (oContact) { if (-1 < $.inArray(oContact, aChecked)) { oContact.deleted(true); } }); _.delay(function () { self.collection.remove(function (oItem) { return oItem.deleted(); }); }, 500); Ajax.send('RemoveContactsFromGroup', { 'GroupUUID': oGroup.UUID(), 'ContactUUIDs': aContactUUIDs }, function (oResponse) { if (!oResponse.Result) { Api.showErrorByCode(oResponse); } this.requestContactList(); }, this); } }; CContactsView.prototype.executeImport = function () { if (this.isAddressBookSelected()) { this.changeRouting({Storage: this.selectedStorage(), GroupUUID: '', Search: '', Page: 1, Action: 'import'}); } else { this.changeRouting({Storage: 'personal', GroupUUID: '', Search: '', Page: 1, Action: 'import'}); } }; CContactsView.prototype.executeExport = function (sFormat) { var aContactUUIDs = _.map(this.selector.listChecked(), function (oContact) { return oContact.sUUID; }), sStorage = this.selectedStorage() ; if (sStorage === 'group') { sStorage = 'all'; } Ajax.send('Export', { 'Format': sFormat, 'Storage': sStorage, 'GroupUUID': this.currentGroupUUID(), 'ContactUUIDs': aContactUUIDs }, function (oResponse) { var oBlob = new Blob([oResponse.ResponseText], {'type': 'text/plain;charset=utf-8'}); FileSaver.saveAs(oBlob, this.getStorageDisplayName(sStorage) + '.' + sFormat, true); }, this, { Format: 'Raw' }); }; CContactsView.prototype.getStorageDisplayName = function (sStorageName) { let result = 'contacts'; const oAddessbook = _.find(Settings.Storages,(oStorage) => oStorage.Id === sStorageName ); if (oAddessbook?.DisplayName) { result = oAddessbook.DisplayName; } return result; }; CContactsView.prototype.executeCancel = function () { var oData = this.selectedItem(); if (oData) { if (oData instanceof CContactModel && !oData.readOnly()) { if (oData.isNew()) { Routing.setPreviousHash(); } else if (oData.edited()) { oData.edited(false); this.requestContact(oData.uuid()); } else { this.changeRouting(); } } else if (oData instanceof CGroupModel && !oData.readOnly()) { if (oData.isNew()) { Routing.setPreviousHash(); } else if (oData.edited()) { this.selectedItem(this.selectedOldItem()); oData.edited(false); } else { this.changeRouting(); } } else if (this.oImportView.visibility()) { Routing.setPreviousHash(); } } }; /** * @param {Object} oGroup * @param {Array} aContactUUIDs */ CContactsView.prototype.executeAddContactsToGroup = function (oGroup, aContactUUIDs) { if (oGroup && _.isArray(aContactUUIDs) && 0 < aContactUUIDs.length) { oGroup.recivedAnim(true); this.executeAddContactsToGroupUUID(oGroup.UUID(), aContactUUIDs); } }; /** * @param {string} sGroupUUID * @param {Array} aContactUUIDs */ CContactsView.prototype.executeAddContactsToGroupUUID = function (sGroupUUID, aContactUUIDs) { if (sGroupUUID && _.isArray(aContactUUIDs) && 0 < aContactUUIDs.length) { Ajax.send('AddContactsToGroup', { 'GroupUUID': sGroupUUID, 'ContactUUIDs': aContactUUIDs }, this.onAddContactsToGroupResponse, this); } }; CContactsView.prototype.onAddContactsToGroupResponse = function (oResponse) { if (!oResponse.Result) { Api.showErrorByCode(oResponse); } this.requestContactList(); if (this.selector.itemSelected()) { this.requestContact(this.selector.itemSelected().UUID()); } }; /** * @param {Object} oGroup */ CContactsView.prototype.executeAddSelectedContactsToGroup = function (oGroup) { var aList = this.selector.listCheckedOrSelected(), aContactUUIDs = [] ; if (oGroup && _.isArray(aList) && 0 < aList.length) { _.each(aList, function (oItem) { if (oItem && !oItem.IsGroup()) { aContactUUIDs.push(oItem.UUID()); } }, this); } this.executeAddContactsToGroup(oGroup, aContactUUIDs); }; /** * @param {Object} oContact */ CContactsView.prototype.groupsInContactView = function (oContact) { var aResult = [], aGroupUUIDs = [] ; if (oContact && !oContact.groupsIsEmpty()) { aGroupUUIDs = oContact.groups(); aResult = _.filter(this.groupFullCollection(), function (oItem) { return 0 <= $.inArray(oItem.UUID(), aGroupUUIDs); }); } return aResult; }; CContactsView.prototype.onShow = function () { this.selector.useKeyboardKeys(true); this.oPageSwitcher.show(); if (this.oJua) { this.oJua.setDragAndDropEnabledStatus(true); } this.bRefreshContactList = true; }; CContactsView.prototype.onHide = function () { this.selector.listCheckedOrSelected(false); this.selector.useKeyboardKeys(false); this.selectedItem(null); this.oPageSwitcher.hide(); if (this.oJua) { this.oJua.setDragAndDropEnabledStatus(false); } }; CContactsView.prototype.onBind = function () { this.selector.initOnApplyBindings( '.contact_sub_list .item', '.contact_sub_list .selected.item', '.contact_sub_list .item .custom_checkbox', $('.contact_list', this.$viewDom), $('.contact_list_scroll.scroll-inner', this.$viewDom) ); var self = this; this.$viewDom.on('click', '.content .item.add_to .dropdown_helper .item', function () { if ($(this).hasClass('new-group')) { self.executeNewGroup(); } else { self.executeAddSelectedContactsToGroup(ko.dataFor(this)); } }); this.showPersonalContacts(LinksUtils.checkStorageExists('personal')); this.showTeamContacts(LinksUtils.checkStorageExists('team')); this.showSharedToAllContacts(LinksUtils.checkStorageExists('shared')); this.selectedStorage(this.selectedStorage()); this.oImportView.onBind(); this.requestGroupFullList(); if (!App.isMobile()) { this.hotKeysBind(); } this.initUploader(); }; CContactsView.prototype.hotKeysBind = function () { var bFirstContactFlag = false; $(document).on('keydown', _.bind(function(ev) { var nKey = ev.keyCode, oFirstContact = this.collection()[0], bListIsFocused = this.isSearchFocused(), bFirstContactSelected = false ; if (this.shown() && !Utils.isTextFieldFocused() && !bListIsFocused && ev && nKey === Enums.Key.s) { ev.preventDefault(); this.searchFocus(); } else if (oFirstContact) { bFirstContactSelected = oFirstContact.selected(); if (oFirstContact && bListIsFocused && ev && nKey === Enums.Key.Down) { this.isSearchFocused(false); this.selector.itemSelected(oFirstContact); bFirstContactFlag = true; } else if (!bListIsFocused && bFirstContactFlag && bFirstContactSelected && ev && nKey === Enums.Key.Up) { this.isSearchFocused(true); this.selector.itemSelected(false); bFirstContactFlag = false; } else if (bFirstContactSelected) { bFirstContactFlag = true; } else if (!bFirstContactSelected) { bFirstContactFlag = false; } } }, this)); }; CContactsView.prototype.refreshContactsAndGroups = function () { this.requestContactList(); this.requestGroupFullList(); // The result is handled in subscription above // Ajax.send('GetAddressBooks'); }; CContactsView.prototype.requestContactList = function () { var sGroupUUID = this.selectedStorage() === 'group' && this.selectedGroupInList() ? this.selectedGroupInList().UUID() : '', sStorage = sGroupUUID !== '' ? 'all' : this.selectedStorage() ; this.loadingList(true); Ajax.send('GetContacts', { 'Offset': (this.currentPage() - 1) * Settings.ContactsPerPage, 'Limit': Settings.ContactsPerPage, 'SortField': this.sortBy(), 'SortOrder': this.sortOrder(), 'Search': this.search(), 'GroupUUID': sGroupUUID, 'Storage': sStorage }, this.onGetContactsResponse, this); }; CContactsView.prototype.requestGroupFullList = function () { Ajax.send('GetGroups', null, this.onGetGroupsResponse, this); }; /** * @param {string} sContactUUID */ CContactsView.prototype.requestContact = function (sContactUUID) { this.loadingViewPane(true); var oItem = _.find(this.collection(), function (oItm) { return oItm.UUID() === sContactUUID; }); if (oItem) { this.selector.itemSelected(oItem); Ajax.send('GetContact', { 'UUID': oItem.UUID() }, this.onGetContactResponse, this); } else { this.contactUidForRequest(sContactUUID); this.selector.itemSelected(null); this.selectedItem(null); } }; /** * @param {Object} oData */ CContactsView.prototype.editGroup = function (oData) { var oGroup = new CGroupModel(); oGroup.populate(oData); this.selectedOldItem(oGroup); oData.edited(true); }; /** * @param {string} sStorage */ CContactsView.prototype.changeGroupType = function (sStorage) { this.search(''); this.searchInput(''); this.changeRouting({ Storage: sStorage, GroupUUID: '' }); }; /** * @param {Object} mData */ CContactsView.prototype.onViewGroupClick = function (mData) { this.search(''); this.searchInput(''); var sUUID = (typeof mData === 'string') ? mData : mData.UUID(); this.changeRouting({ Storage: 'group', GroupUUID: sUUID }); }; /** * @param {Array} aParams */ CContactsView.prototype.onRoute = function (aParams) { var oParams = LinksUtils.parseContacts(aParams), bGroupOrSearchChanged = this.selectedStorage() !== oParams.Storage || this.currentGroupUUID() !== oParams.GroupUUID || this.search() !== oParams.Search, bGroupFound = true, bRequestContacts = this.bRefreshContactList ; this.bRefreshContactList = false; this.pageSwitcherLocked(true); if (this.oPageSwitcher.perPage() !== Settings.ContactsPerPage) { bRequestContacts = true; } if (bGroupOrSearchChanged) { this.oPageSwitcher.clear(); this.oPageSwitcher.perPage(Settings.ContactsPerPage); } else { this.oPageSwitcher.setPage(oParams.Page, Settings.ContactsPerPage); } this.pageSwitcherLocked(false); if (oParams.Page !== this.oPageSwitcher.currentPage()) { Routing.replaceHash(LinksUtils.getContacts(oParams.Storage, oParams.GroupUUID, oParams.Search, this.oPageSwitcher.currentPage())); } if (this.currentPage() !== oParams.Page) { this.currentPage(oParams.Page); bRequestContacts = true; } if (this.selectedStorage() !== oParams.Storage && LinksUtils.checkStorageExists(oParams.Storage) && oParams.Storage !== 'group') { this.selectedStorage(oParams.Storage); bRequestContacts = true; } else if (oParams.Storage === 'group' && oParams.Action !== 'create-group' && (this.currentGroupUUID() !== oParams.GroupUUID || oParams.ContactUUID === '')) { bGroupFound = this.viewGroup(oParams.GroupUUID); if (bGroupFound) { bRequestContacts = false; } else { Routing.replaceHash(LinksUtils.getContacts()); } } if (this.search() !== oParams.Search) { this.search(oParams.Search); bRequestContacts = true; } this.contactUidForRequest(''); if (oParams.ContactUUID) { if (this.collection().length === 0) { this.contactUidForRequest(oParams.ContactUUID); } else { this.requestContact(oParams.ContactUUID); } } else if (this.selectedItem() instanceof CContactModel) { this.selector.itemSelected(null); this.selectedItem(null); } switch (oParams.Action) { case 'create-contact': var oGr = this.selectedGroupInList(), oNewContactParams = ContactsCache.getNewContactParams() ; this.oContactModel.switchToNew(); this.oContactModel.groups(oGr ? [oGr.UUID()] : []); if (oNewContactParams) { _.each(oNewContactParams, function (sValue, sKey) { if (_.isFunction(this.oContactModel[sKey])) { this.oContactModel[sKey](sValue); } }, this); this.oContactModel.extented(true); } this.selectedItem(this.oContactModel); this.selector.itemSelected(null); this.oImportView.visibility(false); break; case 'create-group': this.oGroupModel.switchToNew(); this.selectedItem(this.oGroupModel); this.selector.itemSelected(null); this.oImportView.visibility(false); break; case 'import': this.selectedItem(null); this.oImportView.visibility(true); this.selector.itemSelected(null); break; default: if (!oParams.ContactUUID && !oParams.GroupUUID) { this.selectedItem(null); this.selector.itemSelected(null); } this.oImportView.visibility(false); break; } if (bRequestContacts) { if (bGroupOrSearchChanged) { this.collection([]); this.contactCount(0); } this.requestContactList(); } this.isSaving(false); }; /** * @param {string} sGroupUUID */ CContactsView.prototype.viewGroup = function (sGroupUUID) { var oGroup = _.find(this.groupFullCollection(), function (oItem) { return oItem && oItem.UUID() === sGroupUUID; }) ; if (oGroup) { this.groupUidForRequest(''); this.oGroupModel.clear(); this.oGroupModel .uuid(oGroup.UUID()) .name(oGroup.Name()) ; if (oGroup.IsOrganization()) { this.requestGroup(oGroup); } this.selectedGroupInList(oGroup); this.selectedItem(this.oGroupModel); this.selector.itemSelected(null); this.selector.listCheckedOrSelected(false); } else { this.groupUidForRequest(sGroupUUID); } return !!oGroup; }; /** * @param {string} sGroupUUID */ CContactsView.prototype.deleteGroup = function (sGroupUUID) { if (sGroupUUID) { this.groupFullCollection.remove(function (oItem) { return oItem && oItem.UUID() === sGroupUUID; }); Ajax.send('DeleteGroup', { 'UUID': sGroupUUID }, function (oResponse) { if (!oResponse.Result) { Api.showErrorByCode(oResponse); } this.requestGroupFullList(); }, this); this.changeGroupType(Settings.DefaultStorage); } }; /** * @param {Object} oGroup */ CContactsView.prototype.mailGroup = function (oGroup) { if (this.bAllowComposeMessageToAddresses && oGroup) { Ajax.send('GetContacts', { 'Storage': 'all', 'Offset': 0, 'Limit': 200, 'SortField': Enums.ContactSortField.Name, 'GroupUUID': oGroup.uuid() }, function (oResponse) { var aList = oResponse && oResponse.Result && oResponse.Result.List, aEmails = Types.isNonEmptyArray(aList) ? _.compact(_.map(aList, function (oRawContactItem) { var oContactItem = new CContactListItemModel(); oContactItem.parse(oRawContactItem); return oContactItem.Email() !== '' ? oContactItem.getFullEmail() : ''; })) : [], sEmails = aEmails.join(', ') ; if (sEmails !== '') { this.composeMessageToAddresses(sEmails); } }, this); } }; /** * @param {Object} oContact */ CContactsView.prototype.dragAndDropHelper = function (oContact) { if (oContact) { oContact.checked(true); } var oSelected = this.selector.itemSelected(), oHelper = Utils.draggableItems(), nCount = this.selector.listCheckedOrSelected().length, aUids = 0 < nCount ? _.map(this.selector.listCheckedOrSelected(), function (oItem) { return oItem.UUID(); }) : [] ; if (oSelected && !oSelected.checked()) { oSelected.checked(true); } oHelper.data('drag-contatcs-storage', this.selectedStorage()); oHelper.data('drag-contatcs-uids', aUids); $('.count-text', oHelper).text(TextUtils.i18n('CONTACTSWEBCLIENT/LABEL_DRAG_CONTACTS_PLURAL', { 'COUNT': nCount }, null, nCount)); return oHelper; }; /** * @param {Object} oToGroup * @param {Object} oEvent * @param {Object} oUi */ CContactsView.prototype.contactsDrop = function (oToGroup, oEvent, oUi) { if (oToGroup) { var oHelper = oUi && oUi.helper ? oUi.helper : null, aUids = oHelper ? oHelper.data('drag-contatcs-uids') : null ; if (null !== aUids) { Utils.uiDropHelperAnim(oEvent, oUi); this.executeAddContactsToGroup(oToGroup, aUids); } } }; CContactsView.prototype.contactsDropToGroupType = function (sDropStorage, oEvent, oUi) { var oHelper = oUi && oUi.helper, sDragStorage = oHelper && oHelper.data('drag-contatcs-storage') || null, aUids = oHelper && oHelper.data('drag-contatcs-uids') || null ; if (null !== aUids && null !== sDragStorage && sDropStorage !== sDragStorage) { Utils.uiDropHelperAnim(oEvent, oUi); this.executeShare(); } }; CContactsView.prototype.contactsDropToAddressbook = function (sDropStorage, oEvent, oUi) { var oHelper = oUi && oUi.helper, sDragStorage = oHelper && oHelper.data('drag-contatcs-storage') || null, aUids = oHelper && oHelper.data('drag-contatcs-uids') || null ; if (null !== aUids && null !== sDragStorage && sDropStorage !== sDragStorage) { Utils.uiDropHelperAnim(oEvent, oUi); Ajax.send('MoveContactsToStorage', {'FromStorage': sDragStorage, 'ToStorage': sDropStorage, 'UUIDs': aUids}, function () { this.selector.listCheckedOrSelected(false); this.requestContactList(); }, this); } }; CContactsView.prototype.searchFocus = function () { if (this.selector.useKeyboardKeys() && !Utils.isTextFieldFocused()) { this.isSearchFocused(true); } }; /** * @param {mixed} mContact */ CContactsView.prototype.viewContact = function (mContact) { if (mContact) { var sGroupUUID = (this.selectedStorage() === 'group') ? this.currentGroupUUID() : '', sContactUUID = (typeof mContact === 'string') ? mContact : mContact.UUID() ; this.changeRouting({ GroupUUID: sGroupUUID, ContactUUID: sContactUUID }); } }; /** * @param {Object} oContact */ CContactsView.prototype.composeMessageToContact = function (oContact) { var sEmail = oContact ? oContact.getFullEmail() : ''; if (sEmail !== '') { this.composeMessageToAddresses(sEmail); } }; CContactsView.prototype.composeMessage = function () { var aList = this.selector.listCheckedOrSelected(), aEmails = Types.isNonEmptyArray(aList) ? _.compact(_.map(aList, function (oItem) { return oItem.Email() !== '' ? oItem.getFullEmail() : ''; })) : [], sEmails = aEmails.join(', ') ; if (sEmails !== '') { this.composeMessageToAddresses(sEmails); } }; CContactsView.prototype.onClearSearchClick = function () { // initiation empty search this.searchInput(''); this.searchSubmitCommand(); }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onGetContactResponse = function (oResponse, oRequest) { var oResult = oResponse.Result; if (oResult) { var oObject = new CContactModel(), oSelected = this.selector.itemSelected() ; oObject.parse(oResult); if (oSelected && oSelected.UUID() === oObject.uuid()) { if (this.selectedContact() instanceof CContactModel && oObject instanceof CContactModel && this.selectedContact().uuid() === oObject.uuid()) { oObject.edited(this.selectedContact().edited()); } this.selectedItem(oObject); } } else { Api.showErrorByCode(oResponse); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onGetContactsResponse = function (oResponse, oRequest) { var oResult = oResponse.Result; if (oResult) { var iContactCount = Types.pInt(oResult.ContactCount), aNewCollection = Types.isNonEmptyArray(oResult.List) ? _.compact(_.map(oResult.List, function (oRawContactItem) { var oContactItem = new CContactListItemModel(); oContactItem.parse(oRawContactItem); return oContactItem; })) : [], oSelected = this.selector.itemSelected(), oNewSelected = oSelected ? _.find(aNewCollection, function (oContactItem) { return oSelected.UUID() === oContactItem.UUID(); }) : null, aChecked = this.selector.listChecked(), aCheckedIds = (aChecked && 0 < aChecked.length) ? _.map(aChecked, function (oItem) { return oItem.UUID(); }) : [] ; if (Types.isNonEmptyArray(aCheckedIds)) { _.each(aNewCollection, function (oContactItem) { oContactItem.checked(-1 < $.inArray(oContactItem.UUID(), aCheckedIds)); }); } this.collection(aNewCollection); this.oPageSwitcher.setCount(iContactCount); this.contactCount(iContactCount); if (oNewSelected) { this.selector.itemSelected(oNewSelected); this.requestContact(oNewSelected.UUID()); } else if (oSelected) { this.changeRouting({}, true); } this.selectedGroupEmails(this.selectedGroup() ? _.uniq(_.flatten(_.map(this.collection(), function (oContactItem) { return oContactItem.aEmails; }))) : []); } else { Api.showErrorByCode(oResponse); } this.loadingList(false); }; CContactsView.prototype.viewAllMails = function () { if (this.selectedGroupEmails().length > 0) { this.searchMessagesInInbox('email:' + this.selectedGroupEmails().join(',')); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onGetGroupsResponse = function (oResponse, oRequest) { var oResult = oResponse.Result; if (oResult) { var iIndex = 0, iLen = 0, aList = [], oSelected = _.find(this.groupFullCollection(), function (oItem) { return oItem.selected(); }) || null, oNewSelected = null ; this.groupFullCollection(aList); for (iLen = oResult.length; iIndex < iLen; iIndex++) { if (oResult[iIndex]) { oResult[iIndex].IsGroup = true; var oObject = new CContactListItemModel(); oObject.parse(oResult[iIndex]); if (oObject.IsGroup()) { if (oSelected && oSelected.UUID() === oObject.UUID()) { oNewSelected = oObject; } aList.push(oObject); } } } this.selectedGroupInList(oNewSelected); if (oSelected !== null && oNewSelected === null) { Routing.replaceHash(LinksUtils.getContacts()); } this.groupFullCollection(aList); } else { Api.showErrorByCode(oResponse); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onCreateGroupResponse = function (oResponse, oRequest) { this.isSaving(false); if (oResponse.Result) { if (typeof oResponse.Result === 'string' && oResponse.Result !== '') { this.onViewGroupClick(oResponse.Result); } else { if (this.selectedGroup() && this.selectedGroup().edited()) { this.selectedGroup().edited(false); } } Screens.showReport(TextUtils.i18n('CONTACTSWEBCLIENT/REPORT_GROUP_SUCCESSFULLY_ADDED')); this.requestGroupFullList(); } else { Api.showErrorByCode(oResponse, TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_SAVE_GROUP')); } }; CContactsView.prototype.executeShare = function () { var bSelectedStorageAll = this.selectedStorage() === 'all', aChecked = _.filter(this.selector.listCheckedOrSelected(), function (oItem) { return oItem.sStorage !== 'team'; }), aCheckedUUIDs = _.map(aChecked, function (oItem) { return oItem.UUID(); }) ; aCheckedUUIDs = _.compact(aCheckedUUIDs); if (0 < aCheckedUUIDs.length) { _.each(aChecked, function (oContact) { if (oContact) { ContactsCache.clearInfoAboutEmail(oContact.Email()); } }, this); if (!bSelectedStorageAll) { if (-1 < $.inArray(this.selectedContact(), aChecked)) { this.selectedContact(null); } _.each(this.collection(), function (oContact) { if (-1 < $.inArray(oContact, aChecked)) { oContact.deleted(true); } }); _.delay(function () { this.collection.remove(function (oItem) { return oItem.deleted(); }); }.bind(this), 500); } if ('shared' === this.selectedStorage()) { this.recivedAnimPersonal(true); } else { this.recivedAnimShared(true); } Ajax.send('UpdateSharedContacts', { 'UUIDs': aCheckedUUIDs }, function () { if (bSelectedStorageAll) { this.selector.listCheckedOrSelected(false); this.requestContactList(); } }, this); } }; /** * @param {Object} oItem */ CContactsView.prototype.requestGroup = function (oItem) { this.loadingViewPane(true); if (oItem) { Ajax.send('GetGroup', { 'UUID': oItem.UUID() }, this.onGetGroupResponse, this); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CContactsView.prototype.onGetGroupResponse = function (oResponse, oRequest) { if (oResponse.Result) { var oGroup = oResponse.Result; this.oGroupModel .uuid(Types.pString(oGroup.UUID)) .name(oGroup.Name) .isOrganization(oGroup.IsOrganization) .company(oGroup.Company) .country(oGroup.Country) .state(oGroup.State) .city(oGroup.City) .street(oGroup.Street) .zip(oGroup.Zip) .phone(oGroup.Phone) .fax(oGroup.Fax) .email(oGroup.Email) .web(oGroup.Web) ; } else { Api.showErrorByCode(oResponse); } }; CContactsView.prototype.initUploader = function () { if (this.uploaderArea()) { this.oJua = new CJua({ 'action': '?/Api/', 'name': 'jua-uploader', 'queueSize': 2, 'dragAndDropElement': this.uploaderArea(), 'disableAjaxUpload': false, 'disableFolderDragAndDrop': false, 'disableDragAndDrop': false, 'hidden': _.extendOwn({ 'Module': Settings.ServerModuleName, 'Method': 'Import', 'Parameters': _.bind(function () { return JSON.stringify({ 'GroupUUID': this.currentGroupUUID(), 'Storage': 'personal' }); }, this) }, App.getCommonRequestParameters()) }); this.oJua .on('onSelect', _.bind(this.onImportSelect, this)) .on('onComplete', _.bind(this.onImportComplete, this)) .on('onBodyDragEnter', _.bind(this.dragActive, this, true)) .on('onBodyDragLeave', _.bind(this.dragActive, this, false)) ; } }; CContactsView.prototype.onImportSelect = function (sFileUid, oFileData) { var bAllowImport = this.isImportAllowed(), bAllowFormat = false ; if (bAllowImport) { _.each(Settings.ImportExportFormats, function (sFormat) { if (sFormat.toLowerCase() === oFileData.FileName.substr(oFileData.FileName.length - sFormat.length).toLowerCase()) { bAllowFormat = true; } }); if (!bAllowFormat) { Screens.showError(this.getFormatDependentText('ERROR_FILE_EXTENSION')); bAllowImport = false; } } return bAllowImport; }; CContactsView.prototype.onImportComplete = function (sFileUid, bResponseReceived, oResponse) { var bError = !bResponseReceived || !oResponse || !oResponse.Result || false, iImportedCount = 0 ; if (!bError) { iImportedCount = Types.pInt(oResponse.Result.ImportedCount); if (0 < iImportedCount) { Screens.showReport(TextUtils.i18n('CONTACTSWEBCLIENT/REPORT_CONTACTS_IMPORTED_PLURAL', { 'NUM': iImportedCount }, null, iImportedCount)); } else { Screens.showError(TextUtils.i18n('CONTACTSWEBCLIENT/ERROR_IMPORT_NO_CONTACT')); } } else { if (oResponse && oResponse.ErrorCode === Enums.Errors.IncorrectFileExtension) { Screens.showError(this.getFormatDependentText('ERROR_FILE_EXTENSION')); } else { Screens.showError(TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_FILE')); } } this.requestGroupFullList(); this.requestContactList(); }; CContactsView.prototype.addPublicPgpKey = function () { const ImportKeyPopup = __webpack_require__(/*! modules/OpenPgpWebclient/js/popups/ImportKeyPopup.js */ "Aai9"); const onSuccessCallback = (armor) => { if (this.selectedContact() && this.selectedContact().edited()) { this.selectedContact().publicPgpKey(armor); const selectedContactListItem = this.collection().find(item => item.UUID() === this.selectedContact().uuid()); if (selectedContactListItem) { selectedContactListItem.HasPgpPublicKey(true); } } else { this.onUpdateContactResponse({ Result: true }); } }; Popups.showPopup(ImportKeyPopup, [{ shouldAddToPersonalContact: true, contactEmail: this.selectedItem().email(), contactUUID: this.selectedItem().uuid(), onSuccessCallback }]); }; module.exports = CContactsView; /***/ }), /***/ "7NIm": /*!***********************************************************!*\ !*** ./modules/ContactsWebclient/js/views/CImportView.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), ko = __webpack_require__(/*! knockout */ "p09A"), App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "9kOp"), CJua = __webpack_require__(/*! modules/CoreWebclient/js/CJua.js */ "qBBW"), UserSettings = __webpack_require__(/*! modules/CoreWebclient/js/Settings.js */ "OfVV"), Settings = __webpack_require__(/*! modules/ContactsWebclient/js/Settings.js */ "Y40+") ; /** * @param {CContactsViewModel} oParent * @constructor */ function CImportView(oParent) { this.oJua = null; this.oParent = oParent; this.visibility = ko.observable(false); this.importing = ko.observable(false); this.importButtonDom = ko.observable(null); this.bVisibleCloseButton = App.isMobile(); this.extensionInfo = oParent.getFormatDependentText('INFO_IMPORT_CONTACTS'); } CImportView.prototype.ViewTemplate = 'ContactsWebclient_ImportView'; CImportView.prototype.onBind = function () { var aFormats = _.map(Settings.ImportExportFormats, function (sFormat) { return '.' + sFormat; }); this.oJua = new CJua({ 'action': '?/Api/', 'name': 'jua-uploader', 'queueSize': 1, 'clickElement': this.importButtonDom(), 'hiddenElementsPosition': UserSettings.IsRTL ? 'right' : 'left', 'disableAjaxUpload': false, 'disableDragAndDrop': true, 'disableMultiple': true, 'hidden': _.extendOwn({ 'Module': Settings.ServerModuleName, 'Method': 'Import', 'Parameters': _.bind(function () { return JSON.stringify({ 'GroupUUID': this.oParent.currentGroupUUID(), 'Storage': this.oParent.isAddressBookSelected() ? this.oParent.selectedStorage() : 'personal' }); }, this) }, App.getCommonRequestParameters()), accept: aFormats.join(',') }); this.oJua .on('onSelect', _.bind(this.oParent.onImportSelect, this.oParent)) .on('onStart', _.bind(this.onFileUploadStart, this)) .on('onComplete', _.bind(this.onFileUploadComplete, this)) ; }; CImportView.prototype.onFileUploadStart = function () { this.importing(true); }; /** * @param {string} sFileUid * @param {boolean} bResponseReceived * @param {Object} oResponse */ CImportView.prototype.onFileUploadComplete = function (sFileUid, bResponseReceived, oResponse) { this.importing(false); this.oParent.onImportComplete(sFileUid, bResponseReceived, oResponse); }; module.exports = CImportView; /***/ }), /***/ "injE": /*!************************************************!*\ !*** ./modules/CoreWebclient/js/utils/Date.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var TextUtils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Text.js */ "H20a"), DateUtils = {} ; DateUtils.getMonthNamesArray = function () { var aMonthes = TextUtils.i18n('COREWEBCLIENT/LIST_MONTH_NAMES').split(' '), iLen = 12, iIndex = aMonthes.length ; for (; iIndex < iLen; iIndex++) { aMonthes[iIndex] = ''; } return aMonthes; }; /** * @param {number} iMonth * @param {number} iYear * * @return {number} */ DateUtils.daysInMonth = function (iMonth, iYear) { if (0 < iMonth && 13 > iMonth && 0 < iYear) { return new Date(iYear, iMonth, 0).getDate(); } return 31; }; module.exports = DateUtils; /***/ }), /***/ "Cox/": /*!*******************************************************!*\ !*** ./modules/CoreWebclient/js/vendors/FileSaver.js ***! \*******************************************************/ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js * A saveAs() FileSaver implementation. * 1.3.2 * 2016-06-16 18:25:19 * * By Eli Grey, http://eligrey.com * License: MIT * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md */ /*global self */ /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ var saveAs = saveAs || (function(view) { "use strict"; // IE <10 is explicitly unsupported if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { return; } var doc = view.document // only get URL when necessary in case Blob.js hasn't overridden it yet , get_URL = function() { return view.URL || view.webkitURL || view; } , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") , can_use_save_link = "download" in save_link , click = function(node) { var event = new MouseEvent("click"); node.dispatchEvent(event); } , is_safari = /constructor/i.test(view.HTMLElement) || view.safari , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) , throw_outside = function(ex) { (view.setImmediate || view.setTimeout)(function() { throw ex; }, 0); } , force_saveable_type = "application/octet-stream" // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to , arbitrary_revoke_timeout = 1000 * 40 // in ms , revoke = function(file) { var revoker = function() { if (typeof file === "string") { // file is an object URL get_URL().revokeObjectURL(file); } else { // file is a File file.remove(); } }; setTimeout(revoker, arbitrary_revoke_timeout); } , dispatch = function(filesaver, event_types, event) { event_types = [].concat(event_types); var i = event_types.length; while (i--) { var listener = filesaver["on" + event_types[i]]; if (typeof listener === "function") { try { listener.call(filesaver, event || filesaver); } catch (ex) { throw_outside(ex); } } } } , auto_bom = function(blob) { // prepend BOM for UTF-8 XML and text/* types (including HTML) // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); } return blob; } , FileSaver = function(blob, name, no_auto_bom) { if (!no_auto_bom) { blob = auto_bom(blob); } // First try a.download, then web filesystem, then object URLs var filesaver = this , type = blob.type , force = type === force_saveable_type , object_url , dispatch_all = function() { dispatch(filesaver, "writestart progress write writeend".split(" ")); } // on any filesys errors revert to saving with object URLs , fs_error = function() { if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { // Safari doesn't allow downloading of blob urls var reader = new FileReader(); reader.onloadend = function() { var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); var popup = view.open(url, '_blank'); if(!popup) view.location.href = url; url=undefined; // release reference before dispatching filesaver.readyState = filesaver.DONE; dispatch_all(); }; reader.readAsDataURL(blob); filesaver.readyState = filesaver.INIT; return; } // don't create more object URLs than needed if (!object_url) { object_url = get_URL().createObjectURL(blob); } if (force) { view.location.href = object_url; } else { var opened = view.open(object_url, "_blank"); if (!opened) { // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html view.location.href = object_url; } } filesaver.readyState = filesaver.DONE; dispatch_all(); revoke(object_url); } ; filesaver.readyState = filesaver.INIT; if (can_use_save_link) { object_url = get_URL().createObjectURL(blob); setTimeout(function() { save_link.href = object_url; save_link.download = name; click(save_link); dispatch_all(); revoke(object_url); filesaver.readyState = filesaver.DONE; }); return; } fs_error(); } , FS_proto = FileSaver.prototype , saveAs = function(blob, name, no_auto_bom) { return new FileSaver(blob, name || blob.name || "download", no_auto_bom); } ; // IE 10+ (native saveAs) if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { return function(blob, name, no_auto_bom) { name = name || blob.name || "download"; if (!no_auto_bom) { blob = auto_bom(blob); } return navigator.msSaveOrOpenBlob(blob, name); }; } FS_proto.abort = function(){}; FS_proto.readyState = FS_proto.INIT = 0; FS_proto.WRITING = 1; FS_proto.DONE = 2; FS_proto.error = FS_proto.onwritestart = FS_proto.onprogress = FS_proto.onwrite = FS_proto.onabort = FS_proto.onerror = FS_proto.onwriteend = null; return saveAs; }( typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content )); // `self` is undefined in Firefox for Android content script context // while `this` is nsIContentFrameMessageManager // with an attribute `content` that corresponds to the window if ( true && module.exports) { module.exports.saveAs = saveAs; } else if (( true && __webpack_require__.amdD !== null) && (__webpack_require__.amdO !== null)) { !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return saveAs; }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } /***/ }), /***/ "yKBN": /*!*************************************************************!*\ !*** ./modules/CoreWebclient/js/views/CPageSwitcherView.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _ = __webpack_require__(/*! underscore */ "C3HO"), $ = __webpack_require__(/*! jquery */ "M4cL"), ko = __webpack_require__(/*! knockout */ "p09A"), Utils = __webpack_require__(/*! modules/CoreWebclient/js/utils/Common.js */ "REt5"), App = __webpack_require__(/*! modules/CoreWebclient/js/App.js */ "9kOp") ; /** * @constructor * @param {number} iCount * @param {number} iPerPage */ function CPageSwitcherView(iCount, iPerPage) { this.bShown = false; this.currentPage = ko.observable(1); this.count = ko.observable(iCount); this.perPage = ko.observable(iPerPage); this.firstPage = ko.observable(1); this.lastPage = ko.observable(1); this.pagesCount = ko.computed(function () { var iCount = this.perPage() > 0 ? Math.ceil(this.count() / this.perPage()) : 0; return (iCount > 0) ? iCount : 1; }, this); ko.computed(function () { var iAllLimit = 20, iLimit = 4, iPagesCount = this.pagesCount(), iCurrentPage = this.currentPage(), iStart = iCurrentPage, iEnd = iCurrentPage ; if (iPagesCount > 1) { while (true) { iAllLimit--; if (1 < iStart) { iStart--; iLimit--; } if (0 === iLimit) { break; } if (iPagesCount > iEnd) { iEnd++; iLimit--; } if (0 === iLimit) { break; } if (0 === iAllLimit) { break; } } } this.firstPage(iStart); this.lastPage(iEnd); }, this); this.visibleFirst = ko.computed(function () { return (this.firstPage() > 1); }, this); this.visibleLast = ko.computed(function () { return (this.lastPage() < this.pagesCount()); }, this); this.clickPage = _.bind(this.clickPage, this); this.pages = ko.computed(function () { var iIndex = this.firstPage(), aPages = [] ; if (this.firstPage() < this.lastPage()) { for (; iIndex <= this.lastPage(); iIndex++) { aPages.push({ number: iIndex, current: (iIndex === this.currentPage()), clickFunc: this.clickPage }); } } return aPages; }, this); if (!App.isMobile()) { this.hotKeysBind(); } } CPageSwitcherView.prototype.ViewTemplate = 'CoreWebclient_PageSwitcherView'; CPageSwitcherView.prototype.hotKeysBind = function () { $(document).on('keydown', $.proxy(function(ev) { if (this.bShown && !Utils.isTextFieldFocused()) { var sKey = ev.keyCode; if (ev.ctrlKey && sKey === Enums.Key.Left) { this.clickPreviousPage(); } else if (ev.ctrlKey && sKey === Enums.Key.Right) { this.clickNextPage(); } } },this)); }; CPageSwitcherView.prototype.hide = function () { this.bShown = false; }; CPageSwitcherView.prototype.show = function () { this.bShown = true; }; CPageSwitcherView.prototype.clear = function () { this.currentPage(1); this.count(0); }; /** * @param {number} iCount */ CPageSwitcherView.prototype.setCount = function (iCount) { this.count(iCount); if (this.currentPage() > this.pagesCount()) { this.currentPage(this.pagesCount()); } }; /** * @param {number} iPage * @param {number} iPerPage */ CPageSwitcherView.prototype.setPage = function (iPage, iPerPage) { this.perPage(iPerPage); if (iPage > this.pagesCount()) { this.currentPage(this.pagesCount()); } else { this.currentPage(iPage); } }; /** * @param {Object} oPage */ CPageSwitcherView.prototype.clickPage = function (oPage) { var iPage = oPage.number; if (iPage < 1) { iPage = 1; } if (iPage > this.pagesCount()) { iPage = this.pagesCount(); } this.currentPage(iPage); }; CPageSwitcherView.prototype.clickFirstPage = function () { this.currentPage(1); }; CPageSwitcherView.prototype.clickPreviousPage = function () { var iPrevPage = this.currentPage() - 1; if (iPrevPage < 1) { iPrevPage = 1; } this.currentPage(iPrevPage); }; CPageSwitcherView.prototype.clickNextPage = function () { var iNextPage = this.currentPage() + 1; if (iNextPage > this.pagesCount()) { iNextPage = this.pagesCount(); } this.currentPage(iNextPage); }; CPageSwitcherView.prototype.clickLastPage = function () { this.currentPage(this.pagesCount()); }; module.exports = CPageSwitcherView; /***/ }) }]);