I have installed my arrowchat on Sociale Engine 4 . I have this code working as "who is on Chat" Facebook Styile for chat plugin of SE. I would like some help to modified this code to use with arrowchat. Code is divided in 2 files :
1) controller file :
- Code: Select all
<?php
class Widget_FriendsOnChatController extends Engine_Content_Widget_Abstract
{
public function indexAction()
{
if(Engine_Api::_()->getDbTable('Modules','core')->isModuleEnabled('chat'))
{
$params = $this->_getAllParams();
$this->view->limitSearch = isset($params['limitSearch'])?$params['limitSearch']:9;
$this->view->limitShow = isset($params['limitShow'])?$params['limitShow']:9;
$this->view->ShowAll = isset($params['ShowAll'])?$params['ShowAll']:27;
}
else
{
$this->setNoRender();
}
}
public function checkvalid()
{
$params = $this->_getAllParams();
if($params['limitSearch'] >= $params['ShowAll'] || $params['limitShow'] >= $params['ShowAll'])
throw new Exception("$username is not unique");
}
}
2) tpl file and java code :
- Code: Select all
<script type="text/javascript">
var _time;
var _time_setting;
var _chat_i = -2;
var _num = 0;
en4.core.runonce.add(function(){
_time = setTimeout(default_page, 3000);
_time_setting = setTimeout(setting_page_chat, 1000);
$("search_friend").addEvent("click",function(){
$("search_friend").select();
});
$("search_friend").addEvent("focus",function(){
clearTimeout(_time);
if($("im_menu_friends_body") != null)
{
if(parseInt($('hide_click').value)==0)
{
$("search_friend").value = "";
$('hide_click').value = 1;
}
else
{
_num = search();
if(_num==0)
{
_chat_i = -2;
$('hide_search').value = 0;
return;
}
_chat_i = 0;
var n = $("friend_online").getChildren('div');
var _str = n[_chat_i].getProperty('id');
var _id = _str.substring(_str.indexOf("(")+1,_str.indexOf(")"));
$('hide_search').value = _id;
n[_chat_i].addClass("active");
}
$("search_friend").setStyle('color', 'black');
}
else
{
$("search_friend").setStyle('color', 'black');
$("search_friend").value = "";
}
});
});
</script>
<div class="friend_on_chat" id="setting_page">
<div id="notification_setting_chat">
You are currently offline. To chat with your friends, <span style="cursor: pointer; text-decoration: underline; color: blue;" onclick="online_chat();return false;">go online</span>.
</div>
<div id="form_search">
<input type="hidden" id="hide_search" />
<input type="hidden" id="hide_click" value="0"/>
<input type="text" id="search_friend" value="Friends on chat" autocomplete="Off" onkeyup="searchfriend(event);return false;" onkeydown="if(event.keyCode==9) tab_b(event);"/>
<div id="friend_online">
<div class="cl"></div>
</div>
</div>
</div>
<style type="text/css">
.layout_friends_on_chat {
margin-bottom: 15px;
overflow: hidden;
}
.friend_on_chat{
background-color: trasparent;
border: 1px solid #D0E2EC;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
padding: 7px;
overflow: hidden;
}
#notification_setting_chat{
display:none;
height:0px;
margin: 4px;
}
#form_search input{
width: 143px;
height: 14px;
margin:4px;
}
.friend_photo{
float: left;
width: 48px;
height: 48px;
cursor: pointer;
margin: 4px;
border: 1px solid #DDDDDD;
}
#search_friend
{
background: url("application/modules/User/externals/images/links/search.png") no-repeat ;
background-color: white;
padding-left:20px;
}
.friend_photo_search img{
width: 25px;
height: 25px;
}
.friend_photo_search{
cursor: pointer;
line-height:25px;
width:160px;
margin: 4px 0px 4px 9px;
}
.friend_photo img{
width: 48px;
height: 48px;
}
.cl{
clear: left;
}
#friend_online span{
color: trasparent;
font-weight: 700;
cursor:pointer;
margin-left: 4px;
}
.active{
background-color:none;
}
.deactive{
background-color:none;
}
</style>
<script type="text/javascript">
//click blur
function click_blur(){
if($("im_menu_friends_body") != null){
//if(_delay == 0)
//{
if($("search_friend").value == "" )
{
clearTimeout(_time);
_time = setTimeout(default_page, 1000);
$('hide_click').value = 0;
_chat_i = -2;
_num = 0;
}
else
{
clearTimeout(_time);
_time = setTimeout(escape_b, 1000);
}
}
else
{
$("search_friend").setStyle('color', '#7C8687');
$("search_friend").value = "Friends on chat";
}
}
// show chat box and online
// _type: change textbox search friend, 1 not change, 2 be changed
function show_box(_id,_type)
{
if(_type == 2)
$("search_friend").value = "";
chatHandler.im.open(_id,true);
//_delay = 0;
click_blur();
}
function online_chat()
{
chatHandler.im.items.settings.toggleOnline(1);
}
// setting user online or offline
function setting_page_chat()
{
clearTimeout(_time_setting);
var _span = $('im_main_settings').getChildren('span');
if(_span[0].innerHTML=="Open Chat")
{
$("form_search").setStyles({display:'none',height:'0px'});
$("notification_setting_chat").setStyles({display:'block',height:'auto'});
}
else
{
$("form_search").setStyles({display:'block',height:'auto'});
$("notification_setting_chat").setStyles({display:'none',height:'0px'});
}
_time_setting = setTimeout(setting_page_chat, 1000);
}
//Show list friend
function default_page()
{
clearTimeout(_time);
if($("im_menu_friends_body") != null){
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
if(num > 0)
{
var _limit = 0;
$("friend_online").innerHTML = "";
for(var _i=0; _i<num; _i++)
{
if(_limit >= <?php echo $this->limitShow;?> )
{
$("friend_online").innerHTML +="<br /><div id='full_page' style='width:150px;text-align:left;'><span onclick='full_page();return false;'>Expand</span></div>";break;
break;
}
var _sid = n[_i].getProperty("id");
var _id = _sid.split("_");
var _span = n[_i].getChildren("span");
var _img = _span[0].getChildren("img");
$("friend_online").innerHTML +="<div class=\"friend_photo\" onclick=\"show_box("+parseInt(_id[2])+",1);return false;\"><img src='"+_img.getProperty('src')+"' align='left' title='"+(_span[1].innerHTML).trim()+"'/></div>";
_limit = _limit + 1;
}
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>No one is available to chat</p>";
$("search_friend").setStyle('color', '#7C8687');
$("search_friend").value = "Friends on chat";
_time = setTimeout(default_page, 10000);
}
}
//Show all friend
function full_page()
{
clearTimeout(_time);
if($("im_menu_friends_body") != null){
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
if(num > 0)
{
var _limit = 0;
$("friend_online").innerHTML = "";
for(var _i=0; _i<num; _i++)
{
if(_limit >= <?php echo $this->ShowAll;?>)
break;
var _sid = n[_i].getProperty("id");
var _id = _sid.split("_");
var _span = n[_i].getChildren("span");
var _img = _span[0].getChildren("img");
$("friend_online").innerHTML +="<div class=\"friend_photo\" onclick=\"show_box("+parseInt(_id[2])+",1);return false;\"><img src='"+_img.getProperty('src')+"' align='left' title='"+(_span[1].innerHTML).trim()+"'/></div>";
_limit = _limit + 1;
}
$("friend_online").innerHTML +="<br /><div id='hide_page' style='width:159px;text-align:left;'><span onclick='default_page();return false;'> Hide </span></div>";
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>No one is available to chat</p>";
$("search_friend").setStyle('color', '#7C8687');
$("search_friend").value = "Friends on chat";
_time = setTimeout(default_page, 10000);
}
}
// Search friend
function search()
{
clearTimeout(_time);
if($("im_menu_friends_body") != null){
if($("search_friend").value != "" )
{
var _str_find = (($("search_friend").value).toLowerCase().trim()).replace(/\s+/, " ");
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
var _success = false;
if(num > 0)
{
$("friend_online").innerHTML = "";
var _count = 0;
var _limit = 0;
for(var _i=0; _i<num; _i++)
{
if(_limit >= <?php echo $this->limitSearch;?>)
break;
var _sid = n[_i].getProperty("id");
var _id = _sid.split("_");
var _span = n[_i].getChildren("span");
var _nSearch = ((_span[1].innerHTML).toLowerCase()).trim();
var _img = _span[0].getChildren("img");
var _p_find = _nSearch.indexOf(_str_find);
if(parseInt(_p_find) != -1)
{
var _c_first = -1;
do
{
if(parseInt(_p_find) == _c_first+1)
{
_success = true;
break;
}
_c_first = parseInt(_nSearch.indexOf(" ",_c_first+1));
}while(_c_first != -1);
if(_success)
{
$("friend_online").innerHTML +="<div class=\"friend_photo_search\" onmouseover=\"over_search("+_count+");return false;\" onmouseout=\"out_search("+_count+");return false;\" onclick=\"show_box("+parseInt(_id[2])+",2);return false;\" id=\"chat("+parseInt(_id[2])+")\"><img src='"+_img.getProperty('src')+"' align='left'/> "+(_span[1].innerHTML).trim()+"</div>";
_count = _count+1;
_limit = _limit + 1;
_success = false;
}
}
}
if(_count == 0)
$("friend_online").innerHTML = "<p style='margin-left:4px'>Friend not found on chat</p>";
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>Friend not found on chat</p>";
return _count;
}
}
else
return 0;
}
/////////////////////////////////////////////////// event key and mouse ////////////////////////
//event click esc
function over_search(_pos_over)
{
var n = $("friend_online").getChildren('div');
if(_chat_i >= 0 && _chat_i < _num)
{
n[_chat_i].removeClass('active');
n[_chat_i].addClass("deactive");
}
_chat_i = _pos_over;
var _str = n[_chat_i].getProperty('id');
var _id = _str.substring(_str.indexOf("(")+1,_str.indexOf(")"));
$('hide_search').value = _id;
// n[_pos_over].removeClass('active');
n[_pos_over].addClass("active");
}
function out_search(_pos_out)
{
var n = $("friend_online").getChildren('div');
n[_pos_out].removeClass('active');
n[_pos_out].addClass("deactive");
}
function tab_b(event)
{
if(event.preventDefault) {
event.preventDefault();
}
if(_chat_i >= 0 && _chat_i < _num)
{
show_box(parseInt($('hide_search').value),2);
}
return false;
}
function escape_b()
{
clearTimeout(_time);
var _count_div = $('friend_online').getChildren('div').length;
if(_count_div > 0)
{
if($("im_menu_friends_body") != null){
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
if(num > 0)
{
var _limit = 0;
$("friend_online").innerHTML = "";
for(var _i=0; _i<num; _i++)
{
if(_limit >= <?php echo $this->ShowAll;?> )
{
// $("friend_online").innerHTML +="<br /><div id='full_page' style='width:150px;text-align:left;'><span onclick='full_page();return false;'>Expand</span></div>";break;
break;
}
var _sid = n[_i].getProperty("id");
var _id = _sid.split("_");
var _span = n[_i].getChildren("span");
var _img = _span[0].getChildren("img");
$("friend_online").innerHTML +="<div class=\"friend_photo\" onclick=\"show_box("+parseInt(_id[2])+",2);return false;\"><img src='"+_img.getProperty('src')+"' align='left' title='"+(_span[1].innerHTML).trim()+"'/></div>";
_limit = _limit + 1;
}
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>No one is available to chat</p>";
$("search_friend").setStyle('color', '#7C8687');
}
}
_time = setTimeout(escape_b, 1000);
}
//event click arrow down
function arrow_down()
{
if(_chat_i==-2)
return;
var j;
var n = $("friend_online").getChildren('div');
if(_chat_i == _num)
{
if(_num == 1)
{
_chat_i = 0;
j = 1;
}
else{
_chat_i = 0;
j = _num-1;
}
}
else
{
j = _chat_i;
_chat_i = _chat_i + 1;
if(_chat_i==_num)
$('hide_search').value = 0;
}
if(_chat_i<_num)
{
var _str = n[_chat_i].getProperty('id');
var _id = _str.substring(_str.indexOf("(")+1,_str.indexOf(")"));
$('hide_search').value = _id;
n[_chat_i].addClass("active");
}
if(j>=0 && j < _num){
n[j].removeClass('active');
n[j].addClass("deactive");
}
}
//event click arrow up
function arrow_up()
{
if(_chat_i==-2)
return ;
var n = $("friend_online").getChildren('div');
var j;
if(_chat_i == -1)
{
if(_num == 1)
{
_chat_i = 0;
j = 1;
}
else
{
_chat_i = _num-1;
j = 0;
}
}
else
{
j = _chat_i;
_chat_i = _chat_i - 1;
if(_chat_i<0)
$('hide_search').value = 0;
}
if(_chat_i<_num && _chat_i >= 0)
{
var _str = n[_chat_i].getProperty('id');
var _id = _str.substring(_str.indexOf("(")+1,_str.indexOf(")"));
$('hide_search').value = _id;
n[_chat_i].addClass("active");
}
if(j<_num){
n[j].removeClass('active');
n[j].addClass("deactive");
}
}
/////////////////////////////////////////////////// end event key and mouse ////////////////////////
//event input in text
function searchfriend(event)
{
clearTimeout(_time);
if($("search_friend").value != "" )
{
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
if(num > 0)
{
var keyCode = ('which' in event) ? event.which : event.keyCode;
switch(parseInt(keyCode))
{
case 13:
{
if(parseInt($('hide_search').value)!=0)
{
show_box(parseInt($('hide_search').value),2);
}
break;
}
case 40:arrow_down();break;
case 38:arrow_up();break;
case 27:escape_b();break;
default:
{
_num = search();
if(_num==0)
{
_chat_i = -2;
$('hide_search').value = 0;
break;
}
_chat_i = 0;
n = $("friend_online").getChildren('div');
var _str = n[_chat_i].getProperty('id');
var _id = _str.substring(_str.indexOf("(")+1,_str.indexOf(")"));
$('hide_search').value = _id;
n[_chat_i].addClass("active");
}
break;
}
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>Friend not found on chat</p>";
}
else
{
var num = $("im_menu_friends_body").getChildren('li').length;
var n = $("im_menu_friends_body").getChildren('li');
if(num > 0)
{
var _limit = 0;
$("friend_online").innerHTML = "";
for(var _i=0; _i<num; _i++)
{
if(_limit >= 9 )
{
$("friend_online").innerHTML +="<br /><div id='full_page' style='width:150px;text-align:left;'><span onclick='full_page();return false;'>Expand</span></div>";break;
}
var _sid = n[_i].getProperty("id");
var _id = _sid.split("_");
var _span = n[_i].getChildren("span");
var _img = _span[0].getChildren("img");
$("friend_online").innerHTML +="<div class=\"friend_photo\" onclick=\"show_box("+parseInt(_id[2])+");return false;\"><img src='"+_img.getProperty('src')+"' align='left' title='"+(_span[1].innerHTML).trim()+"'/></div>";
var _limit = _limit + 1;
}
}
else
$("friend_online").innerHTML = "<p style='margin-left:4px'>No one is available to chat</p>";
}
}
$('search_friend').onclick=function(e){
if (e && e.stopPropagation) //if stopPropagation method supported
e.stopPropagation()
else
event.cancelBubble=true
}
document.onclick=function(e){
if($("im_menu_friends_body") != null){
if($("search_friend").value == "" )
{
clearTimeout(_time);
_time = setTimeout(default_page, 1000);
$('hide_click').value = 0;
_chat_i = -2;
_num = 0;
}
else
{
if($("search_friend").value != "Friends on chat")
$("friend_online").innerHTML = "";
}
}
else
{
$("search_friend").setStyle('color', '#7C8687');
$("search_friend").value = "Friends on chat";
}
}
</script>
I hopw jason or someone help me..