2010-07-01 23:48:07 +00:00
< ? php
2017-11-29 12:52:27 +00:00
/**
* @ file mod / contacts . php
*/
2017-04-30 04:07:00 +00:00
use Friendica\App ;
2018-01-10 03:42:04 +00:00
use Friendica\Content\ContactSelector ;
2018-01-15 14:50:06 +00:00
use Friendica\Content\Widget ;
2017-08-26 06:04:21 +00:00
use Friendica\Core\System ;
2017-11-05 12:15:53 +00:00
use Friendica\Core\Worker ;
2017-11-08 03:57:46 +00:00
use Friendica\Database\DBM ;
2017-12-07 14:04:24 +00:00
use Friendica\Model\Contact ;
2017-12-07 14:09:28 +00:00
use Friendica\Model\GContact ;
2017-12-09 18:45:17 +00:00
use Friendica\Model\Group ;
2018-01-15 02:22:39 +00:00
use Friendica\Model\Profile ;
2017-05-07 18:44:30 +00:00
use Friendica\Network\Probe ;
2017-04-30 04:07:00 +00:00
2018-01-06 02:05:18 +00:00
require_once 'mod/proxy.php' ;
2010-09-09 03:14:17 +00:00
2018-01-06 02:05:18 +00:00
function contacts_init ( App $a )
{
if ( ! local_user ()) {
2011-07-17 23:08:47 +00:00
return ;
2016-12-20 10:56:34 +00:00
}
2011-07-17 23:08:47 +00:00
2018-01-01 21:27:01 +00:00
$nets = defaults ( $_GET , 'nets' , '' );
if ( $nets == " all " ) {
$nets = " " ;
2016-12-20 09:58:55 +00:00
}
2015-10-22 22:12:00 +00:00
2018-01-06 02:05:18 +00:00
if ( ! x ( $a -> page , 'aside' )) {
2010-10-31 23:38:22 +00:00
$a -> page [ 'aside' ] = '' ;
2016-12-20 09:58:55 +00:00
}
2011-10-12 01:24:37 +00:00
2018-01-13 04:41:18 +00:00
$contact_id = null ;
2018-01-11 08:26:30 +00:00
$contact = null ;
2018-01-06 02:05:18 +00:00
if ((( $a -> argc == 2 ) && intval ( $a -> argv [ 1 ])) || (( $a -> argc == 3 ) && intval ( $a -> argv [ 1 ]) && ( $a -> argv [ 2 ] == " posts " ))) {
$contact_id = intval ( $a -> argv [ 1 ]);
2018-01-10 13:36:02 +00:00
$contact = dba :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-01-06 02:05:18 +00:00
}
if ( DBM :: is_result ( $contact )) {
$a -> data [ 'contact' ] = $contact ;
2015-12-01 17:31:08 +00:00
2017-06-08 02:00:59 +00:00
if (( $a -> data [ 'contact' ][ 'network' ] != " " ) && ( $a -> data [ 'contact' ][ 'network' ] != NETWORK_DFRN )) {
2018-01-06 02:05:18 +00:00
$networkname = format_network_name ( $a -> data [ 'contact' ][ 'network' ], $a -> data [ 'contact' ][ 'url' ]);
2016-12-30 20:48:09 +00:00
} else {
$networkname = '' ;
}
2015-12-01 17:31:08 +00:00
2016-12-30 20:48:09 +00:00
/// @TODO Add nice spaces
2018-01-15 13:05:12 +00:00
$vcard_widget = replace_macros ( get_markup_template ( " vcard-widget.tpl " ), [
2016-12-30 20:48:09 +00:00
'$name' => htmlentities ( $a -> data [ 'contact' ][ 'name' ]),
'$photo' => $a -> data [ 'contact' ][ 'photo' ],
2018-01-06 02:05:18 +00:00
'$url' => ( $a -> data [ 'contact' ][ 'network' ] == NETWORK_DFRN ) ? " redir/ " . $a -> data [ 'contact' ][ 'id' ] : $a -> data [ 'contact' ][ 'url' ],
2016-12-30 20:48:09 +00:00
'$addr' => (( $a -> data [ 'contact' ][ 'addr' ] != " " ) ? ( $a -> data [ 'contact' ][ 'addr' ]) : " " ),
'$network_name' => $networkname ,
'$network' => t ( 'Network:' ),
2017-11-19 22:03:39 +00:00
'$account_type' => Contact :: getAccountType ( $a -> data [ 'contact' ])
2018-01-15 13:05:12 +00:00
]);
2016-12-30 20:48:09 +00:00
2018-01-01 21:27:01 +00:00
$findpeople_widget = '' ;
2016-12-30 20:48:09 +00:00
$follow_widget = '' ;
$networks_widget = '' ;
} else {
2012-09-07 18:17:03 +00:00
$vcard_widget = '' ;
2018-01-15 14:50:06 +00:00
$networks_widget = Widget :: networks ( 'contacts' , $nets );
2016-12-30 20:48:09 +00:00
if ( isset ( $_GET [ 'add' ])) {
2018-01-15 14:50:06 +00:00
$follow_widget = Widget :: follow ( $_GET [ 'add' ]);
2016-12-30 20:48:09 +00:00
} else {
2018-01-15 14:50:06 +00:00
$follow_widget = Widget :: follow ();
2016-12-30 20:48:09 +00:00
}
2010-07-28 02:27:14 +00:00
2018-01-15 14:50:06 +00:00
$findpeople_widget = Widget :: findPeople ();
2012-09-07 18:17:03 +00:00
}
2015-02-20 22:33:21 +00:00
2018-01-06 02:05:18 +00:00
$groups_widget = Group :: sidebarWidget ( 'contacts' , 'group' , 'full' , 0 , $contact_id );
2015-11-29 12:37:24 +00:00
2018-01-15 13:05:12 +00:00
$a -> page [ 'aside' ] .= replace_macros ( get_markup_template ( " contacts-widget-sidebar.tpl " ), [
2012-09-07 18:17:03 +00:00
'$vcard_widget' => $vcard_widget ,
2015-10-22 22:12:00 +00:00
'$findpeople_widget' => $findpeople_widget ,
2012-09-07 18:17:03 +00:00
'$follow_widget' => $follow_widget ,
'$groups_widget' => $groups_widget ,
'$networks_widget' => $networks_widget
2018-01-15 13:05:12 +00:00
]);
2011-03-22 04:43:22 +00:00
2017-08-26 07:32:10 +00:00
$base = System :: baseUrl ();
2012-07-28 15:57:16 +00:00
$tpl = get_markup_template ( " contacts-head.tpl " );
2018-01-15 13:05:12 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2012-07-28 15:57:16 +00:00
'$base' => $base
2018-01-15 13:05:12 +00:00
]);
2012-09-07 18:17:03 +00:00
2012-07-28 15:57:16 +00:00
$tpl = get_markup_template ( " contacts-end.tpl " );
2018-01-15 13:05:12 +00:00
$a -> page [ 'end' ] .= replace_macros ( $tpl , [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2012-07-28 15:57:16 +00:00
'$base' => $base
2018-01-15 13:05:12 +00:00
]);
2010-07-01 23:48:07 +00:00
}
2018-01-06 02:05:18 +00:00
function contacts_batch_actions ( App $a )
{
2013-12-17 10:19:06 +00:00
$contacts_id = $_POST [ 'contact_batch' ];
2018-01-06 02:05:18 +00:00
if ( ! is_array ( $contacts_id )) {
return ;
}
2015-01-28 22:34:46 +00:00
2013-12-17 10:19:06 +00:00
$orig_records = q ( " SELECT * FROM `contact` WHERE `id` IN (%s) AND `uid` = %d AND `self` = 0 " ,
implode ( " , " , $contacts_id ),
intval ( local_user ())
);
2015-01-28 22:34:46 +00:00
2018-01-06 02:05:18 +00:00
$count_actions = 0 ;
foreach ( $orig_records as $orig_record ) {
2013-12-17 10:19:06 +00:00
$contact_id = $orig_record [ 'id' ];
if ( x ( $_POST , 'contacts_batch_update' )) {
_contact_update ( $contact_id );
$count_actions ++ ;
}
if ( x ( $_POST , 'contacts_batch_block' )) {
2018-01-06 02:05:18 +00:00
$r = _contact_block ( $contact_id , $orig_record );
if ( $r ) {
$count_actions ++ ;
}
2013-12-17 10:19:06 +00:00
}
if ( x ( $_POST , 'contacts_batch_ignore' )) {
$r = _contact_ignore ( $contact_id , $orig_record );
2018-01-06 02:05:18 +00:00
if ( $r ) {
$count_actions ++ ;
}
2013-12-17 10:19:06 +00:00
}
if ( x ( $_POST , 'contacts_batch_archive' )) {
$r = _contact_archive ( $contact_id , $orig_record );
2018-01-06 02:05:18 +00:00
if ( $r ) {
$count_actions ++ ;
}
2013-12-17 10:19:06 +00:00
}
if ( x ( $_POST , 'contacts_batch_drop' )) {
2017-11-19 22:03:39 +00:00
_contact_drop ( $orig_record );
2013-12-17 10:19:06 +00:00
$count_actions ++ ;
}
}
2018-01-06 02:05:18 +00:00
if ( $count_actions > 0 ) {
info ( tt ( " %d contact edited. " , " %d contacts edited. " , $count_actions ));
2013-12-17 10:19:06 +00:00
}
2015-01-28 22:34:46 +00:00
2018-01-06 02:05:18 +00:00
if ( x ( $_SESSION , 'return_url' )) {
2016-02-17 22:47:32 +00:00
goaway ( '' . $_SESSION [ 'return_url' ]);
2018-01-06 02:05:18 +00:00
} else {
2016-02-17 22:47:32 +00:00
goaway ( 'contacts' );
2016-12-20 20:15:53 +00:00
}
2016-02-05 20:52:39 +00:00
}
2013-12-17 10:19:06 +00:00
2018-01-06 02:05:18 +00:00
function contacts_post ( App $a )
{
if ( ! local_user ()) {
2010-07-01 23:48:07 +00:00
return ;
2016-12-20 10:56:34 +00:00
}
2010-07-01 23:48:07 +00:00
2018-01-06 02:05:18 +00:00
if ( $a -> argv [ 1 ] === " batch " ) {
2013-12-17 10:19:06 +00:00
contacts_batch_actions ( $a );
return ;
}
2010-07-01 23:48:07 +00:00
$contact_id = intval ( $a -> argv [ 1 ]);
2018-01-06 02:05:18 +00:00
if ( ! $contact_id ) {
2010-07-01 23:48:07 +00:00
return ;
2016-12-20 10:56:34 +00:00
}
2010-07-11 09:52:47 +00:00
2018-01-13 04:54:16 +00:00
if ( ! dba :: exists ( 'contact' , [ 'id' => $contact_id , 'uid' => local_user ()])) {
2018-01-06 02:05:18 +00:00
notice ( t ( 'Could not access contact record.' ) . EOL );
2016-02-17 22:47:32 +00:00
goaway ( 'contacts' );
2010-07-11 06:03:54 +00:00
return ; // NOTREACHED
}
2010-07-01 23:48:07 +00:00
2011-01-07 11:15:52 +00:00
call_hooks ( 'contact_edit_post' , $_POST );
2010-07-11 06:03:54 +00:00
$profile_id = intval ( $_POST [ 'profile-assign' ]);
2016-12-20 10:56:34 +00:00
if ( $profile_id ) {
2018-01-13 04:54:16 +00:00
if ( ! dba :: exists ( 'profile' , [ 'id' => $profile_id , 'uid' => local_user ()])) {
2018-01-06 02:05:18 +00:00
notice ( t ( 'Could not locate selected profile.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
2010-07-11 06:03:54 +00:00
}
2010-07-01 23:48:07 +00:00
}
2011-05-31 05:17:04 +00:00
2011-12-06 02:36:26 +00:00
$hidden = intval ( $_POST [ 'hidden' ]);
2010-10-01 09:28:06 +00:00
2014-01-05 15:10:02 +00:00
$notify = intval ( $_POST [ 'notify' ]);
$fetch_further_information = intval ( $_POST [ 'fetch_further_information' ]);
2017-01-27 03:57:53 +00:00
$ffi_keyword_blacklist = escape_tags ( trim ( $_POST [ 'ffi_keyword_blacklist' ]));
2014-10-29 23:24:23 +00:00
2011-01-27 04:29:32 +00:00
$priority = intval ( $_POST [ 'poll' ]);
2018-01-06 02:05:18 +00:00
if ( $priority > 5 || $priority < 0 ) {
2010-08-01 12:46:51 +00:00
$priority = 0 ;
2018-01-06 02:05:18 +00:00
}
2010-08-01 12:46:51 +00:00
2017-01-27 03:57:53 +00:00
$info = escape_tags ( trim ( $_POST [ 'info' ]));
2010-12-28 09:06:34 +00:00
2011-12-06 02:36:26 +00:00
$r = q ( " UPDATE `contact` SET `profile-id` = %d, `priority` = %d , `info` = '%s',
2014-10-29 23:24:23 +00:00
`hidden` = % d , `notify_new_posts` = % d , `fetch_further_information` = % d ,
`ffi_keyword_blacklist` = '%s' WHERE `id` = % d AND `uid` = % d " ,
2010-07-11 06:03:54 +00:00
intval ( $profile_id ),
2010-08-01 12:46:51 +00:00
intval ( $priority ),
2010-12-28 09:06:34 +00:00
dbesc ( $info ),
2011-12-06 02:36:26 +00:00
intval ( $hidden ),
2014-01-05 15:10:02 +00:00
intval ( $notify ),
intval ( $fetch_further_information ),
2014-10-29 23:24:23 +00:00
dbesc ( $ffi_keyword_blacklist ),
2010-07-11 06:03:54 +00:00
intval ( $contact_id ),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-07-11 06:03:54 +00:00
);
2018-01-06 02:05:18 +00:00
if ( DBM :: is_result ( $r )) {
info ( t ( 'Contact updated.' ) . EOL );
} else {
notice ( t ( 'Failed to update contact record.' ) . EOL );
}
2012-02-12 07:17:55 +00:00
2018-01-10 13:36:02 +00:00
$contact = dba :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-01-06 02:05:18 +00:00
if ( DBM :: is_result ( $contact )) {
$a -> data [ 'contact' ] = $contact ;
}
2012-02-12 07:17:55 +00:00
2010-07-11 06:03:54 +00:00
return ;
2010-07-01 23:48:07 +00:00
}
2018-01-13 04:41:18 +00:00
2018-01-06 02:05:18 +00:00
/* contact actions */
2010-07-01 23:48:07 +00:00
2018-01-06 02:05:18 +00:00
function _contact_update ( $contact_id )
{
2018-01-10 13:36:02 +00:00
$contact = dba :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'network' ], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-01-06 02:05:18 +00:00
if ( ! DBM :: is_result ( $contact )) {
2015-09-03 20:18:25 +00:00
return ;
2018-01-06 02:05:18 +00:00
}
2015-09-03 20:18:25 +00:00
2018-01-06 02:05:18 +00:00
$uid = $contact [ " uid " ];
2015-09-03 20:18:25 +00:00
2018-01-11 08:26:30 +00:00
if ( $contact [ " network " ] == NETWORK_OSTATUS ) {
2018-01-09 16:40:25 +00:00
$result = Contact :: createFromProbe ( $uid , $contact [ " url " ], false , $contact [ " network " ]);
2015-09-03 20:18:25 +00:00
2018-01-06 02:05:18 +00:00
if ( $result [ 'success' ]) {
q ( " UPDATE `contact` SET `subhub` = 1 WHERE `id` = %d " , intval ( $contact_id ));
}
} else {
2015-09-03 20:18:25 +00:00
// pull feed and consume it, which should subscribe to the hub.
2017-11-12 18:50:35 +00:00
Worker :: add ( PRIORITY_HIGH , " OnePoll " , $contact_id , " force " );
2018-01-06 02:05:18 +00:00
}
2013-12-17 10:19:06 +00:00
}
2015-04-11 21:51:47 +00:00
2018-01-06 02:05:18 +00:00
function _contact_update_profile ( $contact_id )
{
2018-01-10 13:36:02 +00:00
$contact = dba :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'network' ], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-01-06 02:05:18 +00:00
if ( ! DBM :: is_result ( $contact )) {
2015-04-11 21:51:47 +00:00
return ;
2018-01-06 02:05:18 +00:00
}
2015-04-11 21:51:47 +00:00
2018-01-06 02:05:18 +00:00
$uid = $contact [ " uid " ];
2015-09-03 20:18:25 +00:00
2018-01-06 02:05:18 +00:00
$data = Probe :: uri ( $contact [ " url " ], " " , 0 , false );
2015-04-11 21:51:47 +00:00
2015-10-04 17:48:29 +00:00
// "Feed" or "Unknown" is mostly a sign of communication problems
2018-01-15 13:05:12 +00:00
if (( in_array ( $data [ " network " ], [ NETWORK_FEED , NETWORK_PHANTOM ])) && ( $data [ " network " ] != $contact [ " network " ])) {
2015-04-12 08:32:02 +00:00
return ;
2018-01-06 02:05:18 +00:00
}
2015-04-12 08:32:02 +00:00
2018-01-15 13:05:12 +00:00
$updatefields = [ " name " , " nick " , " url " , " addr " , " batch " , " notify " , " poll " , " request " , " confirm " ,
" poco " , " network " , " alias " ];
$update = [];
2015-04-11 21:51:47 +00:00
2015-09-03 20:18:25 +00:00
if ( $data [ " network " ] == NETWORK_OSTATUS ) {
2018-01-09 16:40:25 +00:00
$result = Contact :: createFromProbe ( $uid , $data [ " url " ], false );
2015-09-03 20:18:25 +00:00
2018-01-06 02:05:18 +00:00
if ( $result [ 'success' ]) {
2015-09-03 20:18:25 +00:00
$update [ " subhub " ] = true ;
2018-01-06 02:05:18 +00:00
}
2015-09-03 20:18:25 +00:00
}
2018-01-06 02:05:18 +00:00
foreach ( $updatefields AS $field ) {
if ( isset ( $data [ $field ]) && ( $data [ $field ] != " " )) {
2015-04-11 21:51:47 +00:00
$update [ $field ] = $data [ $field ];
2018-01-06 02:05:18 +00:00
}
}
2015-04-11 21:51:47 +00:00
2015-04-12 08:32:02 +00:00
$update [ " nurl " ] = normalise_link ( $data [ " url " ]);
2015-04-11 21:51:47 +00:00
$query = " " ;
2018-01-06 02:05:18 +00:00
if ( isset ( $data [ " priority " ]) && ( $data [ " priority " ] != 0 )) {
$query = " `priority` = " . intval ( $data [ " priority " ]);
}
2015-04-11 21:51:47 +00:00
2018-01-06 02:05:18 +00:00
foreach ( $update AS $key => $value ) {
if ( $query != " " ) {
2015-04-11 21:51:47 +00:00
$query .= " , " ;
2018-01-06 02:05:18 +00:00
}
2015-04-11 21:51:47 +00:00
2018-01-06 02:05:18 +00:00
$query .= " ` " . $key . " ` = ' " . dbesc ( $value ) . " ' " ;
2015-04-11 21:51:47 +00:00
}
2018-01-06 02:05:18 +00:00
if ( $query == " " ) {
2015-04-11 21:51:47 +00:00
return ;
2018-01-06 02:05:18 +00:00
}
2015-04-11 21:51:47 +00:00
$r = q ( " UPDATE `contact` SET $query WHERE `id` = %d AND `uid` = %d " ,
intval ( $contact_id ),
intval ( local_user ())
);
2016-01-28 10:09:08 +00:00
// Update the entry in the contact table
2017-11-29 22:29:11 +00:00
Contact :: updateAvatar ( $data [ 'photo' ], local_user (), $contact_id , true );
2015-04-11 21:51:47 +00:00
2016-01-10 18:06:34 +00:00
// Update the entry in the gcontact table
2017-12-07 14:09:28 +00:00
GContact :: updateFromProbe ( $data [ " url " ]);
2015-04-11 21:51:47 +00:00
}
2018-01-06 02:05:18 +00:00
function _contact_block ( $contact_id , $orig_record )
{
2013-12-17 10:19:06 +00:00
$blocked = (( $orig_record [ 'blocked' ]) ? 0 : 1 );
2014-03-09 08:19:14 +00:00
$r = q ( " UPDATE `contact` SET `blocked` = %d WHERE `id` = %d AND `uid` = %d " ,
2013-12-17 10:19:06 +00:00
intval ( $blocked ),
intval ( $contact_id ),
intval ( local_user ())
);
2018-01-06 02:05:18 +00:00
return DBM :: is_result ( $r );
2016-02-07 14:11:34 +00:00
}
2018-01-06 02:05:18 +00:00
function _contact_ignore ( $contact_id , $orig_record )
{
2013-12-17 10:19:06 +00:00
$readonly = (( $orig_record [ 'readonly' ]) ? 0 : 1 );
2014-03-09 08:19:14 +00:00
$r = q ( " UPDATE `contact` SET `readonly` = %d WHERE `id` = %d AND `uid` = %d " ,
2013-12-17 10:19:06 +00:00
intval ( $readonly ),
intval ( $contact_id ),
intval ( local_user ())
);
2018-01-06 02:05:18 +00:00
return DBM :: is_result ( $r );
2013-12-17 10:19:06 +00:00
}
2018-01-06 02:05:18 +00:00
function _contact_archive ( $contact_id , $orig_record )
{
2013-12-17 10:19:06 +00:00
$archived = (( $orig_record [ 'archive' ]) ? 0 : 1 );
2014-03-09 08:19:14 +00:00
$r = q ( " UPDATE `contact` SET `archive` = %d WHERE `id` = %d AND `uid` = %d " ,
2013-12-17 10:19:06 +00:00
intval ( $archived ),
intval ( $contact_id ),
intval ( local_user ())
);
if ( $archived ) {
q ( " UPDATE `item` SET `private` = 2 WHERE `contact-id` = %d AND `uid` = %d " , intval ( $contact_id ), intval ( local_user ()));
}
2018-01-06 02:05:18 +00:00
return DBM :: is_result ( $r );
2013-12-17 10:19:06 +00:00
}
2017-11-19 22:03:39 +00:00
function _contact_drop ( $orig_record )
{
2013-12-17 10:19:06 +00:00
$a = get_app ();
2017-09-23 14:48:27 +00:00
$r = q ( " SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `user` . `uid` = % d AND `contact` . `self` LIMIT 1 " ,
intval ( $a -> user [ 'uid' ])
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2017-09-23 14:48:27 +00:00
return ;
}
2017-11-19 22:03:39 +00:00
Contact :: terminateFriendship ( $r [ 0 ], $orig_record );
Contact :: remove ( $orig_record [ 'id' ]);
2013-12-17 10:19:06 +00:00
}
2010-07-01 23:48:07 +00:00
2018-01-06 02:05:18 +00:00
function contacts_content ( App $a )
{
2010-10-31 23:38:22 +00:00
$sort_type = 0 ;
$o = '' ;
2011-08-17 16:36:24 +00:00
nav_set_selected ( 'contacts' );
2010-10-31 23:38:22 +00:00
2018-01-06 02:05:18 +00:00
if ( ! local_user ()) {
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2018-01-06 02:05:18 +00:00
if ( $a -> argc == 3 ) {
2010-07-11 06:03:54 +00:00
$contact_id = intval ( $a -> argv [ 1 ]);
2018-01-06 02:05:18 +00:00
if ( ! $contact_id ) {
2010-07-11 06:03:54 +00:00
return ;
2018-01-06 02:05:18 +00:00
}
2010-07-11 06:03:54 +00:00
$cmd = $a -> argv [ 2 ];
2018-01-10 13:36:02 +00:00
$orig_record = dba :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => local_user (), 'self' => false ]);
2018-01-06 02:05:18 +00:00
if ( ! DBM :: is_result ( $orig_record )) {
notice ( t ( 'Could not access contact record.' ) . EOL );
2016-02-17 22:47:32 +00:00
goaway ( 'contacts' );
2010-07-11 06:03:54 +00:00
return ; // NOTREACHED
}
2014-09-02 23:03:23 +00:00
2018-01-06 02:05:18 +00:00
if ( $cmd === 'update' ) {
2013-12-17 10:19:06 +00:00
_contact_update ( $contact_id );
2016-02-17 22:47:32 +00:00
goaway ( 'contacts/' . $contact_id );
2011-01-31 03:38:03 +00:00
// NOTREACHED
}
2010-07-11 06:03:54 +00:00
2018-01-06 02:05:18 +00:00
if ( $cmd === 'updateprofile' ) {
2015-04-11 21:51:47 +00:00
_contact_update_profile ( $contact_id );
2016-02-17 22:47:32 +00:00
goaway ( 'crepair/' . $contact_id );
2015-04-11 21:51:47 +00:00
// NOTREACHED
}
2018-01-06 02:05:18 +00:00
if ( $cmd === 'block' ) {
$r = _contact_block ( $contact_id , $orig_record );
2016-12-20 20:15:53 +00:00
if ( $r ) {
2018-01-06 02:05:18 +00:00
$blocked = (( $orig_record [ 'blocked' ]) ? 0 : 1 );
info ((( $blocked ) ? t ( 'Contact has been blocked' ) : t ( 'Contact has been unblocked' )) . EOL );
2010-07-28 05:32:21 +00:00
}
2014-09-02 23:03:23 +00:00
2016-02-17 22:47:32 +00:00
goaway ( 'contacts/' . $contact_id );
2010-07-28 05:32:21 +00:00
return ; // NOTREACHED
}
2018-01-06 02:05:18 +00:00
if ( $cmd === 'ignore' ) {
$r = _contact_ignore ( $contact_id , $orig_record );
2016-12-20 20:15:53 +00:00
if ( $r ) {
2018-01-06 02:05:18 +00:00
$readonly = (( $orig_record [ 'readonly' ]) ? 0 : 1 );
info ((( $readonly ) ? t ( 'Contact has been ignored' ) : t ( 'Contact has been unignored' )) . EOL );
2010-07-11 06:03:54 +00:00
}
2014-09-02 23:03:23 +00:00
2016-02-17 22:47:32 +00:00
goaway ( 'contacts/' . $contact_id );
2010-07-11 06:03:54 +00:00
return ; // NOTREACHED
}
2018-01-06 02:05:18 +00:00
if ( $cmd === 'archive' ) {
$r = _contact_archive ( $contact_id , $orig_record );
2016-12-20 20:15:53 +00:00
if ( $r ) {
2018-01-06 02:05:18 +00:00
$archived = (( $orig_record [ 'archive' ]) ? 0 : 1 );
info ((( $archived ) ? t ( 'Contact has been archived' ) : t ( 'Contact has been unarchived' )) . EOL );
2014-09-02 23:03:23 +00:00
}
2016-02-17 22:47:32 +00:00
goaway ( 'contacts/' . $contact_id );
2012-04-28 00:17:58 +00:00
return ; // NOTREACHED
}
2018-01-06 02:05:18 +00:00
if ( $cmd === 'drop' ) {
2013-01-26 19:52:21 +00:00
// Check if we should do HTML-based delete confirmation
2018-01-06 02:05:18 +00:00
if ( x ( $_REQUEST , 'confirm' )) {
2013-01-26 19:52:21 +00:00
// <form> can't take arguments in its "action" parameter
// so add any arguments as hidden inputs
$query = explode_querystring ( $a -> query_string );
2018-01-15 13:05:12 +00:00
$inputs = [];
2018-01-06 02:05:18 +00:00
foreach ( $query [ 'args' ] as $arg ) {
if ( strpos ( $arg , 'confirm=' ) === false ) {
2013-01-26 19:52:21 +00:00
$arg_parts = explode ( '=' , $arg );
2018-01-15 13:05:12 +00:00
$inputs [] = [ 'name' => $arg_parts [ 0 ], 'value' => $arg_parts [ 1 ]];
2013-01-26 19:52:21 +00:00
}
}
$a -> page [ 'aside' ] = '' ;
2015-10-07 22:25:55 +00:00
2018-01-15 13:05:12 +00:00
return replace_macros ( get_markup_template ( 'contact_drop_confirm.tpl' ), [
2016-07-26 08:36:34 +00:00
'$header' => t ( 'Drop contact' ),
2018-01-06 02:05:18 +00:00
'$contact' => _contact_detail_for_template ( $orig_record ),
2013-01-26 19:52:21 +00:00
'$method' => 'get' ,
'$message' => t ( 'Do you really want to delete this contact?' ),
'$extra_inputs' => $inputs ,
'$confirm' => t ( 'Yes' ),
'$confirm_url' => $query [ 'base' ],
'$confirm_name' => 'confirmed' ,
'$cancel' => t ( 'Cancel' ),
2018-01-15 13:05:12 +00:00
]);
2013-01-26 19:52:21 +00:00
}
// Now check how the user responded to the confirmation query
2018-01-06 02:05:18 +00:00
if ( x ( $_REQUEST , 'canceled' )) {
if ( x ( $_SESSION , 'return_url' )) {
2016-02-17 22:47:32 +00:00
goaway ( '' . $_SESSION [ 'return_url' ]);
2018-01-06 02:05:18 +00:00
} else {
2016-02-17 22:47:32 +00:00
goaway ( 'contacts' );
2016-12-20 20:15:53 +00:00
}
2013-01-26 19:52:21 +00:00
}
2018-01-06 02:05:18 +00:00
_contact_drop ( $orig_record );
info ( t ( 'Contact has been removed.' ) . EOL );
if ( x ( $_SESSION , 'return_url' )) {
2016-02-17 22:47:32 +00:00
goaway ( '' . $_SESSION [ 'return_url' ]);
2018-01-06 02:05:18 +00:00
} else {
2016-02-17 22:47:32 +00:00
goaway ( 'contacts' );
2016-12-20 20:15:53 +00:00
}
2010-07-11 06:03:54 +00:00
return ; // NOTREACHED
}
2016-12-20 20:15:53 +00:00
if ( $cmd === 'posts' ) {
2015-11-29 22:22:05 +00:00
return contact_posts ( $a , $contact_id );
}
2010-07-11 06:03:54 +00:00
}
2010-07-06 12:07:28 +00:00
2013-01-26 19:52:21 +00:00
$_SESSION [ 'return_url' ] = $a -> query_string ;
2018-01-06 02:05:18 +00:00
if (( x ( $a -> data , 'contact' )) && ( is_array ( $a -> data [ 'contact' ]))) {
2011-11-10 03:30:14 +00:00
$contact_id = $a -> data [ 'contact' ][ 'id' ];
$contact = $a -> data [ 'contact' ];
2010-07-06 12:07:28 +00:00
2018-01-15 13:05:12 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( get_markup_template ( 'contact_head.tpl' ), [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2018-01-15 13:05:12 +00:00
]);
$a -> page [ 'end' ] .= replace_macros ( get_markup_template ( 'contact_end.tpl' ), [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2018-01-15 13:05:12 +00:00
]);
2010-10-26 04:52:30 +00:00
2018-01-06 02:05:18 +00:00
$dir_icon = '' ;
$relation_text = '' ;
switch ( $contact [ 'rel' ]) {
2011-08-07 23:15:54 +00:00
case CONTACT_IS_FRIEND :
2010-07-11 06:03:54 +00:00
$dir_icon = 'images/lrarrow.gif' ;
2011-11-09 05:22:45 +00:00
$relation_text = t ( 'You are mutual friends with %s' );
2010-09-09 03:14:17 +00:00
break ;
2011-08-07 23:15:54 +00:00
case CONTACT_IS_FOLLOWER ;
2010-07-11 06:03:54 +00:00
$dir_icon = 'images/larrow.gif' ;
2011-11-09 05:22:45 +00:00
$relation_text = t ( 'You are sharing with %s' );
2010-09-09 03:14:17 +00:00
break ;
2011-08-07 23:15:54 +00:00
case CONTACT_IS_SHARING ;
2010-09-09 03:14:17 +00:00
$dir_icon = 'images/rarrow.gif' ;
2011-11-09 05:22:45 +00:00
$relation_text = t ( '%s is sharing with you' );
2010-09-09 03:14:17 +00:00
break ;
default :
break ;
2010-07-11 06:03:54 +00:00
}
2018-01-15 13:05:12 +00:00
if ( ! in_array ( $contact [ 'network' ], [ NETWORK_DFRN , NETWORK_OSTATUS , NETWORK_DIASPORA ])) {
2018-01-06 02:05:18 +00:00
$relation_text = " " ;
}
2015-02-20 22:56:41 +00:00
2018-01-06 02:05:18 +00:00
$relation_text = sprintf ( $relation_text , htmlentities ( $contact [ 'name' ]));
2011-11-09 05:22:45 +00:00
2018-01-06 02:05:18 +00:00
if (( $contact [ 'network' ] === NETWORK_DFRN ) && ( $contact [ 'rel' ])) {
2011-11-10 03:30:14 +00:00
$url = " redir/ { $contact [ 'id' ] } " ;
2010-09-28 02:48:45 +00:00
$sparkle = ' class="sparkle" ' ;
2018-01-06 02:05:18 +00:00
} else {
2011-11-10 03:30:14 +00:00
$url = $contact [ 'url' ];
2010-09-28 02:48:45 +00:00
$sparkle = '' ;
}
2010-10-01 09:28:06 +00:00
2011-11-09 05:22:45 +00:00
$insecure = t ( 'Private communications are not available for this contact.' );
2011-03-21 02:29:01 +00:00
2018-01-06 02:05:18 +00:00
$last_update = (( $contact [ 'last-update' ] <= NULL_DATE ) ? t ( 'Never' ) : datetime_convert ( 'UTC' , date_default_timezone_get (), $contact [ 'last-update' ], 'D, j M Y, g:i A' ));
2011-02-06 23:50:50 +00:00
2017-03-21 16:02:59 +00:00
if ( $contact [ 'last-update' ] > NULL_DATE ) {
2015-01-20 21:54:25 +00:00
$last_update .= ' ' . (( $contact [ 'last-update' ] <= $contact [ 'success_update' ]) ? t ( " \x28 Update was successful \x29 " ) : t ( " \x28 Update was not successful \x29 " ));
2017-03-19 08:04:04 +00:00
}
2011-11-10 03:30:14 +00:00
$lblsuggest = (( $contact [ 'network' ] === NETWORK_DFRN ) ? t ( 'Suggest friends' ) : '' );
2011-06-27 05:57:08 +00:00
2018-01-15 13:05:12 +00:00
$poll_enabled = in_array ( $contact [ 'network' ], [ NETWORK_DFRN , NETWORK_OSTATUS , NETWORK_FEED , NETWORK_MAIL ]);
2011-08-26 01:12:42 +00:00
2018-01-10 03:42:04 +00:00
$nettype = t ( 'Network type: %s' , ContactSelector :: networkToName ( $contact [ 'network' ], $contact [ " url " ]));
2011-11-09 05:22:45 +00:00
2011-11-10 03:30:14 +00:00
// tabs
2015-12-01 07:12:05 +00:00
$tab_str = contacts_tab ( $a , $contact_id , 2 );
2011-11-10 03:30:14 +00:00
2018-01-06 02:05:18 +00:00
$lost_contact = (( $contact [ 'archive' ] && $contact [ 'term-date' ] > NULL_DATE && $contact [ 'term-date' ] < datetime_convert ( '' , '' , 'now' )) ? t ( 'Communications lost with this contact!' ) : '' );
2011-11-10 03:30:14 +00:00
2018-01-01 21:27:01 +00:00
$fetch_further_information = null ;
2017-03-19 08:04:04 +00:00
if ( $contact [ 'network' ] == NETWORK_FEED ) {
2018-01-15 13:05:12 +00:00
$fetch_further_information = [
2018-01-06 02:05:18 +00:00
'fetch_further_information' ,
t ( 'Fetch further information for feeds' ),
$contact [ 'fetch_further_information' ],
t ( " Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags. " ),
2018-01-15 13:05:12 +00:00
[ '0' => t ( 'Disabled' ),
2018-01-06 02:05:18 +00:00
'1' => t ( 'Fetch information' ),
'3' => t ( 'Fetch keywords' ),
'2' => t ( 'Fetch information and keywords' )
2018-01-15 13:05:12 +00:00
]
];
2017-03-19 08:04:04 +00:00
}
2018-01-01 21:27:01 +00:00
$poll_interval = null ;
2018-01-15 13:05:12 +00:00
if ( in_array ( $contact [ 'network' ], [ NETWORK_FEED , NETWORK_MAIL ])) {
2018-01-10 03:42:04 +00:00
$poll_interval = ContactSelector :: pollInterval ( $contact [ 'priority' ], ( ! $poll_enabled ));
2018-01-01 21:27:01 +00:00
}
2015-02-20 22:12:04 +00:00
2018-01-01 21:27:01 +00:00
$profile_select = null ;
if ( $contact [ 'network' ] == NETWORK_DFRN ) {
2018-01-10 03:42:04 +00:00
$profile_select = ContactSelector :: profileAssign ( $contact [ 'profile-id' ], (( $contact [ 'network' ] !== NETWORK_DFRN ) ? true : false ));
2018-01-01 21:27:01 +00:00
}
2015-02-21 19:03:02 +00:00
2018-01-01 21:27:01 +00:00
$follow = '' ;
$follow_text = '' ;
2018-01-15 13:05:12 +00:00
if ( in_array ( $contact [ 'network' ], [ NETWORK_DIASPORA , NETWORK_OSTATUS ])) {
2017-09-12 06:08:24 +00:00
if ( $contact [ 'rel' ] == CONTACT_IS_FOLLOWER ) {
2018-01-06 02:05:18 +00:00
$follow = System :: baseUrl ( true ) . " /follow?url= " . urlencode ( $contact [ " url " ]);
2017-09-12 06:08:24 +00:00
$follow_text = t ( " Connect/Follow " );
} elseif ( $contact [ 'rel' ] == CONTACT_IS_FRIEND ) {
2018-01-06 02:05:18 +00:00
$follow = System :: baseUrl ( true ) . " /unfollow?url= " . urlencode ( $contact [ " url " ]);
2017-09-12 06:08:24 +00:00
$follow_text = t ( " Disconnect/Unfollow " );
}
}
2015-10-10 09:06:18 +00:00
2016-02-08 22:15:20 +00:00
// Load contactact related actions like hide, suggest, delete and others
2016-02-08 14:00:53 +00:00
$contact_actions = contact_actions ( $contact );
2016-02-08 00:56:15 +00:00
2018-01-01 21:27:01 +00:00
$tpl = get_markup_template ( " contact_edit.tpl " );
2018-01-15 13:05:12 +00:00
$o .= replace_macros ( $tpl , [
2016-07-26 07:09:40 +00:00
'$header' => t ( " Contact " ),
2011-11-10 03:30:14 +00:00
'$tab_str' => $tab_str ,
2011-04-08 06:10:43 +00:00
'$submit' => t ( 'Submit' ),
'$lbl_vis1' => t ( 'Profile Visibility' ),
2018-01-06 02:05:18 +00:00
'$lbl_vis2' => t ( 'Please choose the profile you would like to display to %s when viewing your profile securely.' , $contact [ 'name' ]),
2011-04-08 06:10:43 +00:00
'$lbl_info1' => t ( 'Contact Information / Notes' ),
2017-08-01 15:47:13 +00:00
'$lbl_info2' => t ( 'Their personal note' ),
'$reason' => trim ( notags ( $contact [ 'reason' ])),
2011-11-09 05:22:45 +00:00
'$infedit' => t ( 'Edit contact notes' ),
2016-02-17 22:47:32 +00:00
'$common_link' => 'common/loc/' . local_user () . '/' . $contact [ 'id' ],
2011-11-09 05:22:45 +00:00
'$relation_text' => $relation_text ,
2018-01-06 02:05:18 +00:00
'$visit' => t ( 'Visit %s\'s profile [%s]' , $contact [ 'name' ], $contact [ 'url' ]),
2010-11-17 07:26:14 +00:00
'$blockunblock' => t ( 'Block/Unblock contact' ),
'$ignorecont' => t ( 'Ignore contact' ),
2011-11-09 11:46:36 +00:00
'$lblcrepair' => t ( " Repair URL settings " ),
2011-04-20 04:09:25 +00:00
'$lblrecent' => t ( 'View conversations' ),
2011-06-27 05:57:08 +00:00
'$lblsuggest' => $lblsuggest ,
2011-08-26 01:12:42 +00:00
'$nettype' => $nettype ,
2015-02-20 22:12:04 +00:00
'$poll_interval' => $poll_interval ,
2011-08-26 01:12:42 +00:00
'$poll_enabled' => $poll_enabled ,
2011-11-09 11:46:36 +00:00
'$lastupdtext' => t ( 'Last update:' ),
2012-06-14 23:56:46 +00:00
'$lost_contact' => $lost_contact ,
2011-11-09 11:46:36 +00:00
'$updpub' => t ( 'Update public posts' ),
2011-02-06 23:50:50 +00:00
'$last_update' => $last_update ,
2011-01-31 03:38:03 +00:00
'$udnow' => t ( 'Update now' ),
2015-10-10 09:06:18 +00:00
'$follow' => $follow ,
2017-09-12 06:08:24 +00:00
'$follow_text' => $follow_text ,
2015-02-21 19:03:02 +00:00
'$profile_select' => $profile_select ,
2011-11-10 03:30:14 +00:00
'$contact_id' => $contact [ 'id' ],
'$block_text' => (( $contact [ 'blocked' ]) ? t ( 'Unblock' ) : t ( 'Block' ) ),
'$ignore_text' => (( $contact [ 'readonly' ]) ? t ( 'Unignore' ) : t ( 'Ignore' ) ),
'$insecure' => (( $contact [ 'network' ] !== NETWORK_DFRN && $contact [ 'network' ] !== NETWORK_MAIL && $contact [ 'network' ] !== NETWORK_FACEBOOK && $contact [ 'network' ] !== NETWORK_DIASPORA ) ? $insecure : '' ),
'$info' => $contact [ 'info' ],
2018-01-15 13:05:12 +00:00
'$cinfo' => [ 'info' , '' , $contact [ 'info' ], '' ],
2011-11-10 03:30:14 +00:00
'$blocked' => (( $contact [ 'blocked' ]) ? t ( 'Currently blocked' ) : '' ),
'$ignored' => (( $contact [ 'readonly' ]) ? t ( 'Currently ignored' ) : '' ),
2012-04-28 00:17:58 +00:00
'$archived' => (( $contact [ 'archive' ]) ? t ( 'Currently archived' ) : '' ),
2017-11-26 02:31:26 +00:00
'$pending' => (( $contact [ 'pending' ]) ? t ( 'Awaiting connection acknowledge' ) : '' ),
2018-01-15 13:05:12 +00:00
'$hidden' => [ 'hidden' , t ( 'Hide this contact from others' ), ( $contact [ 'hidden' ] == 1 ), t ( 'Replies/likes to your public posts <strong>may</strong> still be visible' )],
'$notify' => [ 'notify' , t ( 'Notification for new posts' ), ( $contact [ 'notify_new_posts' ] == 1 ), t ( 'Send a notification of every new post of this contact' )],
2015-02-20 22:12:04 +00:00
'$fetch_further_information' => $fetch_further_information ,
2014-10-29 23:24:23 +00:00
'$ffi_keyword_blacklist' => $contact [ 'ffi_keyword_blacklist' ],
2018-01-15 13:05:12 +00:00
'$ffi_keyword_blacklist' => [ 'ffi_keyword_blacklist' , t ( 'Blacklisted keywords' ), $contact [ 'ffi_keyword_blacklist' ], t ( 'Comma separated list of keywords that should not be converted to hashtags, when "Fetch information and keywords" is selected' )],
2011-11-10 03:30:14 +00:00
'$photo' => $contact [ 'photo' ],
2015-10-07 22:25:55 +00:00
'$name' => htmlentities ( $contact [ 'name' ]),
2010-07-06 12:07:28 +00:00
'$dir_icon' => $dir_icon ,
2010-09-28 02:48:45 +00:00
'$sparkle' => $sparkle ,
2012-12-22 19:57:29 +00:00
'$url' => $url ,
2015-07-18 08:57:31 +00:00
'$profileurllabel' => t ( 'Profile URL' ),
'$profileurl' => $contact [ 'url' ],
2017-11-19 22:03:39 +00:00
'$account_type' => Contact :: getAccountType ( $contact ),
2015-11-29 16:04:48 +00:00
'$location' => bbcode ( $contact [ " location " ]),
'$location_label' => t ( " Location: " ),
2016-09-25 15:28:00 +00:00
'$xmpp' => bbcode ( $contact [ " xmpp " ]),
'$xmpp_label' => t ( " XMPP: " ),
2015-11-29 16:04:48 +00:00
'$about' => bbcode ( $contact [ " about " ], false , false ),
'$about_label' => t ( " About: " ),
'$keywords' => $contact [ " keywords " ],
2016-02-08 00:56:15 +00:00
'$keywords_label' => t ( " Tags: " ),
'$contact_action_button' => t ( " Actions " ),
'$contact_actions' => $contact_actions ,
2016-02-08 22:15:20 +00:00
'$contact_status' => t ( " Status " ),
'$contact_settings_label' => t ( 'Contact Settings' ),
2016-07-26 07:09:40 +00:00
'$contact_profile_label' => t ( " Profile " ),
2018-01-15 13:05:12 +00:00
]);
2010-07-06 12:07:28 +00:00
2018-01-15 13:05:12 +00:00
$arr = [ 'contact' => $contact , 'output' => $o ];
2011-01-07 11:15:52 +00:00
call_hooks ( 'contact_edit' , $arr );
return $arr [ 'output' ];
2010-07-06 12:07:28 +00:00
}
2010-07-19 13:58:03 +00:00
2018-01-06 02:05:18 +00:00
$blocked = false ;
$hidden = false ;
$ignored = false ;
2018-01-01 21:27:01 +00:00
$archived = false ;
2018-01-06 02:05:18 +00:00
$all = false ;
2012-02-11 11:07:15 +00:00
2018-01-06 02:05:18 +00:00
if (( $a -> argc == 2 ) && ( $a -> argv [ 1 ] === 'all' )) {
2010-07-01 23:48:07 +00:00
$sql_extra = '' ;
2012-02-14 04:38:00 +00:00
$all = true ;
2018-01-06 02:05:18 +00:00
} elseif (( $a -> argc == 2 ) && ( $a -> argv [ 1 ] === 'blocked' )) {
2012-02-14 04:38:00 +00:00
$sql_extra = " AND `blocked` = 1 " ;
$blocked = true ;
2018-01-06 02:05:18 +00:00
} elseif (( $a -> argc == 2 ) && ( $a -> argv [ 1 ] === 'hidden' )) {
2012-02-14 04:38:00 +00:00
$sql_extra = " AND `hidden` = 1 " ;
$hidden = true ;
2018-01-06 02:05:18 +00:00
} elseif (( $a -> argc == 2 ) && ( $a -> argv [ 1 ] === 'ignored' )) {
2012-02-14 06:48:35 +00:00
$sql_extra = " AND `readonly` = 1 " ;
$ignored = true ;
2018-01-06 02:05:18 +00:00
} elseif (( $a -> argc == 2 ) && ( $a -> argv [ 1 ] === 'archived' )) {
2012-04-28 00:17:58 +00:00
$sql_extra = " AND `archive` = 1 " ;
$archived = true ;
2018-01-01 21:27:01 +00:00
} else {
2017-03-21 16:02:59 +00:00
$sql_extra = " AND `blocked` = 0 " ;
2018-01-01 21:27:01 +00:00
}
2012-02-14 04:38:00 +00:00
2018-01-01 21:27:01 +00:00
$search = x ( $_GET , 'search' ) ? notags ( trim ( $_GET [ 'search' ])) : '' ;
2018-01-06 02:05:18 +00:00
$nets = x ( $_GET , 'nets' ) ? notags ( trim ( $_GET [ 'nets' ])) : '' ;
2010-08-18 01:44:13 +00:00
2018-01-15 13:05:12 +00:00
$tabs = [
[
2012-03-20 23:05:32 +00:00
'label' => t ( 'Suggestions' ),
2016-02-17 22:47:32 +00:00
'url' => 'suggest' ,
2012-03-20 23:05:32 +00:00
'sel' => '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Suggest potential friends' ),
2018-01-06 02:05:18 +00:00
'id' => 'suggestions-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'g' ,
2018-01-15 13:05:12 +00:00
],
[
2012-02-14 04:38:00 +00:00
'label' => t ( 'All Contacts' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/all' ,
2012-02-14 04:38:00 +00:00
'sel' => ( $all ) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Show all contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showall-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'l' ,
2018-01-15 13:05:12 +00:00
],
[
2012-04-28 00:17:58 +00:00
'label' => t ( 'Unblocked' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts' ,
2018-01-06 02:05:18 +00:00
'sel' => (( ! $all ) && ( ! $blocked ) && ( ! $hidden ) && ( ! $search ) && ( ! $nets ) && ( ! $ignored ) && ( ! $archived )) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Only show unblocked contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showunblocked-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'o' ,
2018-01-15 13:05:12 +00:00
],
[
2012-04-28 00:17:58 +00:00
'label' => t ( 'Blocked' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/blocked' ,
2012-02-14 04:38:00 +00:00
'sel' => ( $blocked ) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Only show blocked contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showblocked-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'b' ,
2018-01-15 13:05:12 +00:00
],
[
2012-04-28 00:17:58 +00:00
'label' => t ( 'Ignored' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/ignored' ,
2012-02-14 06:48:35 +00:00
'sel' => ( $ignored ) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Only show ignored contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showignored-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'i' ,
2018-01-15 13:05:12 +00:00
],
[
2012-04-28 00:17:58 +00:00
'label' => t ( 'Archived' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/archived' ,
2012-04-28 00:17:58 +00:00
'sel' => ( $archived ) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Only show archived contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showarchived-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'y' ,
2018-01-15 13:05:12 +00:00
],
[
2012-04-28 00:17:58 +00:00
'label' => t ( 'Hidden' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/hidden' ,
2012-02-14 04:38:00 +00:00
'sel' => ( $hidden ) ? 'active' : '' ,
2012-04-30 12:15:29 +00:00
'title' => t ( 'Only show hidden contacts' ),
2018-01-06 02:05:18 +00:00
'id' => 'showhidden-tab' ,
2015-08-08 15:33:43 +00:00
'accesskey' => 'h' ,
2018-01-15 13:05:12 +00:00
],
];
2012-02-14 04:38:00 +00:00
$tab_tpl = get_markup_template ( 'common_tabs.tpl' );
2018-01-15 13:05:12 +00:00
$t = replace_macros ( $tab_tpl , [ '$tabs' => $tabs ]);
2012-02-14 04:38:00 +00:00
2018-01-06 02:05:18 +00:00
$total = 0 ;
2012-06-20 23:05:46 +00:00
$searching = false ;
2018-01-01 21:27:01 +00:00
$search_hdr = null ;
if ( $search ) {
2018-01-06 02:05:18 +00:00
$searching = true ;
2012-02-14 06:48:35 +00:00
$search_hdr = $search ;
2012-06-20 23:20:55 +00:00
$search_txt = dbesc ( protect_sprintf ( preg_quote ( $search )));
2018-01-06 02:05:18 +00:00
$sql_extra .= " AND (name REGEXP ' $search_txt ' OR url REGEXP ' $search_txt ' OR nick REGEXP ' $search_txt ') " ;
2012-02-14 06:48:35 +00:00
}
2010-08-18 01:44:13 +00:00
2018-01-01 21:27:01 +00:00
if ( $nets ) {
2012-02-12 05:39:51 +00:00
$sql_extra .= sprintf ( " AND network = '%s' " , dbesc ( $nets ));
2018-01-01 21:27:01 +00:00
}
2010-08-18 01:44:13 +00:00
2018-01-06 02:05:18 +00:00
$sql_extra2 = ((( $sort_type > 0 ) && ( $sort_type <= CONTACT_IS_FRIEND )) ? sprintf ( " AND `rel` = %d " , intval ( $sort_type )) : '' );
2015-01-28 22:34:46 +00:00
$r = q ( " SELECT COUNT(*) AS `total` FROM `contact`
2012-03-13 23:02:20 +00:00
WHERE `uid` = % d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 " ,
2018-01-01 21:27:01 +00:00
intval ( $_SESSION [ 'uid' ])
);
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2010-07-30 13:09:20 +00:00
$a -> set_pager_total ( $r [ 0 ][ 'total' ]);
2012-03-09 10:50:57 +00:00
$total = $r [ 0 ][ 'total' ];
}
2012-02-14 04:38:00 +00:00
2018-01-15 14:50:06 +00:00
$sql_extra3 = Widget :: unavailableNetworks ();
2012-02-14 04:38:00 +00:00
2018-01-15 13:05:12 +00:00
$contacts = [];
2018-01-06 02:05:18 +00:00
2015-11-29 12:37:24 +00:00
$r = q ( " SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT %d , %d " ,
2010-08-18 01:44:13 +00:00
intval ( $_SESSION [ 'uid' ]),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2016-12-14 08:31:27 +00:00
foreach ( $r as $rr ) {
2015-06-23 08:09:27 +00:00
$contacts [] = _contact_detail_for_template ( $rr );
2010-07-01 23:48:07 +00:00
}
}
2014-10-23 23:37:33 +00:00
2012-02-23 10:22:32 +00:00
$tpl = get_markup_template ( " contacts-template.tpl " );
2018-01-15 13:05:12 +00:00
$o .= replace_macros ( $tpl , [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl (),
2018-01-10 03:42:04 +00:00
'$header' => t ( 'Contacts' ) . (( $nets ) ? ' - ' . ContactSelector :: networkToName ( $nets ) : '' ),
2012-02-23 10:22:32 +00:00
'$tabs' => $t ,
2012-03-09 10:50:57 +00:00
'$total' => $total ,
2012-02-23 10:22:32 +00:00
'$search' => $search_hdr ,
'$desc' => t ( 'Search your contacts' ),
2018-01-01 21:27:01 +00:00
'$finding' => $searching ? t ( 'Results for: %s' , $search ) : " " ,
2012-02-23 10:22:32 +00:00
'$submit' => t ( 'Find' ),
'$cmd' => $a -> cmd ,
'$contacts' => $contacts ,
2013-12-17 10:19:06 +00:00
'$contact_drop_confirm' => t ( 'Do you really want to delete this contact?' ),
2015-10-18 15:12:48 +00:00
'multiselect' => 1 ,
2018-01-15 13:05:12 +00:00
'$batch_actions' => [
2018-01-06 02:05:18 +00:00
'contacts_batch_update' => t ( 'Update' ),
'contacts_batch_block' => t ( 'Block' ) . " / " . t ( " Unblock " ),
" contacts_batch_ignore " => t ( 'Ignore' ) . " / " . t ( " Unignore " ),
" contacts_batch_archive " => t ( 'Archive' ) . " / " . t ( " Unarchive " ),
" contacts_batch_drop " => t ( 'Delete' ),
2018-01-15 13:05:12 +00:00
],
2016-06-25 10:21:13 +00:00
'$h_batch_actions' => t ( 'Batch Actions' ),
2012-02-23 10:22:32 +00:00
'$paginate' => paginate ( $a ),
2018-01-15 13:05:12 +00:00
]);
2015-04-11 21:51:47 +00:00
2010-07-01 23:48:07 +00:00
return $o ;
2011-05-23 09:39:57 +00:00
}
2015-06-23 08:09:27 +00:00
2016-02-08 22:51:51 +00:00
/**
* @ brief List of pages for the Contact TabBar
2017-01-09 12:12:54 +00:00
*
2016-02-08 22:51:51 +00:00
* Available Pages are 'Status' , 'Profile' , 'Contacts' and 'Common Friends'
2017-01-09 12:12:54 +00:00
*
2017-04-30 04:17:49 +00:00
* @ param App $a
2016-02-08 22:51:51 +00:00
* @ param int $contact_id The ID of the contact
* @ param int $active_tab 1 if tab should be marked as active
2017-01-09 12:12:54 +00:00
*
2018-01-06 02:05:18 +00:00
* @ return string
2016-02-08 22:51:51 +00:00
*/
2018-01-06 02:05:18 +00:00
function contacts_tab ( $a , $contact_id , $active_tab )
{
2015-11-29 22:22:05 +00:00
// tabs
2018-01-15 13:05:12 +00:00
$tabs = [
[
2018-01-06 02:05:18 +00:00
'label' => t ( 'Status' ),
'url' => " contacts/ " . $contact_id . " /posts " ,
'sel' => (( $active_tab == 1 ) ? 'active' : '' ),
2015-11-29 22:22:05 +00:00
'title' => t ( 'Status Messages and Posts' ),
2018-01-06 02:05:18 +00:00
'id' => 'status-tab' ,
2015-11-29 22:22:05 +00:00
'accesskey' => 'm' ,
2018-01-15 13:05:12 +00:00
],
[
2018-01-06 02:05:18 +00:00
'label' => t ( 'Profile' ),
'url' => " contacts/ " . $contact_id ,
'sel' => (( $active_tab == 2 ) ? 'active' : '' ),
2015-11-29 22:22:05 +00:00
'title' => t ( 'Profile Details' ),
2018-01-06 02:05:18 +00:00
'id' => 'profile-tab' ,
2015-12-02 06:56:10 +00:00
'accesskey' => 'o' ,
2018-01-15 13:05:12 +00:00
]
];
2015-12-01 07:12:05 +00:00
2016-02-08 22:51:51 +00:00
// Show this tab only if there is visible friend list
2017-12-07 14:09:28 +00:00
$x = GContact :: countAllFriends ( local_user (), $contact_id );
2018-01-06 02:05:18 +00:00
if ( $x ) {
2018-01-15 13:05:12 +00:00
$tabs [] = [ 'label' => t ( 'Contacts' ),
2018-01-06 02:05:18 +00:00
'url' => " allfriends/ " . $contact_id ,
'sel' => (( $active_tab == 3 ) ? 'active' : '' ),
'title' => t ( 'View all contacts' ),
'id' => 'allfriends-tab' ,
2018-01-15 13:05:12 +00:00
'accesskey' => 't' ];
2018-01-06 02:05:18 +00:00
}
2015-12-01 07:12:05 +00:00
2016-02-08 22:51:51 +00:00
// Show this tab only if there is visible common friend list
2017-12-07 14:09:28 +00:00
$common = GContact :: countCommonFriends ( local_user (), $contact_id );
2018-01-06 02:05:18 +00:00
if ( $common ) {
2018-01-15 13:05:12 +00:00
$tabs [] = [ 'label' => t ( 'Common Friends' ),
2018-01-06 02:05:18 +00:00
'url' => " common/loc/ " . local_user () . " / " . $contact_id ,
'sel' => (( $active_tab == 4 ) ? 'active' : '' ),
'title' => t ( 'View all common friends' ),
'id' => 'common-loc-tab' ,
'accesskey' => 'd'
2018-01-15 13:05:12 +00:00
];
2018-01-06 02:05:18 +00:00
}
2015-12-01 07:12:05 +00:00
2018-01-15 13:05:12 +00:00
$tabs [] = [ 'label' => t ( 'Advanced' ),
2018-01-06 02:05:18 +00:00
'url' => 'crepair/' . $contact_id ,
'sel' => (( $active_tab == 5 ) ? 'active' : '' ),
'title' => t ( 'Advanced Contact Settings' ),
'id' => 'advanced-tab' ,
'accesskey' => 'r'
2018-01-15 13:05:12 +00:00
];
2015-12-01 07:12:05 +00:00
2015-11-29 22:22:05 +00:00
$tab_tpl = get_markup_template ( 'common_tabs.tpl' );
2018-01-15 13:05:12 +00:00
$tab_str = replace_macros ( $tab_tpl , [ '$tabs' => $tabs ]);
2015-11-29 22:22:05 +00:00
return $tab_str ;
}
2018-01-06 02:05:18 +00:00
function contact_posts ( $a , $contact_id )
{
$o = contacts_tab ( $a , $contact_id , 1 );
2015-11-29 22:22:05 +00:00
2018-01-10 13:36:02 +00:00
$contact = dba :: selectFirst ( 'contact' , [ 'url' ], [ 'id' => $contact_id ]);
2018-01-06 02:05:18 +00:00
if ( DBM :: is_result ( $contact )) {
2015-11-29 22:22:05 +00:00
$a -> page [ 'aside' ] = " " ;
2018-01-15 02:22:39 +00:00
Profile :: load ( $a , " " , 0 , Contact :: getDetailsByURL ( $contact [ " url " ]));
2018-01-06 02:05:18 +00:00
$o .= Contact :: getPostsFromUrl ( $contact [ " url " ]);
2018-01-01 21:27:01 +00:00
}
2015-11-29 22:22:05 +00:00
return $o ;
}
2018-01-06 02:05:18 +00:00
function _contact_detail_for_template ( $rr )
{
$dir_icon = '' ;
$alt_text = '' ;
switch ( $rr [ 'rel' ]) {
2015-06-23 08:09:27 +00:00
case CONTACT_IS_FRIEND :
$dir_icon = 'images/lrarrow.gif' ;
$alt_text = t ( 'Mutual Friendship' );
break ;
2018-01-06 02:05:18 +00:00
case CONTACT_IS_FOLLOWER ;
2015-06-23 08:09:27 +00:00
$dir_icon = 'images/larrow.gif' ;
$alt_text = t ( 'is a fan of yours' );
break ;
case CONTACT_IS_SHARING ;
$dir_icon = 'images/rarrow.gif' ;
$alt_text = t ( 'you are a fan of' );
break ;
default :
break ;
}
2018-01-06 02:05:18 +00:00
if (( $rr [ 'network' ] === NETWORK_DFRN ) && ( $rr [ 'rel' ])) {
2015-06-23 08:09:27 +00:00
$url = " redir/ { $rr [ 'id' ] } " ;
$sparkle = ' class="sparkle" ' ;
2018-01-06 02:05:18 +00:00
} else {
2015-06-23 08:09:27 +00:00
$url = $rr [ 'url' ];
$sparkle = '' ;
}
2015-10-07 06:25:10 +00:00
2018-01-15 13:05:12 +00:00
return [
2018-01-06 02:05:18 +00:00
'img_hover' => t ( 'Visit %s\'s profile [%s]' , $rr [ 'name' ], $rr [ 'url' ]),
2015-06-23 08:09:27 +00:00
'edit_hover' => t ( 'Edit contact' ),
2017-11-19 22:03:39 +00:00
'photo_menu' => Contact :: photoMenu ( $rr ),
2015-06-23 08:09:27 +00:00
'id' => $rr [ 'id' ],
'alt_text' => $alt_text ,
'dir_icon' => $dir_icon ,
2015-10-07 06:25:10 +00:00
'thumb' => proxy_url ( $rr [ 'thumb' ], false , PROXY_SIZE_THUMB ),
2015-10-07 22:25:55 +00:00
'name' => htmlentities ( $rr [ 'name' ]),
'username' => htmlentities ( $rr [ 'name' ]),
2017-11-19 22:03:39 +00:00
'account_type' => Contact :: getAccountType ( $rr ),
2015-06-23 08:09:27 +00:00
'sparkle' => $sparkle ,
2015-11-05 23:47:54 +00:00
'itemurl' => (( $rr [ 'addr' ] != " " ) ? $rr [ 'addr' ] : $rr [ 'url' ]),
2015-06-23 08:09:27 +00:00
'url' => $url ,
2018-01-10 03:42:04 +00:00
'network' => ContactSelector :: networkToName ( $rr [ 'network' ], $rr [ 'url' ]),
2018-01-15 13:05:12 +00:00
];
2015-07-16 08:09:59 +00:00
}
2016-02-08 00:56:15 +00:00
2016-02-08 14:00:53 +00:00
/**
* @ brief Gives a array with actions which can performed to a given contact
2017-01-09 12:12:54 +00:00
*
2016-02-08 14:00:53 +00:00
* This includes actions like e . g . 'block' , 'hide' , 'archive' , 'delete' and others
2017-01-09 12:12:54 +00:00
*
2016-02-08 14:00:53 +00:00
* @ param array $contact Data about the Contact
2016-02-08 22:51:51 +00:00
* @ return array with contact related actions
2016-02-08 14:00:53 +00:00
*/
2018-01-06 02:05:18 +00:00
function contact_actions ( $contact )
{
2018-01-15 13:05:12 +00:00
$poll_enabled = in_array ( $contact [ 'network' ], [ NETWORK_DFRN , NETWORK_OSTATUS , NETWORK_FEED , NETWORK_MAIL ]);
$contact_actions = [];
2016-02-08 14:00:53 +00:00
2016-02-08 22:51:51 +00:00
// Provide friend suggestion only for Friendica contacts
2018-01-06 02:05:18 +00:00
if ( $contact [ 'network' ] === NETWORK_DFRN ) {
2018-01-15 13:05:12 +00:00
$contact_actions [ 'suggest' ] = [
2018-01-06 02:05:18 +00:00
'label' => t ( 'Suggest friends' ),
'url' => 'fsuggest/' . $contact [ 'id' ],
'title' => '' ,
'sel' => '' ,
'id' => 'suggest' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 14:00:53 +00:00
}
2018-01-06 02:05:18 +00:00
if ( $poll_enabled ) {
2018-01-15 13:05:12 +00:00
$contact_actions [ 'update' ] = [
2018-01-06 02:05:18 +00:00
'label' => t ( 'Update now' ),
'url' => 'contacts/' . $contact [ 'id' ] . '/update' ,
'title' => '' ,
'sel' => '' ,
'id' => 'update' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 14:00:53 +00:00
}
2018-01-15 13:05:12 +00:00
$contact_actions [ 'block' ] = [
2018-01-06 02:05:18 +00:00
'label' => ( intval ( $contact [ 'blocked' ]) ? t ( 'Unblock' ) : t ( 'Block' ) ),
'url' => 'contacts/' . $contact [ 'id' ] . '/block' ,
'title' => t ( 'Toggle Blocked status' ),
'sel' => ( intval ( $contact [ 'blocked' ]) ? 'active' : '' ),
'id' => 'toggle-block' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 14:00:53 +00:00
2018-01-15 13:05:12 +00:00
$contact_actions [ 'ignore' ] = [
2018-01-06 02:05:18 +00:00
'label' => ( intval ( $contact [ 'readonly' ]) ? t ( 'Unignore' ) : t ( 'Ignore' ) ),
'url' => 'contacts/' . $contact [ 'id' ] . '/ignore' ,
'title' => t ( 'Toggle Ignored status' ),
'sel' => ( intval ( $contact [ 'readonly' ]) ? 'active' : '' ),
'id' => 'toggle-ignore' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 14:00:53 +00:00
2018-01-15 13:05:12 +00:00
$contact_actions [ 'archive' ] = [
2018-01-06 02:05:18 +00:00
'label' => ( intval ( $contact [ 'archive' ]) ? t ( 'Unarchive' ) : t ( 'Archive' ) ),
'url' => 'contacts/' . $contact [ 'id' ] . '/archive' ,
'title' => t ( 'Toggle Archive status' ),
'sel' => ( intval ( $contact [ 'archive' ]) ? 'active' : '' ),
'id' => 'toggle-archive' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 14:00:53 +00:00
2018-01-15 13:05:12 +00:00
$contact_actions [ 'delete' ] = [
2018-01-06 02:05:18 +00:00
'label' => t ( 'Delete' ),
'url' => 'contacts/' . $contact [ 'id' ] . '/drop' ,
'title' => t ( 'Delete contact' ),
'sel' => '' ,
'id' => 'delete' ,
2018-01-15 13:05:12 +00:00
];
2016-02-08 00:56:15 +00:00
2016-02-08 22:15:20 +00:00
return $contact_actions ;
2016-02-08 00:56:15 +00:00
}