[de] Add XmlReaderContext to xmlParserContext; Add oform opening from bin; For bug 60341

This commit is contained in:
Sergey Konovalov
2022-12-28 00:32:59 +03:00
parent 61d936dcbb
commit f7e84e5912
5 changed files with 41 additions and 16 deletions

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}
}