Commit 4c2a82c4 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

fix bug #30242

При загрузке lock-и должны приходить после того, как мы открыли документ. (ToDo возможно стоит вообще пересмотреть этот момент и реализовать его в doccoapi).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@64703 954022d7-b5bf-4e40-9824-e11837661b57
parent b01c17cc
...@@ -89,6 +89,9 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -89,6 +89,9 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
//текущий обьект куда записываются информация для update, когда принимаются изменения в native редакторе //текущий обьект куда записываются информация для update, когда принимаются изменения в native редакторе
this.oRedoObjectParamNative = null; this.oRedoObjectParamNative = null;
// Массив lock-ов, которые были на открытии документа
this.arrPreOpenLocksObjects = [];
// CoAuthoring and Chat // CoAuthoring and Chat
this.User = undefined; this.User = undefined;
this.CoAuthoringApi = new CDocsCoApi(); this.CoAuthoringApi = new CDocsCoApi();
...@@ -160,8 +163,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -160,8 +163,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.formulasList = null; // Список всех формул this.formulasList = null; // Список всех формул
this.TrackFile = null;
this.fCallbackSendCommand = null; this.fCallbackSendCommand = null;
this.fCurCallback = null; this.fCurCallback = null;
...@@ -1497,6 +1498,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1497,6 +1498,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
t.handlers.trigger("asc_onConnectionStateChanged", e); t.handlers.trigger("asc_onConnectionStateChanged", e);
}; };
this.CoAuthoringApi.onLocksAcquired = function(e) { this.CoAuthoringApi.onLocksAcquired = function(e) {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksAcquired(e);});
return;
}
if (2 != e["state"]) { if (2 != e["state"]) {
var elementValue = e["blockValue"]; var elementValue = e["blockValue"];
var lockElem = t.collaborativeEditing.getLockByElem(elementValue, c_oAscLockTypes.kLockTypeOther); var lockElem = t.collaborativeEditing.getLockByElem(elementValue, c_oAscLockTypes.kLockTypeOther);
...@@ -1555,6 +1562,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1555,6 +1562,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
} }
}; };
this.CoAuthoringApi.onLocksReleased = function(e, bChanges) { this.CoAuthoringApi.onLocksReleased = function(e, bChanges) {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksReleased(e, bChanges);});
return;
}
var element = e["block"]; var element = e["block"];
var lockElem = t.collaborativeEditing.getLockByElem(element, c_oAscLockTypes.kLockTypeOther); var lockElem = t.collaborativeEditing.getLockByElem(element, c_oAscLockTypes.kLockTypeOther);
if (null != lockElem) { if (null != lockElem) {
...@@ -1600,6 +1613,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1600,6 +1613,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
} }
}; };
this.CoAuthoringApi.onLocksReleasedEnd = function() { this.CoAuthoringApi.onLocksReleasedEnd = function() {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен ничего не делаем
return;
}
if (t.wb) { if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно сбросить блокировку toolbar // Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно сбросить блокировку toolbar
t.wb._onWSSelectionChanged(/*info*/null); t.wb._onWSSelectionChanged(/*info*/null);
...@@ -1885,6 +1903,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1885,6 +1903,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
// Применяем пришедшие при открытии изменения // Применяем пришедшие при открытии изменения
this._applyFirstLoadChanges(); this._applyFirstLoadChanges();
// Применяем все lock-и (ToDo возможно стоит пересмотреть вообще Lock-и)
for (var i = 0; i < this.arrPreOpenLocksObjects.length; ++i) {
this.arrPreOpenLocksObjects[i]();
}
this.arrPreOpenLocksObjects = [];
// Меняем тип состояния (на никакое) // Меняем тип состояния (на никакое)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None; this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
......
...@@ -68,6 +68,9 @@ function asc_docs_api(name) ...@@ -68,6 +68,9 @@ function asc_docs_api(name)
this.isApplyChangesOnOpen = false; this.isApplyChangesOnOpen = false;
this.isApplyChangesOnOpenEnabled = true; this.isApplyChangesOnOpenEnabled = true;
// Массив lock-ов, которые были на открытии документа
this.arrPreOpenLocksObjects = [];
this.IsSupportEmptyPresentation = true; this.IsSupportEmptyPresentation = true;
this.ShowParaMarks = false; this.ShowParaMarks = false;
...@@ -169,8 +172,7 @@ function asc_docs_api(name) ...@@ -169,8 +172,7 @@ function asc_docs_api(name)
this.IsLongActionCurrent = 0; this.IsLongActionCurrent = 0;
this.LongActionCallbacks = []; this.LongActionCallbacks = [];
this.LongActionCallbacksParams = []; this.LongActionCallbacksParams = [];
this.TrackFile = null;
this.fCurCallback = null; this.fCurCallback = null;
var oThis = this; var oThis = this;
...@@ -245,204 +247,184 @@ asc_docs_api.prototype._coAuthoringInit = function (fCallback) { ...@@ -245,204 +247,184 @@ asc_docs_api.prototype._coAuthoringInit = function (fCallback) {
this.CoAuthoringApi.onAuthParticipantsChanged = function (e, count) { t.asc_fireCallback("asc_onAuthParticipantsChanged", e, count); }; this.CoAuthoringApi.onAuthParticipantsChanged = function (e, count) { t.asc_fireCallback("asc_onAuthParticipantsChanged", e, count); };
this.CoAuthoringApi.onMessage = function (e, clear) { t.asc_fireCallback( "asc_onCoAuthoringChatReceiveMessage", e, clear); }; this.CoAuthoringApi.onMessage = function (e, clear) { t.asc_fireCallback( "asc_onCoAuthoringChatReceiveMessage", e, clear); };
this.CoAuthoringApi.onConnectionStateChanged = function (e) { t.asc_fireCallback( "asc_onConnectionStateChanged", e); }; this.CoAuthoringApi.onConnectionStateChanged = function (e) { t.asc_fireCallback( "asc_onConnectionStateChanged", e); };
this.CoAuthoringApi.onLocksAcquired = function (e) { this.CoAuthoringApi.onLocksAcquired = function(e) {
if (2 != e["state"]) { if (t.isApplyChangesOnOpenEnabled) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksAcquired(e);});
return;
}
var block_value = e["blockValue"]; if (2 != e["state"]) {
var classes = [];
switch(block_value["type"])
{
case c_oAscLockTypeElemPresentation.Object:
{
classes.push(block_value["objId"]);
//classes.push(block_value["slideId"]);
break;
}
case c_oAscLockTypeElemPresentation.Slide:
{
classes.push(block_value["val"]);
break;
}
case c_oAscLockTypeElemPresentation.Presentation:
{
break;
}
}
var Id = e["block"];
for(var i = 0; i < classes.length; ++i) var block_value = e["blockValue"];
{ var classes = [];
var Class = g_oTableId.Get_ById(classes[i]);// g_oTableId.Get_ById( Id ); switch (block_value["type"]) {
if ( null != Class ) case c_oAscLockTypeElemPresentation.Object:
{
var Lock = Class.Lock;
var OldType = Class.Lock.Get_Type();
if ( locktype_Other2 === OldType || locktype_Other3 === OldType )
Lock.Set_Type( locktype_Other3, true );
else
Lock.Set_Type( locktype_Other, true );
if ( Class instanceof PropLocker )
{
var object = g_oTableId.Get_ById(Class.objectId);
if(object instanceof Slide && Class === object.deleteLock)
{
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(object.num);
}
}
// Выставляем ID пользователя, залочившего данный элемент
Lock.Set_UserId( e["user"] );
if ( Class instanceof PropLocker )
{
var object = g_oTableId.Get_ById(Class.objectId);
if(object instanceof CPresentation)
{
if(Class === editor.WordControl.m_oLogicDocument.themeLock)
{
editor.asc_fireCallback("asc_onLockDocumentTheme");
}
else if(Class === editor.WordControl.m_oLogicDocument.schemeLock)
{
editor.asc_fireCallback("asc_onLockDocumentSchema");
}
else if(Class === editor.WordControl.m_oLogicDocument.slideSizeLock)
{
editor.asc_fireCallback("asc_onLockDocumentProps");
}
}
}
if(Class instanceof CComment)
{
editor.sync_LockComment(Class.Get_Id(), e["user"]);
}
// TODO: Здесь для ускорения надо сделать проверку, является ли текущим элемент с
// заданным Id. Если нет, тогда и не надо обновлять состояние.
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
}
else
{
if(classes[i].indexOf("new_object") > -1 && block_value["type"] === c_oAscLockTypeElemPresentation.Object)
{
var slide_id = block_value["slideId"];
var delete_lock = g_oTableId.Get_ById(slide_id);
if(isRealObject(delete_lock))
{
var Lock = delete_lock.Lock;
var OldType = Lock.Get_Type();
if ( locktype_Other2 === OldType || locktype_Other3 === OldType )
Lock.Set_Type( locktype_Other3, true );
else
Lock.Set_Type( locktype_Other, true );
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(g_oTableId.Get_ById(delete_lock.objectId).num);
}
else
{
CollaborativeEditing.Add_NeedLock(slide_id, e["user"]);
}
}
else
{
CollaborativeEditing.Add_NeedLock(classes[i], e["user"]);
}
}
}
}
};
this.CoAuthoringApi.onLocksReleased = function (e, bChanges) {
var Id;
var block_value = e["block"];
var classes = [];
switch(block_value["type"])
{ {
case c_oAscLockTypeElemPresentation.Object: classes.push(block_value["objId"]);
{ //classes.push(block_value["slideId"]);
classes.push(block_value["objId"]); break;
//classes.push(block_value["slideId"]); }
break; case c_oAscLockTypeElemPresentation.Slide:
{
classes.push(block_value["val"]);
break;
}
case c_oAscLockTypeElemPresentation.Presentation:
{
break;
}
}
for (var i = 0; i < classes.length; ++i) {
var Class = g_oTableId.Get_ById(classes[i]);// g_oTableId.Get_ById( Id );
if (null != Class) {
var Lock = Class.Lock;
var OldType = Class.Lock.Get_Type();
if (locktype_Other2 === OldType || locktype_Other3 === OldType) {
Lock.Set_Type(locktype_Other3, true);
} else {
Lock.Set_Type(locktype_Other, true);
}
if (Class instanceof PropLocker) {
var object = g_oTableId.Get_ById(Class.objectId);
if (object instanceof Slide && Class === object.deleteLock) {
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(object.num);
} }
case c_oAscLockTypeElemPresentation.Slide: }
{ // Выставляем ID пользователя, залочившего данный элемент
classes.push(block_value["val"]); Lock.Set_UserId(e["user"]);
break;
if (Class instanceof PropLocker) {
var object = g_oTableId.Get_ById(Class.objectId);
if (object instanceof CPresentation) {
if (Class === editor.WordControl.m_oLogicDocument.themeLock) {
editor.asc_fireCallback("asc_onLockDocumentTheme");
} else if (Class === editor.WordControl.m_oLogicDocument.schemeLock) {
editor.asc_fireCallback("asc_onLockDocumentSchema");
} else if (Class === editor.WordControl.m_oLogicDocument.slideSizeLock) {
editor.asc_fireCallback("asc_onLockDocumentProps");
}
} }
case c_oAscLockTypeElemPresentation.Presentation: }
{ if (Class instanceof CComment) {
break; editor.sync_LockComment(Class.Get_Id(), e["user"]);
}
// TODO: Здесь для ускорения надо сделать проверку, является ли текущим элемент с
// заданным Id. Если нет, тогда и не надо обновлять состояние.
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
} else {
if (classes[i].indexOf("new_object") > -1 && block_value["type"] === c_oAscLockTypeElemPresentation.Object) {
var slide_id = block_value["slideId"];
var delete_lock = g_oTableId.Get_ById(slide_id);
if (isRealObject(delete_lock)) {
var Lock = delete_lock.Lock;
var OldType = Lock.Get_Type();
if (locktype_Other2 === OldType || locktype_Other3 === OldType) {
Lock.Set_Type(locktype_Other3, true);
} else {
Lock.Set_Type(locktype_Other, true);
}
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(g_oTableId.Get_ById(delete_lock.objectId).num);
} else {
CollaborativeEditing.Add_NeedLock(slide_id, e["user"]);
} }
} else {
CollaborativeEditing.Add_NeedLock(classes[i], e["user"]);
}
} }
for(var i = 0; i < classes.length; ++i) }
{ }
Id = classes[i]; };
var Class = g_oTableId.Get_ById( Id ); this.CoAuthoringApi.onLocksReleased = function(e, bChanges) {
if ( null != Class ) if (t.isApplyChangesOnOpenEnabled) {
{ // Пока документ еще не загружен, будем сохранять функцию и аргументы
var Lock = Class.Lock; t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksReleased(e, bChanges);});
return;
if ( "undefined" != typeof(Lock) ) }
{
var CurType = Lock.Get_Type(); var Id;
var block_value = e["block"];
var NewType = locktype_None; var classes = [];
switch (block_value["type"]) {
if ( CurType === locktype_Other ) case c_oAscLockTypeElemPresentation.Object:
{ {
if ( true != bChanges ) classes.push(block_value["objId"]);
NewType = locktype_None; //classes.push(block_value["slideId"]);
else break;
{ }
NewType = locktype_Other2; case c_oAscLockTypeElemPresentation.Slide:
CollaborativeEditing.Add_Unlock(Class); {
} classes.push(block_value["val"]);
} break;
else if ( CurType === locktype_Mine ) }
{ case c_oAscLockTypeElemPresentation.Presentation:
// Такого быть не должно {
NewType = locktype_Mine; break;
} }
else if ( CurType === locktype_Other2 || CurType === locktype_Other3 ) }
NewType = locktype_Other2; for (var i = 0; i < classes.length; ++i) {
Id = classes[i];
Lock.Set_Type( NewType, true ); var Class = g_oTableId.Get_ById(Id);
if(Class instanceof PropLocker ) if (null != Class) {
{ var Lock = Class.Lock;
var object = g_oTableId.Get_ById(Class.objectId);
if(object instanceof Slide && Class === object.deleteLock) if ("undefined" != typeof(Lock)) {
{ var CurType = Lock.Get_Type();
if(NewType !== locktype_Mine && NewType !== locktype_None)
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(object.num); var NewType = locktype_None;
else
editor.WordControl.m_oLogicDocument.DrawingDocument.UnLockSlide(object.num); if (CurType === locktype_Other) {
} if (true != bChanges) {
if(object instanceof CPresentation) NewType = locktype_None;
{ } else {
if(Class === object.themeLock) NewType = locktype_Other2;
{ CollaborativeEditing.Add_Unlock(Class);
if(NewType !== locktype_Mine && NewType !== locktype_None)
editor.asc_fireCallback("asc_onLockDocumentTheme");
else
editor.asc_fireCallback("asc_onUnLockDocumentTheme");
}
if(Class === object.slideSizeLock)
{
if(NewType !== locktype_Mine && NewType !== locktype_None)
editor.asc_fireCallback("asc_onLockDocumentProps");
else
editor.asc_fireCallback("asc_onUnLockDocumentProps");
}
}
}
}
} }
else } else if (CurType === locktype_Mine) {
{ // Такого быть не должно
CollaborativeEditing.Remove_NeedLock(Id); NewType = locktype_Mine;
} else if (CurType === locktype_Other2 || CurType === locktype_Other3) {
NewType = locktype_Other2;
}
Lock.Set_Type(NewType, true);
if (Class instanceof PropLocker) {
var object = g_oTableId.Get_ById(Class.objectId);
if (object instanceof Slide && Class === object.deleteLock) {
if (NewType !== locktype_Mine && NewType !== locktype_None) {
editor.WordControl.m_oLogicDocument.DrawingDocument.LockSlide(object.num);
} else {
editor.WordControl.m_oLogicDocument.DrawingDocument.UnLockSlide(object.num);
}
}
if (object instanceof CPresentation) {
if (Class === object.themeLock) {
if (NewType !== locktype_Mine && NewType !== locktype_None) {
editor.asc_fireCallback("asc_onLockDocumentTheme");
} else {
editor.asc_fireCallback("asc_onUnLockDocumentTheme");
}
}
if (Class === object.slideSizeLock) {
if (NewType !== locktype_Mine && NewType !== locktype_None) {
editor.asc_fireCallback("asc_onLockDocumentProps");
} else {
editor.asc_fireCallback("asc_onUnLockDocumentProps");
}
}
} }
}
} }
}; } else {
CollaborativeEditing.Remove_NeedLock(Id);
}
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) { this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии // bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var Changes = new CCollaborativeChanges(); var Changes = new CCollaborativeChanges();
...@@ -3926,6 +3908,12 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function() ...@@ -3926,6 +3908,12 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function()
} }
return; return;
} }
// Применяем все lock-и (ToDo возможно стоит пересмотреть вообще Lock-и)
for (var i = 0; i < this.arrPreOpenLocksObjects.length; ++i) {
this.arrPreOpenLocksObjects[i]();
}
this.arrPreOpenLocksObjects = [];
} }
} }
this.WordControl.m_oLogicDocument.Recalculate({Drawings: {All:true, Map: {}}}); this.WordControl.m_oLogicDocument.Recalculate({Drawings: {All:true, Map: {}}});
......
...@@ -411,6 +411,9 @@ function asc_docs_api(name) ...@@ -411,6 +411,9 @@ function asc_docs_api(name)
this.isApplyChangesOnOpen = false; this.isApplyChangesOnOpen = false;
this.isApplyChangesOnOpenEnabled = true; this.isApplyChangesOnOpenEnabled = true;
// Массив lock-ов, которые были на открытии документа
this.arrPreOpenLocksObjects = [];
this.mailMergeFileData = null; this.mailMergeFileData = null;
// Тип состояния на данный момент (сохранение, открытие или никакое) // Тип состояния на данный момент (сохранение, открытие или никакое)
...@@ -520,8 +523,7 @@ function asc_docs_api(name) ...@@ -520,8 +523,7 @@ function asc_docs_api(name)
this.ParcedDocument = false; this.ParcedDocument = false;
this.isStartCoAuthoringOnEndLoad = false; // Подсоединились раньше, чем документ загрузился this.isStartCoAuthoringOnEndLoad = false; // Подсоединились раньше, чем документ загрузился
this.TrackFile = null;
this.fCurCallback = null; this.fCurCallback = null;
var oThis = this; var oThis = this;
...@@ -1310,83 +1312,83 @@ asc_docs_api.prototype._coAuthoringInit = function(fCallback) ...@@ -1310,83 +1312,83 @@ asc_docs_api.prototype._coAuthoringInit = function(fCallback)
this.CoAuthoringApi.onAuthParticipantsChanged = function (e, count) { t.asc_fireCallback("asc_onAuthParticipantsChanged", e, count); }; this.CoAuthoringApi.onAuthParticipantsChanged = function (e, count) { t.asc_fireCallback("asc_onAuthParticipantsChanged", e, count); };
this.CoAuthoringApi.onMessage = function (e, clear) { t.asc_fireCallback("asc_onCoAuthoringChatReceiveMessage", e, clear); }; this.CoAuthoringApi.onMessage = function (e, clear) { t.asc_fireCallback("asc_onCoAuthoringChatReceiveMessage", e, clear); };
this.CoAuthoringApi.onConnectionStateChanged = function (e) { t.asc_fireCallback("asc_onConnectionStateChanged", e); }; this.CoAuthoringApi.onConnectionStateChanged = function (e) { t.asc_fireCallback("asc_onConnectionStateChanged", e); };
this.CoAuthoringApi.onLocksAcquired = function (e) this.CoAuthoringApi.onLocksAcquired = function(e) {
{ if (t.isApplyChangesOnOpenEnabled) {
if ( 2 != e["state"] ) // Пока документ еще не загружен, будем сохранять функцию и аргументы
{ t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksAcquired(e);});
var Id = e["block"]; return;
var Class = g_oTableId.Get_ById( Id ); }
if ( null != Class )
{ if (2 != e["state"]) {
var Lock = Class.Lock; var Id = e["block"];
var Class = g_oTableId.Get_ById(Id);
var OldType = Class.Lock.Get_Type(); if (null != Class) {
if ( locktype_Other2 === OldType || locktype_Other3 === OldType ) var Lock = Class.Lock;
Lock.Set_Type( locktype_Other3, true );
else var OldType = Class.Lock.Get_Type();
Lock.Set_Type( locktype_Other, true ); if (locktype_Other2 === OldType || locktype_Other3 === OldType) {
Lock.Set_Type(locktype_Other3, true);
// Выставляем ID пользователя, залочившего данный элемент } else {
Lock.Set_UserId( e["user"] ); Lock.Set_Type(locktype_Other, true);
if ( Class instanceof CHeaderFooterController )
editor.sync_LockHeaderFooters();
else if ( Class instanceof CDocument )
editor.sync_LockDocumentProps();
else if ( Class instanceof CComment )
editor.sync_LockComment(Class.Get_Id(), e["user"]);
else if ( Class instanceof CGraphicObjects )
editor.sync_LockDocumentSchema();
// TODO: Здесь для ускорения надо сделать проверку, является ли текущим элемент с
// заданным Id. Если нет, тогда и не надо обновлять состояние.
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
}
else
{
CollaborativeEditing.Add_NeedLock(Id, e["user"]);
}
} }
};
this.CoAuthoringApi.onLocksReleased = function (e, bChanges)
{
var Id = e["block"];
var Class = g_oTableId.Get_ById( Id );
if ( null != Class )
{
var Lock = Class.Lock;
if ( "undefined" != typeof(Lock) )
{
var CurType = Lock.Get_Type();
var NewType = locktype_None;
if ( CurType === locktype_Other ) // Выставляем ID пользователя, залочившего данный элемент
{ Lock.Set_UserId(e["user"]);
if ( true != bChanges )
NewType = locktype_None; if (Class instanceof CHeaderFooterController) {
else editor.sync_LockHeaderFooters();
{ } else if (Class instanceof CDocument) {
NewType = locktype_Other2; editor.sync_LockDocumentProps();
CollaborativeEditing.Add_Unlock(Class); } else if (Class instanceof CComment) {
} editor.sync_LockComment(Class.Get_Id(), e["user"]);
} } else if (Class instanceof CGraphicObjects) {
else if ( CurType === locktype_Mine ) editor.sync_LockDocumentSchema();
{
// Такого быть не должно
NewType = locktype_Mine;
}
else if ( CurType === locktype_Other2 || CurType === locktype_Other3 )
NewType = locktype_Other2;
Lock.Set_Type( NewType, true );
}
} }
else
{ // TODO: Здесь для ускорения надо сделать проверку, является ли текущим элемент с
CollaborativeEditing.Remove_NeedLock(Id); // заданным Id. Если нет, тогда и не надо обновлять состояние.
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
} else {
CollaborativeEditing.Add_NeedLock(Id, e["user"]);
}
}
};
this.CoAuthoringApi.onLocksReleased = function(e, bChanges) {
if (t.isApplyChangesOnOpenEnabled) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksReleased(e, bChanges);});
return;
}
var Id = e["block"];
var Class = g_oTableId.Get_ById(Id);
if (null != Class) {
var Lock = Class.Lock;
if ("undefined" != typeof(Lock)) {
var CurType = Lock.Get_Type();
var NewType = locktype_None;
if (CurType === locktype_Other) {
if (true != bChanges) {
NewType = locktype_None;
} else {
NewType = locktype_Other2;
CollaborativeEditing.Add_Unlock(Class);
}
} else if (CurType === locktype_Mine) {
// Такого быть не должно
NewType = locktype_Mine;
} else if (CurType === locktype_Other2 || CurType === locktype_Other3) {
NewType = locktype_Other2;
} }
};
Lock.Set_Type(NewType, true);
}
} else {
CollaborativeEditing.Remove_NeedLock(Id);
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad)
{ {
var bUseColor; var bUseColor;
...@@ -6185,6 +6187,12 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function() ...@@ -6185,6 +6187,12 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function()
this.isApplyChangesOnOpen = true; this.isApplyChangesOnOpen = true;
CollaborativeEditing.Apply_Changes(); CollaborativeEditing.Apply_Changes();
CollaborativeEditing.Release_Locks(); CollaborativeEditing.Release_Locks();
// Применяем все lock-и (ToDo возможно стоит пересмотреть вообще Lock-и)
for (var i = 0; i < this.arrPreOpenLocksObjects.length; ++i) {
this.arrPreOpenLocksObjects[i]();
}
this.arrPreOpenLocksObjects = [];
} }
// History.RecalcData_Add( { Type : historyrecalctype_Inline, Data : { Pos : 0, PageNum : 0 } } ); // History.RecalcData_Add( { Type : historyrecalctype_Inline, Data : { Pos : 0, PageNum : 0 } } );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment