Compare commits

...

91 Commits

Author SHA1 Message Date
a908a16e95 [oform] Add event to handle undo/redo 2023-01-19 19:59:29 +05:00
72139c5780 Fix bug #60651
Add translation for default role
2023-01-19 18:40:36 +05:00
366f847ba3 Fix bug #60326
Add ability to add date-time content control with form properties
2023-01-13 17:22:39 +03:00
6171e936a3 Hide oform context from public access 2023-01-12 19:04:17 +03:00
13dd617208 Fix bug #60321
Fix the problem with adding a fixed form inside the complex form
2023-01-11 22:20:56 +03:00
3d5237c5ed [oform] New default color for the default role 2022-12-28 16:06:54 +03:00
f7e84e5912 [de] Add XmlReaderContext to xmlParserContext; Add oform opening from bin; For bug 60341 2022-12-28 00:32:59 +03:00
61d936dcbb Merge branch hotfix/v7.2.2 into release/v7.3.0 2022-12-27 13:48:32 +00:00
11aca8000d [oform] Fix minor bugs with read from/save to xml 2022-12-25 15:06:38 +03:00
1c2bd5bd6e [oform] Implement writing of default user master to xml
Also fix writing to xml of duplicates in relationship table
2022-12-25 12:14:28 +03:00
22b94b07f8 [oform] Fix writing to xml a field master class 2022-12-23 19:50:04 +03:00
0384213a2d [oform] Fix writing oform xml package 2022-12-23 19:49:31 +03:00
dbd10ccedc [oform] Handle relative links writing to xml 2022-12-23 19:48:41 +03:00
b782a77389 [oform] Write users/userMasters/fieldMaster to zip package
Serialize all of these classes to xml if no other classes are related to them
2022-12-23 15:18:27 +03:00
ef13bff264 [oform] Fix zip archive on save 2022-12-23 13:50:35 +03:00
d223836a85 [oform] Write main part to xml 2022-12-23 13:49:57 +03:00
902e1f2373 [oform] Fix issue with minimization 2022-12-23 11:53:29 +03:00
0f7358f40d [oform] Fix test function for writing oform to xml 2022-12-23 10:54:36 +03:00
2f4100e62d [oform] Work on xml writer 2022-12-23 10:28:01 +03:00
50952a7b75 Merge remote-tracking branch 'remotes/origin/feature/oformRoles' into release/v7.3.0 2022-12-22 16:34:51 +03:00
923eed266f [oform] Implement reading all users,user masters, field masters 2022-12-22 14:18:11 +03:00
e412f3095d [oform] Implement reading a default user master 2022-12-22 03:10:38 +03:00
0720f6cce0 [oform] Remove unused files 2022-12-22 03:09:43 +03:00
245697c157 [oform] Implement reading from xml a field master 2022-12-21 22:54:52 +03:00
c8b1fe0448 [oform] Fix read from xml user master 2022-12-21 22:54:01 +03:00
87b2dc1d07 [oform] Implement read from xml cross references 2022-12-21 22:53:26 +03:00
01c1afc35e [oform] Fix read from xml field group 2022-12-21 22:52:30 +03:00
ac50783d02 [oform] Work on reading FieldGroup rels 2022-12-21 02:51:49 +03:00
ea7ea90201 [oform] Fix inheritance 2022-12-20 15:21:48 +03:00
8008816b09 [oform] Fix inheritance of oformXmlPackage from openXmlPackage 2022-12-20 13:30:02 +03:00
5cc816dc6c [oform] Add class XmlPackage 2022-12-20 10:43:54 +03:00
a4d2fbf6f7 [oform] Base methods to read/write main.xml 2022-12-14 20:53:33 +03:00
597d63d4ce [oform] Add base functions to read/write field group from/to xml 2022-12-14 18:43:05 +03:00
e1e6f6fba2 [oform] Remove deprecated function 2022-12-14 02:44:27 +03:00
c86bc764d4 [oform] Fix write/read color in userMaster 2022-12-14 02:41:47 +03:00
8dd0a66829 [oform] Work on read/write userMaster to xml 2022-12-13 19:01:12 +03:00
2f951ed20a [oform] Change file structure 2022-12-12 19:18:58 +03:00
9c11211893 [oform] Fix rendering of role color when deleting a role 2022-12-12 16:17:50 +03:00
82cd96f57e [oform] Fix change of a user color 2022-12-12 12:20:31 +03:00
791e840bec [oform] Add current user
Also add method to get the first user of the fieldMaster
2022-12-09 14:09:54 +03:00
c82887316b [oform] Fix roles update on the end of any action 2022-12-07 20:52:20 +03:00
abde4ac3f9 [oform] Move all corrections to the onEndAction event 2022-12-07 20:33:54 +03:00
f0ea4cfe24 [oform] Check for unused fields at the end of the action 2022-12-07 15:01:11 +03:00
0be878b888 [oform] Add a method to clear the list of users in the field master 2022-12-07 12:04:32 +03:00
c903b45178 [oform] Add correction of a field master array
Also, return the number of role fields that are used in the document
2022-12-07 11:08:56 +03:00
2994a431a1 [oform] Make fixed form float on creation 2022-12-01 20:37:06 +03:00
e73020600e [oform] Implement adding form-field in the fixed form 2022-12-01 20:20:14 +03:00
def429f8b4 [oform] Fixes 2022-12-01 16:57:38 +03:00
fcb0d9ba55 [oform] Add clone method for field master 2022-12-01 16:30:29 +03:00
f6c07aa139 [oform] Implement method to remove role
Also implement method to count the number of fields in field group
2022-11-30 15:56:26 +03:00
b2c1f43e3b [oform] Add empty method to get number of fields in role 2022-11-29 14:38:28 +03:00
f88a486b13 [oform] Add event about changing user master 2022-11-29 14:32:03 +03:00
89e2cb15f9 [oform] Add method to edit role 2022-11-29 12:18:08 +03:00
6cfc7ab50f [oform] Fix color management 2022-11-28 20:28:27 +03:00
81c7af9ee7 [oform] Add event about field group change 2022-11-28 19:32:12 +03:00
614ae67fb6 [oform] Add methods to change the order of roles 2022-11-28 18:27:08 +03:00
14bb7c4042 [oform] Fix weight when add a field group 2022-11-28 15:03:09 +03:00
a75c5124c0 [oform] Add an event when the list of roles is updated 2022-11-26 17:36:34 +03:00
59b19a200f [oform] Fix adding role 2022-11-24 19:48:47 +03:00
5a9821cc95 [oform] Add role.js to config 2022-11-24 19:22:25 +03:00
bee49e0d83 [oform] Add users to FieldGroup
Also implement first variant of adding role to oform and updating list of roles
2022-11-24 14:59:52 +03:00
6d21c5ab0b [oform] Working on roles 2022-11-23 17:36:46 +03:00
8633fc8826 [oform] Add class for roles
Also add blank functions for managing roles
2022-11-23 15:47:06 +03:00
80589a5077 [forms] Refactor 2022-11-23 10:44:56 +03:00
c6e87d17d5 Merge pull request #28 from ONLYOFFICE/feature/plugin-descriptions-updates
Plugin description updates
2022-11-23 10:32:33 +03:00
f602a1303d [oform] Add methods to set/get users/userMasters/fieldMasters 2022-11-22 19:05:34 +03:00
619204041e small fix 2022-11-22 18:26:43 +03:00
212e00fa1a [oform] Add color property to UserMaster 2022-11-22 15:48:41 +03:00
dae1b6f619 [oform] Fix previous commit 2022-11-22 14:22:39 +03:00
b62c32f513 [oform] Add main class oform 2022-11-22 14:22:24 +03:00
f34ccbe982 [oform] Add link to logic document 2022-11-22 12:14:29 +03:00
0141064554 [oform] Fix Document.Author change 2022-11-22 12:07:35 +03:00
a188b1b65d [oform] Add getters to document class 2022-11-22 02:35:13 +03:00
43a57dec6d [oform] Add classes to convert oform document to xml format 2022-11-21 21:54:34 +03:00
e10929d4ff [oform] Fix field group class inheritance 2022-11-21 17:07:19 +03:00
ea98b4eecb [oform] Fix config 2022-11-21 14:51:27 +03:00
c54c7e5d2d [oform] Add main class to work with oform document 2022-11-21 14:50:51 +03:00
522b6c599c [oform] Fix write/read DictionaryBase change 2022-11-21 14:26:37 +03:00
4458d155aa [oform] Rework DictionaryBase change 2022-11-21 13:54:28 +03:00
dfce2a8eb4 [oform] Add class for field group
Also refactor changes for FieldMaster
2022-11-21 03:22:24 +03:00
8a24199ebb Fix export of namespace 2022-11-20 18:51:42 +03:00
a8dd2d819c [oform] Add class for field master 2022-11-20 18:46:39 +03:00
a0d4242dd5 [oform] Refactor 2022-11-20 18:46:39 +03:00
314bfc08f7 [oform] Rework changes for User/UserMaster classes 2022-11-20 18:46:39 +03:00
7fa69ca7a1 [oform] Rework CUser class 2022-11-20 18:46:39 +03:00
164ef8153e [oform] Move UserMaster to separate module
Also refactor UserMaster
2022-11-18 15:47:32 +03:00
4e24e0cd73 updated plugin api descriptions 2022-11-14 12:59:41 +03:00
c2f4cc8a47 Merge branch hotfix/v7.2.1 into master 2022-10-20 13:10:22 +00:00
7b1dfa675d Merge branch 'hotfix/v7.2.1' of https://github.com/ONLYOFFICE/sdkjs-forms into hotfix/v7.2.1 2022-10-18 18:17:24 +03:00
3ee8a16410 Fix bug #59422
Fix the problem with creating ComboBox form using the Builder
2022-10-18 18:17:06 +03:00
a526f92f65 Fix bug #59422
Fix the problem with creating ComboBox form using the Builder
2022-10-18 18:03:52 +03:00
21 changed files with 3702 additions and 1062 deletions

60
api.js
View File

@ -30,6 +30,8 @@
*
*/
var AscOForm = {};
window["AscOForm"] = window.AscOForm = AscOForm;
(function(window, document) {
window['Asc']['Addons'] = window['Asc']['Addons'] || {};
@ -82,7 +84,7 @@
if (oFormPr)
{
oCC.SetFormPr(oFormPr);
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
@ -272,7 +274,7 @@
if (oCC && oFormPr)
{
oCC.SetFormPr(oFormPr);
private_ApplyFormPr(oCC, oFormPr, oLogicDocument);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
@ -296,10 +298,35 @@
if (!oLogicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Content))
{
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddContentControlList);
var oCC = oLogicDocument.AddContentControlDatePicker(oPr, oCommonPr);
let dateTimePr = null;
let formPr = null;
let ccPr = null;
// Пока для совместимости со старым форматом оставляем, чтобы настройки могли приходить по старому (oPr, oCommonPr)
// но в будущем надо перейти на новый вариант contentPr (AscCommon.CContentControlPr)
if (oPr && (oPr instanceof AscCommon.CContentControlPr))
{
dateTimePr = oPr.DateTimePr;
ccPr = oPr;
formPr = oPr.FormPr;
}
else if (oPr && (oPr instanceof AscWord.CSdtDatePickerPr))
{
dateTimePr = oPr;
ccPr = oCommonPr ? oCommonPr : null;
}
var oCC = oLogicDocument.AddContentControlDatePicker(dateTimePr);
if (oCC && oCommonPr)
oCC.SetContentControlPr(oCommonPr);
if (oCC && ccPr)
oCC.SetContentControlPr(ccPr);
if (oCC && formPr)
{
private_ApplyFormPr(oCC, formPr, oLogicDocument);
private_CheckFormKey(oCC, oLogicDocument);
}
oLogicDocument.Recalculate();
oLogicDocument.UpdateInterface();
@ -329,7 +356,7 @@
if (formPr)
{
oCC.SetFormPr(formPr);
private_ApplyFormPr(oCC, formPr, oLogicDocument);
oCC.UpdatePlaceHolderTextPrForForm();
private_CheckFormKey(oCC, oLogicDocument);
}
@ -424,5 +451,26 @@
formPr.SetKey(key);
form.SetFormPr(formPr);
}
function private_ApplyFormPr(form, formPr, logicDocument)
{
if (!form || !formPr)
return;
form.SetFormPr(formPr);
if (formPr.GetFixed())
{
logicDocument.Recalculate(true);
let drawing = form.ConvertFormToFixed();
if (drawing)
{
let drawingPr = new Asc.asc_CImgProperty();
drawingPr.asc_putWrappingStyle(Asc.c_oAscWrapStyle2.Square);
drawing.Set_Props(drawingPr);
form.MoveCursorToContentControl(false);
}
}
}
})(window, window.document);

View File

@ -35,11 +35,29 @@
(function(window)
{
/**
* Returns information about all the forms that have been added to the document
* @typedef {Object} ContentControl
* Content control object.
* @property {string} Tag - A tag assigned to the content control. The same tag can be assigned to several content controls so that it is possible to make reference to them in your code.
* @property {string} Id - A unique identifier of the content control. It can be used to search for a certain content control and make reference to it in the code.
* @property {ContentControlLock} Lock - A value that defines if it is possible to delete and/or edit the content control or not: 0 - only deleting, 1 - no deleting or editing, 2 - only editing, 3 - full access.
* @property {string} InternalId - A unique internal identifier of the content control. It is used for all operations with content controls.
*/
/**
* @typedef {(0 | 1 | 2 | 3)} ContentControlLock
* A value that defines if it is possible to delete and/or edit the content control or not:
* * **0** - only deleting
* * **1** - disable deleting or editing
* * **2** - only editing
* * **3** - full access
*/
/**
* Returns information about all the forms that have been added to the document.
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetAllForms
* @returns {[]} - An array of forms
* @returns {ContentControl[]} - An array with all the forms from the document.
* @example
* window.Asc.plugin.executeMethod("GetAllForms");
*/
@ -58,12 +76,12 @@
return arrResult;
};
/**
* Returns information about all the forms that have been added to the document with specified Tag
* Returns information about all the forms that have been added to the document with specified tag.
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetFormsByTag
* @param {string} tag - Tag of the form
* @returns {[]} - An array of forms
* @param {string} tag - The form tag.
* @returns {ContentControl[]} - An array with all the forms from the document with the specified tag.
* @example
* window.Asc.plugin.executeMethod("GetFormsByTag");
*/
@ -85,12 +103,12 @@
return arrResult;
};
/**
* Set value for specified form
* Sets a value to the specified form.
* @memberof Api
* @typeofeditors ["CDE"]
* @alias SetFormValue
* @param {string} internalId - A unique internal identifier of the content control.
* @param {*} value - Depends on the type of a form
* @param {string} internalId - A unique internal identifier of the form.
* @param {string | boolean} value - Form value to be set. Its type depends on the form type.
* @example
* window.Asc.plugin.executeMethod("SetFormValue");
*/
@ -195,12 +213,12 @@
oLogicDocument.FinalizeAction();
};
/**
* Get form value
* Returns a value of the specified form.
* @memberof Api
* @typeofeditors ["CDE"]
* @alias GetFormValue
* @param {string} internalId - A unique internal identifier of the content control.
* @returns {null | string} Value of the form (null means the form is filled with a placeholder)
* @param {string} internalId - A unique internal identifier of the form.
* @returns {null | string | boolean} The form value in the string or boolean format depending on the form type. The null value means that the form is filled with a placeholder.
* @example
* window.Asc.plugin.executeMethod("GetFormValue");
*

View File

@ -2,13 +2,25 @@
"sdk": {
"min": [
"api.js",
"apiPlugins.js"
],
"common": [
"apiBuilder.js",
"oform/Main.js",
"oform/Field.js",
"oform/User.js"
"apiPlugins.js"
],
"common": [
"apiBuilder.js",
"oform/OForm.js",
"oform/Role.js",
"oform/xml/XmlPackage.js",
"oform/xml/XmlContext.js",
"oform/format/Document.js",
"oform/format/FieldGroup.js",
"oform/format/FieldMaster.js",
"oform/format/User.js",
"oform/format/UserMaster.js",
"oform/format/changes/DictionaryBase.js",
"oform/format/changes/DocumentChanges.js",
"oform/format/changes/FieldGroupChanges.js",
"oform/format/changes/FieldMasterChanges.js",
"oform/format/changes/UserChanges.js",
"oform/format/changes/UserMasterChanges.js"
]
}
}

View File

@ -1,416 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_FieldId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_Field] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormFieldMaster_SignRequest] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormField_Content] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_FormField_EncryptedData] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormField_FieldMaster] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_SignRequest_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Method] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_Value] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_EncryptedData_KeyInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_User] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_KeyInfo_Value] = CChangesObject;
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_FieldId] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_Field] = function(oClass, value) {oClass.Field = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormFieldMaster_SignRequest] = function(oClass, value) {oClass.SignRequest = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_Content] = function(oClass, value) {oClass.FieldContent = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormField_FieldMaster] = function(oClass, value) {oClass.FieldMaster = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Method] = function(oClass, value) {oClass.EncryptedMethod = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_Value] = function(oClass, value) {oClass.EncryptedValue = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_EncryptedData_KeyInfo] = function(oClass, value) {oClass.KeyInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_User] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_KeyInfo_Value] = function(oClass, value) {oClass.FieldId = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FormFieldMaster_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_SignRequest_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FormField_EncryptedData] = function (oClass) {return oClass.EndcriptedData;};
function CFieldMaster() {
CBaseFormatObject.call(this);
this.FieldId = null;
this.Users = [];
this.Field = null;
this.SignRequest = null;
}
InitClass(CFieldMaster, CBaseFormatObject, AscDFH.historyitem_type_FormFieldMaster);
CFieldMaster.prototype.setFieldId = function(sFieldId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormFieldMaster_FieldId, this.FieldId, sFieldId));
this.FieldId = sFieldId;
};
CFieldMaster.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormFieldMaster_User, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CFieldMaster.prototype.setField = function(oField) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_Field, this.Field, oField));
this.Field = oField;
if(oField) {
oField.setFieldMaster(this);
}
};
CFieldMaster.prototype.setSignRequest = function(oSignRequest) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormFieldMaster_SignRequest, this.SignRequest, oSignRequest));
this.SignRequest = oSignRequest;
};
CFieldMaster.prototype.readAttrXml = function(name, reader) {
switch (name) {
case "id": {
this.setFieldId(reader.GetValue());
break;
}
}
};
CFieldMaster.prototype.readChildXml = function (name, reader) {
let oThis = this;
switch (name) {
case "Users": {
let oUsersNode = new CT_XmlNode(function (reader, name){
if(name === "User") {
let oUserNode = new CT_XmlNode();
oUserNode.fromXml(reader);
let sId = oUserNode.attributes["id"];
let oRel = reader.rels.getRelationshipById(sId);
reader.context.addFieldMasterRelation(oThis, oRel.targetFullName)
}
return true;
});
oUsersNode.fromXml(reader);
break;
}
case "SignRequest": {
let oSignRequest = new CSignRequest();
oSignRequest.fromXml(reader);
this.setSignRequest(oSignRequest);
break;
}
}
};
CFieldMaster.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("FieldMaster");
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
writer.WriteXmlNullableAttributeString("id", this.FieldId);
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("Users");
writer.WriteXmlAttributesEnd();
let oContext = writer.context;
let oUserMasterPartMap = oContext.userMasterPartMap;
let oUsersIdMap = {};
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
let oUser = this.Users[nUser];
let oPart = oUserMasterPartMap[oUser.Id];
if(!oPart) {
oPart = writer.context.part.addPart(AscCommon.openXml.Types.userMaster);
let oUserMemory = new AscCommon.CMemory();
oUserMemory.context = writer.context;
oPart.part.setDataXml(oUser, oUserMemory);
oUserMasterPartMap[oUser.Id] = oPart;
}
let oNode = new CT_XmlNode();
let sRId = oContext.part.addRelationship(AscCommon.openXml.Types.userMaster.relationType, oPart.uri);
oNode.attributes["r:id"] = sRId
oUsersIdMap[oUser.Id] = sRId;
oNode.toXml(writer, "User");
}
writer.WriteXmlNodeEnd("Users");
if(this.SignRequest) {
this.SignRequest.toXml(writer, oUsersIdMap);
}
writer.WriteXmlNodeEnd("FieldMaster");
if(writer.context.fileType === Asc.c_oAscFileType.OFORM) {
if(this.Field) {
let oPart = writer.context.docPart.part.addPartWithoutRels(AscCommon.openXml.Types.field);
let oMemory = new AscCommon.CMemory();
oMemory.context = writer.context;
oPart.setDataXml(this.Field, oMemory);
oMemory.Seek(0);
oPart.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oContext.part.uri)
}
}
};
function CSignRequest() {
CBaseFormatObject.call(this);
this.Users = [];
}
InitClass(CSignRequest, CBaseFormatObject, AscDFH.historyitem_type_SignRequest);
CSignRequest.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_SignRequest_User, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CSignRequest.prototype.readChildXml = function (name, reader) {
CFieldMaster.prototype.readChildXml.call(this, name, reader);
};
CSignRequest.prototype.toXml = function (writer, oUsersIdMap) {
writer.WriteXmlNodeStart("SignRequest");
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("Users");
writer.WriteXmlAttributesEnd();
for(let nUser = 0; nUser < this.Users.length; ++nUser) {
let oUser = this.Users[nUser];
let oNode = new CT_XmlNode();
let sRId = oUsersIdMap[oUser.Id];
if(sRId) {
oNode.attributes["r:id"] = sRId
oUsersIdMap[oUser.Id] = sRId;
oNode.toXml(writer, "User");
}
}
writer.WriteXmlNodeEnd("Users");
writer.WriteXmlNodeEnd("SignRequest");
};
function CFieldContent() {
CParagraphContentWithParagraphLikeContent.call(this);
}
InitClass(CFieldContent, CParagraphContentWithParagraphLikeContent, 0);
CFieldContent.prototype.Add_ToContent = function(Pos, Item, UpdatePosition)
{
AscCommon.History.Add(new CChangesFormFieldAddItem(this, Pos, [Item]));
CParagraphContentWithParagraphLikeContent.prototype.Add_ToContent.apply(this, arguments);
};
CFieldContent.prototype.Remove_FromContent = function(Pos, Count, UpdatePosition)
{
let DeletedItems = this.Content.slice( Pos, Pos + Count );
AscCommon.History.Add(new CChangesFormFieldRemoveItem(this, Pos, DeletedItems));
CParagraphContentWithParagraphLikeContent.prototype.Remove_FromContent.apply(this, arguments);
};
CFieldContent.prototype.fromXml = function (reader) {
CParagraphContentWithParagraphLikeContent.prototype.fromXml.call(this, reader);
};
CFieldContent.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("w:sdtContent");
writer.WriteXmlAttributesEnd();
CParagraphContentWithParagraphLikeContent.prototype.toXml.call(this, writer);
writer.WriteXmlNodeEnd("w:sdtContent");
};
function CField() {
CBaseFormatObject.call(this);
this.EndcriptedData = [];
this.FieldContent = null;
}
InitClass(CField, CBaseFormatObject, AscDFH.historyitem_type_FormField);
CField.prototype.setFieldContent = function(oFieldContent) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormField_Content, this.FieldContent, oFieldContent));
this.FieldContent = oFieldContent;
};
CField.prototype.addEncryptedData = function(oEncryptedData) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FormField_EncryptedData, this.EndcriptedData.length, [oEncryptedData], true));
this.EndcriptedData.push(oEncryptedData);
};
CField.prototype.setFieldMaster = function(oFieldMaster) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_FormField_FieldMaster, this.FieldMaster, oFieldMaster));
this.FieldMaster = oFieldMaster;
};
CField.prototype.readChildXml = function (name, reader) {
switch (name) {
case "EncryptedData": {
let oEncryptedData = new CEncryptedData();
oEncryptedData.fromXml(reader);
this.addEncryptedData(oEncryptedData);
break;
}
case "Body": {
let oFieldContent = null;
let oNode = new CT_XmlNode(function (reader, name) {
if(name === "sdtContent") {
oFieldContent = new CFieldContent();
oFieldContent.fromXml(reader);
return oFieldContent;
}
return null;
});
oNode.fromXml(reader);
if(oFieldContent) {
this.setFieldContent(oFieldContent);
}
break;
}
}
};
CField.prototype.toXml = function(writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("Field");
writer.WriteXmlAttributesEnd();
if(this.FieldContent) {
writer.WriteXmlNodeStart("Body");
writer.WriteXmlString(AscCommonWord.g_sXmlDocumentNamespaces);
writer.WriteXmlAttributesEnd();
this.FieldContent.toXml(writer);
writer.WriteXmlNodeEnd("Body");
}
for(let nData = 0; nData < this.EndcriptedData.length; ++nData) {
this.EndcriptedData[nData].toXml(writer);
}
writer.WriteXmlNodeEnd("Field");
};
function CEncryptedData() {
CBaseFormatObject.call(this);
this.EncryptedMethod = null;
this.EncryptedValue = null;
this.KeyInfo = null;
}
InitClass(CEncryptedData, CBaseFormatObject, AscDFH.historyitem_type_EncryptedData);
CEncryptedData.prototype.setEncryptedMethod = function (sEncryptedMethod) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Method, this.EncryptedMethod, sEncryptedMethod));
this.EncryptedMethod = sEncryptedMethod;
};
CEncryptedData.prototype.setEncryptedValue = function (sEncryptedValue) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_EncryptedData_Value, this.EncryptedValue, sEncryptedValue));
this.EncryptedValue = sEncryptedValue;
};
CEncryptedData.prototype.setKeyInfo = function (oKeyInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_EncryptedData_KeyInfo, this.KeyInfo, oKeyInfo));
this.KeyInfo = oKeyInfo;
};
CEncryptedData.prototype.readChildXml = function (name, reader) {
switch (name) {
case "EncryptedMethod": {
let oMethod = new CT_XmlNode();
oMethod.fromXml(reader);
let sAlgorithm = oMethod.attributes["Algorithm"];
if(sAlgorithm) {
this.setEncryptedMethod(sAlgorithm)
}
break;
}
case "EncryptedValue": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setEncryptedValue(oNode.text);
break;
}
case "KeyInfo": {
let oKeyInfo = new CKeyInfo();
oKeyInfo.fromXml(reader);
this.setKeyInfo(oKeyInfo)
break;
}
}
};
CEncryptedData.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("EncryptedData");
writer.WriteXmlAttributesEnd();
if(this.EncryptedMethod) {
let oMethod = new CT_XmlNode();
oMethod.attributes["Algorithm"] = this.EncryptedMethod;
oMethod.toXml(writer, "EncryptedMethod");
}
if(this.EncryptedValue) {
let oValue = new CT_XmlNode();
oValue.text = this.EncryptedValue;
oValue.toXml(writer, "EncryptedValue");
}
if(this.KeyInfo) {
this.KeyInfo.toXml(writer);
}
writer.WriteXmlNodeEnd("EncryptedData");
};
function CKeyInfo() {
CBaseFormatObject.call(this);
this.UserId = null;
this.Value = null;
}
InitClass(CKeyInfo, CBaseFormatObject, AscDFH.historyitem_type_KeyInfo);
CKeyInfo.prototype.setUserId = function (sUserId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_KeyInfo_User, this.UserId, sUserId));
this.UserId = sUserId;
};
CKeyInfo.prototype.setValue = function (sValue) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_KeyInfo_Value, this.Value, sValue));
this.Value = sValue;
};
CKeyInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "User": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setUserId(oNode.attributes["id"]);
break;
}
case "Value": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setValue(oNode.text);
break;
}
}
};
CKeyInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("KeyInfo");
writer.WriteXmlAttributesEnd();
if(this.UserId) {
let oNode = new CT_XmlNode();
oNode.attributes["id"] = this.UserId;
oNode.toXml(writer, "User");
}
if(this.Value) {
let oValue = new CT_XmlNode();
oValue.text = this.Value;
oValue.toXml(writer, "Value");
}
writer.WriteXmlNodeEnd("KeyInfo");
};
AscWord.CFieldContent = CFieldContent;
AscWord.CFieldMaster = CFieldMaster;
AscWord.CField = CField;
AscWord.CEncryptedData = CEncryptedData;
AscWord.CKeyInfo = CKeyInfo;
AscWord.CSignRequest = CSignRequest;
})(window);

View File

@ -1,316 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
const CChangesLong = AscDFH.CChangesDrawingsLong;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Author] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Date] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Description] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Type] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_Application] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_DocumentId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_FieldsGroups] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_MainDocument_User] = CChangesContent;
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Format] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FormDate_Value] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Id] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Weight] = CChangesLong;
AscDFH.changesFactory[AscDFH.historyitem_FieldsGroup_Field] = CChangesContent;
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Author] = function (oClass, value) {oClass.Author = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Date] = function (oClass, value) {oClass.Date = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Description] = function (oClass, value) {oClass.Description = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Type] = function (oClass, value) {oClass.Type = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_Application] = function (oClass, value) {oClass.Application = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_MainDocument_DocumentId] = function (oClass, value) {oClass.DocumentId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Format] = function (oClass, value) {oClass.Format = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FormDate_Value] = function (oClass, value) {oClass.Value = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Id] = function (oClass, value) {oClass.GroupId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_FieldsGroup_Weight] = function (oClass, value) {oClass.Weight = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_FieldsGroups] = function (oClass) {return oClass.FieldsGroups;};
AscDFH.drawingContentChanges[AscDFH.historyitem_MainDocument_User] = function (oClass) {return oClass.Users;};
AscDFH.drawingContentChanges[AscDFH.historyitem_FieldsGroup_Field] = function (oClass) {return oClass.Fields;};
function CMainDocument() {
CBaseFormatObject.call(this);
this.Author = null;
this.Date = null;
this.Description = null;
this.Type = null;
this.Application = null;
this.DocumentId = null;
this.FieldsGroups = [];
this.Users = [];
}
InitClass(CMainDocument, CBaseFormatObject, AscDFH.historyitem_type_MainDocument);
CMainDocument.prototype.setAuthor = function (sAuthor) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Author, this.Author, sAuthor));
this.Author = sAuthor;
};
CMainDocument.prototype.setDate = function (oDate) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_MainDocument_Date, this.Date, oDate));
this.Date = oDate;
};
CMainDocument.prototype.setDescription = function (sDescription) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Description, this.Description, sDescription));
this.Description = sDescription;
};
CMainDocument.prototype.setType = function (sType) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Type, this.Type, sType));
this.Type = sType;
};
CMainDocument.prototype.setApplication = function (sApplication) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_Application, this.Application, sApplication));
this.Application = sApplication;
};
CMainDocument.prototype.setDocumentId = function (sDocumentId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_MainDocument_DocumentId, this.DocumentId, sDocumentId));
this.DocumentId = sDocumentId;
};
CMainDocument.prototype.addFieldsGroups = function(oFieldsGroup) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_FieldsGroups, this.FieldsGroups.length, [oFieldsGroup], true));
this.FieldsGroups.push(oFieldsGroup);
};
CMainDocument.prototype.addUser = function(oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_MainDocument_User, this.FieldsGroups.length, [oUser], true));
this.Users.push(oUser);
};
CMainDocument.prototype.readChildXml = function (name, reader) {
switch (name) {
case "Author": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
let sAuthor = oNode.attributes["id"];
if(sAuthor) {
this.setAuthor(sAuthor);
}
break;
}
case "Date": {
let oDate = new CFormDate();
oDate.fromXml(reader);
this.setDate(oDate);
break;
}
case "Description": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setDescription(oNode.text);
break;
}
case "Type": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setType(oNode.text);
break;
}
case "Application": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setApplication(oNode.text);
break;
}
case "Id": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setDocumentId(oNode.text);
break;
}
case "FieldsGroup": {
let oFieldsGroup = new CFieldsGroup();
oFieldsGroup.fromXml(reader);
this.addFieldsGroups(oFieldsGroup);
break;
}
}
};
CMainDocument.prototype.toXml = function(writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("Document");
writer.WriteXmlAttributeString("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
writer.WriteXmlAttributesEnd();
if(this.Author) {
let oNode = new CT_XmlNode();
oNode.attributes["id"] = this.Author;
oNode.toXml(writer, "Author");
}
if(this.Date) {
this.Date.toXml(writer);
}
let oDescriptionNode = new CT_XmlNode();
oDescriptionNode.text = this.Description;
oDescriptionNode.toXml(writer, "Description");
let oTypeNode = new CT_XmlNode();
oTypeNode.text = this.Type;
oTypeNode.toXml(writer, "Type");
let oAppNode = new CT_XmlNode();
oAppNode.text = this.Application;
oAppNode.toXml(writer, "Application");
let oIdNode = new CT_XmlNode();
oIdNode.text = this.DocumentId;
oIdNode.toXml(writer, "Id");
for(let nFG = 0; nFG < this.FieldsGroups.length; ++nFG) {
this.FieldsGroups[nFG].toXml(writer);
}
writer.WriteXmlNodeEnd("Document");
};
function CFormDate() {
CBaseFormatObject.call(this);
this.Format = null;
this.Value = null;
}
InitClass(CFormDate, CBaseFormatObject, AscDFH.historyitem_type_FormDate);
CFormDate.prototype.setFormat = function(sFormat) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Format, this.Format, sFormat));
this.Format = sFormat;
};
CFormDate.prototype.setValue = function(sValue) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FormDate_Value, this.Value, sValue));
this.Value = sValue;
};
CFormDate.prototype.readChildXml = function (name, reader) {
switch (name) {
case "Format": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setFormat(oNode.text);
break;
}
case "Value": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setValue(oNode.text);
break;
}
}
};
CFormDate.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("Date");
writer.WriteXmlAttributesEnd();
let oFormatNode = new CT_XmlNode();
oFormatNode.text = this.Format;
oFormatNode.toXml(writer, "Format");
let oValueNode = new CT_XmlNode();
oValueNode.text = this.Value;
oValueNode.toXml(writer, "Value");
writer.WriteXmlNodeEnd("Date");
};
function CFieldsGroup() {
CBaseFormatObject.call(this);
this.GroupId = null;
this.Weight = null;
this.Fields = [];
}
InitClass(CFieldsGroup, CBaseFormatObject, AscDFH.historyitem_type_FieldsGroup);
CFieldsGroup.prototype.setGroupId = function (sGroupId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_FieldsGroup_Id, this.GroupId, sGroupId));
this.GroupId = sGroupId;
};
CFieldsGroup.prototype.setWeight = function (nWeight) {
AscCommon.History.Add(new CChangesLong(this, AscDFH.historyitem_FieldsGroup_Weight, this.Weight, nWeight));
this.Weight = nWeight;
};
CFieldsGroup.prototype.addField = function (oField) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_FieldsGroup_Field, this.Fields.length, [oField], true));
this.Fields.push(oField);
};
CFieldsGroup.prototype.readAttrXml = function(name, reader) {
switch (name) {
case "id": {
this.setGroupId(reader.GetValue());
break;
}
case "weight": {
this.setWeight(reader.GetValueInt());
break;
}
}
};
CFieldsGroup.prototype.readChildXml = function(name, reader) {
switch (name) {
case "Field": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
let sId = oNode.attributes["id"];
let oRel = reader.rels.getRelationshipById(sId);
reader.context.addFieldGroupRelation(this, oRel.targetFullName);
break;
}
}
};
CFieldsGroup.prototype.toXml = function (writer) {
writer.WriteXmlNodeStart("FieldsGroup");
writer.WriteXmlNullableAttributeString("id", this.GroupId);
writer.WriteXmlNullableAttributeInt("weight", this.Weight);
writer.WriteXmlAttributesEnd();
let oContext = writer.context;
let oFldMasterPartMap = oContext.fieldMastersPartMap;
for(let nFldMaster = 0; nFldMaster < this.Fields.length; ++nFldMaster) {
let oFieldMaster = this.Fields[nFldMaster];
let oPart = oFldMasterPartMap[oFieldMaster.Id];
if(oPart) {
let oNode = new CT_XmlNode();
oNode.attributes["r:id"] = oContext.part.addRelationship(AscCommon.openXml.Types.fieldMaster.relationType, oPart.part.uri);
oNode.toXml(writer, "Field");
}
}
writer.WriteXmlNodeEnd("FieldsGroup");
};
AscWord.CMainDocument = CMainDocument;
AscWord.CFieldsGroup = CFieldsGroup;
AscWord.CFormDate = CFormDate;
})(window);

598
oform/OForm.js Normal file
View File

@ -0,0 +1,598 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* Основной класс для работы с форматом oform
* @param document {AscWord.CDocument}
* @constructor
*/
function OForm(document)
{
this.Format = new AscOForm.CDocument(this);
this.Document = document;
this.CurrentUser = null;
// Сейчас у нас роль - это ровно один userMaster и ровно одна группа полей
this.Roles = [];
this.NeedUpdateRoles = true;
this.NeedRedraw = true;
}
/**
* @returns {AscWord.CDocument}
*/
OForm.prototype.getDocument = function()
{
return this.Document;
};
/**
* @returns {AscOForm.CDocument}
*/
OForm.prototype.getFormat = function()
{
return this.Format;
};
OForm.prototype.fromZip = function(zip, opt_sdtPrWithFieldPath)
{
let xmlPkg = new AscOForm.XmlPackage(zip);
xmlPkg.setContext(new AscOForm.XmlReaderContext(xmlPkg));
this.Format.fromPkg(xmlPkg, opt_sdtPrWithFieldPath);
};
OForm.prototype.toZip = function(zip, opt_fieldMastersPartMap)
{
let writer = new AscCommon.CMemory();
let xmlPkg = new AscOForm.XmlPackage(zip, writer);
xmlPkg.setContext(new AscOForm.XmlWriterContext(xmlPkg));
writer.context = xmlPkg.getContext();
this.Format.toPkg(xmlPkg, opt_fieldMastersPartMap);
// Наш XmlPackage работает в общей папке, а нам нужно запихнуть в zip подпапку oform
zip.getPaths().forEach(function(path)
{
let fileData = zip.getFile(path);
if (path.startsWith("oform/"))
zip.addFile(path.substr(6), fileData);
zip.removeFile(path);
});
};
OForm.prototype.setCurrentRole = function(roleName)
{
let role = this.getRole(roleName);
if (!role)
return;
this.CurrentUser = role.getUserMaster();
};
OForm.prototype.clearCurrentRole = function()
{
this.CurrentUser = null;
};
OForm.prototype.getCurrentUserMaster = function()
{
return this.CurrentUser;
};
OForm.prototype.getAllRoles = function()
{
this.updateRoles();
return this.Roles;
};
/**
* @param roleSettings {AscOForm.CRoleSettings}
*/
OForm.prototype.addRole = function(roleSettings)
{
let name = "";
if ("string" === typeof roleSettings)
{
name = roleSettings;
roleSettings = new AscOForm.CRoleSettings();
roleSettings.setName(name);
}
if (roleSettings instanceof AscOForm.CRoleSettings)
name = roleSettings.getName();
else
return false;
if (this.haveRole(name))
return false;
if (!this.startAction(AscDFH.historydescription_OForm_AddRole))
return false;
let userMaster = new AscOForm.CUserMaster(true);
userMaster.setRole(name);
let color = roleSettings.getColor();
if (color)
userMaster.setColor(color.r, color.g, color.b);
let fieldGroup = new AscOForm.CFieldGroup();
fieldGroup.setWeight(this.Format.getMaxWeight() + 1);
fieldGroup.addUser(userMaster);
this.Format.addFieldGroup(fieldGroup);
this.Format.addUserMaster(userMaster);
this.endAction();
return true;
};
OForm.prototype.removeRole = function(name, delegateName)
{
this.updateRoles();
let roleIndex = this.getRoleIndex(name);
if (-1 === roleIndex)
return false;
let userMaster = this.Roles[roleIndex].getUserMaster();
let fieldGroup = this.Roles[roleIndex].getFieldGroup();
let fields = fieldGroup.getAllFields();
let delegateIndex = this.getRoleIndex(delegateName);
// На самом деле можно убрать эту проверку, но тогда мы просто удалим группу по умолчнию и заново её добавим
if (this.Roles.length <= 1
&& this.Roles[roleIndex].getUserMaster() === this.Format.getDefaultUserMaster()
&& -1 === delegateIndex)
{
let defaultUserMaster = this.Format.getDefaultUserMaster();
if (!defaultUserMaster.isDefaultUserProps())
{
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
return false;
defaultUserMaster.initDefaultUser();
this.NeedRedraw = true;
this.endAction();
return true;
}
return false;
}
if (!this.startAction(AscDFH.historydescription_OForm_RemoveRole))
return false;
fieldGroup.clear();
this.Format.removeFieldGroup(fieldGroup);
this.Format.removeUserMaster(userMaster);
if (fields.length > 0)
{
let delegateUserMaster, delegateFieldGroup;
if (-1 === delegateIndex || delegateIndex === roleIndex)
{
let defaultRole = this.getDefaultRole();
if (defaultRole)
{
delegateUserMaster = defaultRole.getUserMaster();
delegateFieldGroup = defaultRole.getFieldGroup();
}
else
{
let defaultGroup = new AscOForm.CFieldGroup();
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
this.Format.addFieldGroup(defaultGroup);
defaultGroup.addUser(this.Format.getDefaultUserMaster());
delegateUserMaster = this.Format.getDefaultUserMaster();
delegateFieldGroup = defaultGroup;
}
}
else
{
delegateUserMaster = this.Roles[delegateIndex].getUserMaster();
delegateFieldGroup = this.Roles[delegateIndex].getFieldGroup();
}
for (let index = 0, count = fields.length; index < count; ++index)
{
let fieldMaster = fields[index];
fieldMaster.removeUser(userMaster);
fieldMaster.addUser(delegateUserMaster);
}
delegateFieldGroup.addUser(delegateUserMaster);
this.Format.addFieldGroup(delegateFieldGroup);
}
this.NeedRedraw = true;
this.endAction();
return true;
};
OForm.prototype.editRole = function(name, roleSettings)
{
let role = this.getRole(name);
if (!role)
return false;
let newName = roleSettings.getName();
if (undefined !== newName
&& null !== newName
&& name !== newName
&& this.haveRole(newName))
return false;
if (!this.startAction(AscDFH.historyitem_OForm_EditRole))
return false;
let userMaster = role.getUserMaster();
if (undefined !== roleSettings.getName())
userMaster.setRole(roleSettings.getName());
let color = roleSettings.getColor();
if (null === color)
userMaster.setColor(color);
else if (undefined !== color)
userMaster.setColor(color.r, color.g, color.b);
this.endAction();
return true;
};
OForm.prototype.moveUpRole = function(name)
{
let role = this.getRole(name);
if (!role)
return false;
let weight = role.getWeight();
let sameWeightRoles = this.getRolesByWeight(weight);
if (weight === this.Format.getMinWeight() && sameWeightRoles.length <= 1)
return false;
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
return false;
if (sameWeightRoles.length > 1)
{
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (role !== curRole && curWeight >= weight)
{
curRole.setWeight(curWeight + 1);
}
}
}
let prevWeight = -1;
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight < weight)
{
if (-1 === prevWeight || prevWeight < curWeight)
prevWeight = curWeight;
}
}
if (-1 !== prevWeight)
{
let prevRoles = this.getRolesByWeight(prevWeight);
role.setWeight(prevWeight);
for (let index = 0, count = prevRoles.length; index < count; ++index)
{
prevRoles[index].setWeight(weight);
}
}
this.endAction();
return true;
};
OForm.prototype.moveDownRole = function(name)
{
let role = this.getRole(name);
if (!role)
return false;
let weight = role.getWeight();
let sameWeightRoles = this.getRolesByWeight(weight);
if (weight === this.Format.getMaxWeight() && sameWeightRoles.length <= 1)
return false;
if (!this.startAction(AscDFH.historydescription_OForm_ChangeRoleOrder))
return false;
if (sameWeightRoles.length > 1)
{
weight++;
if (this.getRolesByWeight(weight + 1).length)
{
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight > weight)
{
curRole.setWeight(curWeight + 1);
}
}
}
}
let nextWeight = -1;
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
let curRole = this.Roles[index];
let curWeight = curRole.getWeight();
if (curWeight > weight)
{
if (-1 === nextWeight || nextWeight > curWeight)
nextWeight = curWeight;
}
}
if (-1 !== nextWeight)
{
let nextRoles = this.getRolesByWeight(nextWeight);
role.setWeight(nextWeight);
for (let index = 0, count = nextRoles.length; index < count; ++index)
{
nextRoles[index].setWeight(weight);
}
}
else if (weight !== role.getWeight())
{
role.setWeight(weight);
}
this.endAction();
return true;
};
OForm.prototype.getRole = function(name)
{
let roleIndex = this.getRoleIndex(name);
if (-1 === roleIndex)
return null;
return this.Roles[roleIndex];
};
OForm.prototype.getRoleIndex = function(name)
{
this.updateRoles();
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (name === this.Roles[index].getRole())
return index;
}
return -1;
};
OForm.prototype.getRolesByWeight = function(weight)
{
this.updateRoles();
let roles = [];
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (this.Roles[index].getWeight() === weight)
roles.push(this.Roles[index]);
}
return roles;
};
OForm.prototype.haveRole = function(name)
{
return !!(this.getRole(name));
};
OForm.prototype.getRoleSettings = function(name)
{
let role = this.getRole(name);
if (!role)
return null;
return role.getSettings();
};
OForm.prototype.getDefaultRole = function()
{
this.updateRoles();
let defaultUser = this.Format.getDefaultUserMaster();
for (let index = 0, count = this.Roles.length; index < count; ++index)
{
if (defaultUser === this.Roles[index].getUserMaster())
return this.Roles[index];
}
return null;
};
OForm.prototype.onChangeRoles = function()
{
this.NeedUpdateRoles = true;
};
OForm.prototype.onChangeRoleColor = function()
{
this.NeedRedraw = true;
};
OForm.prototype.checkRedraw = function()
{
if (!this.NeedRedraw)
return;
this.NeedRedraw = false;
this.Document.Redraw();
};
OForm.prototype.updateRoles = function()
{
if (!this.NeedUpdateRoles)
return;
this.NeedUpdateRoles = false;
this.Roles = [];
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
{
let fieldGroup = this.Format.getFieldGroup(fgIndex);
let user = fieldGroup.getFirstUser();
if (!user)
{
// TODO: Разобраться с такими группами
}
let haveRole = false;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
if (this.Roles[roleIndex].getUserMaster() === user)
{
haveRole = true;
break;
}
}
if (haveRole)
{
// TODO: Разобраться с такими ситуациями
}
let weight = fieldGroup.getWeight();
let newRoleIndex = this.Roles.length;
for (let roleIndex = 0, roleCount = this.Roles.length; roleIndex < roleCount; ++roleIndex)
{
let curWeight = this.Roles[roleIndex].getWeight();
if (weight < curWeight || (weight === curWeight && user.compare(this.Roles[roleIndex].getUserMaster()) < 0))
{
newRoleIndex = roleIndex;
break;
}
}
let newRole = new AscOForm.CRole(fieldGroup, user);
if (newRoleIndex === this.Roles.length)
this.Roles.push(newRole);
else
this.Roles.splice(newRoleIndex, 0, newRole);
}
this.onUpdateRoles();
};
OForm.prototype.correctFieldGroups = function()
{
// Проверяем есть ли хоть одна группа с заданной ролью (где указан userMaster)
for (let fgIndex = 0, fgCount = this.Format.getFieldGroupsCount(); fgIndex < fgCount; ++fgIndex)
{
let fieldGroup = this.Format.getFieldGroup(fgIndex);
let user = fieldGroup.getFirstUser();
if (!user)
continue;
return;
}
// Нельзя, чтобы групп не было вообще
let defaultGroup = new AscOForm.CFieldGroup();
defaultGroup.setWeight(this.Format.getMaxWeight() + 1);
this.Format.addFieldGroup(defaultGroup);
defaultGroup.addUser(this.Format.getDefaultUserMaster());
};
OForm.prototype.onEndLoad = function()
{
this.NeedUpdateRoles = true;
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups();
this.updateRoles();
};
OForm.prototype.onUpdateRoles = function()
{
let logicDocument = this.getDocument();
let api;
if (!logicDocument || !(api = logicDocument.GetApi()))
return;
api.sendEvent("asc_onUpdateOFormRoles", this.Roles);
};
OForm.prototype.onEndAction = function()
{
this.Format.removeUnusedFieldMasters();
this.Format.correctFieldMasters(this.getDocument());
this.correctFieldGroups();
this.updateRoles();
this.checkRedraw();
};
OForm.prototype.onUndoRedo = function()
{
this.updateRoles();
this.checkRedraw();
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OForm.prototype.startAction = function(description)
{
let logicDocument = this.getDocument();
if (!logicDocument)
return false;
if (logicDocument.IsSelectionLocked(AscCommon.changestype_Document_Settings, null, false, false, null))
return false;
logicDocument.StartAction(description);
return true;
};
OForm.prototype.endAction = function()
{
let logicDocument = this.getDocument();
if (!logicDocument)
return;
this.onEndAction();
logicDocument.UpdateInterface();
logicDocument.FinalizeAction();
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.OForm = OForm;
//---------------------------------------------interface export-----------------------------------------------------
OForm.prototype['asc_getAllRoles'] = OForm.prototype.getAllRoles;
OForm.prototype['asc_addRole'] = OForm.prototype.addRole;
OForm.prototype['asc_removeRole'] = OForm.prototype.removeRole;
OForm.prototype['asc_editRole'] = OForm.prototype.editRole;
OForm.prototype['asc_moveUpRole'] = OForm.prototype.moveUpRole;
OForm.prototype['asc_moveDownRole'] = OForm.prototype.moveDownRole;
OForm.prototype['asc_haveRole'] = OForm.prototype.haveRole;
OForm.prototype['asc_getRole'] = OForm.prototype.getRoleSettings;
})(window);

149
oform/Role.js Normal file
View File

@ -0,0 +1,149 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* Класс представляющий роль при заполнении формы. В данный момент роль - это ровно один userMaster
* и группа полей связанные с данным userMaster
* @param fieldGroup
* @param userMaster
* @constructor
*/
function CRole(fieldGroup, userMaster)
{
this.FieldGroup = fieldGroup;
this.UserMaster = userMaster;
}
CRole.prototype.getSettings = function()
{
let r = new CRoleSettings();
if (this.UserMaster)
{
r.setName(this.UserMaster.getRole());
r.setColor(this.UserMaster.getColor());
}
if (this.FieldGroup)
r.setFieldCount(this.FieldGroup.getAllFields().length)
return r;
};
CRole.prototype.getRole = function()
{
return this.UserMaster.getRole();
};
CRole.prototype.getUserMaster = function()
{
return this.UserMaster;
};
CRole.prototype.getWeight = function()
{
return this.FieldGroup.getWeight();
};
CRole.prototype.setWeight = function(weight)
{
if (this.FieldGroup)
this.FieldGroup.setWeight(weight);
};
CRole.prototype.getFieldGroup = function()
{
return this.FieldGroup;
};
/**
* Класс для задания настроек роли из интерфейса
* @constructor
*/
function CRoleSettings()
{
this.Name = "";
this.Color = null;
this.FieldCount = 0;
}
CRoleSettings.prototype.getName = function()
{
return this.Name;
};
CRoleSettings.prototype.setName = function(name)
{
this.Name = name;
};
CRoleSettings.prototype.setColor = function(color)
{
this.Color = color ? color.Copy() : null;
};
CRoleSettings.prototype.getColor = function()
{
return this.Color;
};
CRoleSettings.prototype.setAscColor = function(ascColor)
{
if (undefined === ascColor || null === ascColor)
this.Color = null;
else
this.Color = new AscWord.CDocumentColor(ascColor.asc_getR(), ascColor.asc_getG(), ascColor.asc_getB());
}
CRoleSettings.prototype.getAscColor = function()
{
if (!this.Color)
return null;
return new Asc.asc_CColor(this.Color.r, this.Color.g, this.Color.b);
};
CRoleSettings.prototype.haveColor = function()
{
return (!!this.Color);
};
CRoleSettings.prototype.setFieldCount = function(count)
{
this.FieldCount = count;
};
CRoleSettings.prototype.getFieldCount = function()
{
return this.FieldCount;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CRole = CRole;
AscOForm.CRoleSettings = CRoleSettings;
//---------------------------------------------interface export-----------------------------------------------------
CRole.prototype['asc_getSettings'] = CRole.prototype.getSettings;
window['AscCommon']["CRoleSettings"] = CRoleSettings;
CRoleSettings.prototype["asc_getName"] = CRoleSettings.prototype.getName;
CRoleSettings.prototype["asc_putName"] = CRoleSettings.prototype.setName;
CRoleSettings.prototype["asc_getColor"] = CRoleSettings.prototype.getAscColor;
CRoleSettings.prototype["asc_putColor"] = CRoleSettings.prototype.setAscColor;
CRoleSettings.prototype["asc_getFieldCount"] = CRoleSettings.prototype.getFieldCount;
})(window);

View File

@ -1,306 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined) {
const CBaseFormatObject = AscFormat.CBaseFormatObject;
const InitClass = AscFormat.InitClass;
const CChangesString = AscDFH.CChangesDrawingsString;
const CChangesObject = AscDFH.CChangesDrawingsObject;
const CChangesContent = AscDFH.CChangesDrawingsContent;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUserId] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterSignInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterCipherInfo] = CChangesObject;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterRole] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserEmail] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserTelephone] = CChangesString;
AscDFH.changesFactory[AscDFH.historyitem_UserMasterUser] = CChangesContent;
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterUserId] = function(oClass, value) {oClass.UserId = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterSignInfo] = function(oClass, value) {oClass.SignInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterCipherInfo] = function(oClass, value) {oClass.CipherInfo = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserMasterRole] = function(oClass, value) {oClass.Role = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserEmail] = function(oClass, value) {oClass.Email = value;};
AscDFH.drawingsChangesMap[AscDFH.historyitem_UserTelephone] = function(oClass, value) {oClass.Telephone = value;};
AscDFH.drawingContentChanges[AscDFH.historyitem_UserMasterUser] = function(oClass) {return oClass.Users;};
function CUserMaster() {
CBaseFormatObject.call(this);
this.UserId = null;
this.SignInfo = null;
this.CipherInfo = null;
this.Role = null;
this.Users = [];
}
InitClass(CUserMaster, CBaseFormatObject, AscDFH.historyitem_type_UserMaster);
CUserMaster.prototype.setUserId = function (sUserId) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterUserId, this.UserId, sUserId));
this.UserId = sUserId;
};
CUserMaster.prototype.setSignInfo = function (oSignInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterSignInfo, this.SignInfo, oSignInfo));
this.SignInfo = oSignInfo;
};
CUserMaster.prototype.setCipherInfo = function (oCipherInfo) {
AscCommon.History.Add(new CChangesObject(this, AscDFH.historyitem_UserMasterCipherInfo, this.CipherInfo, oCipherInfo));
this.CipherInfo = oCipherInfo;
};
CUserMaster.prototype.setRole = function (sRole) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserMasterRole, this.Role, sRole));
this.Role = sRole;
};
CUserMaster.prototype.addUser = function (oUser) {
AscCommon.History.Add(new CChangesContent(this, AscDFH.historyitem_UserMasterUser, this.Users.length, [oUser], true));
this.Users.push(oUser);
};
CUserMaster.prototype.readChildXml = function (name, reader) {
let bRead = false;
switch (name) {
case "Id": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setUserId(oNode.text);
bRead = true;
break;
}
case "SignInfo": {
let oSignInfo = new CSignInfo();
oSignInfo.fromXml(reader);
this.setSignInfo(oSignInfo);
bRead = true;
break;
}
case "CipherInfo": {
let oCipherInfo = new CCipherInfo();
oCipherInfo.fromXml(reader);
this.setCipherInfo(oCipherInfo);
bRead = true;
break;
}
case "Role": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setRole(oNode.text);
bRead = true;
break;
}
}
return bRead;
};
CUserMaster.prototype.writeChildren = function(writer) {
let oIdNode = new CT_XmlNode();
oIdNode.text = this.UserId;
oIdNode.toXml(writer, "Id");
if(this.SignInfo) {
this.SignInfo.toXml(writer);
}
if(this.CipherInfo) {
this.CipherInfo.toXml(writer);
}
let oRoleNode = new CT_XmlNode();
oRoleNode.text = this.Role;
oRoleNode.toXml(writer, "Role");
}
CUserMaster.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("UserMaster");
writer.WriteXmlAttributesEnd();
this.writeChildren(writer);
writer.WriteXmlNodeEnd("UserMaster");
};
function CUser() {
CUserMaster.call(this);
this.Email = null;
this.Telephone = null;
}
InitClass(CUser, CUserMaster, AscDFH.historyitem_type_User);
CUser.prototype.setEmail = function (sEmail) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserEmail, this.Email, sEmail));
this.Email = sEmail;
};
CUser.prototype.setTelephone = function (sTelephone) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_UserTelephone, this.Telephone, sTelephone));
this.Telephone = sTelephone;
};
CUser.prototype.readChildXml = function (name, reader) {
if(CUserMaster.prototype.readChildXml.call(this, name, reader)) {
return true;
}
let bRead = false;
switch (name) {
case "Email": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setEmail(oNode.text);
bRead = true;
break;
}
case "Telephone": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setTelephone(oNode.text);
bRead = true;
break;
}
}
return bRead;
};
CUser.prototype.toXml = function (writer) {
writer.WriteXmlString(AscCommonWord.g_sXmlHeader);
writer.WriteXmlNodeStart("User");
writer.WriteXmlAttributesEnd();
let oEmailNode = new CT_XmlNode();
oEmailNode.text = this.Email;
oEmailNode.toXml(writer, "Email");
let oTelephoneNode = new CT_XmlNode();
oTelephoneNode.text = this.Telephone;
oTelephoneNode.toXml(writer, "Telephone");
this.writeChildren(writer);
writer.WriteXmlNodeEnd("User");
};
function CSignInfo() {
CBaseFormatObject.call(this);
this.PublicKey = null;
this.X509 = null;
this.ImageValid = null;
this.ImageInvalid = null;
}
InitClass(CSignInfo, CBaseFormatObject, AscDFH.historyitem_type_SignInfo);
CSignInfo.prototype.setPublicKey = function (sPublicKey) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_PublicKey, this.PublicKey, sPublicKey));
this.PublicKey = sPublicKey;
};
CSignInfo.prototype.setX509 = function (sX509) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_X509, this.X509, sX509));
this.X509 = sX509;
};
CSignInfo.prototype.setImageValid = function (sImageValid) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageValid, this.ImageValid, sImageValid));
this.ImageValid = sImageValid;
};
CSignInfo.prototype.setImageInvalid = function (sImageInvalid) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_SignInfo_ImageInvalid, this.ImageInvalid, sImageInvalid));
this.ImageInvalid = sImageInvalid;
};
CSignInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "PublicKey": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setPublicKey(oNode.text);
break;
}
case "X509": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setX509(oNode.text);
break;
}
case "ImageValid": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setImageValid(oNode.text);
break;
}
case "ImageInvalid": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setImageInvalid(oNode.text);
break;
}
}
};
CSignInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("SignInfo");
writer.WriteXmlAttributesEnd();
let oPublicKeyNode = new CT_XmlNode();
oPublicKeyNode.text = this.PublicKey;
oPublicKeyNode.toXml(writer, "PublicKey");
let oX509Node = new CT_XmlNode();
oX509Node.text = this.X509;
oX509Node.toXml(writer, "X509");
let oImageValidNode = new CT_XmlNode();
oImageValidNode.text = this.ImageValid;
oImageValidNode.toXml(writer, "ImageValid");
let oImageInvalidNode = new CT_XmlNode();
oImageInvalidNode.text = this.ImageInvalid;
oImageInvalidNode.toXml(writer, "ImageInvalid");
writer.WriteXmlNodeEnd("SignInfo");
};
function CCipherInfo() {
CBaseFormatObject.call(this);
this.PublicKey = null;
}
InitClass(CCipherInfo, CBaseFormatObject, AscDFH.historyitem_type_CipherInfo);
CCipherInfo.prototype.setPublicKey = function (sPublicKey) {
AscCommon.History.Add(new CChangesString(this, AscDFH.historyitem_CipherInfo_PublicKey, this.PublicKey, sPublicKey));
this.PublicKey = sPublicKey;
};
CCipherInfo.prototype.readChildXml = function (name, reader) {
switch (name) {
case "PublicKey": {
let oNode = new CT_XmlNode();
oNode.fromXml(reader);
this.setPublicKey(oNode.text);
break;
}
}
};
CCipherInfo.prototype.toXml = function(writer) {
writer.WriteXmlNodeStart("CipherInfo");
writer.WriteXmlAttributesEnd();
let oPublicKeyNode = new CT_XmlNode();
oPublicKeyNode.text = this.PublicKey;
oPublicKeyNode.toXml(writer, "PublicKey");
writer.WriteXmlNodeEnd("CipherInfo");
};
AscWord.CUserMaster = CUserMaster;
AscWord.CUser = CUser;
AscWord.CSignInfo = CSignInfo;
AscWord.CCipherInfo = CCipherInfo;
})(window);

624
oform/format/Document.js Normal file
View File

@ -0,0 +1,624 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* Основной класс для работы с форматом oform
* @param oform {AscOForm.OForm}
* @constructor
*/
function CDocument(oform)
{
AscFormat.CBaseFormatObject.call(this);
this.OForm = oform;
this.DefaultUser = new AscOForm.CUserMaster();
this.DefaultUser.initDefaultUser();
this.DefaultUser.setParent(this);
// Форматная часть
this.Author = null;
this.Date = null;
this.Description = null;
this.Type = null;
this.Application = null;
this.DocumentId = null;
this.FieldGroups = [];
// Массивы всех имеющихся пользователей и полей
this.Users = [];
this.UserMasters = [];
this.FieldMasters = [];
}
AscFormat.InitClass(CDocument, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_OForm_Document);
CDocument.prototype.clear = function()
{
// TODO: fields?
this.clearUsers();
this.clearUserMasters();
this.clearFieldGroups();
this.clearFieldMasters();
};
CDocument.prototype.setDefaultUser = function(userMaster)
{
if (!userMaster || userMaster === this.DefaultUser)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDefaultUser(this, this.DefaultUser.GetId(), userMaster.GetId()));
this.DefaultUser = userMaster;
};
CDocument.prototype.setAuthor = function(author)
{
if (this.Author === author)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentAuthor(this, this.Author, author));
this.Author = author;
};
CDocument.prototype.getAuthor = function()
{
return this.Author;
};
CDocument.prototype.setDate = function(date)
{
if (this.Date === date)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDate(this, this.Date, date));
this.Date = date;
};
CDocument.prototype.getDate = function()
{
return this.Date;
};
CDocument.prototype.setDescription = function(description)
{
if (this.Description === description)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDescription(this, this.Description, description));
this.Description = description;
};
CDocument.prototype.getDescription = function()
{
return this.Description;
};
CDocument.prototype.setType = function(type)
{
if (this.Type === type)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentType(this, this.Type, type));
this.Type = type;
};
CDocument.prototype.getType = function()
{
return this.Type;
};
CDocument.prototype.setApplication = function(app)
{
if (this.Application === app)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentApplication(this, this.Application, app));
this.Application = app;
};
CDocument.prototype.getApplication = function()
{
return this.Application;
};
CDocument.prototype.setDocumentId = function(documentId)
{
if (this.DocumentId === documentId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentDocumentId(this, this.DocumentId, documentId));
this.DocumentId = documentId;
};
CDocument.prototype.getDocumentId = function()
{
return this.DocumentId;
};
CDocument.prototype.addFieldGroup = function(fieldGroup)
{
if (-1 !== this.FieldGroups.indexOf(fieldGroup))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), true));
this.FieldGroups.push(fieldGroup);
fieldGroup.setParent(this);
this.onChangeFieldGroups();
};
CDocument.prototype.removeFieldGroup = function(fieldGroup)
{
if (!fieldGroup)
return;
let index = this.FieldGroups.indexOf(fieldGroup);
if (-1 === index)
return;
fieldGroup.setParent(null);
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldGroup(this, fieldGroup.GetId(), false));
this.FieldGroups.splice(index, 1);
this.onChangeFieldGroups();
};
CDocument.prototype.clearFieldGroups = function()
{
while (this.FieldGroups.length)
{
this.removeFieldGroup(this.FieldGroups[0]);
}
};
CDocument.prototype.getFieldGroupsCount = function()
{
return this.FieldGroups.length;
};
CDocument.prototype.getFieldGroup = function(index)
{
if (index < 0 || index >= this.FieldGroups.length)
return null;
return this.FieldGroups[index];
};
CDocument.prototype.fromPkg = function(xmlPkg, opt_sdtPrWithFieldPath)
{
let xmlContext = xmlPkg.getContext();
let mainPart = xmlPkg.getMainPart();
let mainContent = mainPart ? mainPart.getDocumentContent() : null;
if (mainContent)
{
let xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.setOformContext(xmlContext);
let reader = new AscCommon.StaxParser(mainContent, mainPart, xmlParserContext);
this.fromXml(reader);
}
let document = this;
xmlContext.getAllUsers().forEach(function(user)
{
document.addUser(user)
});
xmlContext.getAllUserMasters().forEach(function(userMaster)
{
document.addUserMaster(userMaster);
});
xmlContext.getAllFieldMasters().forEach(function(fieldMaster)
{
document.addFieldMaster(fieldMaster);
});
//todo unite with XmlParserContext.prototype.assignFieldsToSdt
if (opt_sdtPrWithFieldPath) {
for (let nSdt = 0; nSdt < opt_sdtPrWithFieldPath.length; ++nSdt) {
let oPair = opt_sdtPrWithFieldPath[nSdt];
// let oFieldMaster = xmlContext.pathToFieldMaster[oPair.target];
let oFieldMaster = xmlContext.getFieldMaster(oPair.target);
if (oFieldMaster && oPair.sdt.SetFieldMaster) {
oPair.sdt.SetFieldMaster(oFieldMaster);
}
}
}
};
CDocument.prototype.toPkg = function(xmlPkg, opt_fieldMastersPartMap)
{
let xmlContext = xmlPkg.getContext();
let xmlWriter = xmlPkg.getXmlWriter();
let main = xmlPkg.addPart(AscCommon.openXml.Types.oformMain).part;
xmlWriter.Seek(0);
main.setDataXml(this, xmlWriter);
this.Users.forEach(function(user)
{
if (!xmlContext.haveUserPart(user))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUser);
if (part)
part.part.setDataXml(user, xmlWriter);
}
});
this.UserMasters.forEach(function(userMaster)
{
if (!xmlContext.haveUserMasterPart(userMaster))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformUserMaster);
if (part)
part.part.setDataXml(userMaster, xmlWriter);
}
});
this.FieldMasters.forEach(function(fieldMaster)
{
if (!xmlContext.haveFieldMasterPart(fieldMaster))
{
xmlWriter.Seek(0);
let part = xmlPkg.addPart(AscCommon.openXml.Types.oformFieldMaster);
if (part)
{
part.part.setDataXml(fieldMaster, xmlWriter);
if (opt_fieldMastersPartMap)
{
//todo remove path manipulation
opt_fieldMastersPartMap[fieldMaster.Id] = '..'+part.part.uri;
}
}
}
});
};
CDocument.prototype.fromXml = function(reader)
{
this.clear();
// TODO: Author, Date
if (!reader.ReadNextNode() || "document" !== reader.GetNameNoNS())
return false;
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "author":
break;
case "date":
break;
case "description":
this.setDescription(reader.GetTextDecodeXml());
break;
case "type":
this.setType(reader.GetTextDecodeXml());
break;
case "application":
this.setApplication(reader.GetTextDecodeXml());
break;
case "id":
this.setDocumentId(reader.GetTextDecodeXml());
break;
case "fieldGroup":
this.addFieldGroup(AscOForm.CFieldGroup.fromXml(reader));
break;
case "defaultUser":
{
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let xmlReaderContext = reader.GetOformContext();
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
this.setDefaultUser(userMaster);
}
}
break;
}
}
}
return true;
};
CDocument.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("document");
writer.WriteXmlRelationshipsNS();
writer.WriteXmlAttributesEnd();
// TODO: Author, Date
let description = this.getDescription();
if (description)
writer.WriteXmlNodeWithText("description", description);
let type = this.getType();
if (type)
writer.WriteXmlNodeWithText("type", type);
let application = this.getApplication();
if (application)
writer.WriteXmlNodeWithText("application", application);
let documentId = this.getDocumentId();
if (documentId)
writer.WriteXmlNodeWithText("id", documentId);
let xmlContext = writer.context;
let defaultUserPart = xmlContext.getDefaultUserMasterPart(this.DefaultUser);
if (defaultUserPart)
{
writer.WriteXmlNodeStart("defaultUser");
writer.WriteXmlNullableAttributeString("r:id", xmlContext.getRId(defaultUserPart));
writer.WriteXmlAttributesEnd(true);
}
for (let fgIndex = 0, fgCount = this.FieldGroups.length; fgIndex < fgCount; ++fgIndex)
{
this.FieldGroups[fgIndex].toXml(writer);
}
writer.WriteXmlNodeEnd("document");
};
/**
* @returns {AscOForm.CUserMaster}
*/
CDocument.prototype.getDefaultUserMaster = function()
{
return this.DefaultUser;
};
CDocument.prototype.addUser = function(user)
{
if (-1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), true));
this.Users.push(user);
};
CDocument.prototype.removeUser = function(user)
{
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUser(this, user.GetId(), false));
this.Users.splice(index, 1);
};
CDocument.prototype.getUserCount = function()
{
return this.Users.length;
};
/**
* @param index {number}
* @returns {?AscOForm.CUser}
*/
CDocument.prototype.getUser = function(index)
{
if (index < 0 || index >= this.Users.length)
return null;
return this.Users[index];
};
CDocument.prototype.clearUsers = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[0]);
}
};
CDocument.prototype.addUserMaster = function(userMaster)
{
if (-1 !== this.UserMasters.indexOf(userMaster))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), true));
this.UserMasters.push(userMaster);
userMaster.setParent(this);
};
CDocument.prototype.removeUserMaster = function(userMaster)
{
let index = this.UserMasters.indexOf(userMaster);
if (-1 === index)
return;
userMaster.setParent(null);
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentUserMaster(this, userMaster.GetId(), false));
this.UserMasters.splice(index, 1);
};
CDocument.prototype.getUserMasterCount = function()
{
return this.UserMasters.length;
};
CDocument.prototype.getUserMaster = function(index)
{
if (index < 0 || index >= this.UserMasters.length)
return null;
return this.UserMasters[index];
};
CDocument.prototype.getAllUserMasters = function()
{
return this.UserMasters;
};
CDocument.prototype.clearUserMasters = function()
{
while (this.UserMasters.length)
{
this.removeUserMaster(this.UserMasters[0]);
}
};
CDocument.prototype.createFieldMaster = function(id)
{
let fieldMaster = new AscOForm.CFieldMaster(!id);
if (id)
fieldMaster.setFieldId(id);
this.addFieldMaster(fieldMaster);
return fieldMaster;
};
CDocument.prototype.addFieldMaster = function(fieldMaster)
{
if (-1 !== this.FieldMasters.indexOf(fieldMaster))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), true));
this.FieldMasters.push(fieldMaster);
};
CDocument.prototype.removeFieldMaster = function(fieldMaster)
{
let index = this.FieldMasters.indexOf(fieldMaster);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1);
};
CDocument.prototype.removeFieldMasterByIndex = function(index)
{
if (index < 0 || index >= this.FieldMasters.length)
return;
let fieldMaster = this.FieldMasters[index];
AscCommon.History.Add(new AscDFH.CChangesOFormDocumentFieldMaster(this, fieldMaster.GetId(), false));
this.FieldMasters.splice(index, 1);
};
CDocument.prototype.getFieldMasterCount = function()
{
return this.FieldMasters.length;
};
CDocument.prototype.getFieldMaster = function(index)
{
if (index < 0 || index >= this.FieldMasters.length)
return null;
return this.FieldMasters[index];
};
CDocument.prototype.clearFieldMasters = function()
{
while (this.FieldMasters.length)
{
this.removeFieldMaster(this.FieldMasters[0]);
}
};
CDocument.prototype.getMinWeight = function()
{
let min = -1;
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
{
let curWeight = this.FieldGroups[index].getWeight();
if (-1 === min || min > curWeight)
min = curWeight;
}
return min;
};
CDocument.prototype.getMaxWeight = function()
{
let max = -1;
for (let index = 0, count = this.FieldGroups.length; index < count; ++index)
{
let curWeight = this.FieldGroups[index].getWeight();
if (max < curWeight)
max = curWeight;
}
return max;
};
CDocument.prototype.getAllFieldsByUserMaster = function(userMaster)
{
let fields = [];
for (let index = 0, count = this.FieldMasters.length; index < count; ++index)
{
let fieldMaster = this.FieldMasters[index];
if (fieldMaster.checkUser(userMaster))
fields.push(fieldMaster);
}
return fields;
};
CDocument.prototype.onChangeFieldGroups = function()
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
};
CDocument.prototype.onChangeFieldGroup = function(fieldGroup)
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
};
CDocument.prototype.onChangeUserMaster = function(userMaster)
{
if (!this.OForm)
return;
this.OForm.onChangeRoles();
this.OForm.onChangeRoleColor();
};
CDocument.prototype.correctFieldMasters = function(logicDocument)
{
if (!logicDocument)
return;
let formManager = logicDocument.GetFormsManager();
let allForms = formManager.GetAllForms();
for (let index = 0, count = allForms.length; index < count; ++index)
{
let form = allForms[index];
let fieldMaster = form.GetFieldMaster();
if (!fieldMaster)
{
// TODO: Мы не можем здесь генерировать id, т.к. данная функция вызывается на открытии
// и тогда у разных клиентов будут разные id. Поэтому, пока лучше вообще такие поля будут без id
fieldMaster = new AscOForm.CFieldMaster(false);
this.addFieldMaster(fieldMaster);
fieldMaster.addUser(this.getDefaultUserMaster());
form.SetFieldMaster(fieldMaster);
}
fieldMaster.setLogicField(form);
}
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
{
let fieldMaster = this.FieldMasters[fieldIndex];
let form = fieldMaster.getLogicField();
if (!form || form.GetFieldMaster() !== fieldMaster)
this.removeFieldMasterByIndex(fieldIndex);
}
};
CDocument.prototype.removeUnusedFieldMasters = function()
{
for (let fieldIndex = this.FieldMasters.length - 1; fieldIndex >= 0; --fieldIndex)
{
let fieldMaster = this.FieldMasters[fieldIndex];
if (!fieldMaster.isUseInDocument())
this.removeFieldMasterByIndex(fieldIndex);
}
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CDocument = CDocument;
})(window);

278
oform/format/FieldGroup.js Normal file
View File

@ -0,0 +1,278 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* @constructor
*/
function CFieldGroup()
{
AscFormat.CBaseFormatObject.call(this);
this.Weight = null;
this.Fields = [];
this.Users = [];
this.Parent = null;
}
AscFormat.InitClass(CFieldGroup, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldGroup);
CFieldGroup.prototype.setParent = function(parent)
{
this.Parent = parent;
};
CFieldGroup.prototype.setWeight = function(value)
{
if (this.Weight === value)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupWeight(this, this.Weight, value));
this.Weight = value;
this.onChange();
};
CFieldGroup.prototype.getWeight = function()
{
return this.Weight;
};
CFieldGroup.prototype.addField = function(field)
{
if (!field || -1 !== this.Fields.indexOf(field))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), true));
this.Fields.push(field);
this.onChange();
};
CFieldGroup.prototype.removeField = function(field)
{
if (!field)
return;
let index = this.Fields.indexOf(field);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveField(this, field.GetId(), false));
this.Fields.splice(index, 1);
this.onChange();
};
CFieldGroup.prototype.getFieldCount = function()
{
return this.Fields.length;
};
CFieldGroup.prototype.getField = function(index)
{
return (index >= 0 && index < this.Fields.length ? this.Fields[index] : null);
};
CFieldGroup.prototype.addUser = function(user)
{
if (!user || -1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), true));
this.Users.push(user);
this.onChange();
};
CFieldGroup.prototype.removeUser = function(user)
{
if (!user)
return;
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldGroupAddRemoveUser(this, user.GetId(), false));
this.Users.splice(index, 1);
this.onChange();
};
CFieldGroup.prototype.getUserCount = function()
{
return this.Users.length;
};
CFieldGroup.prototype.getUser = function(index)
{
return (index >= 0 && index < this.Users.length ? this.Users[index] : null);
};
CFieldGroup.prototype.clear = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[this.Users.length - 1]);
}
while (this.Fields.length)
{
this.removeField(this.Fields[this.Fields.length - 1]);
}
};
CFieldGroup.prototype.onChange = function()
{
if (!this.Parent)
return;
this.Parent.onChangeFieldGroup(this);
};
CFieldGroup.prototype.getAllFields = function()
{
let fields = [];
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
if (this.Fields[fieldIndex].isUseInDocument())
fields.push(this.Fields[fieldIndex]);
}
if (this.Users.length && this.Parent)
{
for (let index = 0, count = this.Users.length; index < count; ++index)
{
let userFields = this.Parent.getAllFieldsByUserMaster(this.Users[index]);
for (let fieldIndex = 0, fieldCount = userFields.length; fieldIndex < fieldCount; ++fieldIndex)
{
if (-1 === fields.indexOf(userFields[fieldIndex]) && userFields[fieldIndex].isUseInDocument())
fields.push(userFields[fieldIndex]);
}
}
}
return fields;
};
CFieldGroup.prototype.getFirstUser = function()
{
let user = null;
for (let index = 0, userCount = this.Users.length; index < userCount; ++index)
{
let curUser = this.Users[index];
if (!user || user.compare(curUser) < 0)
user = curUser;
}
if (!user)
{
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
let curUser = this.Fields[fieldIndex].getFirstUser();
if (!user || user.compare(curUser) < 0)
user = curUser;
}
}
return user;
};
CFieldGroup.prototype.toXml = function(writer)
{
let context = writer.context;
writer.WriteXmlNodeStart("fieldGroup");
writer.WriteXmlNullableAttributeInt("weight", this.getWeight());
writer.WriteXmlAttributesEnd();
for (let userIndex = 0, userCount = this.Users.length; userIndex < userCount; ++userIndex)
{
let part = context.getUserMasterPart(this.Users[userIndex]);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
for (let fieldIndex = 0, fieldCount = this.Fields.length; fieldIndex < fieldCount; ++fieldIndex)
{
let part = context.getFieldMasterPart(this.Fields[fieldIndex]);
if (!part)
continue;
writer.WriteXmlNodeStart("field");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("fieldGroup");
};
CFieldGroup.fromXml = function(reader)
{
let fG = new CFieldGroup();
while (reader.MoveToNextAttribute())
{
if ("weight" === reader.GetNameNoNS())
fG.setWeight(reader.GetValueInt());
}
let xmlReaderContext = reader.GetOformContext();
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "user":
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
fG.addUser(userMaster);
}
}
break;
case "field":
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let fieldMaster = xmlReaderContext && xmlReaderContext.getFieldMaster(rel.getFullPath());
if (fieldMaster)
fG.addField(fieldMaster);
}
}
break;
}
}
return fG;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CFieldGroup = CFieldGroup;
})(window);

298
oform/format/FieldMaster.js Normal file
View File

@ -0,0 +1,298 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* @param {boolean} [generateId=false]
* @constructor
*/
function CFieldMaster(generateId)
{
AscFormat.CBaseFormatObject.call(this);
this.FieldId = null;
this.Field = null;
this.Users = [];
this.Signers = [];
if (true === generateId)
this.setFieldId(AscCommon.CreateGUID());
}
AscFormat.InitClass(CFieldMaster, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_OForm_FieldMaster);
CFieldMaster.prototype.setLogicField = function(logicField)
{
this.Field = logicField;
};
CFieldMaster.prototype.getLogicField = function()
{
return this.Field;
};
CFieldMaster.prototype.clone = function()
{
let fm = new CFieldMaster(true);
this.copyTo(fm);
return fm;
};
CFieldMaster.prototype.copyTo = function(fm)
{
fm.clearUsers();
for (let index = 0, count = this.Users.length; index < count; ++index)
{
fm.addUser(this.Users[index]);
}
fm.clearSigners();
for (let index = 0, count = this.Signers.length; index < count; ++index)
{
fm.addSigner(this.Signers[index]);
}
};
CFieldMaster.prototype.setFieldId = function(fieldId)
{
if (fieldId === this.FieldId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterFieldId(this, this.FieldId, fieldId));
this.FieldId = fieldId;
};
CFieldMaster.prototype.getFieldId = function()
{
return this.FieldId;
};
CFieldMaster.prototype.addUser = function(user)
{
if (-1 !== this.Users.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), true));
this.Users.push(user);
};
CFieldMaster.prototype.removeUser = function(user)
{
let index = this.Users.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveUser(this, user.GetId(), false));
this.Users.splice(index, 1);
};
CFieldMaster.prototype.clearUsers = function()
{
while (this.Users.length)
{
this.removeUser(this.Users[this.Users.length - 1]);
}
};
CFieldMaster.prototype.getUserCount = function()
{
return this.Users.length;
};
CFieldMaster.prototype.getUser = function(index)
{
if (index < 0 || index >= this.Users.length)
return null;
return this.Users[index];
};
CFieldMaster.prototype.getFirstUser = function()
{
let user = null;
for (let userIndex = 0, userCount = this.getUserCount(); userIndex < userCount; ++userIndex)
{
let curUser = this.getUser(userIndex);
if (!user || user.compare(curUser) < 0)
user = curUser;
}
return user;
};
CFieldMaster.prototype.addSigner = function(user)
{
if (-1 !== this.Signers.indexOf(user))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), true));
this.Signers.push(user);
};
CFieldMaster.prototype.removeSigner = function(user)
{
let index = this.Signers.indexOf(user);
if (-1 === index)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormFieldMasterAddRemoveSigner(this, user.GetId(), false));
this.Signers.splice(index, 1);
};
CFieldMaster.prototype.clearSigners = function()
{
while (this.Signers.length)
{
this.removeSigner(this.Signers[this.Signers.length - 1]);
}
};
CFieldMaster.prototype.checkUser = function(user)
{
for (let index = 0, count = this.Users.length; index < count; ++index)
{
if (this.Users[index] === user)
return true;
}
return false;
};
CFieldMaster.prototype.isUseInDocument = function()
{
return (this.Field
&& this.Field.IsUseInDocument()
&& this === this.Field.GetFieldMaster());
};
CFieldMaster.prototype.toXml = function(writer)
{
let context = writer.context;
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("fieldMaster");
writer.WriteXmlRelationshipsNS();
if (this.FieldId)
writer.WriteXmlNullableAttributeString("id", this.FieldId);
writer.WriteXmlAttributesEnd();
writer.WriteXmlNodeStart("users");
writer.WriteXmlAttributesEnd();
for (let index = 0, count = this.Users.length; index < count; ++index)
{
let user = this.Users[index];
let part = context.getUserMasterPart(user);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("users");
writer.WriteXmlNodeStart("signRequest");
writer.WriteXmlAttributesEnd();
for (let index = 0, count = this.Signers.length; index < count; ++index)
{
let user = this.Signers[index];
let part = context.getUserMasterPart(user);
if (!part)
continue;
writer.WriteXmlNodeStart("user");
writer.WriteXmlNullableAttributeString("r:id", context.getRId(part));
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("signRequest");
writer.WriteXmlNodeEnd("fieldMaster");
};
CFieldMaster.fromXml = function(reader)
{
if (!reader.ReadNextNode())
return null;
if ("fieldMaster" !== reader.GetNameNoNS())
return null;
let fieldMaster = new CFieldMaster();
while (reader.MoveToNextAttribute())
{
if ("id" === reader.GetNameNoNS())
fieldMaster.setFieldId(reader.GetValueDecodeXml());
}
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
switch(reader.GetNameNoNS())
{
case "users":
{
let users = readUsersFromXml(reader);
for (let index = 0, count = users.length; index < count; ++index)
{
fieldMaster.addUser(users[index]);
}
break;
}
case "signRequest":
{
let users = readUsersFromXml(reader);
for (let index = 0, count = users.length; index < count; ++index)
{
fieldMaster.addSigner(users[index]);
}
break;
}
}
}
return fieldMaster;
};
function readUsersFromXml(reader)
{
let xmlReaderContext = reader.GetOformContext();
let users = [];
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
if ("user" === reader.GetNameNoNS())
{
while (reader.MoveToNextAttribute())
{
if ("r:id" === reader.GetName())
{
let rId = reader.GetValueDecodeXml();
let rel = reader.rels.getRelationship(rId);
let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath());
if (userMaster)
users.push(userMaster);
}
}
}
}
return users;
}
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CFieldMaster = CFieldMaster;
})(window);

108
oform/format/User.js Normal file
View File

@ -0,0 +1,108 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* @param {AscOForm.CUserMaster} userMaster
* @constructor
*/
function CUser(userMaster)
{
AscFormat.CBaseFormatObject.call(this);
this.Email = undefined;
this.Telephone = undefined;
this.UserMaster = undefined;
if (userMaster)
this.setUserMaster(userMaster);
}
AscFormat.InitClass(CUser, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_OForm_User);
CUser.prototype.setUserMaster = function(userMaster)
{
if (this.UserMaster === userMaster)
return;
let oldValue = this.UserMaster ? this.UserMaster.GetId() : undefined;
let newValue = userMaster ? userMaster.GetId() : undefined;
AscCommon.History.Add(new AscDFH.CChangesOFormUserUserMaster(this, oldValue, newValue));
this.UserMaster = userMaster;
};
CUser.prototype.setEmail = function(email)
{
if (email === this.Email)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserEmail(this, this.Email, email));
this.Email = email;
};
CUser.prototype.setTelephone = function(telephone)
{
if (telephone === this.Telephone)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserTelephone(this, this.Telephone, telephone));
this.Telephone = telephone;
};
CUser.prototype.getUserMaster = function()
{
return this.UserMaster;
};
CUser.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("user");
writer.WriteXmlAttributesEnd();
if (this.Email)
writer.WriteXmlNodeWithText("email", this.Email);
if (this.Telephone)
writer.WriteXmlNodeWithText("telephone", this.Telephone);
writer.WriteXmlNodeEnd("user");
};
CUser.fromXml = function(reader)
{
let user = new CUser();
return user;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CUser = CUser;
})(window);

227
oform/format/UserMaster.js Normal file
View File

@ -0,0 +1,227 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* @param {boolean} [generateId=false]
* @constructor
*/
function CUserMaster(generateId)
{
AscFormat.CBaseFormatObject.call(this);
this.UserId = undefined;
this.Role = undefined;
this.Color = undefined;
if (true === generateId)
this.setUserId(AscCommon.CreateGUID());
this.Parent = null;
}
AscFormat.InitClass(CUserMaster, AscFormat.CBaseFormatObject, AscDFH.historyitem_type_OForm_UserMaster);
CUserMaster.prototype.setParent = function(parent)
{
this.Parent = parent;
};
CUserMaster.prototype.setUserId = function(userId)
{
if (userId === this.UserId)
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterUserId(this, this.UserId, userId));
this.UserId = userId;
this.onChange();
};
CUserMaster.prototype.getUserId = function()
{
return this.UserId;
};
CUserMaster.prototype.setRole = function(role)
{
if (role === this.Role)
return;
role = null === role ? undefined : role;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterRole(this, this.Role, role));
this.Role = role;
this.onChange();
};
CUserMaster.prototype.getRole = function()
{
return this.Role ? this.Role : "";
};
CUserMaster.prototype.setColor = function(r, g, b)
{
let newColor = undefined !== r && null !== r ? new AscWord.CDocumentColor(r, g, b) : undefined;
let oldColor = this.Color;
if ((!newColor && !oldColor) || (oldColor && oldColor.IsEqual(newColor)))
return;
AscCommon.History.Add(new AscDFH.CChangesOFormUserMasterColor(this, oldColor, newColor));
this.Color = newColor;
this.onChange();
};
CUserMaster.prototype.getColor = function()
{
return this.Color ? this.Color : null;
};
CUserMaster.prototype.initDefaultUser = function()
{
// TODO: Возможно стоит придумать уникальный id общий для дефолтовой роли
this.setRole(AscCommon.translateManager.getValue("Anyone"));
this.setColor(255, 239, 191);
};
CUserMaster.prototype.compare = function(user)
{
let res = AscCommon.CompareStrings(this.Role, user.Role);
if (0 !== res)
return res;
res = AscCommon.CompareStrings(this.UserId, user.UserId);
if (0 !== res)
return res;
if (!this.Color && !user.Color)
return 0;
else if (!this.Color && user.Color)
return -1;
else if (this.Color && !user.Color)
return 1;
if (this.Color.r < user.Color.r)
return -1;
else if (this.Color.r > user.Color.r)
return 1;
else if (this.Color.g < user.Color.g)
return -1;
else if (this.Color.g > user.Color.g)
return 1;
else if (this.Color.b < user.Color.b)
return -1;
else if (this.Color.b > user.Color.b)
return 1;
return 0;
};
CUserMaster.prototype.isEqual = function(user)
{
return (0 === this.compare(user));
};
CUserMaster.prototype.isDefaultUserProps = function()
{
let result = false;
let u = this;
AscCommon.ExecuteNoHistory(function()
{
let defaultUser = new CUserMaster();
defaultUser.initDefaultUser();
result = defaultUser.isEqual(u);
});
return result;
};
CUserMaster.prototype.onChange = function()
{
if (!this.Parent)
return;
this.Parent.onChangeUserMaster(this);
};
CUserMaster.prototype.toXml = function(writer)
{
writer.WriteXmlHeader();
writer.WriteXmlNodeStart("user");
writer.WriteXmlAttributesEnd();
if (this.UserId)
writer.WriteXmlNodeWithText("id", this.UserId);
if (this.Role)
writer.WriteXmlNodeWithText("role", this.Role);
if (this.Color)
{
writer.WriteXmlNodeStart("color");
writer.WriteXmlNullableAttributeStringEncode("val", this.Color.ToHexColor());
writer.WriteXmlAttributesEnd(true);
}
writer.WriteXmlNodeEnd("user");
};
CUserMaster.fromXml = function(reader)
{
if (!reader.ReadNextNode())
return null;
let name = reader.GetNameNoNS();
if ("user" !== reader.GetNameNoNS())
return null;
let um = new CUserMaster();
let depth = reader.GetDepth();
while (reader.ReadNextSiblingNode(depth))
{
name = reader.GetNameNoNS();
switch(reader.GetNameNoNS())
{
case "id":
um.setUserId(reader.GetTextDecodeXml());
break;
case "role":
um.setRole(reader.GetTextDecodeXml());
break;
case "color":
while (reader.MoveToNextAttribute())
{
if ("val" === reader.GetNameNoNS())
{
let color = new AscWord.CDocumentColor();
color.SetFromHexColor(reader.GetValueDecodeXml());
um.setColor(color.r, color.g, color.b);
}
}
reader.ReadTillEnd();
break;
}
}
return um;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.CUserMaster = CUserMaster;
})(window);

View File

@ -0,0 +1,103 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
/**
* Базовое изменение для работы с каким-либо контейнером, в который по ключу-key (string)
* добавляют/удаляют значение
* @constructor
* @extends {window['AscDFH'].CChangesBase}
*/
function CChangesDictionaryBase(Class, key, isAdd)
{
AscDFH.CChangesBase.call(this, Class);
this.Key = key;
this.Add = isAdd;
}
CChangesDictionaryBase.prototype = Object.create(AscDFH.CChangesBase.prototype);
CChangesDictionaryBase.prototype.constructor = CChangesDictionaryBase;
CChangesDictionaryBase.prototype.Redo = function()
{
if (this.Add)
this.private_AddToDictionary();
else
this.private_RemoveFromDictionary();
};
CChangesDictionaryBase.prototype.Undo = function()
{
if (this.Add)
this.private_RemoveFromDictionary();
else
this.private_AddToDictionary();
};
CChangesDictionaryBase.prototype.WriteToBinary = function(writer)
{
writer.WriteString2(this.Key);
writer.WriteBool(this.Add);
};
CChangesDictionaryBase.prototype.ReadFromBinary = function(reader)
{
this.Key = reader.GetString2();
this.Add = reader.GetBool();
};
CChangesDictionaryBase.prototype.IsNeedRecalculate = function()
{
return false;
};
CChangesDictionaryBase.prototype.CreateReverseChange = function()
{
return new this.constructor(this.Class, this.Key, !this.Add);
};
CChangesDictionaryBase.prototype.private_AddToDictionary = function()
{
};
CChangesDictionaryBase.prototype.private_RemoveFromDictionary = function()
{
};
window['AscDFH'].CChangesDictionaryBase = CChangesDictionaryBase;
function InheritDictionaryChange(changeClass, type, addFunction, removeFunction)
{
window['AscDFH'].changesFactory[type] = changeClass;
changeClass.prototype = Object.create(CChangesDictionaryBase.prototype);
changeClass.prototype.constructor = changeClass;
changeClass.prototype.Type = type;
changeClass.prototype.private_AddToDictionary = addFunction;
changeClass.prototype.private_RemoveFromDictionary = removeFunction;
}
window['AscDFH'].InheritDictionaryChange = InheritDictionaryChange;
})(window);

View File

@ -0,0 +1,329 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
window['AscDFH'].historyitem_OForm_Document_Author = window['AscDFH'].historyitem_type_OForm_Document | 1;
window['AscDFH'].historyitem_OForm_Document_Date = window['AscDFH'].historyitem_type_OForm_Document | 2;
window['AscDFH'].historyitem_OForm_Document_Description = window['AscDFH'].historyitem_type_OForm_Document | 3;
window['AscDFH'].historyitem_OForm_Document_Type = window['AscDFH'].historyitem_type_OForm_Document | 4;
window['AscDFH'].historyitem_OForm_Document_Application = window['AscDFH'].historyitem_type_OForm_Document | 5;
window['AscDFH'].historyitem_OForm_Document_DocumentId = window['AscDFH'].historyitem_type_OForm_Document | 6;
window['AscDFH'].historyitem_OForm_Document_FieldGroup = window['AscDFH'].historyitem_type_OForm_Document | 7;
window['AscDFH'].historyitem_OForm_Document_User = window['AscDFH'].historyitem_type_OForm_Document | 8;
window['AscDFH'].historyitem_OForm_Document_UserMaster = window['AscDFH'].historyitem_type_OForm_Document | 9;
window['AscDFH'].historyitem_OForm_Document_FieldMaster = window['AscDFH'].historyitem_type_OForm_Document | 10;
window['AscDFH'].historyitem_OForm_Document_DefaultUser = window['AscDFH'].historyitem_type_OForm_Document | 11;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentAuthor(Class, oldAuthor, newAuthor)
{
let oldId = oldAuthor ? oldAuthor.GetId() : undefined;
let newId = newAuthor ? newAuthor.GetId() : undefined;
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, oldId, newId);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentAuthor,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Author,
function(value)
{
if (undefined === value)
{
this.Class.Author = undefined;
}
else
{
let author = AscCommon.g_oTableId.GetById(value);
if (author)
this.Class.Author = value;
}
},
false
);
window['AscDFH'].CChangesOFormDocumentAuthor = CChangesOFormDocumentAuthor;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDate(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDate,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Date,
function(value)
{
this.Class.Date = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDate = CChangesOFormDocumentDate;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDescription(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDescription,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Description,
function(value)
{
this.Class.Description = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDescription = CChangesOFormDocumentDescription;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentType(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentType,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Type,
function(value)
{
this.Class.Type = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentType = CChangesOFormDocumentType;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentApplication(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentApplication,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_Application,
function(value)
{
this.Class.Application = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentApplication = CChangesOFormDocumentApplication;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDocumentId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDocumentId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_DocumentId,
function(value)
{
this.Class.DocumentId = value;
},
false
);
window['AscDFH'].CChangesOFormDocumentDocumentId = CChangesOFormDocumentDocumentId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentFieldGroup(Class, fieldGroupId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldGroupId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentFieldGroup,
window['AscDFH'].historyitem_OForm_Document_FieldGroup,
function()
{
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.FieldGroups.indexOf(fieldGroup))
{
fieldGroup.setParent(this.Class);
this.Class.FieldGroups.push(fieldGroup);
this.Class.onChangeFieldGroups();
}
},
function()
{
let fieldGroup = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.FieldGroups.indexOf(fieldGroup);
if (-1 !== index)
{
fieldGroup.setParent(null);
this.Class.FieldGroups.splice(index, 1);
this.Class.onChangeFieldGroups();
}
}
);
window['AscDFH'].CChangesOFormDocumentFieldGroup = CChangesOFormDocumentFieldGroup;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentUser(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentUser,
window['AscDFH'].historyitem_OForm_Document_User,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(user))
this.Class.Users.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Users.indexOf(user);
if (-1 !== index)
this.Class.Users.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormDocumentUser = CChangesOFormDocumentUser;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentUserMaster(Class, userMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentUserMaster,
window['AscDFH'].historyitem_OForm_Document_UserMaster,
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.UserMasters.indexOf(userMaster))
{
userMaster.setParent(this.Class);
this.Class.UserMasters.push(userMaster);
}
},
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.UserMasters.indexOf(userMaster);
if (-1 !== index)
{
userMaster.setParent(null);
this.Class.UserMasters.splice(index, 1);
}
}
);
window['AscDFH'].CChangesOFormDocumentUserMaster = CChangesOFormDocumentUserMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormDocumentFieldMaster(Class, fieldMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormDocumentFieldMaster,
window['AscDFH'].historyitem_OForm_Document_FieldMaster,
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.FieldMasters.indexOf(field))
this.Class.FieldMasters.push(field);
},
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.FieldMasters.indexOf(field);
if (-1 !== index)
this.Class.FieldMasters.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormDocumentFieldMaster = CChangesOFormDocumentFieldMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormDocumentDefaultUser(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormDocumentDefaultUser,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_Document_DefaultUser,
function(value)
{
let document = this.Class;
let userMaster = AscCommon.g_oTableId.GetById(value);
if (userMaster)
{
userMaster.setParent(document);
document.DefaultUser = userMaster;
}
},
false
);
window['AscDFH'].CChangesOFormDocumentDefaultUser = CChangesOFormDocumentDefaultUser;
})(window);

View File

@ -0,0 +1,124 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
window['AscDFH'].historyitem_OForm_FieldGroup_Weight = window['AscDFH'].historyitem_type_OForm_FieldGroup | 1;
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveField = window['AscDFH'].historyitem_type_OForm_FieldGroup | 2;
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveUser = window['AscDFH'].historyitem_type_OForm_FieldGroup | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseLongProperty}
*/
function CChangesOFormFieldGroupWeight(Class, Old, New)
{
window['AscDFH'].CChangesBaseLongProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldGroupWeight,
window['AscDFH'].CChangesBaseLongProperty,
window['AscDFH'].historyitem_OForm_FieldGroup_Weight,
function(value)
{
this.Class.Weight = value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormFieldGroupWeight = CChangesOFormFieldGroupWeight;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldGroupAddRemoveField(Class, fieldId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, fieldId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldGroupAddRemoveField,
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveField,
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Fields.indexOf(field))
this.Class.Fields.push(field);
this.Class.onChange();
},
function()
{
let field = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Fields.indexOf(field);
if (-1 !== index)
this.Class.Fields.splice(index, 1);
this.Class.onChange();
}
);
window['AscDFH'].CChangesOFormFieldGroupAddRemoveField = CChangesOFormFieldGroupAddRemoveField;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldGroupAddRemoveUser(Class, userMasterId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userMasterId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldGroupAddRemoveUser,
window['AscDFH'].historyitem_OForm_FieldGroup_AddRemoveUser,
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(userMaster))
this.Class.Users.push(userMaster);
this.Class.onChange();
},
function()
{
let userMaster = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Fields.indexOf(userMaster);
if (-1 !== index)
this.Class.Users.splice(index, 1);
this.Class.onChange();
}
);
window['AscDFH'].CChangesOFormFieldGroupAddRemoveUser = CChangesOFormFieldGroupAddRemoveUser;
})(window);

View File

@ -0,0 +1,115 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
window['AscDFH'].historyitem_OFormFieldMaster_FieldId = window['AscDFH'].historyitem_type_OForm_FieldMaster | 1;
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser = window['AscDFH'].historyitem_type_OForm_FieldMaster | 2;
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveSigner = window['AscDFH'].historyitem_type_OForm_FieldMaster | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormFieldMasterFieldId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormFieldMasterFieldId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OFormFieldMaster_FieldId,
function(value)
{
this.Class.FieldId = value;
},
false
);
window['AscDFH'].CChangesOFormFieldMasterFieldId = CChangesOFormFieldMasterFieldId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldMasterAddRemoveUser(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldMasterAddRemoveUser,
window['AscDFH'].historyitem_OFormFieldMaster_AddRemoveUser,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Users.indexOf(user))
this.Class.Users.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Users.indexOf(user);
if (-1 !== index)
this.Class.Users.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormFieldMasterAddRemoveUser = CChangesOFormFieldMasterAddRemoveUser;
/**
* @constructor
* @extends {window['AscDFH'].CChangesDictionaryBase}
*/
function CChangesOFormFieldMasterAddRemoveSigner(Class, userId, isAdd)
{
window['AscDFH'].CChangesDictionaryBase.call(this, Class, userId, isAdd);
}
window['AscDFH'].InheritDictionaryChange(
CChangesOFormFieldMasterAddRemoveSigner,
window['AscDFH'].historyitem_OFormFieldMaster_AddSigner,
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
if (-1 === this.Class.Signers.indexOf(user))
this.Class.Signers.push(user);
},
function()
{
let user = AscCommon.g_oTableId.GetById(this.Key);
let index = this.Class.Signers.indexOf(user);
if (-1 !== index)
this.Class.Signers.splice(index, 1);
}
);
window['AscDFH'].CChangesOFormFieldMasterAddRemoveSigner = CChangesOFormFieldMasterAddRemoveSigner;
})(window);

View File

@ -0,0 +1,110 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
window['AscDFH'].historyitem_OForm_User_UserMaster = window['AscDFH'].historyitem_type_OForm_User | 1;
window['AscDFH'].historyitem_OForm_User_Email = window['AscDFH'].historyitem_type_OForm_User | 2;
window['AscDFH'].historyitem_OForm_User_Telephone = window['AscDFH'].historyitem_type_OForm_User | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserUserMaster(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserUserMaster,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_UserMaster,
function(value)
{
if (!value)
{
this.Class.UserMaster = undefined;
}
else
{
let userMaster = AscCommon.g_oTableId.Get_ById(value);
if (userMaster)
this.Class.UserMaster = userMaster;
}
},
false
);
window['AscDFH'].CChangesOFormUserUserMaster = CChangesOFormUserUserMaster;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserEmail(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserEmail,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_Email,
function(value)
{
this.Class.Email = value;
},
false
);
window['AscDFH'].CChangesOFormUserEmail = CChangesOFormUserEmail;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserTelephone(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserTelephone,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_User_Telephone,
function(value)
{
this.Class.Telephone = value;
},
false
);
window['AscDFH'].CChangesOFormUserTelephone = CChangesOFormUserTelephone;
})(window);

View File

@ -0,0 +1,108 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
window['AscDFH'].historyitem_OForm_UserMaster_UserId = window['AscDFH'].historyitem_type_OForm_UserMaster | 1;
window['AscDFH'].historyitem_OForm_UserMaster_Role = window['AscDFH'].historyitem_type_OForm_UserMaster | 2;
window['AscDFH'].historyitem_OForm_UserMaster_Color = window['AscDFH'].historyitem_type_OForm_UserMaster | 3;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterUserId(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterUserId,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_UserId,
function(Value)
{
this.Class.UserId = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterUserId = CChangesOFormUserMasterUserId;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseStringProperty}
*/
function CChangesOFormUserMasterRole(Class, Old, New)
{
window['AscDFH'].CChangesBaseStringProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterRole,
window['AscDFH'].CChangesBaseStringProperty,
window['AscDFH'].historyitem_OForm_UserMaster_Role,
function(Value)
{
this.Class.Role = Value;
this.Class.onChange();
},
false
);
window['AscDFH'].CChangesOFormUserMasterRole = CChangesOFormUserMasterRole;
/**
* @constructor
* @extends {window['AscDFH'].CChangesBaseObjectProperty}
*/
function CChangesOFormUserMasterColor(Class, Old, New)
{
window['AscDFH'].CChangesBaseObjectProperty.call(this, Class, Old, New);
}
window['AscDFH'].InheritPropertyChange(
CChangesOFormUserMasterColor,
window['AscDFH'].CChangesBaseObjectProperty,
window['AscDFH'].historyitem_OForm_UserMaster_Color,
function(value)
{
this.Class.Color = value;
this.Class.onChange();
},
false
);
CChangesOFormUserMasterColor.prototype.private_CreateObject = function()
{
return new AscWord.CDocumentColor(0, 0, 0);
};
window['AscDFH'].CChangesOFormUserMasterColor = CChangesOFormUserMasterColor;
})(window);

300
oform/xml/XmlContext.js Normal file
View File

@ -0,0 +1,300 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window)
{
const PATH_USERS = "/users/";
const PATH_USER_MASTERS = "/userMasters/";
const PATH_FIELDS = "/fields/";
const PATH_FIELD_MASTERS = "/fieldMasters/";
/**
* Класс для работы с ссылками внутри xml структуры во время чтения
* @constructor
*/
function XmlReaderContext(pkg)
{
this.pkg = pkg;
this.pathToUser = {};
this.pathToUserMaster = {};
this.pathToField = {};
this.pathToFieldMaster = {};
}
XmlReaderContext.prototype.getOformContext = function()
{
return this;
};
XmlReaderContext.prototype.getUser = function(path)
{
let user = this.pathToUser[path];
if (user)
return user;
let reader = this.getXmlReader(path);
if (!reader)
return null;
user = AscOForm.CUser.fromXml(reader);
this.pathToUser[path] = user;
return user;
};
XmlReaderContext.prototype.getUserMaster = function(path)
{
let userMaster = this.pathToUserMaster[path];
if (userMaster)
return userMaster;
let reader = this.getXmlReader(path);
if (!reader)
return null;
userMaster = AscOForm.CUserMaster.fromXml(reader);
this.pathToUserMaster[path] = userMaster;
return userMaster;
};
XmlReaderContext.prototype.getField = function(path)
{
let field = this.pathToField[path];
if (field)
return field;
let reader = this.getXmlReader(path);
if (!reader)
return null;
return null;
// TODO: implement
// field = AscOForm.CField.fromXml(reader);
// this.pathToField[path] = field;
// return field;
};
XmlReaderContext.prototype.getFieldMaster = function(path)
{
let fieldMaster = this.pathToFieldMaster[path];
if (fieldMaster)
return fieldMaster;
let reader = this.getXmlReader(path);
if (!reader)
return null;
fieldMaster = AscOForm.CFieldMaster.fromXml(reader);
this.pathToFieldMaster[path] = fieldMaster;
return fieldMaster;
};
XmlReaderContext.prototype.getAllUsers = function()
{
return this.getAllByMapAndPath(this.pathToUser, PATH_USERS, AscOForm.CUser.fromXml);
};
XmlReaderContext.prototype.getAllUserMasters = function()
{
return this.getAllByMapAndPath(this.pathToUserMaster, PATH_USER_MASTERS, AscOForm.CUserMaster.fromXml);
};
XmlReaderContext.prototype.getAllFields = function()
{
// TODO: Implement
return [];
//return this.getAllByMapAndPath(this.pathToField, PATH_FIELDS, AscOForm.CField.fromXml);
};
XmlReaderContext.prototype.getAllFieldMasters = function()
{
return this.getAllByMapAndPath(this.pathToFieldMaster, PATH_FIELD_MASTERS, AscOForm.CFieldMaster.fromXml);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XmlReaderContext.prototype.getXmlReader = function(path)
{
let part = this.pkg.getPartByUri(path);
if (!part)
return null;
let partContent = part.getDocumentContent();
if (!partContent)
return null;
let xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.setOformContext(this);
return new AscCommon.StaxParser(partContent, part, xmlParserContext);
};
XmlReaderContext.prototype.getAllByMapAndPath = function(map, path, fromXml)
{
let result = [];
for (let key in map)
{
result.push(map[key]);
}
for (let uri in this.pkg.parts)
{
if (uri.startsWith(path)
&& uri.endsWith(".xml")
&& !map[uri])
{
let reader = this.getXmlReader(uri);
if (!reader)
return;
let element = fromXml(reader);
if (element)
{
map[uri] = element;
result.push(element);
}
}
}
return result;
}
//--------------------------------------------------------export----------------------------------------------------
AscOForm.XmlReaderContext = XmlReaderContext;
/**
* Класс для работы с ссылками внутри xml структуры во время записи
* @constructor
*/
function XmlWriterContext(pkg)
{
this.pkg = pkg;
this.userToPart = {};
this.userMasterToPart = {};
this.fieldToPart = {};
this.fieldMasterToPart = {};
this.partToRId = {};
}
XmlWriterContext.prototype.clearCurrentPartDataMaps = function()
{
this.partToRId = {};
};
XmlWriterContext.prototype.getRId = function(part)
{
if (this.partToRId[part.uri])
return this.partToRId[part.uri];
if (!this.part)
return "";
let target = part.uri;
let base = this.part.uri;
if (target.startsWith('/'))
target = target.substring(1);
if (base.startsWith('/'))
base = base.substring(1);
let baseSplit = base.split('/');
let targetSplit = target.split('/');
while (baseSplit.length && targetSplit.length && baseSplit[0] === targetSplit[0])
{
baseSplit.shift();
targetSplit.shift()
}
let relative = "";
for (let index = 0, count = baseSplit.length - 1; index < count; ++index)
{
relative += "../";
}
relative += targetSplit.join('/');
let rId = this.part.addRelationship(null, relative);
this.partToRId[part.uri] = rId;
return rId;
};
XmlWriterContext.prototype.getUserPart = function(user)
{
return this.getPartFromPkg(this.userToPart, user, AscCommon.openXml.Types.oformUser);
};
XmlWriterContext.prototype.haveUserPart = function(user)
{
return !!this.userToPart[user.GetId()];
};
XmlWriterContext.prototype.getUserMasterPart = function(userMaster)
{
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformUserMaster);
};
XmlWriterContext.prototype.getDefaultUserMasterPart = function(userMaster)
{
return this.getPartFromPkg(this.userMasterToPart, userMaster, AscCommon.openXml.Types.oformDefaultUserMaster);
};
XmlWriterContext.prototype.haveUserMasterPart = function(userMaster)
{
return !!this.userMasterToPart[userMaster.GetId()];
};
XmlWriterContext.prototype.getFieldPart = function(field)
{
return this.getPartFromPkg(this.fieldToPart, field, AscCommon.openXml.Types.oformField);
};
XmlWriterContext.prototype.haveFieldPart = function(field)
{
return !!this.fieldToPart[field.GetId()];
};
XmlWriterContext.prototype.getFieldMasterPart = function(fieldMaster)
{
return this.getPartFromPkg(this.fieldMasterToPart, fieldMaster, AscCommon.openXml.Types.oformFieldMaster);
};
XmlWriterContext.prototype.haveFieldMasterPart = function(fieldMaster)
{
return !!this.fieldMasterToPart[fieldMaster];
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XmlWriterContext.prototype.getPartFromPkg = function(map, object, contentType)
{
let objectId = object.GetId();
if (map[objectId])
return map[objectId];
let part = this.pkg.addPart(contentType).part;
let xmlWriter = new AscCommon.CMemory();
xmlWriter.context = this;
part.setDataXml(object, xmlWriter);
map[objectId] = part;
return part;
};
//--------------------------------------------------------export----------------------------------------------------
AscOForm.XmlWriterContext = XmlWriterContext;
})(window);

129
oform/xml/XmlPackage.js Normal file

File diff suppressed because one or more lines are too long