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";
//текущий обьект куда записываются информация для update, когда принимаются изменения в native редакторе
this.oRedoObjectParamNative = null;
// Массив lock-ов, которые были на открытии документа
this.arrPreOpenLocksObjects = [];
// CoAuthoring and Chat
this.User = undefined;
this.CoAuthoringApi = new CDocsCoApi();
......@@ -160,8 +163,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.formulasList = null; // Список всех формул
this.TrackFile = null;
this.fCallbackSendCommand = null;
this.fCurCallback = null;
......@@ -1497,6 +1498,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
t.handlers.trigger("asc_onConnectionStateChanged", e);
};
this.CoAuthoringApi.onLocksAcquired = function(e) {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksAcquired(e);});
return;
}
if (2 != e["state"]) {
var elementValue = e["blockValue"];
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";
}
};
this.CoAuthoringApi.onLocksReleased = function(e, bChanges) {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksReleased(e, bChanges);});
return;
}
var element = e["block"];
var lockElem = t.collaborativeEditing.getLockByElem(element, c_oAscLockTypes.kLockTypeOther);
if (null != lockElem) {
......@@ -1600,6 +1613,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
};
this.CoAuthoringApi.onLocksReleasedEnd = function() {
if (!t.IsSendDocumentLoadCompleate) {
// Пока документ еще не загружен ничего не делаем
return;
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно сбросить блокировку toolbar
t.wb._onWSSelectionChanged(/*info*/null);
......@@ -1885,6 +1903,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
// Применяем пришедшие при открытии изменения
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 diff is collapsed.
......@@ -411,6 +411,9 @@ function asc_docs_api(name)
this.isApplyChangesOnOpen = false;
this.isApplyChangesOnOpenEnabled = true;
// Массив lock-ов, которые были на открытии документа
this.arrPreOpenLocksObjects = [];
this.mailMergeFileData = null;
// Тип состояния на данный момент (сохранение, открытие или никакое)
......@@ -521,7 +524,6 @@ function asc_docs_api(name)
this.ParcedDocument = false;
this.isStartCoAuthoringOnEndLoad = false; // Подсоединились раньше, чем документ загрузился
this.TrackFile = null;
this.fCurCallback = null;
var oThis = this;
......@@ -1310,80 +1312,80 @@ asc_docs_api.prototype._coAuthoringInit = function(fCallback)
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.onConnectionStateChanged = function (e) { t.asc_fireCallback("asc_onConnectionStateChanged", e); };
this.CoAuthoringApi.onLocksAcquired = function (e)
{
if ( 2 != e["state"] )
{
this.CoAuthoringApi.onLocksAcquired = function(e) {
if (t.isApplyChangesOnOpenEnabled) {
// Пока документ еще не загружен, будем сохранять функцию и аргументы
t.arrPreOpenLocksObjects.push(function(){t.CoAuthoringApi.onLocksAcquired(e);});
return;
}
if (2 != e["state"]) {
var Id = e["block"];
var Class = g_oTableId.Get_ById( Id );
if ( null != Class )
{
var Class = 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 (locktype_Other2 === OldType || locktype_Other3 === OldType) {
Lock.Set_Type(locktype_Other3, true);
} else {
Lock.Set_Type(locktype_Other, true);
}
// Выставляем ID пользователя, залочившего данный элемент
Lock.Set_UserId( e["user"] );
Lock.Set_UserId(e["user"]);
if ( Class instanceof CHeaderFooterController )
if (Class instanceof CHeaderFooterController) {
editor.sync_LockHeaderFooters();
else if ( Class instanceof CDocument )
} else if (Class instanceof CDocument) {
editor.sync_LockDocumentProps();
else if ( Class instanceof CComment )
} else if (Class instanceof CComment) {
editor.sync_LockComment(Class.Get_Id(), e["user"]);
else if ( Class instanceof CGraphicObjects )
} else if (Class instanceof CGraphicObjects) {
editor.sync_LockDocumentSchema();
}
// TODO: Здесь для ускорения надо сделать проверку, является ли текущим элемент с
// заданным Id. Если нет, тогда и не надо обновлять состояние.
editor.WordControl.m_oLogicDocument.Document_UpdateInterfaceState();
}
else
{
} else {
CollaborativeEditing.Add_NeedLock(Id, e["user"]);
}
}
};
this.CoAuthoringApi.onLocksReleased = function (e, bChanges)
{
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 Class = g_oTableId.Get_ById(Id);
if (null != Class) {
var Lock = Class.Lock;
if ( "undefined" != typeof(Lock) )
{
if ("undefined" != typeof(Lock)) {
var CurType = Lock.Get_Type();
var NewType = locktype_None;
if ( CurType === locktype_Other )
{
if ( true != bChanges )
if (CurType === locktype_Other) {
if (true != bChanges) {
NewType = locktype_None;
else
{
} else {
NewType = locktype_Other2;
CollaborativeEditing.Add_Unlock(Class);
}
}
else if ( CurType === locktype_Mine )
{
} else if (CurType === locktype_Mine) {
// Такого быть не должно
NewType = locktype_Mine;
}
else if ( CurType === locktype_Other2 || CurType === locktype_Other3 )
} else if (CurType === locktype_Other2 || CurType === locktype_Other3) {
NewType = locktype_Other2;
Lock.Set_Type( NewType, true );
}
Lock.Set_Type(NewType, true);
}
else
{
} else {
CollaborativeEditing.Remove_NeedLock(Id);
}
};
......@@ -6185,6 +6187,12 @@ asc_docs_api.prototype.OpenDocumentEndCallback = function()
this.isApplyChangesOnOpen = true;
CollaborativeEditing.Apply_Changes();
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 } } );
......
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