2016-04-01 13:17:09 +00:00
/ *
*
2019-01-17 13:05:03 +00:00
* ( c ) Copyright Ascensio System SIA 2010 - 2019
2016-04-01 13:17:09 +00:00
*
* 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
*
2019-01-17 13:00:34 +00:00
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
2016-04-01 13:17:09 +00:00
*
* 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
*
* /
2016-03-11 00:48:53 +00:00
/ * *
* User : Julia . Radzhabova
* Date : 06.03 . 15
* Time : 12 : 13
* /
define ( [
'core' ,
'common/main/lib/collection/HistoryVersions' ,
'common/main/lib/view/History'
] , function ( ) {
'use strict' ;
Common . Controllers . History = Backbone . Controller . extend ( _ . extend ( {
models : [ ] ,
collections : [
'Common.Collections.HistoryVersions'
] ,
views : [
'Common.Views.History'
] ,
initialize : function ( ) {
this . currentChangeId = - 1 ;
this . currentArrColors = [ ] ;
this . currentDocId = '' ;
this . currentDocIdPrev = '' ;
2017-03-14 11:08:02 +00:00
this . currentRev = 0 ;
2017-09-22 14:18:06 +00:00
this . currentServerVersion = 0 ;
2016-03-11 00:48:53 +00:00
} ,
events : {
} ,
onLaunch : function ( ) {
this . panelHistory = this . createView ( 'Common.Views.History' , {
storeHistory : this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' )
} ) ;
2016-10-05 13:31:49 +00:00
this . panelHistory . storeHistory . on ( 'reset' , _ . bind ( this . onResetStore , this ) ) ;
2016-03-11 00:48:53 +00:00
this . panelHistory . on ( 'render:after' , _ . bind ( this . onAfterRender , this ) ) ;
Common . Gateway . on ( 'sethistorydata' , _ . bind ( this . onSetHistoryData , this ) ) ;
} ,
setApi : function ( api ) {
this . api = api ;
2016-09-19 07:41:02 +00:00
this . api . asc _registerCallback ( 'asc_onDownloadUrl' , _ . bind ( this . onDownloadUrl , this ) ) ;
2017-03-14 11:08:02 +00:00
this . api . asc _registerCallback ( 'asc_onExpiredToken' , _ . bind ( this . onExpiredToken , this ) ) ;
2016-03-11 00:48:53 +00:00
return this ;
} ,
setMode : function ( mode ) {
2019-11-06 08:07:56 +00:00
this . mode = mode ;
2016-03-11 00:48:53 +00:00
if ( ! mode . canHistoryClose ) {
this . panelHistory . $el . find ( '#history-header' ) . hide ( ) ;
this . panelHistory . $el . find ( '#history-list' ) . css ( 'padding-top' , 0 ) ;
}
} ,
onAfterRender : function ( historyView ) {
historyView . viewHistoryList . on ( 'item:click' , _ . bind ( this . onSelectRevision , this ) ) ;
historyView . btnBackToDocument . on ( 'click' , _ . bind ( this . onClickBackToDocument , this ) ) ;
2016-10-05 13:31:49 +00:00
historyView . btnExpand . on ( 'click' , _ . bind ( this . onClickExpand , this ) ) ;
} ,
onResetStore : function ( ) {
var hasChanges = this . panelHistory . storeHistory . hasChanges ( ) ;
this . panelHistory . $el . find ( '#history-expand-changes' ) [ hasChanges ? 'show' : 'hide' ] ( ) ;
this . panelHistory . $el . find ( '#history-list' ) . css ( 'padding-bottom' , hasChanges ? '45px' : 0 ) ;
2016-03-11 00:48:53 +00:00
} ,
2016-09-19 07:41:02 +00:00
onDownloadUrl : function ( url ) {
if ( this . isFromSelectRevision !== undefined )
Common . Gateway . requestRestore ( this . isFromSelectRevision , url ) ;
this . isFromSelectRevision = undefined ;
} ,
2016-09-16 12:46:00 +00:00
onSelectRevision : function ( picker , item , record , e ) {
if ( e ) {
var btn = $ ( e . target ) ;
if ( btn && btn . hasClass ( 'revision-restore' ) ) {
2016-09-19 07:41:02 +00:00
if ( record . get ( 'isRevision' ) )
Common . Gateway . requestRestore ( record . get ( 'revision' ) ) ;
else {
this . isFromSelectRevision = record . get ( 'revision' ) ;
2021-07-27 19:13:26 +00:00
var fileType = Asc . c _oAscFileType [ ( record . get ( 'fileType' ) || '' ) . toUpperCase ( ) ] || Asc . c _oAscFileType . DOCX ;
this . api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( fileType , true ) ) ;
2016-09-19 07:41:02 +00:00
}
2016-09-16 12:46:00 +00:00
return ;
}
}
if ( ! picker && record )
this . panelHistory . viewHistoryList . scrollToRecord ( record ) ;
2016-03-11 00:48:53 +00:00
var url = record . get ( 'url' ) ,
rev = record . get ( 'revision' ) ,
urlGetTime = new Date ( ) ;
this . currentChangeId = record . get ( 'changeid' ) ;
this . currentArrColors = record . get ( 'arrColors' ) ;
this . currentDocId = record . get ( 'docId' ) ;
this . currentDocIdPrev = record . get ( 'docIdPrev' ) ;
2017-03-14 11:08:02 +00:00
this . currentRev = rev ;
2017-09-22 14:18:06 +00:00
this . currentServerVersion = record . get ( 'serverVersion' ) ;
2016-03-11 00:48:53 +00:00
if ( _ . isEmpty ( url ) || ( urlGetTime - record . get ( 'urlGetTime' ) > 5 * 60000 ) ) {
_ . delay ( function ( ) {
Common . Gateway . requestHistoryData ( rev ) ; // получаем url-ы для ревизий
} , 10 ) ;
} else {
2020-12-10 16:00:33 +00:00
var commentsController = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( commentsController ) {
commentsController . onApiHideComment ( ) ;
commentsController . clearCollections ( ) ;
}
2016-03-11 00:48:53 +00:00
var urlDiff = record . get ( 'urlDiff' ) ,
2017-02-17 13:05:23 +00:00
token = record . get ( 'token' ) ,
2016-03-11 00:48:53 +00:00
hist = new Asc . asc _CVersionHistory ( ) ;
hist . asc _setDocId ( _ . isEmpty ( urlDiff ) ? this . currentDocId : this . currentDocIdPrev ) ;
hist . asc _setUrl ( url ) ;
hist . asc _setUrlChanges ( urlDiff ) ;
hist . asc _setCurrentChangeId ( this . currentChangeId ) ;
hist . asc _setArrColors ( this . currentArrColors ) ;
2017-02-17 13:05:23 +00:00
hist . asc _setToken ( token ) ;
2017-03-14 11:08:02 +00:00
hist . asc _setIsRequested ( false ) ;
2017-09-22 14:18:06 +00:00
hist . asc _setServerVersion ( this . currentServerVersion ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _showRevision ( hist ) ;
2019-02-05 12:11:22 +00:00
var reviewController = this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) ;
if ( reviewController )
reviewController . onApiShowChange ( ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onSetHistoryData : function ( opts ) {
2019-11-06 08:07:56 +00:00
if ( ! this . mode . canUseHistory ) return ;
2016-03-11 00:48:53 +00:00
if ( opts . data . error ) {
var config = {
title : this . notcriticalErrorTitle ,
msg : opts . data . error ,
iconCls : 'warn' ,
buttons : [ 'ok' ]
} ;
Common . UI . alert ( config ) ;
} else {
2020-12-10 16:00:33 +00:00
var commentsController = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( commentsController ) {
commentsController . onApiHideComment ( ) ;
commentsController . clearCollections ( ) ;
}
2016-03-11 00:48:53 +00:00
var data = opts . data ;
var historyStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' ) ;
if ( historyStore && data !== null ) {
var rev , revisions = historyStore . findRevisions ( data . version ) ,
urlGetTime = new Date ( ) ;
2019-11-13 10:51:32 +00:00
var diff = ( ! opts . data . previous || this . currentChangeId === undefined ) ? null : opts . data . changesUrl , // if revision has changes, but serverVersion !== app.buildVersion -> hide revision changes
2016-10-31 12:01:45 +00:00
url = ( ! _ . isEmpty ( diff ) && opts . data . previous ) ? opts . data . previous . url : opts . data . url ,
docId = opts . data . key ? opts . data . key : this . currentDocId ,
2017-02-17 13:05:23 +00:00
docIdPrev = opts . data . previous && opts . data . previous . key ? opts . data . previous . key : this . currentDocIdPrev ,
token = opts . data . token ;
2016-10-28 13:19:03 +00:00
2016-03-11 00:48:53 +00:00
if ( revisions && revisions . length > 0 ) {
for ( var i = 0 ; i < revisions . length ; i ++ ) {
rev = revisions [ i ] ;
2016-10-28 13:19:03 +00:00
rev . set ( 'url' , url , { silent : true } ) ;
2016-03-25 08:12:32 +00:00
rev . set ( 'urlDiff' , diff , { silent : true } ) ;
2016-03-11 00:48:53 +00:00
rev . set ( 'urlGetTime' , urlGetTime , { silent : true } ) ;
2016-10-31 12:01:45 +00:00
if ( opts . data . key ) {
rev . set ( 'docId' , docId , { silent : true } ) ;
rev . set ( 'docIdPrev' , docIdPrev , { silent : true } ) ;
2016-10-28 13:19:03 +00:00
}
2017-02-17 13:05:23 +00:00
rev . set ( 'token' , token , { silent : true } ) ;
2016-03-11 00:48:53 +00:00
}
}
var hist = new Asc . asc _CVersionHistory ( ) ;
2016-10-28 13:19:03 +00:00
hist . asc _setUrl ( url ) ;
2016-03-25 08:12:32 +00:00
hist . asc _setUrlChanges ( diff ) ;
2016-10-31 12:01:45 +00:00
hist . asc _setDocId ( _ . isEmpty ( diff ) ? docId : docIdPrev ) ;
2016-03-11 00:48:53 +00:00
hist . asc _setCurrentChangeId ( this . currentChangeId ) ;
hist . asc _setArrColors ( this . currentArrColors ) ;
2017-02-17 13:05:23 +00:00
hist . asc _setToken ( token ) ;
2017-03-14 11:08:02 +00:00
hist . asc _setIsRequested ( true ) ;
2017-09-22 14:18:06 +00:00
hist . asc _setServerVersion ( this . currentServerVersion ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _showRevision ( hist ) ;
2019-02-05 12:11:22 +00:00
var reviewController = this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) ;
if ( reviewController )
reviewController . onApiShowChange ( ) ;
2016-03-11 00:48:53 +00:00
}
}
} ,
2017-03-14 11:08:02 +00:00
onExpiredToken : function ( ) {
2017-03-16 10:51:52 +00:00
var me = this ;
2017-03-14 11:08:02 +00:00
_ . delay ( function ( ) {
2017-03-16 10:51:52 +00:00
Common . Gateway . requestHistoryData ( me . currentRev ) ; // получаем url-ы для ревизий
2017-03-14 11:08:02 +00:00
} , 10 ) ;
} ,
2016-03-11 00:48:53 +00:00
onClickBackToDocument : function ( ) {
// reload editor
Common . Gateway . requestHistoryClose ( ) ;
} ,
2016-10-05 13:31:49 +00:00
onClickExpand : function ( ) {
var store = this . panelHistory . storeHistory ,
needExpand = store . hasCollapsed ( ) ;
store . where ( { isRevision : true , hasChanges : true , isExpanded : ! needExpand } ) . forEach ( function ( item ) {
item . set ( 'isExpanded' , needExpand ) ;
} ) ;
store . where ( { isRevision : false } ) . forEach ( function ( item ) {
item . set ( 'isVisible' , needExpand ) ;
} ) ;
this . panelHistory . viewHistoryList . scroller . update ( { minScrollbarLength : 40 } ) ;
this . panelHistory . btnExpand . cmpEl . text ( needExpand ? this . panelHistory . textHideAll : this . panelHistory . textShowAll ) ;
} ,
2016-03-11 00:48:53 +00:00
notcriticalErrorTitle : 'Warning'
} , Common . Controllers . History || { } ) ) ;
} ) ;