2016-04-01 13:17:09 +00:00
/ *
*
2017-01-17 14:58:08 +00:00
* ( c ) Copyright Ascensio System Limited 2010 - 2017
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
*
* You can contact Ascensio System SIA at Lubanas st . 125 a - 25 , Riga , Latvia ,
* EU , LV - 1021.
*
* 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
/ * *
* Chat . js
*
* Controller
*
* Created by Maxim Kadushkin on 27 February 2014
* Copyright ( c ) 2014 Ascensio System SIA . All rights reserved .
*
* /
define ( [
'core' ,
'common/main/lib/collection/Users' ,
'common/main/lib/collection/ChatMessages' ,
'common/main/lib/view/Chat'
] , function ( ) {
'use strict' ;
Common . Controllers . Chat = Backbone . Controller . extend ( _ . extend ( {
models : [ ] ,
collections : [
'Common.Collections.Users' ,
'Common.Collections.ChatMessages'
] ,
views : [
'Common.Views.Chat'
] ,
initialize : function ( ) {
this . addListeners ( {
'Common.Views.Chat' : {
'message:add' : _ . bind ( this . onSendMessage , this )
}
} ) ;
} ,
events : {
} ,
onLaunch : function ( ) {
this . panelChat = this . createView ( 'Common.Views.Chat' , {
storeUsers : this . getApplication ( ) . getCollection ( 'Common.Collections.Users' ) ,
storeMessages : this . getApplication ( ) . getCollection ( 'Common.Collections.ChatMessages' )
} ) ;
} ,
setMode : function ( mode ) {
this . mode = mode ;
2016-07-06 14:17:28 +00:00
if ( this . api ) {
if ( this . mode . canCoAuthoring && this . mode . canChat )
2016-03-11 00:48:53 +00:00
this . api . asc _registerCallback ( 'asc_onCoAuthoringChatReceiveMessage' , _ . bind ( this . onReceiveMessage , this ) ) ;
2016-07-06 14:17:28 +00:00
if ( ! this . mode . isEditDiagram && ! this . mode . isEditMailMerge ) {
this . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( this . onUsersChanged , this ) ) ;
this . api . asc _registerCallback ( 'asc_onConnectionStateChanged' , _ . bind ( this . onUserConnection , this ) ) ;
this . api . asc _coAuthoringGetUsers ( ) ;
}
if ( this . mode . canCoAuthoring && this . mode . canChat )
2016-03-11 00:48:53 +00:00
this . api . asc _coAuthoringChatGetMessages ( ) ;
}
return this ;
} ,
setApi : function ( api ) {
this . api = api ;
return this ;
} ,
onUsersChanged : function ( users ) {
2016-07-06 14:17:28 +00:00
if ( ! this . mode . canLicense || ! this . mode . canCoAuthoring ) {
2016-03-11 00:48:53 +00:00
var len = 0 ;
for ( name in users ) {
if ( undefined !== name ) len ++ ;
}
if ( len > 1 && this . _isCoAuthoringStopped == undefined ) {
this . _isCoAuthoringStopped = true ;
this . api . asc _coAuthoringDisconnect ( ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
/ *
setTimeout ( _ . bind ( function ( ) {
Common . UI . alert ( {
closable : false ,
title : this . notcriticalErrorTitle ,
msg : this . textUserLimit ,
iconCls : 'warn' ,
buttons : [ 'ok' ]
} ) ;
} , this ) , 100 ) ;
* /
return ;
}
}
var usersStore = this . getApplication ( ) . getCollection ( 'Common.Collections.Users' ) ;
if ( usersStore ) {
var arrUsers = [ ] , name , user ;
for ( name in users ) {
if ( undefined !== name ) {
user = users [ name ] ;
if ( user ) {
arrUsers . push ( new Common . Models . User ( {
id : user . asc _getId ( ) ,
username : user . asc _getUserName ( ) ,
online : true ,
color : user . asc _getColor ( ) ,
view : user . asc _getView ( )
} ) ) ;
}
}
}
usersStore [ usersStore . size ( ) > 0 ? 'add' : 'reset' ] ( arrUsers ) ;
}
} ,
onUserConnection : function ( change ) {
var usersStore = this . getApplication ( ) . getCollection ( 'Common.Collections.Users' ) ;
if ( usersStore ) {
var user = usersStore . findUser ( change . asc _getId ( ) ) ;
if ( ! user ) {
usersStore . add ( new Common . Models . User ( {
id : change . asc _getId ( ) ,
username : change . asc _getUserName ( ) ,
online : change . asc _getState ( ) ,
color : change . asc _getColor ( ) ,
view : change . asc _getView ( )
} ) ) ;
} else {
user . set ( { online : change . asc _getState ( ) } ) ;
}
}
} ,
onReceiveMessage : function ( messages , clear ) {
var msgStore = this . getApplication ( ) . getCollection ( 'Common.Collections.ChatMessages' ) ;
if ( msgStore ) {
var array = [ ] ;
messages . forEach ( function ( msg ) {
array . push ( new Common . Models . ChatMessage ( {
userid : msg . user ,
message : msg . message ,
username : msg . username
} ) ) ;
} ) ;
msgStore [ ( msgStore . size ( ) < 1 || clear ) ? 'reset' : 'add' ] ( array ) ;
}
} ,
onSendMessage : function ( panel , text ) {
if ( text . length > 0 ) {
var splitString = function ( string , chunkSize ) {
var chunks = [ ] ;
while ( string ) {
if ( string . length < chunkSize ) {
chunks . push ( string ) ;
break ;
} else {
chunks . push ( string . substr ( 0 , chunkSize ) ) ;
string = string . substr ( chunkSize ) ;
}
}
return chunks ;
} ;
var me = this ;
splitString ( text , 2048 ) . forEach ( function ( message ) {
me . api . asc _coAuthoringChatSendMessage ( message ) ;
} ) ;
}
} ,
notcriticalErrorTitle : 'Warning' ,
textUserLimit : 'You are using ONLYOFFICE Editors free version.<br>Only two users can co-edit the document simultaneously.<br>Want more? Consider buying ONLYOFFICE Editors Pro version.<br><a href=\"http:\/\/www.onlyoffice.com\" target=\"_blank\">Read more</a>'
} , Common . Controllers . Chat || { } ) ) ;
} ) ;