Îðëà
Îáëàñòè
Êîìïàíèé
Ïîëüçîâàòåëè
Ãàëåðåÿ
Ôèêñèðîâàííûå íîâîñòè
Îðëà
Îòçûâû î ôèðìàõ
Òàðèôû
Ïîëüçîâàòåëè
Îáëàñòè
Áàíêîìàòû
Òîðãîâûå òî÷êè
Äîñêà îáúÿâëåíèé
Êóðñû âàëþò
Ñêèäêè
îðãàíèçàöèè Îðëà
îðãàíèçàöèè îáëàñòè
òîâàðû
ñàéòû
ñàéòû Îðåë
Äàííûå
Ðàçäåëû
Ïîèñê
Ïîèñê çàïðîñû
Ñòàòèñòèêà
Ïîêàçû êàòàëîãà îðãàíèçàöèé
Ñòàòèñòèêà êëèåíòû
Ïîëüçîâàòåëè
Ñàéòû
Óïðàâëåíèå ñàéòîì
Àíêåòà
Àïòåêè
Àôèøà
Àôèøà íîâàÿ
Áàííåðû
Áèçíåñ >
Âèêòîðèíà
Ãîëîñîâàíèå
Ãîñòü íà ñàéòå
Èñòîðèè
Êàëåíäàðü ñîáûòèé
Êàòàëîãè >
Êîíêóðñ êðàñîòû
Êîíêóðñ àóäèî
Êîíñóëüòàöèè
Ìåíþ
Íîâîå íà ñàéòå
Íîâîñòè >
Îðãàíèçàöèè >
Ïðîãðàììà ÒÂ
Ïóáëèêàöèè
Ðàçäåëû ñàéòà
Ðàññûëêà
Ðåñòîðàíû
Ñåêðåò ôèðìû >
Ñåðâèñû >
Ññûëêè
Òåñòû
Ôàéëîâûé ìåíåäæåð
Ôîðóì
Ôîòîãàëåðåÿ
Îáðàòíàÿ ñâÿçü
Íåäâèæèìîñòü
Íîâûé ãîä
Òåêñòû
Ïîëüçîâàòåëè
Þðèäè÷åñêèé ðåéòèíã
Îòçûâû íà òîâàðû
Áàí ïîëüçîâàòåëåé
Æàëîáû
Íîâûå òåñòû
Êîðîíàâèðóñ
Ôàéëîâûé ìåíåäæåð
Èìÿ ôàéëà
index.php.bak.rtl
Ñîäåðæèìîå
<?php $base_url="../"; $menu_page="obshenie"; session_start(); if (isset($_SESSION['user_id'])) { $id_user_sess = (int)$_SESSION['user_id']; } ini_set('display_errors', 0); require_once("../func.php"); $l = db_connect(); if ($_REQUEST['login1'] <> "" && $_REQUEST['pass1'] <> "") { $_REQUEST['sidp']=md5($_REQUEST['login1'].md5($_REQUEST['pass1'])."jflksadjjdseswaa"); } require_once $base_url."config_lang.php"; $title="Знаком�тва. Общение в ".$name_gorod3.":: InfoICQ"; if ( $id_user_sess > 0 ) { $channel = $id_user_sess . '_' . md5( $login . SECRET_KEY ); if ( $_GET['contact'] != '' ) { $_GET['contact'] = intval( $_GET['contact'] ); $row = sqlval("select id, name, sex from user where id='{$_GET['contact']}'"); if ( $row['id'] != '' ) { $exist = sqlval("select id_contact from rpl_contact where id_user='{$id_user_sess}' and id_contact='{$row['id']}'"); if ($exist['id_contact'] == '') { sql("insert into rpl_contact values('{$id_user_sess}', '{$row['id']}', '{$row['name']}')"); sql("insert into rpl_contact values('{$row['id']}', '{$id_user_sess}', '{$login}')"); } } } if ( isset($_GET['new']) ) { $rs_message = sqlval("select id, id_sender from rpl_incoming where id_recipient='{$id_user_sess}' and readed='0' order by timestamp limit 1"); if ($rs_message['id'] != '') { $_GET['contact'] = $rs_message['id_sender']; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Приват</title> <meta charset="utf-8"> <link rel="stylesheet" href="so.css" type="text/css" media="screen" /> <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" type="text/css" media="screen" /> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script type="text/javascript" src="/library/js/jquery/jquery.cookies.2.2.0.min.js"></script> <script type="text/javascript" src="/library/js/jquery/jquery.tmpl.js"></script> <script type="text/javascript" src="/js/knockout-2.1.0.js"></script> <script type="text/javascript" src="/library/js/dklab_realplexor.js"></script> <script type="text/javascript" src="/js/marqueeTitle.jquery.js"></script> <style> #dialog label, #dialog input { display:block; } #dialog label { margin-top: 0.5em; } #dialog input, #dialog textarea { width: 95%; } #tabs { margin-top: 1em; } #tabs li .ui-icon-close { float: left; margin: 0.4em 0.2em 0 0; cursor: pointer; } #add_tab { cursor: pointer; } </style> </head> <body> <div id="DivSmile" class="DivSmile" style="display:none;" data-bind="visible: isSmilePanelVisibleFlag() > 0"> <?php for ( $i = 1; $i < 36; $i++ ) { ?> <a class="smile" href="javascript:void(0);" rel="<?php echo $i; ?>" data-bind="click:insertSmile.bind($data, '<?php echo $i; ?>')"><img src="/library/images/smile/anim/<?php echo $i; ?>.gif" border="0" /></a> <?php } ?> </div> <table cellpadding="0" cellspacing="0" class="TableInd" height="100%"> <tr> <td height="11" bgcolor="#F1F2F6"></td> <td height="11" bgcolor="#F1F2F6"></td> </tr> <tr> <td class="BordRight"><div class="corner2 tl ktl"></div> <div class="corner2 tr ktr"></div> <div class="Title TitleFonGreen"> <div class="MenuRight"> <a href="http://www.infoorel.ru" style="color:#FFFFFF">�а главную</a></div><br> <div class="MenuRight"> <a href="javascript:void(0)" style="color:#FFFFFF" data-bind="click:toggleSearchForm">Пои�к пользователей</a> </div> <h1>Сообщени� <?php echo $login; ?></h1> </div> <table cellpadding="0" cellspacing="0" class="TableColl"> <tr> <td><div style="position: relative"> <div style="position:absolute; top:0; left:0; z-index:2; width:100%; background:#FFFFFF" > <div id="searchEngine" style="display:none" data-bind="visible: isSearchFormVisibleFlag() > 0"> <div class="DivSet"> <div> <input type="button" value="Закрыть" data-bind="click:hideSearchForm" /> </div> <h3><i class="sprite searchuser" style="cursor: auto"></i>Пои�к пользователей</h3> </div> <div class="DialogWright"> <form> <table border="0" align="center" cellpadding="4" cellspacing="0" data-bind="with:searchForm"> <tr> <td><strong>�ик</strong></td> <td><input type="text" id="nicname" value="" size="16" data-bind="value:name" /> </td> <td><strong>Ф.И.О.</strong></td> <td><input type="text" id="fullName" value="" size="16" data-bind="value:person" /> </td> </tr> <tr> <td><strong>Возра�т</strong></td> <td>от: <input name="age_min" type="text" id="age_min" value="" size="1" maxlength="2" data-bind="value:age_from" /> до: <input name="age_max" type="text" id="age_max" value="" size="1" maxlength="2" data-bind="value:age_to" /> </td> <td><strong>Пол</strong></td> <td><select id="sex" name="sex" data-bind="options: sex,optionsValue: 'id', optionsText: 'name', value: selectedSex"> </select> </td> </tr> <tr> <td colspan="4" align="right"><input type="button" id="SearchBtn" value="�айти" data-bind="click:doSearch" /></td> </tr> </table> </form> </div> <div id="searchResultDiv" data-bind="visible:searchForm.result().length > 0"> <div id="SearchUser" class="SearchUser"> <table id="searchResultTable" width="100%" border="0" cellpadding="5" cellspacing="0" data-bind="with:searchForm"> <thead> <tr> <th align="left">�ик</th> <th align="left">ФИО</th> <th align="center">Возра�т</th> <th align="center"><input type="checkbox" name="checkAll" data-bind="checked: allContactsSelected" /></th> </tr> </thead> <tbody data-bind="foreach:result, stripe: result, evenClass: 'trUnselectedOdd', oddClass: '', activeRow:{element:result}"> <tr class="trUnselected" data-bind="click:$parent.selectRow"> <td align="left"><i data-bind="attr: {'class': cssClass}"></i> <span data-bind="text:name"></span> </td> <td align="left" data-bind="text:person"></td> <td align="center" data-bind="text:age"></td> <td align="center"><input type="checkbox" data-bind="attr: { value: id }, checked: $parent.selectedContacts, click:function(){return true}, clickBubble:false" /> </td> </tr> </tbody> </table> </div> <div class="DialogInfo" align="right"> <input type="button" value="Добавить" data-bind="click:searchForm.addContacts, enable:searchForm.selectedContacts().length>0"/> </div> </div> </div> </div> <div style="position:absolute; top:0; left:0; z-index:1; width:100%" data-bind="visible:isMessengerVisible() > 0"> <div id="tabsList" > <div id="messanger" data-bind="template: 'messenger-template'"></div> </div> <div class="DialogInfo" style="height:17px;"> <i class="sprite searchuser" title="Пои�к пользователей" data-bind="click:toggleSearchForm"></i> <i class="sprite settings" title="�а�тройки"></i> <a id="panelInfoUser" class="sprite infouser" title="Информаци� о пользователе" target="_blank" data-bind="visible:isUserinfoVisible(), attr:{href:getUserInfoLink()}"></a> <i id="historyButton" class="sprite historyuser" title="И�тори� �ообщений" data-bind="click:showHistory"></i> <i class="sprite smile" title="В�тавить �майл" data-bind="click:showSmilePanel"></i> <i class="sprite quote" title="Цитировать" data-bind="event:{mousedown: quoteMessage}"></i> <i class="sprite ban" title="Забанить" data-bind="click:doBan, visible:isUserNotBan()"></i> <i class="sprite unban" title="Разбанить" data-bind="click:doUnBan, visible:isUserBan()"></i> </div> <div class="DialogWright"> <textarea id="messageInput" rows="3" style="width:100%;" data-bind="value:textareaMessage, valueUpdate: 'afterkeydown', click:hideSmilePanel, event:{keyup: sendMessageByKeyboard}"></textarea> <div align="right"> <input id="send" type="button" value="Отправить" data-bind="click: sendMessage" /> </div> </div> </div> </div> <div id="history" data-bind="visible: isHistoryVisibleFlag() > 0"> <div class="DivSet"> <div> <input type="button" id="WHistoryClose" value="Закрыть" data-bind="click:hideHistory" /> </div> <h3><i class="sprite historyuser" style="cursor: auto"></i>И�тори� �ообщений � <span id="historyUser" data-bind="text:getUserLogin()"></span></h3> </div> <div id="fullHistory" class="DialogText" data-bind="html:getHistory()"></div> <div class="DialogInfo" align="right"> <input type="button" id="btnClearHistory" value="Очи�тить" data-bind="click: clearHistory" /> </div> </div></td> </tr> </table> </div> </td> <td class="TdRelative2"><div class="corner2 tl ctl"></div> <div class="corner2 tr ctr"></div> <div class="TitleRight2"> <h2 class="Ots1">Контакты <i class="sprite" data-bind='click: toogleOnline, css: {allon: !onlyOnline() }'></i></h2> </div> <div class="PriveteScroll"> <div id="PriveteList" class="PriveteList" data-bind="template: { name: 'contacts-template', foreach: displayContacts }"></div> </div></td> </tr> <tr> <td style="padding-top:5px; height:5px; vertical-align:bottom"><div class="corner2 bl2 cbl"></div> <div class="corner2 br2 cbr"></div></td> <td class="BordLeft" style="padding-top:5px; height:5px; vertical-align:bottom"><div class="corner2 bl2 cbl"></div> <div class="corner2 br2 cbr"></div></td> </tr> <tr> <td height="11" bgcolor="#F1F2F6"></td> <td height="11" bgcolor="#F1F2F6"></td> </tr> </table> <script type='text/javascript'> /*<![CDATA[*/ var login = '<?php echo $login; ?>'; var rpl_namespace = '<?php echo RPL_PRIVATE_NAMESPACE; ?>'; var channel = '<?php echo $channel; ?>'; var request_contact = '<?php echo $_GET['contact']; ?>'; var tab = null; function getSelectedText(){ if (window.getSelection){ return window.getSelection().toString(); }else if (document.getSelection){ return document.getSelection(); }else if (document.selection){ return document.selection.createRange().text; } } function doGetCaretPosition (ctrl) { var CaretPos = 0; // IE Support if (document.selection) { ctrl.focus (); var Sel = document.selection.createRange (); Sel.moveStart ('character', - ctrl.value.length); CaretPos = Sel.text.length; } // Firefox support else if (ctrl.selectionStart || ctrl.selectionStart == '0') CaretPos = ctrl.selectionStart; return (CaretPos); } function setCaretPosition(ctrl, pos){ if(ctrl.setSelectionRange) { ctrl.focus(); ctrl.setSelectionRange(pos,pos); } else if (ctrl.createTextRange) { var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } } jQuery.fn.selText = function() { var obj = this[0]; if ($.browser.msie) { var range = obj.offsetParent.createTextRange(); range.moveToElementText(obj); range.select(); } else if ($.browser.mozilla || $.browser.opera) { var selection = obj.ownerDocument.defaultView.getSelection(); var range = obj.ownerDocument.createRange(); range.selectNodeContents(obj); selection.removeAllRanges(); selection.addRange(range); } else if ($.browser.safari) { var selection = obj.ownerDocument.defaultView.getSelection(); selection.setBaseAndExtent(obj, 0, obj, 1); } return this; } var focusFlag = 1; $(function() { heavyImage = new Image(); heavyImage.src = "imgprivat/loading.gif"; //an observable that retrieves its value when first bound ko.onDemandObservable = function(callback, target) { var _value = ko.observable(); //private observable var result = ko.computed({ read: function() { //if it has not been loaded, execute the supplied function if (!result.loaded()) { callback.call(target); } //always return the current value return _value(); }, write: function(newValue) { //indicate that the value is now loaded and set it result.loaded(true); _value(newValue); }, deferEvaluation: true //do not evaluate immediately when created }); //expose the current state, which can be bound against result.loaded = ko.observable(); //load it again result.refresh = function() { result.loaded(false); }; return result; }; ko.bindingHandlers.tabBinding = { init: function(element, valueAccessor) { //handle disposal (if KO removes by the template binding) ko.utils.domNodeDisposal.addDisposeCallback(element, function() { /*if (typeof console == "object") console.log("Remove Element", element); */ $(element).tabs("destroy"); }); }, update: function(element, valueAccessor) { /*if (typeof console == "object") console.log("Update Element", element); */ var options = valueAccessor() || {}; var $tabs = $(element).tabs(options) //$tabs.find( ".ui-tabs-nav" ).sortable({ axis: "x" }); } }; ko.bindingHandlers.stripe = { update: function(element, valueAccessor, allBindingsAccessor) { var value = ko.utils.unwrapObservable(valueAccessor()); //creates the dependency var allBindings = allBindingsAccessor(); var even = allBindings.evenClass; var odd = allBindings.oddClass; //update odd rows $(element).children(":nth-child(odd)").addClass(odd).removeClass(even); //update even rows $(element).children(":nth-child(even)").addClass(even).removeClass(odd); } } ko.bindingHandlers.activeRow = { update: function(element, valueAccessor, allBindingsAccessor) { var value = ko.utils.unwrapObservable(valueAccessor()); //creates the dependency var allBindings = allBindingsAccessor(); var active = allBindings.activeClass; //update odd rows $(element).children().on('mouseover',function(){ $(this).addClass('trSelectedActive'); }).on('mouseout',function(){ $(this).removeClass('trSelectedActive'); }); } } var ContactModel = function(id, name, sex, online, hasUnreadMessage, person, age) { var self = this; self.id = id; self.name = name; self.sex = ko.observable(sex); self.online = ko.observable(online); self.hasUnreadMessage = ko.observable(hasUnreadMessage); self.person = ko.observable(person); self.age = ko.observable(age); self.ban = ko.observable(0); self.cssClass = ko.computed(function() { var className = ''; if ( self.sex() == 1 ) { className = 'men'; } else if ( self.sex() == 2 ) { className = 'women'; } else { className = 'it'; } if ( self.online() == 1 ) { className += 'on'; } else { className += 'off'; } return 'sprite ' + className; }, this); } var TabModel = function(contact) { var self = this; self.contact = contact; self.active = ko.observable(0); self.messageText = ko.observable(''); self.caret = ko.observable(0); self.details = ko.onDemandObservable(this.getDetails, self); self.history = ko.onDemandObservable(this.getHistory, self); self.active.subscribe(function(value) { if (value == 1) { $('#tab-'+self.contact.id).prop('scrollTop', $('#tab-'+self.contact.id).prop('scrollHeight')); $('#tab-'+self.contact.id).css('height', $(window).height() - $('.ui-tabs-nav').height() - 245); $('#messageInput').focus(); } }); } TabModel.prototype.getDetails = function() { console.log(this.contact); $.ajax({ type: 'GET', url: 'action.php', data: { action: 'get_messages', contact: this.contact.id, delay: 1 }, context: this, success: function(messages) { var history = ''; for ( var idx in messages ) { if ( messages[idx].type == 'incoming') { // не тут history += '<div class="TextUser"><b class="Rd">' + this.contact.name + ' (' + messages[idx].date + ')</b><br><span class="txt">' + messages[idx].message + '</span></div>'; } else { history += '<div class="TextUser"><b class="Bl">' + login + ' (' + messages[idx].date + ')</b><br><span class="txt">' + messages[idx].message + '</span></div>'; } } this.details(history); $('#tab-'+this.contact.id).prop('scrollTop', $('#tab-'+this.contact.id).prop('scrollHeight')); }, dataType: 'json' }); }; TabModel.prototype.getHistory = function() { $.ajax({ type: 'GET', url: 'action.php', data: { action: 'get_all', contact: this.contact.id, delay: 1 }, context: this, success: function(messages) { var history = ''; for ( var idx in messages ) { // не тут if ( messages[idx].type == 'incoming') { history += '<div class="TextUser"><b class="Rd">' + this.contact.name + ' (' + messages[idx].date + ')</b><br><span class="txt">' + messages[idx].message + '</span></div>'; } else { history += '<div class="TextUser"><b class="Bl">' + login + ' (' + messages[idx].date + ')</b><br><span class="txt">' + messages[idx].message + '</span></div>'; } } this.history(history); }, dataType: 'json' }); }; var SexModel = function(id, name) { var self = this; self.id = ko.observable(id); self.name = ko.observable(name); } var SexTypes = [ new SexModel(-1,'не важно'), new SexModel(0, 'оно'), new SexModel(1, 'муж'), new SexModel(2, 'жен') ]; var SearchFormModel = function(SexTypes) { var self = this; self.name = ko.observable(); self.person = ko.observable(); self.age_from = ko.observable(); self.age_to = ko.observable(); self.sex = ko.observableArray(SexTypes); self.selectedSex = ko.observable(-1); self.result = ko.observableArray(); self.selectedContacts = ko.observableArray(); self.allContactsSelected = ko.observable(false); self.allContactsSelected.subscribe(function(newValue) { self.selectedContacts([]); if (newValue == true) { ko.utils.arrayForEach(self.result(), function(contact) { self.selectedContacts.push(contact.id); }); } }); self.doSearch = function() { $.ajax({ type: 'GET', url: 'action.php', data: { action: 'search_user', nicname: self.name(), fullName: self.person(), age_min: self.age_from(), age_max: self.age_to(), sex: self.selectedSex(), delay: 1 }, success: function(contacts) { self.result.removeAll(); self.selectedContacts.removeAll(); self.allContactsSelected(false); for ( var idx in contacts.result ) { var contact = contacts.result[idx]; self.result.push(new ContactModel(contact.id, contact.name, contact.sex, contact.online, contact.hasUnreadMessages, contact.name_full, contact.age )); } }, dataType: 'json' }); } self.addContacts = function() { $.post('action.php', {action: 'add_contact', contacts: self.selectedContacts()}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { for ( var idx in json.result ) { var contact = json.result[idx]; var contactModel = new ContactModel(contact.id, contact.name, contact.sex, contact.online ); if (contact.ban == 1) contactModel.ban(1); viewModel.contacts.push(contactModel); } alert('Контакты у�пешно добавлены'); self.selectedContacts.removeAll(); self.allContactsSelected(false); } else { /*if (typeof console == "object") console.log(json);*/ } }); } self.selectRow = function(contact) { if (self.selectedContacts.indexOf(contact.id) == -1) self.selectedContacts.push(contact.id); else self.selectedContacts.remove(contact.id); } } var ContactsModel = function() { var self = this; self.contacts = ko.observableArray(); self.onlyOnline = ko.observable(0); self.tabs = ko.observableArray(); self.selectedTab = ko.observable(); self.searchForm = new SearchFormModel(SexTypes); self.textareaMessage = ko.computed({ read: function () { var tab = self.selectedTab(); if (tab) { return tab.messageText(); } }, write: function (value) { var tab = self.selectedTab(); if (tab) { tab.caret(doGetCaretPosition(document.getElementById('messageInput'))); tab.messageText(value); } }, owner: this }); self.totalUnread = ko.computed(function() { var total = 0; ko.utils.arrayForEach(self.contacts(), function(contact) { total += contact.hasUnreadMessage(); }); return total; }); self.totalUnread.subscribe(function(value) { if (value > 0) { $.marqueeTitle({ text: "�овое �ообщение", dir: "left", speed: 250 }); } else { ///if ($.type(window.opener) == 'object') //$('#TOpen', window.opener.document).css('display', 'none'); $.removeMarqueeTitle(); if (self.selectedTab() instanceof TabModel) document.title = self.selectedTab().contact.name; } }); self.selectedTab.subscribe(function(value) { if (value instanceof TabModel) { ko.utils.arrayForEach(self.tabs(), function(tab) { (tab == value) ? tab.active(1) : tab.active(0); }); value.active(1); $('#tabs').tabs('select', '#tab-' + value.contact.id); if (self.totalUnread() == 0) document.title = value.contact.name; } self._saveTabsToCookies(); }); self._saveTabsToCookies = function(){ var openedTabs = ko.utils.arrayMap(self.tabs(), function(item) { return {id: item.contact.id, active:item.active()} }); $.cookies.set("private_tabs", openedTabs); } self.isSearchFormVisibleFlag = ko.observable(0); self.isSmilePanelVisibleFlag = ko.observable(0); self.isHistoryVisibleFlag = ko.observable(0); self.isMessengerVisibleFlag = ko.observable(1); self.displayContacts = ko.computed(function() { var onlyOnline = self.onlyOnline(); if (!onlyOnline) { return self.contacts(); } else { return ko.utils.arrayFilter(self.contacts(), function(contact) { return contact.online(); }); } }, self); self.removeContact = function(contact) { /*if (typeof console == "object") console.log(contact);*/ var confirmDialog = confirm('Вы дей�твительно желаете:\nудалить контакт?'); if (confirmDialog) { $.post('action.php', {action: 'delete_contact', id: contact.id}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { var tabModel = ko.utils.arrayFirst(self.tabs(), function(tab) { //find open tab if exists return tab.contact == contact }); if (tabModel instanceof TabModel) //remove open tab if exists self.removeTab(tabModel); self.contacts.remove(contact); //remove contact } else { /*if (typeof console == "object") console.log(json);*/ } }); } }; self.showChat = function(contact) { if (contact.hasUnreadMessage()) self._mark_readed(contact); var findTab = ko.utils.arrayFirst(self.tabs(), function(tab) { return tab.contact == contact }); if (findTab instanceof TabModel) { self.selectedTab(findTab); } else { var tab = new TabModel(contact); self.tabs.push(tab); self.selectedTab(tab); } }; self.removeTab = function(tab) { /*if (typeof console == "object") console.log(tab);*/ var tabIndex = self.tabs.indexOf(tab); var tabsCount = self.tabs().length; self.tabs.remove(tab); //remove tab from observable array /* */ if (tab == self.selectedTab()) { if (tabIndex == tabsCount - 1) { //remove last active tab if (self.tabs().length > 0) self.selectedTab(self.tabs()[0]); //select first tab else self.selectedTab(null); } else self.selectedTab(self.tabs()[tabIndex]); //select next tab } else { self.selectedTab(self.selectedTab()); //call observable for current active tab } }; self.toogleOnline = function() { self.onlyOnline(self.onlyOnline() ? 0 : 1); }; self.selectTab = function(tab) { self.selectedTab(tab); self._mark_readed(tab.contact); }; self.showTabNewMessageFlag = function(tab) { if (self.selectedTab() == tab) self._mark_readed(tab.contact); if (tab.contact.hasUnreadMessage() && self.selectedTab()!=tab) return true; return false; }; self.showContactNewMessageFlag = function(contact) { var findTab = ko.utils.arrayFirst(self.tabs(), function(tab) { return tab.contact == contact && tab == self.selectedTab() }); if (findTab instanceof TabModel) return false; if (contact.hasUnreadMessage()) return true; return false; }; self.showSearchForm = function() { self.isSearchFormVisibleFlag(1); }; self.toggleSearchForm = function() { (self.isSearchFormVisibleFlag() == 1) ? self.hideSearchForm() : self.showSearchForm(); }; self.hideSearchForm = function() { self.isSearchFormVisibleFlag(0); }; self.showSmilePanel = function() { self.isSmilePanelVisibleFlag(1); }; self.hideSmilePanel = function() { self.isSmilePanelVisibleFlag(0); }; self.insertSmile = function(num) { self.textareaMessage(self.textareaMessage()+' ::smile_' + num + '::'); self.isSmilePanelVisibleFlag(0); $('#messageInput').focus(); }; self.quoteMessage = function() { var selectedText = getSelectedText(); self.textareaMessage(self.textareaMessage()+selectedText + "\n"); }; self.showHistory = function() { self.isMessengerVisibleFlag(0); self.isHistoryVisibleFlag(1); }; self.hideHistory = function() { self.isMessengerVisibleFlag(1); self.isHistoryVisibleFlag(0); }; // panel visble functions self.isMessengerVisible = function() { if (self.isMessengerVisibleFlag() && self.tabs().length) return true; return false; } self.isUserinfoVisible = function() { if (self.selectedTab() instanceof TabModel) return true; return false; } self.getHistory = function() { if (self.selectedTab() instanceof TabModel) return self.selectedTab().history(); return false; } self.getUserLogin = function() { if (self.selectedTab() instanceof TabModel) return self.selectedTab().contact.name; return ''; } self.getUserInfoLink = function() { if (self.selectedTab() instanceof TabModel) return '/user_info.php?login_user='+self.selectedTab().contact.name; return ''; } self.sendMessageByKeyboard = function(data, event) { if (event.keyCode == 13 && event.ctrlKey) { self.sendMessage(data, event); event.stopPropagation(); } } self.sendMessage = function() { if ($.trim(self.textareaMessage()) != '') { var tab = self.selectedTab(); if (tab) { $.post('action.php', {action: 'send_message', contact: tab.contact.id, message: self.textareaMessage()}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { // не тут tab.details(tab.details() + '<div class="TextUser"><b class="Bl">' + login + ' (' + json.date + ')</b><br><span>' + json.message + '</span></div>'); self.textareaMessage(''); $('#messageInput').focus(); $('#tab-'+tab.contact.id).prop('scrollTop', $('#tab-'+tab.contact.id).prop('scrollHeight')); if (json.ban == true) alert('Вы забанены пользователь не получит ваше �ообщение'); } else { /*if (typeof console == "object") console.log(json);*/ } }); } } }; self._mark_readed = function(contact) { if (contact.hasUnreadMessage() && focusFlag) { $.post('action.php', {action: 'mark_readed', contact: contact.id}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { } else { /*if (typeof console == "object") console.log(json);*/ } }); contact.hasUnreadMessage(0); } } $(window).bind("focus",function(event){ var tab = self.selectedTab(); if (tab instanceof TabModel) self._mark_readed(tab.contact); focusFlag = 1; }).bind("blur", function(event){ focusFlag = 0; }); $('#messageInput').bind("blur",function(event){ var tab = self.selectedTab(); if (tab instanceof TabModel) tab.caret(doGetCaretPosition(document.getElementById("messageInput"))); }).bind("focus",function(event){ var tab = self.selectedTab(); if (tab instanceof TabModel) setCaretPosition(document.getElementById("messageInput"), tab.caret()); }); self.clearHistory = function(contact_id) { var confirmDialog = confirm('Вы дей�твительно желаете:\nудалить и�торию?'); if (confirmDialog) { var tab = self.selectedTab(); if (tab) { $.post('action.php', {action: 'clear_history', contact: tab.contact.id}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { alert('И�тори� �ообщений у�пешно очищена'); tab.history.refresh(); } else { /*if (typeof console == "object") console.log(json);*/ } }); } } } self.doBan = function() { var confirmDialog = confirm('Вы дей�твительно желаете:\nзабанить пользовател�?'); if (confirmDialog) { var tab = self.selectedTab(); if (tab instanceof TabModel) { $.post('action.php', {action: 'ban_user', contact: tab.contact.id}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { alert('Пользователь забанен'); tab.contact.ban(1); } else { /*if (typeof console == "object") console.log(json);*/ } }); } } } self.doUnBan = function() { var tab = self.selectedTab(); if (tab instanceof TabModel) { $.post('action.php', {action: 'unban_user', contact: tab.contact.id}, function(data) { var json = $.parseJSON(data); if (json.error == 0) { alert('Пользователь разбанен'); tab.contact.ban(0); } else { /*if (typeof console == "object") console.log(json);*/ } }); } } self.isUserNotBan = function() { var tab = self.selectedTab(); if (tab instanceof TabModel) { if (tab.contact.ban() == 0) return true; } return false; } self.isUserBan = function() { var tab = self.selectedTab(); if (tab instanceof TabModel) { if (tab.contact.ban() == 1) return true; } return false; } self._get_contact = function(id) { return ko.utils.arrayFirst(self.contacts(), function(contact) { return contact.id == id }); } self.init = function() { var openedTabs = $.cookies.get("private_tabs"); if (openedTabs == '' || openedTabs == null || openedTabs == 'undefined') openedTabs = []; var activeTab = null; $.each(openedTabs, function(index, tab){ if (typeof tab == "object") { var contact = self._get_contact(tab.id); if (contact instanceof ContactModel) { var tabModel = new TabModel(contact); self.tabs.push(tabModel); if (tab.active == 1) { activeTab = tabModel; } } } }); if (activeTab instanceof TabModel) self.selectedTab(activeTab); if (request_contact != '') { var contact = ko.utils.arrayFirst(self.contacts(), function(contact) { return contact.id == request_contact }); self.showChat(contact); } } var realplexor = new Dklab_Realplexor( "https://rtl.infoorel.ru/", rpl_namespace ); realplexor.subscribe(channel, function (result, id) { /*if (typeof console == "object") console.log(result);*/ var contact = self._get_contact(result.contid); if (contact instanceof ContactModel) { //contact in contact list contact.hasUnreadMessage(1); } else { //add contact to contact list self.contacts.push(new ContactModel(result.contid, result.user, result.sex, 1, 1 )); } var findTab = ko.utils.arrayFirst(self.tabs(), function(tab) { return tab.contact.id == result.contid }); if (findTab instanceof TabModel) { // console.log(result); findTab.details(findTab.details() + '<div class="TextUser"><b class="Rd">' + contact.name + ' (' + result.date + ')</b><br><span>' + result.message + '</span></div>'); $('#tab-'+findTab.contact.id).prop('scrollTop', $('#tab-'+findTab.contact.id).prop('scrollHeight')); if (findTab.active() == 1) self._mark_readed(findTab.contact); } }); realplexor.subscribe("online", function (result, id) { var contact = self._get_contact(result.user); if (contact instanceof ContactModel) { if (result.status == 'online') { contact.online(1); } else if (result.status == 'offline') contact.online(0); } }); realplexor.execute(); }; var viewModel = new ContactsModel(); ko.applyBindings(viewModel); $.ajax({ type: 'GET', url: 'action.php', data: { action: 'load_contacts' }, context: this, success: function(data) { /*if (typeof console == "object") console.log(data);*/ $.each(data, function(index, item){ var contact = new ContactModel(item.id, item.name, item.sex, item.online, item.hasUnreadMessage ); if (item.ban == 1) contact.ban(1); viewModel.contacts.push(contact); }); viewModel.init(); }, dataType: 'json' }); $('.txt').live('dblclick', function(){ $(this).selText(); }); $(window).resize(function() { $('#SearchUser').css('height', $(this).height() - 242); $('.DialogText').css('height', $(this).height() - $('.ui-tabs-nav').height() - 245); $('#fullHistory').css('height', $(this).height() - 200); $('.PriveteScroll').css('height', $(this).height() - 100); }); $('#SearchUser').css('height', $(this).height() - 242); $('#fullHistory').css('height', $(this).height() - 200); $('.PriveteScroll').css('height', $(this).height() - 100); }); /*]]>*/ </script> <!-- Tabs template --> <script type="text/x-jquery-tmpl" id="messenger-template"> <div id="tabs" data-bind=" tabBinding : { }"> <ul> {{each tabs()}} <li> <a href="#tab-${$value.contact.id}" data-bind="click: $root.selectTab.bind($data, $value)"> <i data-bind="attr: {'class': contact.cssClass}, css: { 'DialogActive': showTabNewMessageFlag($value) }"></i> <span data-bind='text: contact.name'></span> </a> <span class='ui-icon ui-icon-close' data-bind="click: $root.removeTab.bind($data, $value)"> Закрыть вкладку </span> </li> {{/each}} </ul> {{each tabs()}} <div id="tab-${$value.contact.id}" class="DialogText"> <img src="imgprivat/loading.gif" data-bind="visible: !details.loaded()" /> <div data-bind="html: details"></div> </div> {{/each}} </div> </script> <script type="text/html" id="contacts-template"> <div class="contact"> <img src="/library/images/del.gif" alt="Удалить" hspace="0" vspace="0" class="PriveteDel" data-bind='click: $root.removeContact' /> <a href="javascript:void(0);" data-bind='value: name, click: $root.showChat'><i data-bind="attr: {'class':cssClass}, css: { 'DialogActive': $root.showContactNewMessageFlag($data) }" ></i><span data-bind='text: name'></span></a> </div> </script> <?php } else { require_once( $base_url . 'inc/top.inc' ); require_once( $base_url . 'template/insert_login.inc' ); require_once( $base_url . 'inc/bottom.inc' ); } ?> </body> </html>
/private/
Èìÿ
Äàòà
Ðàçìåð
..
2026-10-02
imgprivat
2016-02-15
.htaccess
2016-02-15
0 áàéò
action.php
2017-02-15
14 êá.
index.php
2026-10-01
46 êá.
index.php.bak.rtl
2026-10-01
45 êá.
so.css
2017-02-07
38 êá.
style.css
2016-02-15
5 êá.
style6.css
2016-02-15
60 áàéò
/private
Çàãðóçèòü ôàéëû
Ôàéë 1
Ôàéë 2
Ôàéë 3