2013-02-26 01:09:40 +00:00
< ? php /** @file */
2010-09-09 03:14:17 +00:00
2012-09-10 04:17:06 +00:00
2013-08-13 09:06:05 +00:00
function rconnect_url ( $channel_id , $xchan ) {
2013-08-13 09:29:10 +00:00
2013-08-13 09:06:05 +00:00
if ( ! $xchan )
return '' ;
2013-08-13 09:29:10 +00:00
$r = q ( " select abook_id from abook where abook_channel = %d and abook_xchan = '%s' limit 1 " ,
2013-08-13 09:06:05 +00:00
intval ( $channel_id ),
dbesc ( $xchan )
);
2013-08-13 09:29:10 +00:00
2013-08-13 09:06:05 +00:00
if ( $r )
return '' ;
2013-08-13 09:29:10 +00:00
2013-08-22 05:10:08 +00:00
$r = q ( " select * from xchan where xchan_hash = '%s' limit 1 " ,
dbesc ( $xchan )
);
if (( $r ) && ( $r [ 0 ][ 'xchan_follow' ]))
return $r [ 0 ][ 'xchan_follow' ];
2013-08-13 09:29:10 +00:00
$r = q ( " select hubloc_url from hubloc where hubloc_hash = '%s' and ( hubloc_flags & %d ) limit 1 " ,
dbesc ( $xchan ),
intval ( HUBLOC_FLAGS_PRIMARY )
2013-08-13 09:06:05 +00:00
);
2013-08-13 09:29:10 +00:00
2013-08-13 09:06:05 +00:00
if ( $r )
2013-08-22 05:10:08 +00:00
return $r [ 0 ][ 'hubloc_url' ] . '/follow?f=&url=%s' ;
2013-08-13 09:06:05 +00:00
return '' ;
2013-08-13 09:29:10 +00:00
2013-08-13 09:06:05 +00:00
}
2013-01-25 13:12:16 +00:00
function abook_connections ( $channel_id , $sql_conditions = '' ) {
2013-01-25 13:00:18 +00:00
$r = q ( " select * from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d
2013-01-25 13:12:16 +00:00
and not ( abook_flags & % d ) $sql_conditions " ,
2013-01-25 13:00:18 +00:00
intval ( $channel_id ),
intval ( ABOOK_FLAG_SELF )
);
return (( $r ) ? $r : array ());
}
function abook_self ( $channel_id ) {
$r = q ( " select * from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d
and ( abook_flags & % d ) limit 1 " ,
intval ( $channel_id ),
intval ( ABOOK_FLAG_SELF )
);
return (( $r ) ? $r [ 0 ] : array ());
}
2013-01-26 10:24:07 +00:00
function channelx_by_nick ( $nick ) {
2014-02-21 01:20:24 +00:00
$r = q ( " SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_address = '%s' and not ( channel_pageflags & %d ) LIMIT 1 " ,
2013-02-16 23:51:55 +00:00
dbesc ( $nick ),
intval ( PAGE_REMOVED )
);
2014-02-21 01:20:24 +00:00
return (( $r ) ? $r [ 0 ] : false );
2013-02-16 23:51:55 +00:00
}
function channelx_by_hash ( $hash ) {
2014-02-21 01:20:24 +00:00
$r = q ( " SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_hash = '%s' and not ( channel_pageflags & %d ) LIMIT 1 " ,
2013-02-16 23:51:55 +00:00
dbesc ( $hash ),
intval ( PAGE_REMOVED )
);
2014-02-21 01:20:24 +00:00
return (( $r ) ? $r [ 0 ] : false );
2013-02-16 23:51:55 +00:00
}
function channelx_by_n ( $id ) {
2014-02-21 01:20:24 +00:00
$r = q ( " SELECT * FROM channel left join xchan on channel_hash = xchan_hash WHERE channel_id = %d and not ( channel_pageflags & %d ) LIMIT 1 " ,
2013-02-16 23:51:55 +00:00
dbesc ( $id ),
intval ( PAGE_REMOVED )
2013-01-26 10:24:07 +00:00
);
2014-02-21 01:20:24 +00:00
return (( $r ) ? $r [ 0 ] : false );
2013-01-26 10:24:07 +00:00
}
2013-01-24 00:06:01 +00:00
function vcard_from_xchan ( $xchan , $observer = null , $mode = '' ) {
2012-12-07 03:44:13 +00:00
2013-07-17 05:48:05 +00:00
$a = get_app ();
2013-12-13 21:30:33 +00:00
if ( ! $xchan ) {
2013-12-19 10:35:45 +00:00
if ( $a -> poi ) {
$xchan = $a -> poi ;
}
2014-02-20 10:30:37 +00:00
elseif ( is_array ( $a -> profile ) && $a -> profile [ 'channel_hash' ]) {
2013-12-13 21:30:33 +00:00
$r = q ( " select * from xchan where xchan_hash = '%s' limit 1 " ,
dbesc ( $a -> profile [ 'channel_hash' ])
);
if ( $r )
$xchan = $r [ 0 ];
2013-12-19 10:35:45 +00:00
}
2013-12-13 21:30:33 +00:00
}
if ( ! $xchan )
return ;
// FIXME - show connect button to observer if appropriate
2012-12-07 03:44:13 +00:00
$connect = false ;
if ( local_user ()) {
$r = q ( " select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1 " ,
dbesc ( $xchan [ 'xchan_hash' ]),
intval ( local_user ())
);
if ( ! $r )
$connect = t ( 'Connect' );
}
2013-01-24 00:06:01 +00:00
2013-07-17 05:48:05 +00:00
if ( array_key_exists ( 'channel_id' , $xchan ))
$a -> profile_uid = $xchan [ 'channel_id' ];
2013-01-24 00:06:01 +00:00
$url = (( $observer )
? z_root () . '/magic?f=&dest=' . $xchan [ 'xchan_url' ] . '&addr=' . $xchan [ 'xchan_addr' ]
: $xchan [ 'xchan_url' ]
);
2012-10-31 04:37:58 +00:00
return replace_macros ( get_markup_template ( 'xchan_vcard.tpl' ), array (
2012-12-07 03:44:13 +00:00
'$name' => $xchan [ 'xchan_name' ],
2014-02-20 10:30:37 +00:00
'$photo' => (( is_array ( $a -> profile ) && array_key_exists ( 'photo' , $a -> profile )) ? $a -> profile [ 'photo' ] : $xchan [ 'xchan_photo_l' ]),
2013-01-11 22:40:44 +00:00
'$follow' => $xchan [ 'xchan_addr' ],
2013-01-24 00:06:01 +00:00
'$connect' => $connect ,
'$newwin' => (( $mode === 'chanview' ) ? t ( 'New window' ) : '' ),
'$newtit' => t ( 'Open the selected location in a different window or browser tab' ),
'$url' => $url ,
2012-10-31 04:37:58 +00:00
));
}
function abook_toggle_flag ( $abook , $flag ) {
$r = q ( " UPDATE abook set abook_flags = (abook_flags ^ %d) where abook_id = %d and abook_channel = %d limit 1 " ,
intval ( $flag ),
intval ( $abook [ 'abook_id' ]),
intval ( $abook [ 'abook_channel' ])
);
2014-06-19 01:29:04 +00:00
// if unsetting the archive bit, update the timestamps so we'll try to connect for an additional 30 days.
if (( $flag === ABOOK_FLAG_ARCHIVED ) && ( $abook [ 'abook_flags' ] & ABOOK_FLAG_ARCHIVED )) {
$r = q ( " update abook set abook_connected = '%s', abook_updated = '%s'
where abook_id = % d and abook_channel = % d limit 1 " ,
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
intval ( $abook [ 'abook_id' ]),
intval ( $abook [ 'abook_channel' ])
);
}
2013-06-26 21:28:11 +00:00
$a = get_app ();
if ( $a -> data [ 'abook' ])
$a -> data [ 'abook' ][ 'abook_flags' ] = $a -> data [ 'abook' ][ 'abook_flags' ] ^ $flag ;
2012-10-31 04:37:58 +00:00
return $r ;
}
2012-09-10 04:17:06 +00:00
2010-10-07 00:40:58 +00:00
// Included here for completeness, but this is a very dangerous operation.
// It is the caller's responsibility to confirm the requestor's intent and
// authorisation to do this.
function user_remove ( $uid ) {
2013-02-16 23:51:55 +00:00
}
2014-08-14 18:17:57 +00:00
function account_remove ( $account_id , $local = true , $unset_session = true ) {
2013-09-18 03:50:09 +00:00
logger ( 'account_remove: ' . $account_id );
2013-08-05 00:17:00 +00:00
if ( ! intval ( $account_id )) {
logger ( 'account_remove: no account.' );
return false ;
}
// Don't let anybody nuke the only admin account.
$r = q ( " select account_id from account where (account_roles & %d) " ,
intval ( ACCOUNT_ROLE_ADMIN )
);
if ( $r !== false && count ( $r ) == 1 && $r [ 0 ][ 'account_id' ] == $account_id ) {
logger ( " Unable to remove the only remaining admin account " );
return false ;
}
$r = q ( " select * from account where account_id = %d limit 1 " ,
intval ( $account_id )
);
2014-08-15 12:56:17 +00:00
$account_email = $r [ 0 ][ 'account_email' ];
2013-08-05 00:17:00 +00:00
if ( ! $r ) {
logger ( 'account_remove: No account with id: ' . $account_id );
return false ;
}
$x = q ( " select channel_id from channel where channel_account_id = %d " ,
intval ( $account_id )
);
if ( $x ) {
foreach ( $x as $xx ) {
2014-08-14 18:17:57 +00:00
channel_remove ( $xx [ 'channel_id' ], $local , false );
2013-08-05 00:17:00 +00:00
}
}
$r = q ( " delete from account where account_id = %d limit 1 " ,
intval ( $account_id )
);
2014-08-14 18:17:57 +00:00
if ( $unset_session ) {
unset ( $_SESSION [ 'authenticated' ]);
unset ( $_SESSION [ 'uid' ]);
2014-08-15 12:56:17 +00:00
notice ( sprintf ( t ( " User '%s' deleted " ), $account_email ) . EOL );
2014-08-14 18:17:57 +00:00
goaway ( get_app () -> get_baseurl ());
}
2013-08-05 00:17:00 +00:00
return $r ;
}
2013-02-16 23:51:55 +00:00
2014-08-14 18:17:57 +00:00
function channel_remove ( $channel_id , $local = true , $unset_session = true ) {
2013-02-16 23:51:55 +00:00
if ( ! $channel_id )
2011-02-03 11:58:47 +00:00
return ;
$a = get_app ();
2013-02-16 23:51:55 +00:00
logger ( 'Removing channel: ' . $channel_id );
2013-11-13 02:27:36 +00:00
logger ( 'channel_remove: local only: ' . intval ( $local ));
2013-02-16 23:51:55 +00:00
$r = q ( " select * from channel where channel_id = %d limit 1 " , intval ( $channel_id ));
2013-09-18 03:50:09 +00:00
if ( ! $r ) {
logger ( 'channel_remove: channel not found: ' . $channel_id );
return ;
}
$channel = $r [ 0 ];
2012-01-19 00:21:30 +00:00
2013-02-16 23:51:55 +00:00
call_hooks ( 'channel_remove' , $r [ 0 ]);
2013-11-13 02:27:36 +00:00
if ( ! $local ) {
2012-01-19 00:21:30 +00:00
2013-11-06 01:43:32 +00:00
$r = q ( " update channel set channel_deleted = '%s', channel_pageflags = (channel_pageflags | %d), channel_r_stream = 0, channel_r_profile = 0,
2013-09-18 03:50:09 +00:00
channel_r_photos = 0 , channel_r_abook = 0 , channel_w_stream = 0 , channel_w_wall = 0 , channel_w_tagwall = 0 ,
channel_w_comment = 0 , channel_w_mail = 0 , channel_w_photos = 0 , channel_w_chat = 0 , channel_a_delegate = 0 ,
2013-10-01 04:49:26 +00:00
channel_r_storage = 0 , channel_w_storage = 0 , channel_r_pages = 0 , channel_w_pages = 0 , channel_a_republish = 0
where channel_id = % d limit 1 " ,
2013-11-06 01:43:32 +00:00
dbesc ( datetime_convert ()),
2013-09-18 03:50:09 +00:00
intval ( PAGE_REMOVED ),
intval ( $channel_id )
);
2014-08-26 23:35:06 +00:00
$r = q ( " update hubloc set hubloc_flags = (hubloc_flags | %d) where hubloc_hash = '%s' " ,
2013-09-18 03:50:09 +00:00
intval ( HUBLOC_FLAGS_DELETED ),
dbesc ( $channel [ 'channel_hash' ])
);
2014-08-26 23:35:06 +00:00
$r = q ( " update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s' " ,
2013-11-06 01:43:32 +00:00
intval ( XCHAN_FLAGS_DELETED ),
dbesc ( $channel [ 'channel_hash' ])
);
2013-09-18 03:50:09 +00:00
proc_run ( 'php' , 'include/notifier.php' , 'purge_all' , $channel_id );
}
2012-03-22 08:46:52 +00:00
2013-12-23 02:37:39 +00:00
q ( " DELETE FROM `groups` WHERE `uid` = %d " , intval ( $channel_id ));
2013-02-16 23:51:55 +00:00
q ( " DELETE FROM `group_member` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `event` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `item` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `item_id` WHERE `uid` = %d " , intval ( $channel_id ));
2014-04-05 22:34:52 +00:00
q ( " DELETE FROM `mail` WHERE `channel_id` = %d " , intval ( $channel_id ));
2013-02-16 23:51:55 +00:00
q ( " DELETE FROM `notify` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `photo` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `attach` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `profile` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `pconfig` WHERE `uid` = %d " , intval ( $channel_id ));
q ( " DELETE FROM `spam` WHERE `uid` = %d " , intval ( $channel_id ));
2013-11-13 02:27:36 +00:00
2014-08-26 23:35:06 +00:00
q ( " delete from abook where abook_xchan = '%s' and (abook_flags & %d) limit 1 " ,
2013-11-13 02:27:36 +00:00
dbesc ( $channel [ 'channel_hash' ]),
dbesc ( ABOOK_FLAG_SELF )
);
2013-11-06 01:43:32 +00:00
$r = q ( " update channel set channel_deleted = '%s', channel_pageflags = (channel_pageflags | %d) where channel_id = %d limit 1 " ,
dbesc ( datetime_convert ()),
2013-02-16 23:51:55 +00:00
intval ( PAGE_REMOVED ),
intval ( $channel_id )
2012-03-22 08:46:52 +00:00
);
2012-01-19 00:21:30 +00:00
2014-08-26 23:35:06 +00:00
$r = q ( " update hubloc set hubloc_flags = (hubloc_flags | %d) where hubloc_hash = '%s' and hubloc_url = '%s' " ,
2013-11-06 01:43:32 +00:00
intval ( HUBLOC_FLAGS_DELETED ),
dbesc ( $channel [ 'channel_hash' ]),
dbesc ( z_root ())
);
2014-08-26 23:35:06 +00:00
$r = q ( " update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s' " ,
2013-11-06 01:43:32 +00:00
intval ( XCHAN_FLAGS_DELETED ),
dbesc ( $channel [ 'channel_hash' ])
);
proc_run ( 'php' , 'include/directory.php' , $channel_id );
2013-02-16 23:51:55 +00:00
2014-08-14 18:17:57 +00:00
if ( $channel_id == local_user () && $unset_session ) {
2010-10-07 00:40:58 +00:00
unset ( $_SESSION [ 'authenticated' ]);
unset ( $_SESSION [ 'uid' ]);
2011-02-03 11:58:47 +00:00
goaway ( $a -> get_baseurl ());
2010-10-07 00:40:58 +00:00
}
2013-02-16 23:51:55 +00:00
2010-10-07 00:40:58 +00:00
}
2010-09-09 03:14:17 +00:00
2014-05-29 04:42:46 +00:00
/**
* mark any hubs " offline " that haven ' t been heard from in more than 30 days
* Allow them to redeem themselves if they come back later .
* Then go through all those that are newly marked and see if any other hubs
* are attached to the controlling xchan that are still alive .
* If not , they ' re dead ( although they could come back some day ) .
*/
function mark_orphan_hubsxchans () {
2014-05-29 07:55:34 +00:00
$dirmode = intval ( get_config ( 'system' , 'directory_mode' ));
if ( $dirmode == DIRECTORY_MODE_NORMAL )
return ;
2014-05-29 04:42:46 +00:00
$r = q ( " update hubloc set hubloc_status = (hubloc_status | %d) where not (hubloc_status & %d)
2014-09-10 04:54:25 +00:00
and hubloc_network = 'zot' and hubloc_connected < utc_timestamp () - interval 36 day " ,
2014-05-29 04:42:46 +00:00
intval ( HUBLOC_OFFLINE ),
intval ( HUBLOC_OFFLINE )
);
$r = q ( " select hubloc_id, hubloc_hash from hubloc where (hubloc_status & %d) and not (hubloc_flags & %d) " ,
intval ( HUBLOC_OFFLINE ),
intval ( HUBLOC_FLAGS_ORPHANCHECK )
);
if ( $r ) {
foreach ( $r as $rr ) {
// see if any other hublocs are still alive for this channel
$x = q ( " select * from hubloc where hubloc_hash = '%s' and not (hubloc_status & %d) " ,
dbesc ( $rr [ 'hubloc_hash' ]),
intval ( HUBLOC_OFFLINE )
);
if ( $x ) {
// yes - if the xchan was marked as an orphan, undo it
$y = q ( " update xchan set xchan_flags = (xchan_flags ^ %d) where (xchan_flags & %d) and xchan_hash = '%s' limit 1 " ,
intval ( XCHAN_FLAGS_ORPHAN ),
intval ( XCHAN_FLAGS_ORPHAN ),
dbesc ( $rr [ 'hubloc_hash' ])
);
}
else {
// nope - mark the xchan as an orphan
$y = q ( " update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s' limit 1 " ,
intval ( XCHAN_FLAGS_ORPHAN ),
dbesc ( $rr [ 'hubloc_hash' ])
);
}
// mark that we've checked this entry so we don't need to do it again
$y = q ( " update hubloc set hubloc_flags = (hubloc_flags | %d) where hubloc_id = %d limit 1 " ,
intval ( HUBLOC_FLAGS_ORPHANCHECK ),
dbesc ( $rr [ 'hubloc_id' ])
);
}
}
}
2013-02-18 23:15:55 +00:00
function remove_all_xchan_resources ( $xchan , $channel_id = 0 ) {
if ( intval ( $channel_id )) {
}
else {
2013-11-13 02:27:36 +00:00
$dirmode = intval ( get_config ( 'system' , 'directory_mode' ));
2013-02-18 23:15:55 +00:00
$r = q ( " delete from photo where xchan = '%s' " ,
dbesc ( $xchan )
);
$r = q ( " select resource_id, resource_type, uid, id from item where ( author_xchan = '%s' or owner_xchan = '%s' ) " ,
dbesc ( $xchan ),
dbesc ( $xchan )
);
if ( $r ) {
foreach ( $r as $rr ) {
drop_item ( $rr , false );
}
}
$r = q ( " delete from event where event_xchan = '%s' " ,
dbesc ( $xchan )
);
$r = q ( " delete from group_member where xchan = '%s' " ,
dbesc ( $xchan )
);
$r = q ( " delete from mail where ( from_xchan = '%s' or to_xchan = '%s' ) " ,
dbesc ( $xchan ),
dbesc ( $xchan )
);
$r = q ( " delete from xlink where ( xlink_xchan = '%s' or xlink_link = '%s' ) " ,
dbesc ( $xchan ),
dbesc ( $xchan )
);
2013-11-13 02:27:36 +00:00
$r = q ( " delete from abook where abook_xchan = '%s' " ,
dbesc ( $xchan )
);
if ( $dirmode === false || $dirmode == DIRECTORY_MODE_NORMAL ) {
2013-02-18 23:15:55 +00:00
2013-11-13 02:27:36 +00:00
$r = q ( " delete from xchan where xchan_hash = '%s' limit 1 " ,
dbesc ( $xchan )
);
$r = q ( " delete from hubloc where hubloc_hash = '%s' " ,
dbesc ( $xchan )
);
2013-09-18 03:50:09 +00:00
2013-11-13 02:27:36 +00:00
}
else {
// directory servers need to keep the record around for sync purposes - mark it deleted
2013-02-18 23:15:55 +00:00
2014-08-26 23:35:06 +00:00
$r = q ( " update hubloc set hubloc_flags = (hubloc_flags | %d) where hubloc_hash = '%s' " ,
2013-11-13 02:27:36 +00:00
intval ( HUBLOC_FLAGS_DELETED ),
dbesc ( $xchan )
);
2014-08-26 23:35:06 +00:00
$r = q ( " update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s' " ,
2013-11-13 02:27:36 +00:00
intval ( XCHAN_FLAGS_DELETED ),
dbesc ( $xchan )
);
}
2013-02-18 23:15:55 +00:00
}
}
2013-01-26 00:18:35 +00:00
function contact_remove ( $channel_id , $abook_id ) {
2012-04-29 04:56:17 +00:00
2013-01-26 00:18:35 +00:00
if (( ! $channel_id ) || ( ! $abook_id ))
return false ;
2012-04-29 04:56:17 +00:00
2013-01-26 00:18:35 +00:00
$archive = get_pconfig ( $channel_id , 'system' , 'archive_removed_contacts' );
2012-04-29 04:56:17 +00:00
if ( $archive ) {
2013-08-16 00:43:19 +00:00
q ( " update abook set abook_flags = ( abook_flags | %d ) where abook_id = %d and abook_channel = %d limit 1 " ,
intval ( ABOOK_FLAG_ARCHIVED ),
2013-01-26 00:18:35 +00:00
intval ( $abook_id ),
intval ( $channel_id )
2012-04-29 04:56:17 +00:00
);
2013-01-26 00:18:35 +00:00
return true ;
2012-04-29 04:56:17 +00:00
}
2013-01-26 00:18:35 +00:00
$r = q ( " select * from abook where abook_id = %d and abook_channel = %d limit 1 " ,
intval ( $abook_id ),
intval ( $channel_id )
2010-09-09 03:14:17 +00:00
);
2013-01-26 00:18:35 +00:00
if ( ! $r )
return false ;
$abook = $r [ 0 ];
if ( $abook [ 'abook_flags' ] & ABOOK_FLAG_SELF )
return false ;
2013-08-05 02:09:53 +00:00
$r = q ( " select * from item where author_xchan = '%s' and uid = %d " ,
2013-01-26 00:18:35 +00:00
dbesc ( $abook [ 'abook_xchan' ]),
intval ( $channel_id )
2010-09-09 03:14:17 +00:00
);
2013-08-05 02:09:53 +00:00
if ( $r ) {
foreach ( $r as $rr ) {
2014-09-03 00:43:42 +00:00
drop_item ( $rr [ 'id' ], false );
2013-08-05 02:09:53 +00:00
}
}
2013-01-26 00:18:35 +00:00
2013-04-19 11:47:49 +00:00
q ( " delete from abook where abook_id = %d and abook_channel = %d limit 1 " ,
2013-01-26 00:18:35 +00:00
intval ( $abook [ 'abook_id' ]),
intval ( $channel_id )
);
2013-08-05 02:09:53 +00:00
$r = q ( " delete from event where event_xchan = '%s' and uid = %d " ,
dbesc ( $abook [ 'abook_xchan' ]),
intval ( $channel_id )
2010-12-06 03:42:28 +00:00
);
2013-08-05 02:09:53 +00:00
$r = q ( " delete from group_member where xchan = '%s' and uid = %d " ,
dbesc ( $abook [ 'abook_xchan' ]),
intval ( $channel_id )
2011-03-18 04:15:27 +00:00
);
2013-08-05 02:09:53 +00:00
2013-08-06 00:32:33 +00:00
$r = q ( " delete from mail where ( from_xchan = '%s' or to_xchan = '%s' ) and channel_id = %d " ,
2013-08-05 02:09:53 +00:00
dbesc ( $abook [ 'abook_xchan' ]),
dbesc ( $abook [ 'abook_xchan' ]),
intval ( $channel_id )
2011-10-13 22:39:05 +00:00
);
2013-01-26 00:18:35 +00:00
return true ;
2010-09-09 03:14:17 +00:00
}
2012-04-11 03:50:31 +00:00
function random_profile () {
2014-05-26 06:00:06 +00:00
$r = q ( " select xchan_url from xchan left join hubloc on hubloc_hash = xchan_hash where hubloc_connected > UTC_TIMESTAMP() - interval 30 day order by rand() limit 1 " );
2013-03-06 08:21:02 +00:00
if ( $r )
2012-10-30 02:31:38 +00:00
return $r [ 0 ][ 'xchan_url' ];
2012-04-11 03:50:31 +00:00
return '' ;
2012-04-12 14:48:28 +00:00
}