diff --git a/oform/OForm.js b/oform/OForm.js index af2dd2e..b2d9719 100644 --- a/oform/OForm.js +++ b/oform/OForm.js @@ -64,19 +64,19 @@ { return this.Format; }; - OForm.prototype.fromZip = function(zip) + OForm.prototype.fromZip = function(zip, opt_sdtPrWithFieldPath) { let xmlPkg = new AscOForm.XmlPackage(zip); xmlPkg.setContext(new AscOForm.XmlReaderContext(xmlPkg)); - this.Format.fromPkg(xmlPkg); + this.Format.fromPkg(xmlPkg, opt_sdtPrWithFieldPath); }; - OForm.prototype.toZip = function(zip) + 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); + this.Format.toPkg(xmlPkg, opt_fieldMastersPartMap); // Наш XmlPackage работает в общей папке, а нам нужно запихнуть в zip подпапку oform zip.getPaths().forEach(function(path) diff --git a/oform/format/Document.js b/oform/format/Document.js index d5c66b2..595445b 100644 --- a/oform/format/Document.js +++ b/oform/format/Document.js @@ -194,14 +194,16 @@ return this.FieldGroups[index]; }; - CDocument.prototype.fromPkg = function(xmlPkg) + CDocument.prototype.fromPkg = function(xmlPkg, opt_sdtPrWithFieldPath) { let xmlContext = xmlPkg.getContext(); let mainPart = xmlPkg.getMainPart(); let mainContent = mainPart ? mainPart.getDocumentContent() : null; if (mainContent) { - let reader = new AscCommon.StaxParser(mainContent, mainPart, xmlContext); + let xmlParserContext = new AscCommon.XmlParserContext(); + xmlParserContext.xmlReaderContext = xmlContext; + let reader = new AscCommon.StaxParser(mainContent, mainPart, xmlParserContext); this.fromXml(reader); } @@ -218,8 +220,19 @@ { 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) + CDocument.prototype.toPkg = function(xmlPkg, opt_fieldMastersPartMap) { let xmlContext = xmlPkg.getContext(); let xmlWriter = xmlPkg.getXmlWriter(); @@ -258,7 +271,14 @@ 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; + } + } } }); }; @@ -300,10 +320,10 @@ { if ("r:id" === reader.GetName()) { - let xmlContext = reader.GetContext(); + let xmlReaderContext = reader.GetContext().xmlReaderContext; let rId = reader.GetValueDecodeXml(); let rel = reader.rels.getRelationship(rId); - let userMaster = xmlContext.getUserMaster(rel.getFullPath()); + let userMaster = xmlReaderContext.getUserMaster(rel.getFullPath()); if (userMaster) this.setDefaultUser(userMaster); } diff --git a/oform/format/FieldGroup.js b/oform/format/FieldGroup.js index f5402d0..9b07ba5 100644 --- a/oform/format/FieldGroup.js +++ b/oform/format/FieldGroup.js @@ -231,7 +231,7 @@ fG.setWeight(reader.GetValueInt()); } - let xmlContext = reader.GetContext(); + let xmlReaderContext = reader.GetContext().xmlReaderContext; let depth = reader.GetDepth(); while (reader.ReadNextSiblingNode(depth)) { @@ -245,7 +245,7 @@ { let rId = reader.GetValueDecodeXml(); let rel = reader.rels.getRelationship(rId); - let userMaster = xmlContext.getUserMaster(rel.getFullPath()); + let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath()); if (userMaster) fG.addUser(userMaster); } @@ -260,7 +260,7 @@ { let rId = reader.GetValueDecodeXml(); let rel = reader.rels.getRelationship(rId); - let fieldMaster = xmlContext.getFieldMaster(rel.getFullPath()); + let fieldMaster = xmlReaderContext && xmlReaderContext.getFieldMaster(rel.getFullPath()); if (fieldMaster) fG.addField(fieldMaster); } diff --git a/oform/format/FieldMaster.js b/oform/format/FieldMaster.js index bc78967..ce2cd68 100644 --- a/oform/format/FieldMaster.js +++ b/oform/format/FieldMaster.js @@ -270,7 +270,7 @@ function readUsersFromXml(reader) { - let xmlContext = reader.GetContext(); + let xmlReaderContext = reader.GetContext().xmlReaderContext; let users = []; let depth = reader.GetDepth(); while (reader.ReadNextSiblingNode(depth)) @@ -283,7 +283,7 @@ { let rId = reader.GetValueDecodeXml(); let rel = reader.rels.getRelationship(rId); - let userMaster = xmlContext.getUserMaster(rel.getFullPath()); + let userMaster = xmlReaderContext && xmlReaderContext.getUserMaster(rel.getFullPath()); if (userMaster) users.push(userMaster); } diff --git a/oform/xml/XmlContext.js b/oform/xml/XmlContext.js index 0228e0b..f7b19fb 100644 --- a/oform/xml/XmlContext.js +++ b/oform/xml/XmlContext.js @@ -141,8 +141,10 @@ let partContent = part.getDocumentContent(); if (!partContent) return null; - - return new AscCommon.StaxParser(partContent, part, this); + + let xmlParserContext = new AscCommon.XmlParserContext(); + xmlParserContext.xmlReaderContext = this; + return new AscCommon.StaxParser(partContent, part, xmlParserContext); }; XmlReaderContext.prototype.getAllByMapAndPath = function(map, path, fromXml) { @@ -164,7 +166,10 @@ let element = fromXml(reader); if (element) + { + map[uri] = element; result.push(element); + } } }