2010-07-20 07:52:31 +02:00
< ? php
2011-07-25 16:54:39 +02:00
require_once ( " include/datetime.php " );
2010-07-20 07:52:31 +02:00
function ping_init ( & $a ) {
2011-09-28 09:30:22 +02:00
header ( " Content-type: text/xml " );
2012-02-20 20:21:34 +01:00
2011-09-28 09:30:22 +02:00
echo " <?xml version= \" 1.0 \" encoding= \" UTF-8 \" ?>
< result > " ;
2011-11-15 17:41:51 +01:00
$xmlhead = " < " . " ?xml version='1.0' encoding='UTF-8' ? " . " > " ;
2012-05-23 01:01:07 +02:00
2011-09-28 09:30:22 +02:00
if ( local_user ()){
2012-05-23 01:01:07 +02:00
// Different login session than the page that is calling us.
if ( intval ( $_GET [ 'uid' ]) && intval ( $_GET [ 'uid' ]) != local_user ()) {
echo '<invalid>1</invalid></result>' ;
killme ();
}
2012-02-24 01:50:29 +01:00
$firehose = intval ( get_pconfig ( local_user (), 'system' , 'notify_full' ));
2012-03-01 01:26:07 +01:00
$t = q ( " select count(*) as total from notify where uid = %d and seen = 0 " ,
2012-02-22 04:03:55 +01:00
intval ( local_user ())
);
2012-03-01 01:26:07 +01:00
if ( $t && intval ( $t [ 0 ][ 'total' ]) > 49 ) {
$z = q ( " select * from notify where uid = %d
and seen = 0 order by date desc limit 0 , 50 " ,
intval ( local_user ())
);
2012-03-29 02:51:43 +02:00
$sysnotify = $t [ 0 ][ 'total' ];
2012-03-01 01:26:07 +01:00
}
else {
$z1 = q ( " select * from notify where uid = %d
and seen = 0 order by date desc limit 0 , 50 " ,
intval ( local_user ())
);
$z2 = q ( " select * from notify where uid = %d
and seen = 1 order by date desc limit 0 , % d " ,
intval ( local_user ()),
intval ( 50 - intval ( $t [ 0 ][ 'total' ]))
);
$z = array_merge ( $z1 , $z2 );
2012-03-29 02:44:24 +02:00
$sysnotify = 0 ; // we will update this in a moment
2012-03-01 01:26:07 +01:00
}
2012-02-22 04:03:55 +01:00
2011-11-15 17:41:51 +01:00
$tags = array ();
2011-09-28 09:30:22 +02:00
$comments = array ();
$likes = array ();
$dislikes = array ();
$friends = array ();
2011-10-09 06:24:16 +02:00
$posts = array ();
2012-09-19 02:43:09 +02:00
2012-02-26 21:40:41 +01:00
$home = 0 ;
$network = 0 ;
2011-12-01 02:08:16 +01:00
2012-02-26 21:40:41 +01:00
$r = q ( " SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`,
2012-09-26 13:46:54 +02:00
`item` . `contact-id` , `item` . `author-link` , `item` . `author-avatar` , `item` . `created` , `item` . `object` ,
2011-09-28 09:30:22 +02:00
`pitem` . `author-name` as `pname` , `pitem` . `author-link` as `plink`
FROM `item` INNER JOIN `item` as `pitem` ON `pitem` . `id` = `item` . `parent`
2012-10-11 00:57:40 +02:00
WHERE `item` . `unseen` = 1 AND `item` . `visible` = 1 AND
2012-10-11 01:17:40 +02:00
`item` . `deleted` = 0 AND `item` . `uid` = % d AND `pitem` . `parent` != 0
2011-12-01 02:08:16 +01:00
ORDER BY `item` . `created` DESC " ,
2011-09-28 09:30:22 +02:00
intval ( local_user ())
);
2010-07-20 07:52:31 +02:00
2012-02-24 01:50:29 +01:00
if ( count ( $r )) {
2012-09-26 13:50:24 +02:00
$arr = array ( 'items' => $r );
call_hooks ( 'network_ping' , $arr );
2012-09-26 13:46:54 +02:00
2012-02-24 01:50:29 +01:00
foreach ( $r as $it ) {
if ( $it [ 'wall' ])
$home ++ ;
else
$network ++ ;
switch ( $it [ 'verb' ]){
case ACTIVITY_TAG :
$obj = parse_xml_string ( $xmlhead . $it [ 'object' ]);
$it [ 'tname' ] = $obj -> content ;
$tags [] = $it ;
break ;
case ACTIVITY_LIKE :
$likes [] = $it ;
break ;
case ACTIVITY_DISLIKE :
$dislikes [] = $it ;
break ;
case ACTIVITY_FRIEND :
$obj = parse_xml_string ( $xmlhead . $it [ 'object' ]);
$it [ 'fname' ] = $obj -> title ;
$friends [] = $it ;
break ;
default :
if ( $it [ 'parent' ] != $it [ 'id' ]) {
$comments [] = $it ;
} else {
if ( ! $it [ 'wall' ])
$posts [] = $it ;
}
}
2011-09-28 09:30:22 +02:00
}
2011-08-23 13:52:20 +02:00
}
2012-02-20 20:21:34 +01:00
$intros1 = q ( " SELECT `intro`.`id`, `intro`.`datetime`,
2011-09-28 09:30:22 +02:00
`fcontact` . `name` , `fcontact` . `url` , `fcontact` . `photo`
FROM `intro` LEFT JOIN `fcontact` ON `intro` . `fid` = `fcontact` . `id`
WHERE `intro` . `uid` = % d AND `intro` . `blocked` = 0 AND `intro` . `ignore` = 0 AND `intro` . `fid` != 0 " ,
intval ( local_user ())
);
2012-02-20 20:21:34 +01:00
$intros2 = q ( " SELECT `intro`.`id`, `intro`.`datetime`,
2011-09-28 09:30:22 +02:00
`contact` . `name` , `contact` . `url` , `contact` . `photo`
FROM `intro` LEFT JOIN `contact` ON `intro` . `contact-id` = `contact` . `id`
WHERE `intro` . `uid` = % d AND `intro` . `blocked` = 0 AND `intro` . `ignore` = 0 AND `intro` . `contact-id` != 0 " ,
intval ( local_user ())
);
2012-02-20 20:21:34 +01:00
$intro = count ( $intros1 ) + count ( $intros2 );
2011-09-28 09:30:22 +02:00
$intros = $intros1 + $intros2 ;
$myurl = $a -> get_baseurl () . '/profile/' . $a -> user [ 'nickname' ] ;
$mails = q ( " SELECT *, COUNT(*) AS `total` FROM `mail`
WHERE `uid` = % d AND `seen` = 0 AND `from-url` != '%s' " ,
intval ( local_user ()),
dbesc ( $myurl )
);
2012-02-24 01:50:29 +01:00
if ( $mails )
$mail = $mails [ 0 ][ 'total' ];
2011-09-28 09:30:22 +02:00
2012-01-05 03:03:09 +01:00
if ( $a -> config [ 'register_policy' ] == REGISTER_APPROVE && is_site_admin ()){
$regs = q ( " SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1 " );
2012-02-24 01:50:29 +01:00
if ( $regs )
$register = $regs [ 0 ][ 'total' ];
2011-09-28 09:30:22 +02:00
} else {
$register = " 0 " ;
}
2011-08-17 21:59:06 +02:00
2012-09-19 02:43:09 +02:00
$all_events = 0 ;
$all_events_today = 0 ;
$events = 0 ;
$events_today = 0 ;
$birthdays = 0 ;
$birthdays_today = 0 ;
$ev = q ( " SELECT count(`event`.`id`) as total, type, start, adjust FROM `event`
WHERE `event` . `uid` = % d AND `start` < '%s' AND `finish` > '%s' and `ignore` = 0
ORDER BY `start` ASC " ,
intval ( local_user ()),
dbesc ( datetime_convert ( 'UTC' , 'UTC' , 'now + 7 days' )),
dbesc ( datetime_convert ( 'UTC' , 'UTC' , 'now' ))
);
if ( $ev && count ( $ev )) {
$all_events = intval ( $ev [ 0 ][ 'total' ]);
if ( $all_events ) {
$str_now = datetime_convert ( 'UTC' , $a -> timezone , 'now' , 'Y-m-d' );
foreach ( $ev as $x ) {
$bd = false ;
if ( $x [ 'type' ] === 'birthday' ) {
$birthdays ++ ;
$bd = true ;
}
else {
$events ++ ;
}
if ( datetime_convert ( 'UTC' ,(( intval ( $x [ 'adjust' ])) ? $a -> timezone : 'UTC' ), $x [ 'start' ], 'Y-m-d' ) === $str_now ) {
$all_events_today ++ ;
if ( $bd )
$birthdays_today ++ ;
else
$events_today ++ ;
}
}
}
}
2010-07-20 07:52:31 +02:00
2012-02-25 12:28:07 +01:00
function xmlize ( $href , $name , $url , $photo , $date , $seen , $message ){
2012-04-22 15:28:54 +02:00
$data = array ( 'href' => & $href , 'name' => & $name , 'url' =>& $url , 'photo' =>& $photo , 'date' =>& $date , 'seen' =>& $seen , 'messsage' =>& $message );
call_hooks ( 'ping_xmlize' , $data );
2012-02-25 12:28:07 +01:00
$notsxml = '<note href="%s" name="%s" url="%s" photo="%s" date="%s" seen="%s" >%s</note>' ;
2011-09-28 09:30:22 +02:00
return sprintf ( $notsxml ,
2012-02-25 12:28:07 +01:00
xmlify ( $href ), xmlify ( $name ), xmlify ( $url ), xmlify ( $photo ), xmlify ( $date ), xmlify ( $seen ), xmlify ( $message )
2012-02-24 01:50:29 +01:00
);
2011-09-28 09:30:22 +02:00
}
echo " <intro> $intro </intro>
< mail > $mail </ mail >
< net > $network </ net >
2012-09-19 02:43:09 +02:00
< home > $home </ home > \r\n " ;
2011-09-28 09:30:22 +02:00
if ( $register != 0 ) echo " <register> $register </register> " ;
2012-09-19 02:43:09 +02:00
echo " <all-events> $all_events </all-events>
< all - events - today > $all_events_today </ all - events - today >
< events > $events </ events >
< events - today > $events_today </ events - today >
< birthdays > $birthdays </ birthdays >
< birthdays - today > $birthdays_today </ birthdays - today > \r\n " ;
2011-09-28 09:30:22 +02:00
2012-01-05 03:03:09 +01:00
$tot = $mail + $intro + $register + count ( $comments ) + count ( $likes ) + count ( $dislikes ) + count ( $friends ) + count ( $posts ) + count ( $tags );
2012-02-22 04:03:55 +01:00
require_once ( 'include/bbcode.php' );
2012-02-25 13:37:12 +01:00
2012-02-24 01:50:29 +01:00
if ( $firehose ) {
echo ' <notif count="' . $tot . '">' ;
}
else {
2012-03-29 02:44:24 +02:00
if ( count ( $z ) && ( ! $sysnotify )) {
2012-02-25 13:37:12 +01:00
foreach ( $z as $zz ) {
if ( $zz [ 'seen' ] == 0 )
$sysnotify ++ ;
}
}
echo ' <notif count="' . $sysnotify . '">' ;
2012-02-24 01:50:29 +01:00
if ( count ( $z )) {
foreach ( $z as $zz ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/notify/view/' . $zz [ 'id' ], $zz [ 'name' ], $zz [ 'url' ], $zz [ 'photo' ], relative_date ( $zz [ 'date' ]), ( $zz [ 'seen' ] ? 'notify-seen' : 'notify-unseen' ), ( $zz [ 'seen' ] ? '' : '→ ' ) . strip_tags ( bbcode ( $zz [ 'msg' ])));
2012-02-24 01:50:29 +01:00
}
2012-02-22 04:03:55 +01:00
}
}
2012-02-24 01:50:29 +01:00
if ( $firehose ) {
if ( $intro > 0 ){
foreach ( $intros as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/notifications/intros/' . $i [ 'id' ], $i [ 'name' ], $i [ 'url' ], $i [ 'photo' ], relative_date ( $i [ 'datetime' ]), 'notify-unseen' , t ( " { 0} wants to be your friend " ) );
2012-02-24 01:50:29 +01:00
};
}
if ( $mail > 0 ){
foreach ( $mails as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/message/' . $i [ 'id' ], $i [ 'from-name' ], $i [ 'from-url' ], $i [ 'from-photo' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , t ( " { 0} sent you a message " ) );
2012-02-24 01:50:29 +01:00
};
}
if ( $register > 0 ){
foreach ( $regs as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/admin/users/' , $i [ 'name' ], $i [ 'url' ], $i [ 'micro' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , t ( " { 0} requested registration " ) );
2012-02-24 01:50:29 +01:00
};
}
2012-02-22 04:03:55 +01:00
2012-02-24 01:50:29 +01:00
if ( count ( $comments )){
foreach ( $comments as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} commented %s's post " ), $i [ 'pname' ] ) );
2012-02-24 01:50:29 +01:00
};
}
if ( count ( $likes )){
foreach ( $likes as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} liked %s's post " ), $i [ 'pname' ] ) );
2012-02-24 01:50:29 +01:00
};
}
if ( count ( $dislikes )){
foreach ( $dislikes as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} disliked %s's post " ), $i [ 'pname' ] ) );
2012-02-24 01:50:29 +01:00
};
}
if ( count ( $friends )){
foreach ( $friends as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} is now friends with %s " ), $i [ 'fname' ] ) );
2012-02-24 01:50:29 +01:00
};
}
if ( count ( $posts )){
foreach ( $posts as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} posted " ) ) );
2012-02-24 01:50:29 +01:00
};
}
if ( count ( $tags )){
foreach ( $tags as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , sprintf ( t ( " { 0} tagged %s's post with #%s " ), $i [ 'pname' ], $i [ 'tname' ] ) );
2012-02-24 01:50:29 +01:00
};
}
2012-02-22 04:03:55 +01:00
2012-02-24 01:50:29 +01:00
if ( count ( $cit )){
foreach ( $cit as $i ) {
2012-02-25 12:28:07 +01:00
echo xmlize ( $a -> get_baseurl () . '/display/' . $a -> user [ 'nickname' ] . " / " . $i [ 'parent' ], $i [ 'author-name' ], $i [ 'author-link' ], $i [ 'author-avatar' ], relative_date ( $i [ 'created' ]), 'notify-unseen' , t ( " { 0} mentioned you in a post " ) );
2012-02-24 01:50:29 +01:00
};
}
2012-01-06 01:47:47 +01:00
}
2011-09-28 09:30:22 +02:00
echo " </notif> " ;
2011-07-29 16:24:09 +02:00
}
2011-09-05 14:01:21 +02:00
echo " <sysmsgs> " ;
2011-09-28 09:30:22 +02:00
2012-02-24 01:50:29 +01:00
if ( x ( $_SESSION , 'sysmsg' )){
foreach ( $_SESSION [ 'sysmsg' ] as $m ){
echo " <notice> " . xmlify ( $m ) . " </notice> " ;
2011-09-05 14:01:21 +02:00
}
2012-02-24 01:50:29 +01:00
unset ( $_SESSION [ 'sysmsg' ]);
}
if ( x ( $_SESSION , 'sysmsg_info' )){
foreach ( $_SESSION [ 'sysmsg_info' ] as $m ){
echo " <info> " . xmlify ( $m ) . " </info> " ;
2011-09-05 14:01:21 +02:00
}
2012-02-24 01:50:29 +01:00
unset ( $_SESSION [ 'sysmsg_info' ]);
}
2011-09-05 14:01:21 +02:00
echo " </sysmsgs> " ;
echo " </result>
2011-07-25 16:54:39 +02:00
" ;
2010-07-20 07:52:31 +02:00
killme ();
}