933 lines
21 KiB
PHP
933 lines
21 KiB
PHP
|
<?
|
||
|
/*
|
||
|
Jorge - frontend for mod_logdb - ejabberd server-side message archive module.
|
||
|
|
||
|
Copyright (C) 2009 Zbigniew Zolkiewski
|
||
|
|
||
|
This program is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU General Public License
|
||
|
as published by the Free Software Foundation; either version 2
|
||
|
of the License, or (at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, write to the Free Software
|
||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
|
||
|
*/
|
||
|
|
||
|
if (__FILE__==$_SERVER['SCRIPT_FILENAME']) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
|
||
|
function get_user_agent($_SERVER) {
|
||
|
|
||
|
if (preg_match("/Macintosh/i",$_SERVER['HTTP_USER_AGENT'])) {
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function getmicrotime(){
|
||
|
|
||
|
list($usec, $sec) = explode(" ",microtime());
|
||
|
return ((float)$usec + (float)$sec);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function query_nick_name($ejabberd_roster,$talker, $server="") {
|
||
|
|
||
|
$nickname = $ejabberd_roster->get_nick("$talker"."@"."$server");
|
||
|
if ($nickname=="") {
|
||
|
|
||
|
$nickname=$talker;
|
||
|
|
||
|
}
|
||
|
|
||
|
return $nickname;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function validate_date($tslice) {
|
||
|
|
||
|
list($ye, $mo, $da) = split("-", $tslice);
|
||
|
return checkdate($mo,$da,$ye);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function check_registered_user ($sess,$ejabberd_rpc,$enc) {
|
||
|
|
||
|
if (!$sess->is_registered('uid_l') OR !$sess->is_registered('uid_p')) {
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
if ($enc->decrypt_url($sess->get('uid_p')) === true) {
|
||
|
|
||
|
$uid_p = $enc->single;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
$ejabberd_rpc->set_user($sess->get('uid_l'),$uid_p);
|
||
|
if ($ejabberd_rpc->auth() === true) {
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function is_query_from($query) {
|
||
|
|
||
|
list($from,$talker,$query_p) = split(":",$query);
|
||
|
$from=trim($from);
|
||
|
if ($from=="from") {
|
||
|
|
||
|
$qquery[from] = "t";
|
||
|
$qquery[talker] = trim($talker);
|
||
|
$qquery[talker] = str_replace("//","@",$qquery[talker]); // hack for parametrized search
|
||
|
if ($query_p) {
|
||
|
|
||
|
$qquery[query] = $query_p;
|
||
|
$qquery[words] = "t";
|
||
|
return $qquery;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
$qquery[words] = "f";
|
||
|
return $qquery;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
// normal search
|
||
|
return "f";
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function verbose_date($raw_date,$months_names = null,$weekdays = null,$t = false,$y = false) {
|
||
|
|
||
|
// English calendar arrays. Here we convert names from english calendar to other language. Make sure your locale in php work with default set to english.
|
||
|
$english_months = array("January","February", "March", "April", "May","June","July","August","September","October", "November","December");
|
||
|
$english_days = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
|
||
|
|
||
|
// Various formats
|
||
|
if ($t === true) {
|
||
|
|
||
|
return str_replace($english_days,$weekdays,strftime("%e.%m (%A)",strtotime("$raw_date")));
|
||
|
|
||
|
}
|
||
|
elseif($y === true) {
|
||
|
|
||
|
return str_replace($english_months,$months_names,strftime("%B %Y", strtotime("$raw_date")));
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
return str_replace($english_months,$months_names,strftime("%e %B %Y", strtotime("$raw_date")));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function validate_start($start) {
|
||
|
|
||
|
if (!ctype_digit($start)) {
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
if (fmod($start,10)=="0") {
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function db_size() {
|
||
|
|
||
|
$result = mysql_query("show table status");
|
||
|
$size = 0;
|
||
|
while($row = mysql_fetch_array($result)) {
|
||
|
|
||
|
$size += $row["Data_length"];
|
||
|
|
||
|
}
|
||
|
|
||
|
$size = round(($size/1024)/1024, 1);
|
||
|
return $size;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function verbose_split_line($in_minutes,$verb_h,$in_min) {
|
||
|
|
||
|
if ($in_minutes>60) {
|
||
|
return $verb_h;
|
||
|
}
|
||
|
elseif ($in_minutes<60) {
|
||
|
return $in_minutes." ".$in_min;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function cut_nick($nick) {
|
||
|
|
||
|
if (strlen($nick)> 25) {
|
||
|
$nick=substr($nick,0,25)."...";
|
||
|
|
||
|
}
|
||
|
|
||
|
return $nick;
|
||
|
}
|
||
|
|
||
|
|
||
|
function new_parse_url($text) {
|
||
|
|
||
|
$text = ereg_replace("([[:alpha:]]+://www|[[:alpha:]]+://)[^<>[:space:]]+[[:alnum:]/]",
|
||
|
|
||
|
"<a class=\"clickl\" href=\"\\0\" target=\"_blank\">\\0</a>", $text);
|
||
|
|
||
|
// disabled for now
|
||
|
#$text = ereg_replace("[^://]?www[^<>[:space:]]+[[:alnum:]/]",
|
||
|
# "<a class=\"clickl\" href=\"http://\\0\" target=\"_blank\">\\0</a>", $text);
|
||
|
|
||
|
return $text;
|
||
|
}
|
||
|
|
||
|
|
||
|
function calendar($db,$user_id,$xmpp_host,$y,$m,$days,$token,$url_key,$left,$right,$selected,$lang,$view_type,$c_type,$name_peer=0,$server_peer=0,$cal_days=0,$enc=null,$months_names,$weekdays) {
|
||
|
|
||
|
$days=$days;
|
||
|
$month = $m;
|
||
|
$year = $y;
|
||
|
|
||
|
//create arrays for the calendar
|
||
|
|
||
|
$months_days = array("31","28","31","30","31","30","31","31",
|
||
|
"30","31","30","31");
|
||
|
|
||
|
$days_array = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
|
||
|
|
||
|
//removes the 0 from start of month - can't find array key with 0
|
||
|
|
||
|
if(strlen($month)==1){
|
||
|
$month= str_replace("0","",$month);
|
||
|
}
|
||
|
else{
|
||
|
$month=$month;
|
||
|
}
|
||
|
|
||
|
//reset month to the array key match (array starts at 0)
|
||
|
|
||
|
$month= $month-1;
|
||
|
|
||
|
//find the days in the month
|
||
|
|
||
|
$days_in_month = $months_days[$month];
|
||
|
|
||
|
//$m is used to find month
|
||
|
|
||
|
$m = $month+1;
|
||
|
|
||
|
//find the first day of the month
|
||
|
|
||
|
$time = date("M D Y H:i:s", mktime(0, 0, 0, $m, 1, $year));
|
||
|
$first_day = explode(" ",$time);
|
||
|
$time = $first_day[1];
|
||
|
|
||
|
//create the links to next and previous months
|
||
|
|
||
|
$next = $month+2;
|
||
|
$x = $year;
|
||
|
|
||
|
//if month is 13 then new year
|
||
|
|
||
|
if($next==13){
|
||
|
$next=1;
|
||
|
$x = $x+1;
|
||
|
}
|
||
|
$prev = $month;
|
||
|
$y = $year;
|
||
|
|
||
|
//if month is 0, then previous year
|
||
|
|
||
|
if($prev==0){
|
||
|
$prev=12;
|
||
|
$y=$y-1;
|
||
|
}
|
||
|
|
||
|
$calendar = "";
|
||
|
|
||
|
//Build the calendar with css
|
||
|
//links to next and previous month only for browser
|
||
|
if ($c_type=="1") {
|
||
|
|
||
|
// encode links
|
||
|
$link_left = $enc->crypt_url("tslice=$y-$prev");
|
||
|
$link_right = $enc->crypt_url("tslice=$x-$next");
|
||
|
|
||
|
// check if we have chats in prev and next mo
|
||
|
$db->is_left_or_right("$y-$prev");
|
||
|
$i_left = $db->result;
|
||
|
$db->is_left_or_right("$x-$next");
|
||
|
$i_right = $db->result;
|
||
|
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
$i_left=0;
|
||
|
$i_right=0;
|
||
|
|
||
|
}
|
||
|
|
||
|
$calendar .='
|
||
|
<table width="200" border="0" cellpadding="0" cellspacing="0" class="calbck">
|
||
|
<tr>
|
||
|
<td><img src="img/cal_corn_11.png" width="15" height="7" alt="cal_img"></td>
|
||
|
<td style="background-image: url(img/cal_bck_top.gif);"></td>
|
||
|
<td><img src="img/cal_corn_12.png" width="14" height="7" alt="cal_img"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td width="15" valign="top" class="calbckleft"><img src="img/cal_bck_left.png" width="15" height="116" alt="cal_img">
|
||
|
</td>
|
||
|
<td width="100%" valign="top">
|
||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
||
|
<tr>
|
||
|
<td height="15" align="center" class="caldays">
|
||
|
';
|
||
|
|
||
|
if ($i_left!=0) { $calendar.='<a href="?left='.$link_left.'"><<<</a>'; }
|
||
|
|
||
|
$verb_date = "$year-$m-1";
|
||
|
|
||
|
$calendar.='
|
||
|
|
||
|
</td>
|
||
|
<td colspan="5" align="center" class="calhead">'.verbose_date($verb_date,$months_names,$weekdays,false,true).'</td>
|
||
|
<td align="center" class="caldays">
|
||
|
|
||
|
';
|
||
|
if ($i_right!=0) { $calendar.='<a href="?right='.$link_right.'">>>></a>'; }
|
||
|
$calendar.='
|
||
|
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr align="center" class="calweek">
|
||
|
<td width="14%" height="15">'.$cal_days[$lang][1].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][2].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][3].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][4].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][5].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][6].'</td>
|
||
|
<td width="14%">'.$cal_days[$lang][7].'</td>
|
||
|
</tr>
|
||
|
|
||
|
';
|
||
|
|
||
|
//checks for leap years and add 1 to February
|
||
|
|
||
|
if(($year % 4 =="") && ($month==1)){
|
||
|
$days_in_month=$days_in_month+1;
|
||
|
}
|
||
|
|
||
|
else{
|
||
|
$days_in_month=$days_in_month;
|
||
|
}
|
||
|
|
||
|
$new_time="";
|
||
|
|
||
|
//find how many blank spaces at beginning of the month
|
||
|
|
||
|
foreach($days_array as $key=>$value){
|
||
|
|
||
|
if($value == $time){
|
||
|
$new_time .= $key+1;
|
||
|
}
|
||
|
else{
|
||
|
$new_time .="";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//loop through the days in the month
|
||
|
$c=0;
|
||
|
|
||
|
for($k=1;$k<($days_in_month+$new_time);$k++){
|
||
|
|
||
|
$c++;
|
||
|
if ($c==1) { $calendar.='<tr align="center" class="caldays">'; }
|
||
|
|
||
|
|
||
|
|
||
|
//blank space
|
||
|
|
||
|
if($k<$new_time){
|
||
|
$calendar.='<td height="15"> </td>
|
||
|
';
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
//start the actual days
|
||
|
|
||
|
$n = $k-$new_time+1;
|
||
|
|
||
|
if(in_array($n,$days)){
|
||
|
|
||
|
if ($c_type=="1") {
|
||
|
|
||
|
$to_base = $enc->crypt_url("tslice=$year-$m-$n");
|
||
|
$loc_orign="";
|
||
|
|
||
|
}
|
||
|
elseif($c_type=="2") {
|
||
|
|
||
|
$to_base = $enc->crypt_url("tslice=$year-$m-$n&peer_name_id=$name_peer&peer_server_id=$server_peer");
|
||
|
$loc_orign="&loc=2";
|
||
|
|
||
|
}
|
||
|
|
||
|
if ($selected==$n) { $bgcolor = 'bgcolor="#6daae7"'; } else { $bgcolor=""; }
|
||
|
$calendar .= '<td height="15" '.$bgcolor.' onclick="window.location=\''.$view_type.'?a='.$to_base.$loc_orign.'\'"><b><a class="caldays2" href="'.$view_type.'?a='.$to_base.$loc_orign.'">'.$n.'</a></b></td>
|
||
|
';
|
||
|
}
|
||
|
else{
|
||
|
$calendar .= '<td height="15">'.$n.'</td>
|
||
|
';
|
||
|
}
|
||
|
|
||
|
if ($c==7) { $calendar.='</tr>'; $c=0; }
|
||
|
|
||
|
|
||
|
}
|
||
|
$calendar .= '
|
||
|
|
||
|
</table>
|
||
|
</td>
|
||
|
<td width="14" valign="top" class="calbckright"><img src="img/cal_bck_right.png" width="14" height="116" alt="cal_img"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td><img src="img/cal_corn_21.png" width="15" height="16" alt="cal_img"></td>
|
||
|
<td style="background-image: url(img/cal_bck_bot.png);"></td>
|
||
|
<td><img src="img/cal_corn_22.png" width="14" height="16" alt="cal_img"></td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
';
|
||
|
|
||
|
return($calendar);
|
||
|
}
|
||
|
|
||
|
|
||
|
function check_thread($db,$peer_name_id,$peer_server_id,$at,$xmpp_host,$dir=NULL) {
|
||
|
|
||
|
#adjust this hours as needed, we assume if chat is +/- 1 hour on the edge of day, then chat is related
|
||
|
if ($dir=="1") {
|
||
|
$day="+1 day";
|
||
|
$bhour="00:00:00";
|
||
|
$ehour="00:30:00";
|
||
|
}
|
||
|
elseif($dir=="2"){
|
||
|
$day="-1 day";
|
||
|
$bhour="23:30:00";
|
||
|
$ehour="23:59:59";
|
||
|
}
|
||
|
|
||
|
$get_date = date("Y-n-j", strtotime($day, strtotime(date("$at"))));
|
||
|
|
||
|
$db->check_thread($get_date,$peer_name_id,$peer_server_id,$bhour,$ehour);
|
||
|
if ($db->result > 0) {
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
else{
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
function check_rpc_server($rpc_arr,$rpc_port) {
|
||
|
|
||
|
foreach($rpc_arr as $rpc_host) {
|
||
|
|
||
|
// assume if response time is greater then 1 second RPC server is down
|
||
|
$fp=fsockopen("$rpc_host", $rpc_port, $errno, $errstr, 1);
|
||
|
if ($fp!=false) {
|
||
|
|
||
|
return $rpc_host;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function debug($debug=false,$string) {
|
||
|
|
||
|
if ($debug===true) {
|
||
|
|
||
|
print "<small>".htmlspecialchars($string)."</small><br>";
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
|
||
|
}
|
||
|
|
||
|
function message_processor($tslice,$server_name,$start,$nickname,$result_messages,$db,$html,$enc,$token,$split_line,$lang_pack,$lang,$spec_mark,$e_string,$to_base_prev,$to_base_next) {
|
||
|
|
||
|
/*
|
||
|
This function perform message processing for message archives
|
||
|
tslice - date of chat
|
||
|
server_name - name of server
|
||
|
start - from what point of time of day should chat be displayed
|
||
|
nickname - peer nickname
|
||
|
result_messages - array of messages to be parsed
|
||
|
db - database object
|
||
|
html - html object
|
||
|
enc - encryption object
|
||
|
token - owner name
|
||
|
split_line - config option
|
||
|
lang_pack - array of translations
|
||
|
lang - language pack
|
||
|
spec_mark - marker used to distinguish what we are doing
|
||
|
e_string - url
|
||
|
*/
|
||
|
|
||
|
// Check if user have set up OwnName
|
||
|
$db->get_own_name();
|
||
|
if ($db->result->own_name) {
|
||
|
|
||
|
$own_name = $db->result->own_name;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$own_name = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
// Main loop
|
||
|
foreach($result_messages as $entry) {
|
||
|
|
||
|
// always get resource_id if message is type of groupchat
|
||
|
if ($entry[type] !== "groupchat") {
|
||
|
|
||
|
if ($resource_last !== $entry[peer_resource_id]) {
|
||
|
|
||
|
if ($db->get_resource_name($entry[peer_resource_id]) === false) {
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$resource = $db->result->resource_name;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
if ($db->get_resource_name($entry[peer_resource_id]) === false) {
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
$resource = $db->result->resource_name;
|
||
|
|
||
|
}
|
||
|
|
||
|
$resource_last = $entry[peer_resource_id];
|
||
|
$licz++;
|
||
|
|
||
|
// marking messages
|
||
|
if ($entry["type"] === "chat" OR $entry["type"] == "") {
|
||
|
|
||
|
if ($entry["direction"] === "to") {
|
||
|
|
||
|
$col="main_row_a";
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
$col="main_row_b";
|
||
|
}
|
||
|
}
|
||
|
elseif($entry["type"] === "error") {
|
||
|
|
||
|
$col="main_row_error";
|
||
|
|
||
|
}
|
||
|
elseif($entry["type"] === "normal") {
|
||
|
|
||
|
$col="main_row_message";
|
||
|
|
||
|
}
|
||
|
elseif($entry["type"] === "headline") {
|
||
|
|
||
|
$col="main_row_headline";
|
||
|
|
||
|
}
|
||
|
|
||
|
$ts = strstr($entry["ts"], ' ');
|
||
|
// time calc
|
||
|
$pass_to_next = $entry["ts"];
|
||
|
$new_d = $entry["ts"];
|
||
|
$time_diff = abs((strtotime("$old_d") - strtotime(date("$new_d"))));
|
||
|
$old_d = $pass_to_next;
|
||
|
// end time calc
|
||
|
if ($time_diff>$split_line AND $licz>1) {
|
||
|
|
||
|
$in_minutes = round(($time_diff/60),0);
|
||
|
$html->set_body('<tr class="splitl">
|
||
|
<td colspan="7" style="font-size: 10px;"><i>'.verbose_split_line($in_minutes,$lang_pack[7],$lang_pack[8]).'</i>
|
||
|
<hr size="1" noshade="noshade" style="color: #cccccc;"></td></tr>
|
||
|
');
|
||
|
}
|
||
|
|
||
|
// check if chat is continuation from previous day (work only for calendar view)
|
||
|
if ($to_base_prev !== NULL) {
|
||
|
|
||
|
if ($ts_mark!="1" AND substr($ts, 0 , strpos($ts, ":")) == 00 ) {
|
||
|
|
||
|
if ( check_thread($db,$talker,$server,$tslice,$xmpp_host,2) === true) {
|
||
|
|
||
|
$html->set_body('<tr><td colspan="6" style="text-align: left; padding-left: 5px;" class="message"><a href="calendar_view.php?a='.$to_base_prev.'">'.$lang_pack[0].'</a></td></tr>');
|
||
|
}
|
||
|
// check only first line
|
||
|
$ts_mark="1";
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// run code only if type is not groupchat
|
||
|
if ($entry["type"] !== "groupchat") {
|
||
|
|
||
|
// setting subject
|
||
|
if ($col==="main_row_message" OR $col==="main_row_headline") {
|
||
|
|
||
|
if ($entry["subject"]) {
|
||
|
|
||
|
$subject = ": ".$entry["subject"];
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
unset($subject);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// add line in case of special message
|
||
|
if ($col==="main_row_message") {
|
||
|
|
||
|
$html->set_body('<tr class="main_row_message"><td colspan="7" class="main_row_special">'.$lang_pack[1].' '.htmlspecialchars($subject).'</td></tr>');
|
||
|
|
||
|
}
|
||
|
|
||
|
if ($col==="main_row_error") {
|
||
|
|
||
|
$html->set_body('<tr class="main_row_error"><td colspan="7" class="main_row_special">'.$lang_pack[2].'</td></tr>');
|
||
|
|
||
|
}
|
||
|
|
||
|
if ($col==="main_row_headline") {
|
||
|
|
||
|
$html->set_body('<tr class="main_row_headline"><td colspan="7" class="main_row_special">'.$lang_pack[3].' '.htmlspecialchars($subject).'</td></tr>');
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// calculate chat direction, whether to display nick...
|
||
|
if ($entry["direction"] == "from") {
|
||
|
|
||
|
$out=$nickname;
|
||
|
$tt=$tt+1;
|
||
|
$aa=0;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$out = $token;
|
||
|
$aa=$aa+1;
|
||
|
$tt=0;
|
||
|
|
||
|
}
|
||
|
|
||
|
// timestamp, beginning of the chatline
|
||
|
if ($entry["type"] !== "groupchat") {
|
||
|
|
||
|
$html->set_body('<tr class="'.$col.'"><td class="time_chat" style="padding-left: 10px; padding-right: 10px;";>'.$ts.'</td>');
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
if ($out!==$token) {
|
||
|
|
||
|
// colorize
|
||
|
if ($resource_group === $resource OR !$resource_group) {
|
||
|
|
||
|
if (!$col) {
|
||
|
|
||
|
$col = "main_row_group_to";
|
||
|
|
||
|
}
|
||
|
$col=$col;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
if($col === "main_row_group_from") {
|
||
|
|
||
|
$col="main_row_group_to";
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$col="main_row_group_from";
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
$html->set_body('<tr class="'.$col.'"><td class="time_chat" style="padding-left: 10px; padding-right: 10px;";>'.$ts.'</td>');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// different bahaviour for groupchat and other messages
|
||
|
if ($entry["type"] !== "groupchat") {
|
||
|
|
||
|
if ($aa<2 AND $tt<2) {
|
||
|
|
||
|
$html->set_body('<td style="padding-left: 5px; padding-right: 10px; nowrap="nowrap">');
|
||
|
if ($out === TOKEN) {
|
||
|
|
||
|
// display of Own Name
|
||
|
if ($own_name !== false) {
|
||
|
|
||
|
$html->set_body(cut_nick(htmlspecialchars($own_name)));
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$html->set_body(cut_nick(htmlspecialchars($out)));
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$html->set_body(cut_nick(htmlspecialchars($out)));
|
||
|
|
||
|
}
|
||
|
|
||
|
$html->set_body('<a name="'.$licz.'"></a>');
|
||
|
|
||
|
if ($out !== $token) {
|
||
|
|
||
|
if ($spec_mark === false) {
|
||
|
|
||
|
$html->set_body('
|
||
|
<br><div style="text-align: left; padding-left: 5px;">
|
||
|
<a class="export" id="pretty" title="'.$lang_pack[4].'" href="?a='.$e_string.'&b='.$entry[peer_resource_id].'">
|
||
|
<small><i>'.cut_nick(htmlspecialchars($resource)).'</i></small></a></div>
|
||
|
');
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$html->set_body('<br><div style="text-align: left; padding-left: 5px;">
|
||
|
<small><i>'.cut_nick(htmlspecialchars($server_name)).'</i></small></div>
|
||
|
');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
$html->set_body('</td>');
|
||
|
$here = "1";
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
$html->set_body('<td style="text-align: right; padding-right: 5px">-</td>');
|
||
|
$here = "0";
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
// do not display own chats sent to MUC. Here resource is actualy nickname as MUC standard specify
|
||
|
if ($out !== $token) {
|
||
|
|
||
|
if ($resource_group !== $resource) {
|
||
|
|
||
|
// if message is sent without resource, that must be channel message, advise user.
|
||
|
if ($resource === "") {
|
||
|
|
||
|
$resource = $lang_pack[5];
|
||
|
|
||
|
}
|
||
|
|
||
|
$html->set_body('<td style="padding-left: 5px; padding-right: 10px; nowrap="nowrap"><small>MUC: <i>'.cut_nick($out).'</i></small><a name="'.$licz.'"></a>
|
||
|
<br><div style="text-align: left; padding-left: 5px;">'.cut_nick(htmlspecialchars($resource)).'</div></td>
|
||
|
');
|
||
|
$here = "1";
|
||
|
$resource_group = $resource;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$html->set_body('<td style="text-align: right; padding-right: 5px">-</td>');
|
||
|
$here = "0";
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$here = "0";
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// process body part, do not show chat if message is type of groupchat
|
||
|
// this is sadly funny i write this 'if' and i dont know what exacly it do :/
|
||
|
|
||
|
if ($out !== $token OR $entry["type"] !== "groupchat") {
|
||
|
|
||
|
// prepare body
|
||
|
$new_s = htmlspecialchars($entry["body"]);
|
||
|
$to_r = array("\n");
|
||
|
$t_ro = array("<br>");
|
||
|
$new_s = str_replace($to_r,$t_ro,$new_s);
|
||
|
$new_s = wordwrap($new_s,107,"<br>",true);
|
||
|
$new_s = new_parse_url($new_s);
|
||
|
$html->set_body('<td width="800" colspan="3">'.$new_s.'</td>');
|
||
|
// generate mylink only on selected lines
|
||
|
if ($here==="1") {
|
||
|
|
||
|
$lnk = $enc->crypt_url("tslice=$tslice&peer_name_id=$entry[peer_name_id]&peer_server_id=$entry[peer_server_id]");
|
||
|
$to_base2 = $enc->crypt_url("tslice=$tslice&peer_name_id=$entry[peer_name_id]&peer_server_id=$entry[peer_server_id]&ismylink=1&linktag=$licz&lnk=$lnk&strt=$start");
|
||
|
$html->set_body('<td colspan="2" style="padding-left: 2px; font-size: 9px;"><a style="color: #1466bc" href="my_links.php?a='.$to_base2.'">'.$lang_pack[6].'</a></td>');
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
$html->set_body('<td></td>');
|
||
|
|
||
|
}
|
||
|
|
||
|
if ($t=2) { $c=1; $t=0; } // WTF!?
|
||
|
|
||
|
$html->set_body('</tr>');
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
$html->set_body('</tbody>');
|
||
|
|
||
|
// Check thread. Work only for calendar view.
|
||
|
if ($to_base_next !== NULL) {
|
||
|
|
||
|
if (substr($ts, 0 , strpos($ts, ":")) == 23 AND date("Y-n-j") !== $tslice) {
|
||
|
|
||
|
if ( check_thread($db,$talker,$server,$tslice,$xmpp_host,1) === true) {
|
||
|
|
||
|
$html->set_body('<tr><td colspan="6" style="text-align: right; padding-right: 5px;" class="message"><a href="calendar_view.php?a='.$to_base_next.'">'.$lang_pack[9].'</a></td></tr>');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
function is_language_supported($l_query,$language_support,$l_key = 0, $return_val = false) {
|
||
|
|
||
|
while (array_keys($language_support)) {
|
||
|
|
||
|
$lang_key = key($language_support);
|
||
|
if ($l_query === $language_support[$lang_key][$l_key]) {
|
||
|
|
||
|
if ($return_val === true) {
|
||
|
|
||
|
return $language_support[$lang_key][0];
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
array_shift($language_support);
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
?>
|