2010-07-01 23:48:07 +00:00
< ? php
2017-11-29 12:52:27 +00:00
/**
* @ file mod / contacts . php
*/
2018-01-25 02:08:45 +00:00
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 19:51:56 +00:00
use Friendica\Content\Nav ;
2018-02-15 02:33:55 +00:00
use Friendica\Content\Text\BBCode ;
2018-01-15 14:50:06 +00:00
use Friendica\Content\Widget ;
2018-01-17 18:42:40 +00:00
use Friendica\Core\Addon ;
2018-01-21 18:33:59 +00:00
use Friendica\Core\L10n ;
2018-08-11 20:40:44 +00:00
use Friendica\Core\Protocol ;
2017-08-26 06:04:21 +00:00
use Friendica\Core\System ;
2017-11-05 12:15:53 +00:00
use Friendica\Core\Worker ;
2018-07-20 12:19:26 +00:00
use Friendica\Database\DBA ;
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 ;
2018-01-27 02:38:34 +00:00
use Friendica\Util\DateTimeFormat ;
2018-07-31 02:06:22 +00:00
use Friendica\Util\Proxy as ProxyUtils ;
2018-08-25 13:48:00 +00:00
use Friendica\Core\ACL ;
2018-10-07 14:34:08 +00:00
use Friendica\Module\Login ;
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-08-25 13:48:00 +00:00
if ((( $a -> argc == 2 ) && intval ( $a -> argv [ 1 ])) || (( $a -> argc == 3 ) && intval ( $a -> argv [ 1 ]) && in_array ( $a -> argv [ 2 ], [ 'posts' , 'conversations' ]))) {
2018-01-06 02:05:18 +00:00
$contact_id = intval ( $a -> argv [ 1 ]);
2018-07-20 12:19:26 +00:00
$contact = DBA :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-08-25 13:48:00 +00:00
if ( ! DBA :: isResult ( $contact )) {
$contact = DBA :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => 0 ]);
}
2018-09-12 06:05:14 +00:00
// Don't display contacts that are about to be deleted
2018-09-12 18:49:36 +00:00
if ( $contact [ 'network' ] == Protocol :: PHANTOM ) {
2018-09-12 06:05:14 +00:00
$contact = false ;
}
2018-01-06 02:05:18 +00:00
}
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $contact )) {
2018-03-17 06:17:32 +00:00
if ( $contact [ 'self' ]) {
2018-08-25 13:48:00 +00:00
if (( $a -> argc == 3 ) && intval ( $a -> argv [ 1 ]) && in_array ( $a -> argv [ 2 ], [ 'posts' , 'conversations' ])) {
2018-03-17 06:17:32 +00:00
goaway ( 'profile/' . $contact [ 'nick' ]);
} else {
goaway ( 'profile/' . $contact [ 'nick' ] . '?tab=profile' );
}
}
2018-01-06 02:05:18 +00:00
$a -> data [ 'contact' ] = $contact ;
2015-12-01 17:31:08 +00:00
2018-08-11 20:40:44 +00:00
if (( $a -> data [ 'contact' ][ 'network' ] != " " ) && ( $a -> data [ 'contact' ][ 'network' ] != Protocol :: 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-06-02 08:05:06 +00:00
'$url' => Contact :: MagicLink ( $a -> data [ 'contact' ][ 'url' ]),
2016-12-30 20:48:09 +00:00
'$addr' => (( $a -> data [ 'contact' ][ 'addr' ] != " " ) ? ( $a -> data [ 'contact' ][ 'addr' ]) : " " ),
'$network_name' => $networkname ,
2018-01-21 18:33:59 +00:00
'$network' => L10n :: 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-08-25 13:48:00 +00:00
if ( $contact [ 'uid' ] != 0 ) {
$groups_widget = Group :: sidebarWidget ( 'contacts' , 'group' , 'full' , 'everyone' , $contact_id );
} else {
$groups_widget = null ;
}
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
]);
2010-07-01 23:48:07 +00:00
}
2018-01-06 02:05:18 +00:00
function contacts_batch_actions ( App $a )
{
2018-08-31 05:08:22 +00:00
if ( empty ( $_POST [ 'contact_batch' ]) || ! is_array ( $_POST [ 'contact_batch' ])) {
2018-01-06 02:05:18 +00:00
return ;
}
2015-01-28 22:34:46 +00:00
2018-08-31 05:08:22 +00:00
$contacts_id = $_POST [ 'contact_batch' ];
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-08-25 13:48:00 +00:00
_contact_block ( $contact_id );
$count_actions ++ ;
2013-12-17 10:19:06 +00:00
}
if ( x ( $_POST , 'contacts_batch_ignore' )) {
2018-08-25 13:48:00 +00:00
_contact_ignore ( $contact_id );
$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 ) {
2018-01-21 22:15:52 +00:00
info ( L10n :: 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-09-30 17:26:29 +00:00
goaway ( 'contacts' );
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-07-20 12:19:26 +00:00
if ( ! DBA :: exists ( 'contact' , [ 'id' => $contact_id , 'uid' => local_user ()])) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: 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
2018-01-17 18:42:40 +00:00
Addon :: callHooks ( 'contact_edit_post' , $_POST );
2011-01-07 11:15:52 +00:00
2018-07-30 04:41:20 +00:00
$profile_id = intval ( defaults ( $_POST , 'profile-assign' , 0 ));
2016-12-20 10:56:34 +00:00
if ( $profile_id ) {
2018-07-20 12:19:26 +00:00
if ( ! DBA :: exists ( 'profile' , [ 'id' => $profile_id , 'uid' => local_user ()])) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: 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' ]);
2018-07-30 04:41:20 +00:00
$fetch_further_information = intval ( defaults ( $_POST , 'fetch_further_information' , 0 ));
2014-01-05 15:10:02 +00:00
2018-07-30 04:41:20 +00:00
$ffi_keyword_blacklist = escape_tags ( trim ( defaults ( $_POST , 'ffi_keyword_blacklist' , '' )));
2014-10-29 23:24:23 +00:00
2018-07-30 04:41:20 +00:00
$priority = intval ( defaults ( $_POST , 'poll' , 0 ));
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 ),
2018-07-21 13:10:13 +00:00
DBA :: escape ( $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 ),
2018-07-21 13:10:13 +00:00
DBA :: escape ( $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-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $r )) {
2018-01-21 18:33:59 +00:00
info ( L10n :: t ( 'Contact updated.' ) . EOL );
2018-01-06 02:05:18 +00:00
} else {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Failed to update contact record.' ) . EOL );
2018-01-06 02:05:18 +00:00
}
2012-02-12 07:17:55 +00:00
2018-07-20 12:19:26 +00:00
$contact = DBA :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $contact )) {
2018-01-06 02:05:18 +00:00
$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-07-20 12:19:26 +00:00
$contact = DBA :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'network' ], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-07-21 12:46:04 +00:00
if ( ! DBA :: isResult ( $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-08-11 20:40:44 +00:00
if ( $contact [ " network " ] == Protocol :: 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-07-20 12:19:26 +00:00
$contact = DBA :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'network' ], [ 'id' => $contact_id , 'uid' => local_user ()]);
2018-07-21 12:46:04 +00:00
if ( ! DBA :: isResult ( $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-08-11 20:40:44 +00:00
if (( in_array ( $data [ " network " ], [ Protocol :: FEED , Protocol :: 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
2018-08-11 20:40:44 +00:00
if ( $data [ " network " ] == Protocol :: 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-07-21 13:10:13 +00:00
$query .= " ` " . $key . " ` = ' " . DBA :: escape ( $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-08-25 13:48:00 +00:00
function _contact_block ( $contact_id )
2018-01-06 02:05:18 +00:00
{
2018-08-25 13:48:00 +00:00
$blocked = ! Contact :: isBlockedByUser ( $contact_id , local_user ());
Contact :: setBlockedForUser ( $contact_id , local_user (), $blocked );
2016-02-07 14:11:34 +00:00
}
2018-01-06 02:05:18 +00:00
2018-08-25 13:48:00 +00:00
function _contact_ignore ( $contact_id )
2018-01-06 02:05:18 +00:00
{
2018-08-25 13:48:00 +00:00
$ignored = ! Contact :: isIgnoredByUser ( $contact_id , local_user ());
Contact :: setIgnoredForUser ( $contact_id , local_user (), $ignored );
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 ())
);
2018-07-21 12:46:04 +00:00
return DBA :: isResult ( $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' ])
);
2018-07-21 12:46:04 +00:00
if ( ! DBA :: isResult ( $r )) {
2017-09-23 14:48:27 +00:00
return ;
}
2018-09-05 05:02:06 +00:00
Contact :: terminateFriendship ( $r [ 0 ], $orig_record , true );
2017-11-19 22:03:39 +00:00
Contact :: remove ( $orig_record [ 'id' ]);
2013-12-17 10:19:06 +00:00
}
2010-07-01 23:48:07 +00:00
2018-08-25 13:48:00 +00:00
function contacts_content ( App $a , $update = 0 )
2018-01-06 02:05:18 +00:00
{
2010-10-31 23:38:22 +00:00
$sort_type = 0 ;
$o = '' ;
2018-01-15 19:51:56 +00:00
Nav :: setSelected ( 'contacts' );
2010-10-31 23:38:22 +00:00
2018-01-06 02:05:18 +00:00
if ( ! local_user ()) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2018-10-07 14:34:08 +00:00
return Login :: form ();
2010-07-01 23:48:07 +00:00
}
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-08-25 13:48:00 +00:00
$orig_record = DBA :: selectFirst ( 'contact' , [], [ 'id' => $contact_id , 'uid' => [ 0 , local_user ()], 'self' => false ]);
2018-07-21 12:46:04 +00:00
if ( ! DBA :: isResult ( $orig_record )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: 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-08-25 13:48:00 +00:00
if ( $cmd === 'update' && ( $orig_record [ 'uid' ] != 0 )) {
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-08-25 13:48:00 +00:00
if ( $cmd === 'updateprofile' && ( $orig_record [ 'uid' ] != 0 )) {
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' ) {
2018-08-25 13:48:00 +00:00
_contact_block ( $contact_id );
$blocked = Contact :: isBlockedByUser ( $contact_id , local_user ());
info (( $blocked ? L10n :: t ( 'Contact has been blocked' ) : L10n :: t ( 'Contact has been unblocked' )) . EOL );
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' ) {
2018-08-25 13:48:00 +00:00
_contact_ignore ( $contact_id );
$ignored = Contact :: isIgnoredByUser ( $contact_id , local_user ());
info (( $ignored ? L10n :: t ( 'Contact has been ignored' ) : L10n :: t ( 'Contact has been unignored' )) . EOL );
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-08-25 13:48:00 +00:00
if ( $cmd === 'archive' && ( $orig_record [ 'uid' ] != 0 )) {
2018-01-06 02:05:18 +00:00
$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 );
2018-01-21 18:33:59 +00:00
info ((( $archived ) ? L10n :: t ( 'Contact has been archived' ) : L10n :: 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-08-25 13:48:00 +00:00
if ( $cmd === 'drop' && ( $orig_record [ 'uid' ] != 0 )) {
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' ), [
2018-01-21 18:33:59 +00:00
'$header' => L10n :: 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' ,
2018-01-21 18:33:59 +00:00
'$message' => L10n :: t ( 'Do you really want to delete this contact?' ),
2013-01-26 19:52:21 +00:00
'$extra_inputs' => $inputs ,
2018-01-21 18:33:59 +00:00
'$confirm' => L10n :: t ( 'Yes' ),
2013-01-26 19:52:21 +00:00
'$confirm_url' => $query [ 'base' ],
'$confirm_name' => 'confirmed' ,
2018-01-21 18:33:59 +00:00
'$cancel' => L10n :: 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' )) {
2018-09-30 17:26:29 +00:00
goaway ( 'contacts' );
2013-01-26 19:52:21 +00:00
}
2018-01-06 02:05:18 +00:00
_contact_drop ( $orig_record );
2018-01-21 18:33:59 +00:00
info ( L10n :: t ( 'Contact has been removed.' ) . EOL );
2018-10-06 03:17:44 +00:00
2018-09-30 17:26:29 +00:00
goaway ( 'contacts' );
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 );
}
2018-08-25 13:48:00 +00:00
if ( $cmd === 'conversations' ) {
return contact_conversations ( $a , $contact_id , $update );
}
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
]);
2010-10-26 04:52:30 +00:00
2018-08-25 13:48:00 +00:00
$contact [ 'blocked' ] = Contact :: isBlockedByUser ( $contact [ 'id' ], local_user ());
$contact [ 'readonly' ] = Contact :: isIgnoredByUser ( $contact [ 'id' ], local_user ());
2018-01-06 02:05:18 +00:00
$dir_icon = '' ;
$relation_text = '' ;
switch ( $contact [ 'rel' ]) {
2018-07-25 02:53:46 +00:00
case Contact :: FRIEND :
2010-07-11 06:03:54 +00:00
$dir_icon = 'images/lrarrow.gif' ;
2018-01-21 18:33:59 +00:00
$relation_text = L10n :: t ( 'You are mutual friends with %s' );
2010-09-09 03:14:17 +00:00
break ;
2018-07-25 02:53:46 +00:00
case Contact :: FOLLOWER ;
2010-07-11 06:03:54 +00:00
$dir_icon = 'images/larrow.gif' ;
2018-01-21 18:33:59 +00:00
$relation_text = L10n :: t ( 'You are sharing with %s' );
2010-09-09 03:14:17 +00:00
break ;
2018-07-25 02:53:46 +00:00
case Contact :: SHARING ;
2010-09-09 03:14:17 +00:00
$dir_icon = 'images/rarrow.gif' ;
2018-01-21 18:33:59 +00:00
$relation_text = L10n :: t ( '%s is sharing with you' );
2010-09-09 03:14:17 +00:00
break ;
2018-07-25 02:53:46 +00:00
2010-09-09 03:14:17 +00:00
default :
break ;
2010-07-11 06:03:54 +00:00
}
2018-08-25 13:48:00 +00:00
if ( $contact [ 'uid' ] == 0 ) {
$relation_text = '' ;
}
2018-09-14 16:51:32 +00:00
if ( ! in_array ( $contact [ 'network' ], [ Protocol :: ACTIVITYPUB , Protocol :: DFRN , Protocol :: OSTATUS , Protocol :: 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-06-02 08:05:06 +00:00
$url = Contact :: magicLink ( $contact [ 'url' ]);
if ( strpos ( $url , 'redir/' ) === 0 ) {
2010-09-28 02:48:45 +00:00
$sparkle = ' class="sparkle" ' ;
2018-01-06 02:05:18 +00:00
} else {
2010-09-28 02:48:45 +00:00
$sparkle = '' ;
}
2010-10-01 09:28:06 +00:00
2018-01-21 18:33:59 +00:00
$insecure = L10n :: t ( 'Private communications are not available for this contact.' );
2011-03-21 02:29:01 +00:00
2018-01-27 02:38:34 +00:00
$last_update = (( $contact [ 'last-update' ] <= NULL_DATE ) ? L10n :: t ( 'Never' ) : DateTimeFormat :: local ( $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 ) {
2018-01-21 18:33:59 +00:00
$last_update .= ' ' . (( $contact [ 'last-update' ] <= $contact [ 'success_update' ]) ? L10n :: t ( " \x28 Update was successful \x29 " ) : L10n :: t ( " \x28 Update was not successful \x29 " ));
2017-03-19 08:04:04 +00:00
}
2018-08-11 20:40:44 +00:00
$lblsuggest = (( $contact [ 'network' ] === Protocol :: DFRN ) ? L10n :: t ( 'Suggest friends' ) : '' );
2011-06-27 05:57:08 +00:00
2018-10-06 03:17:44 +00:00
$poll_enabled = in_array ( $contact [ 'network' ], [ Protocol :: DFRN , Protocol :: OSTATUS , Protocol :: FEED , Protocol :: MAIL ]);
2011-08-26 01:12:42 +00:00
2018-01-21 18:33:59 +00:00
$nettype = L10n :: 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
2018-08-25 13:48:00 +00:00
$tab_str = contacts_tab ( $a , $contact , 3 );
2011-11-10 03:30:14 +00:00
2018-01-27 02:38:34 +00:00
$lost_contact = (( $contact [ 'archive' ] && $contact [ 'term-date' ] > NULL_DATE && $contact [ 'term-date' ] < DateTimeFormat :: utcNow ()) ? L10n :: 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 ;
2018-08-11 20:40:44 +00:00
if ( $contact [ 'network' ] == Protocol :: FEED ) {
2018-01-15 13:05:12 +00:00
$fetch_further_information = [
2018-01-06 02:05:18 +00:00
'fetch_further_information' ,
2018-01-21 18:33:59 +00:00
L10n :: t ( 'Fetch further information for feeds' ),
2018-01-06 02:05:18 +00:00
$contact [ 'fetch_further_information' ],
2018-01-21 18:33:59 +00:00
L10n :: 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. " ),
[ '0' => L10n :: t ( 'Disabled' ),
'1' => L10n :: t ( 'Fetch information' ),
'3' => L10n :: t ( 'Fetch keywords' ),
'2' => L10n :: 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-08-11 20:40:44 +00:00
if ( in_array ( $contact [ 'network' ], [ Protocol :: FEED , Protocol :: 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 ;
2018-08-11 20:40:44 +00:00
if ( $contact [ 'network' ] == Protocol :: DFRN ) {
$profile_select = ContactSelector :: profileAssign ( $contact [ 'profile-id' ], (( $contact [ 'network' ] !== Protocol :: DFRN ) ? true : false ));
2018-01-01 21:27:01 +00:00
}
2015-02-21 19:03:02 +00:00
2018-03-16 07:27:18 +00:00
/// @todo Only show the following link with DFRN when the remote version supports it
2018-01-01 21:27:01 +00:00
$follow = '' ;
$follow_text = '' ;
2018-08-31 01:03:57 +00:00
if ( in_array ( $contact [ 'rel' ], [ Contact :: FRIEND , Contact :: SHARING ])) {
if ( in_array ( $contact [ 'network' ], Protocol :: NATIVE_SUPPORT )) {
2018-01-06 02:05:18 +00:00
$follow = System :: baseUrl ( true ) . " /unfollow?url= " . urlencode ( $contact [ " url " ]);
2018-01-21 18:33:59 +00:00
$follow_text = L10n :: t ( " Disconnect/Unfollow " );
2017-09-12 06:08:24 +00:00
}
2018-08-31 01:03:57 +00:00
} else {
2018-08-25 13:48:00 +00:00
$follow = System :: baseUrl ( true ) . " /follow?url= " . urlencode ( $contact [ " url " ]);
$follow_text = L10n :: t ( " Connect/Follow " );
}
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-08-25 13:48:00 +00:00
if ( $contact [ 'uid' ] != 0 ) {
$lbl_vis1 = L10n :: t ( 'Profile Visibility' );
$lbl_info1 = L10n :: t ( 'Contact Information / Notes' );
$contact_settings_label = L10n :: t ( 'Contact Settings' );
} else {
$lbl_vis1 = null ;
$lbl_info1 = null ;
$contact_settings_label = null ;
}
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 , [
2018-01-21 18:33:59 +00:00
'$header' => L10n :: t ( " Contact " ),
2011-11-10 03:30:14 +00:00
'$tab_str' => $tab_str ,
2018-01-21 18:33:59 +00:00
'$submit' => L10n :: t ( 'Submit' ),
2018-08-25 13:48:00 +00:00
'$lbl_vis1' => $lbl_vis1 ,
2018-01-21 18:33:59 +00:00
'$lbl_vis2' => L10n :: t ( 'Please choose the profile you would like to display to %s when viewing your profile securely.' , $contact [ 'name' ]),
2018-08-25 13:48:00 +00:00
'$lbl_info1' => $lbl_info1 ,
2018-01-21 18:33:59 +00:00
'$lbl_info2' => L10n :: t ( 'Their personal note' ),
2017-08-01 15:47:13 +00:00
'$reason' => trim ( notags ( $contact [ 'reason' ])),
2018-01-21 18:33:59 +00:00
'$infedit' => L10n :: 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-21 18:33:59 +00:00
'$visit' => L10n :: t ( 'Visit %s\'s profile [%s]' , $contact [ 'name' ], $contact [ 'url' ]),
'$blockunblock' => L10n :: t ( 'Block/Unblock contact' ),
'$ignorecont' => L10n :: t ( 'Ignore contact' ),
'$lblcrepair' => L10n :: t ( " Repair URL settings " ),
'$lblrecent' => L10n :: 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 ,
2018-01-21 18:33:59 +00:00
'$lastupdtext' => L10n :: t ( 'Last update:' ),
2012-06-14 23:56:46 +00:00
'$lost_contact' => $lost_contact ,
2018-01-21 18:33:59 +00:00
'$updpub' => L10n :: t ( 'Update public posts' ),
2011-02-06 23:50:50 +00:00
'$last_update' => $last_update ,
2018-01-21 18:33:59 +00:00
'$udnow' => L10n :: 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' ],
2018-10-06 03:17:44 +00:00
'$block_text' => ( $contact [ 'blocked' ] ? L10n :: t ( 'Unblock' ) : L10n :: t ( 'Block' )),
'$ignore_text' => ( $contact [ 'readonly' ] ? L10n :: t ( 'Unignore' ) : L10n :: t ( 'Ignore' )),
'$insecure' => ( in_array ( $contact [ 'network' ], [ Protocol :: ACTIVITYPUB , Protocol :: DFRN , Protocol :: MAIL , Protocol :: DIASPORA ]) ? '' : $insecure ),
2011-11-10 03:30:14 +00:00
'$info' => $contact [ 'info' ],
2018-01-15 13:05:12 +00:00
'$cinfo' => [ 'info' , '' , $contact [ 'info' ], '' ],
2018-10-06 03:17:44 +00:00
'$blocked' => ( $contact [ 'blocked' ] ? L10n :: t ( 'Currently blocked' ) : '' ),
'$ignored' => ( $contact [ 'readonly' ] ? L10n :: t ( 'Currently ignored' ) : '' ),
'$archived' => ( $contact [ 'archive' ] ? L10n :: t ( 'Currently archived' ) : '' ),
'$pending' => ( $contact [ 'pending' ] ? L10n :: t ( 'Awaiting connection acknowledge' ) : '' ),
2018-01-21 18:33:59 +00:00
'$hidden' => [ 'hidden' , L10n :: t ( 'Hide this contact from others' ), ( $contact [ 'hidden' ] == 1 ), L10n :: t ( 'Replies/likes to your public posts <strong>may</strong> still be visible' )],
'$notify' => [ 'notify' , L10n :: t ( 'Notification for new posts' ), ( $contact [ 'notify_new_posts' ] == 1 ), L10n :: 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-21 18:33:59 +00:00
'$ffi_keyword_blacklist' => [ 'ffi_keyword_blacklist' , L10n :: t ( 'Blacklisted keywords' ), $contact [ 'ffi_keyword_blacklist' ], L10n :: 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 ,
2018-01-21 18:33:59 +00:00
'$profileurllabel' => L10n :: t ( 'Profile URL' ),
2015-07-18 08:57:31 +00:00
'$profileurl' => $contact [ 'url' ],
2017-11-19 22:03:39 +00:00
'$account_type' => Contact :: getAccountType ( $contact ),
2018-02-15 02:33:55 +00:00
'$location' => BBCode :: convert ( $contact [ " location " ]),
2018-01-21 18:33:59 +00:00
'$location_label' => L10n :: t ( " Location: " ),
2018-02-15 02:33:55 +00:00
'$xmpp' => BBCode :: convert ( $contact [ " xmpp " ]),
2018-01-21 18:33:59 +00:00
'$xmpp_label' => L10n :: t ( " XMPP: " ),
2018-02-15 02:33:55 +00:00
'$about' => BBCode :: convert ( $contact [ " about " ], false ),
2018-01-21 18:33:59 +00:00
'$about_label' => L10n :: t ( " About: " ),
2015-11-29 16:04:48 +00:00
'$keywords' => $contact [ " keywords " ],
2018-01-21 18:33:59 +00:00
'$keywords_label' => L10n :: t ( " Tags: " ),
'$contact_action_button' => L10n :: t ( " Actions " ),
2016-02-08 00:56:15 +00:00
'$contact_actions' => $contact_actions ,
2018-01-21 18:33:59 +00:00
'$contact_status' => L10n :: t ( " Status " ),
2018-08-25 13:48:00 +00:00
'$contact_settings_label' => $contact_settings_label ,
2018-01-21 18:33:59 +00:00
'$contact_profile_label' => L10n :: 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
2018-01-17 18:42:40 +00:00
Addon :: callHooks ( 'contact_edit' , $arr );
2011-01-07 11:15:52 +00:00
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-09-12 06:05:14 +00:00
$sql_extra .= sprintf ( " AND `network` != '%s' " , Protocol :: PHANTOM );
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 = [
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Suggestions' ),
2016-02-17 22:47:32 +00:00
'url' => 'suggest' ,
2012-03-20 23:05:32 +00:00
'sel' => '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: 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' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: 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' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Blocked' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/blocked' ,
2012-02-14 04:38:00 +00:00
'sel' => ( $blocked ) ? 'active' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Ignored' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/ignored' ,
2012-02-14 06:48:35 +00:00
'sel' => ( $ignored ) ? 'active' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Archived' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/archived' ,
2012-04-28 00:17:58 +00:00
'sel' => ( $archived ) ? 'active' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
],
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Hidden' ),
2016-02-17 22:47:32 +00:00
'url' => 'contacts/hidden' ,
2012-02-14 04:38:00 +00:00
'sel' => ( $hidden ) ? 'active' : '' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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 ;
2018-07-21 13:10:13 +00:00
$search_txt = DBA :: escape ( 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 ) {
2018-07-21 13:10:13 +00:00
$sql_extra .= sprintf ( " AND network = '%s' " , DBA :: escape ( $nets ));
2018-01-01 21:27:01 +00:00
}
2010-08-18 01:44:13 +00:00
2018-07-25 02:53:46 +00:00
$sql_extra2 = ((( $sort_type > 0 ) && ( $sort_type <= Contact :: 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' ])
);
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $r )) {
2018-10-09 17:58:58 +00:00
$a -> setPagerTotal ( $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' ])
);
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $r )) {
2016-12-14 08:31:27 +00:00
foreach ( $r as $rr ) {
2018-08-25 13:48:00 +00:00
$rr [ 'blocked' ] = Contact :: isBlockedByUser ( $rr [ 'id' ], local_user ());
$rr [ 'readonly' ] = Contact :: isIgnoredByUser ( $rr [ 'id' ], local_user ());
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-21 18:33:59 +00:00
'$header' => L10n :: 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 ,
2018-01-21 18:33:59 +00:00
'$desc' => L10n :: t ( 'Search your contacts' ),
'$finding' => $searching ? L10n :: t ( 'Results for: %s' , $search ) : " " ,
'$submit' => L10n :: t ( 'Find' ),
2012-02-23 10:22:32 +00:00
'$cmd' => $a -> cmd ,
'$contacts' => $contacts ,
2018-01-21 18:33:59 +00:00
'$contact_drop_confirm' => L10n :: 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-21 18:33:59 +00:00
'contacts_batch_update' => L10n :: t ( 'Update' ),
'contacts_batch_block' => L10n :: t ( 'Block' ) . " / " . L10n :: t ( " Unblock " ),
" contacts_batch_ignore " => L10n :: t ( 'Ignore' ) . " / " . L10n :: t ( " Unignore " ),
" contacts_batch_archive " => L10n :: t ( 'Archive' ) . " / " . L10n :: t ( " Unarchive " ),
" contacts_batch_drop " => L10n :: t ( 'Delete' ),
2018-01-15 13:05:12 +00:00
],
2018-01-21 18:33:59 +00:00
'$h_batch_actions' => L10n :: 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
2018-08-25 13:48:00 +00:00
* @ param array $contact The contact array
2016-02-08 22:51:51 +00:00
* @ 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-08-25 13:48:00 +00:00
function contacts_tab ( $a , $contact , $active_tab )
2018-01-06 02:05:18 +00:00
{
2015-11-29 22:22:05 +00:00
// tabs
2018-01-15 13:05:12 +00:00
$tabs = [
[
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Status' ),
2018-08-25 13:48:00 +00:00
'url' => " contacts/ " . $contact [ 'id' ] . " /conversations " ,
2018-01-06 02:05:18 +00:00
'sel' => (( $active_tab == 1 ) ? 'active' : '' ),
2018-08-25 13:48:00 +00:00
'title' => L10n :: t ( 'Conversations started by this contact' ),
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-08-25 13:48:00 +00:00
'label' => L10n :: t ( 'Posts and Comments' ),
'url' => " contacts/ " . $contact [ 'id' ] . " /posts " ,
2018-01-06 02:05:18 +00:00
'sel' => (( $active_tab == 2 ) ? 'active' : '' ),
2018-08-25 13:48:00 +00:00
'title' => L10n :: t ( 'Status Messages and Posts' ),
'id' => 'posts-tab' ,
'accesskey' => 'p' ,
],
[
'label' => L10n :: t ( 'Profile' ),
'url' => " contacts/ " . $contact [ 'id' ],
'sel' => (( $active_tab == 3 ) ? 'active' : '' ),
2018-01-21 18:33:59 +00:00
'title' => L10n :: 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
2018-08-25 13:48:00 +00:00
$x = GContact :: countAllFriends ( local_user (), $contact [ 'id' ]);
2018-01-06 02:05:18 +00:00
if ( $x ) {
2018-01-21 18:33:59 +00:00
$tabs [] = [ 'label' => L10n :: t ( 'Contacts' ),
2018-08-25 13:48:00 +00:00
'url' => " allfriends/ " . $contact [ 'id' ],
'sel' => (( $active_tab == 4 ) ? 'active' : '' ),
2018-01-21 18:33:59 +00:00
'title' => L10n :: t ( 'View all contacts' ),
2018-01-06 02:05:18 +00:00
'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
2018-08-25 13:48:00 +00:00
$common = GContact :: countCommonFriends ( local_user (), $contact [ 'id' ]);
2018-01-06 02:05:18 +00:00
if ( $common ) {
2018-01-21 18:33:59 +00:00
$tabs [] = [ 'label' => L10n :: t ( 'Common Friends' ),
2018-08-25 13:48:00 +00:00
'url' => " common/loc/ " . local_user () . " / " . $contact [ 'id' ],
'sel' => (( $active_tab == 5 ) ? 'active' : '' ),
2018-01-21 18:33:59 +00:00
'title' => L10n :: t ( 'View all common friends' ),
2018-01-06 02:05:18 +00:00
'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-08-25 13:48:00 +00:00
if ( ! empty ( $contact [ 'uid' ])) {
$tabs [] = [ 'label' => L10n :: t ( 'Advanced' ),
'url' => 'crepair/' . $contact [ 'id' ],
'sel' => (( $active_tab == 6 ) ? 'active' : '' ),
'title' => L10n :: t ( 'Advanced Contact Settings' ),
'id' => 'advanced-tab' ,
'accesskey' => 'r'
];
}
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-08-25 13:48:00 +00:00
function contact_conversations ( App $a , $contact_id , $update )
{
$o = '' ;
if ( ! $update ) {
// We need the editor here to be able to reshare an item.
if ( local_user ()) {
$x = [
'is_owner' => true ,
'allow_location' => $a -> user [ 'allow_location' ],
'default_location' => $a -> user [ 'default-location' ],
'nickname' => $a -> user [ 'nickname' ],
'lockstate' => ( is_array ( $a -> user ) && ( strlen ( $a -> user [ 'allow_cid' ]) || strlen ( $a -> user [ 'allow_gid' ]) || strlen ( $a -> user [ 'deny_cid' ]) || strlen ( $a -> user [ 'deny_gid' ])) ? 'lock' : 'unlock' ),
'acl' => ACL :: getFullSelectorHTML ( $a -> user , true ),
'bang' => '' ,
'visitor' => 'block' ,
'profile_uid' => local_user (),
];
$o = status_editor ( $a , $x , 0 , true );
}
}
$contact = DBA :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'id' ], [ 'id' => $contact_id ]);
if ( ! $update ) {
$o .= contacts_tab ( $a , $contact , 1 );
}
if ( DBA :: isResult ( $contact )) {
$a -> page [ 'aside' ] = " " ;
$profiledata = Contact :: getDetailsByURL ( $contact [ " url " ]);
if ( local_user ()) {
2018-09-14 16:51:32 +00:00
if ( in_array ( $profiledata [ " network " ], [ Protocol :: ACTIVITYPUB , Protocol :: DFRN , Protocol :: DIASPORA , Protocol :: OSTATUS ])) {
2018-08-25 13:48:00 +00:00
$profiledata [ " remoteconnect " ] = System :: baseUrl () . " /follow?url= " . urlencode ( $profiledata [ " url " ]);
}
}
Profile :: load ( $a , " " , 0 , $profiledata , true );
$o .= Contact :: getPostsFromUrl ( $contact [ " url " ], true , $update );
}
return $o ;
}
2018-07-25 02:53:46 +00:00
function contact_posts ( App $a , $contact_id )
2018-01-06 02:05:18 +00:00
{
2018-08-25 13:48:00 +00:00
$contact = DBA :: selectFirst ( 'contact' , [ 'uid' , 'url' , 'id' ], [ 'id' => $contact_id ]);
2015-11-29 22:22:05 +00:00
2018-08-25 13:48:00 +00:00
$o = contacts_tab ( $a , $contact , 2 );
2018-07-25 02:53:46 +00:00
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $contact )) {
2015-11-29 22:22:05 +00:00
$a -> page [ 'aside' ] = " " ;
2018-08-25 13:48:00 +00:00
$profiledata = Contact :: getDetailsByURL ( $contact [ " url " ]);
if ( local_user ()) {
2018-09-14 16:51:32 +00:00
if ( in_array ( $profiledata [ " network " ], [ Protocol :: ACTIVITYPUB , Protocol :: DFRN , Protocol :: DIASPORA , Protocol :: OSTATUS ])) {
2018-08-25 13:48:00 +00:00
$profiledata [ " remoteconnect " ] = System :: baseUrl () . " /follow?url= " . urlencode ( $profiledata [ " url " ]);
}
}
Profile :: load ( $a , " " , 0 , $profiledata , true );
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-07-25 02:53:46 +00:00
function _contact_detail_for_template ( array $rr )
2018-01-06 02:05:18 +00:00
{
$dir_icon = '' ;
$alt_text = '' ;
2018-07-25 02:53:46 +00:00
2018-01-06 02:05:18 +00:00
switch ( $rr [ 'rel' ]) {
2018-07-25 02:53:46 +00:00
case Contact :: FRIEND :
2015-06-23 08:09:27 +00:00
$dir_icon = 'images/lrarrow.gif' ;
2018-01-21 18:33:59 +00:00
$alt_text = L10n :: t ( 'Mutual Friendship' );
2015-06-23 08:09:27 +00:00
break ;
2018-07-25 02:53:46 +00:00
case Contact :: FOLLOWER ;
2015-06-23 08:09:27 +00:00
$dir_icon = 'images/larrow.gif' ;
2018-01-21 18:33:59 +00:00
$alt_text = L10n :: t ( 'is a fan of yours' );
2015-06-23 08:09:27 +00:00
break ;
2018-07-25 02:53:46 +00:00
case Contact :: SHARING ;
2015-06-23 08:09:27 +00:00
$dir_icon = 'images/rarrow.gif' ;
2018-01-21 18:33:59 +00:00
$alt_text = L10n :: t ( 'you are a fan of' );
2015-06-23 08:09:27 +00:00
break ;
2018-07-25 02:53:46 +00:00
2015-06-23 08:09:27 +00:00
default :
break ;
}
2018-06-02 08:05:06 +00:00
$url = Contact :: magicLink ( $rr [ 'url' ]);
2018-07-25 02:53:46 +00:00
2018-06-02 08:05:06 +00:00
if ( strpos ( $url , 'redir/' ) === 0 ) {
2015-06-23 08:09:27 +00:00
$sparkle = ' class="sparkle" ' ;
2018-01-06 02:05:18 +00:00
} else {
2015-06-23 08:09:27 +00:00
$sparkle = '' ;
}
2015-10-07 06:25:10 +00:00
2018-03-17 06:17:32 +00:00
if ( $rr [ 'self' ]) {
$dir_icon = 'images/larrow.gif' ;
$alt_text = L10n :: t ( 'This is you' );
$url = $rr [ 'url' ];
$sparkle = '' ;
}
2018-01-15 13:05:12 +00:00
return [
2018-01-21 18:33:59 +00:00
'img_hover' => L10n :: t ( 'Visit %s\'s profile [%s]' , $rr [ 'name' ], $rr [ 'url' ]),
'edit_hover' => L10n :: 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 ,
2018-07-31 02:06:22 +00:00
'thumb' => ProxyUtils :: proxifyUrl ( $rr [ 'thumb' ], false , ProxyUtils :: 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-06-13 21:04:07 +00:00
'nick' => htmlentities ( $rr [ 'nick' ]),
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-09-14 16:51:32 +00:00
$poll_enabled = in_array ( $contact [ 'network' ], [ Protocol :: ACTIVITYPUB , Protocol :: DFRN , Protocol :: OSTATUS , Protocol :: FEED , Protocol :: MAIL ]);
2018-01-15 13:05:12 +00:00
$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-08-11 20:40:44 +00:00
if ( $contact [ 'network' ] === Protocol :: DFRN ) {
2018-01-15 13:05:12 +00:00
$contact_actions [ 'suggest' ] = [
2018-01-21 18:33:59 +00:00
'label' => L10n :: t ( 'Suggest friends' ),
2018-01-06 02:05:18 +00:00
'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-21 18:33:59 +00:00
'label' => L10n :: t ( 'Update now' ),
2018-01-06 02:05:18 +00:00
'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-10-06 03:17:44 +00:00
'label' => ( intval ( $contact [ 'blocked' ]) ? L10n :: t ( 'Unblock' ) : L10n :: t ( 'Block' )),
2018-01-06 02:05:18 +00:00
'url' => 'contacts/' . $contact [ 'id' ] . '/block' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: t ( 'Toggle Blocked status' ),
2018-01-06 02:05:18 +00:00
'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-10-06 03:17:44 +00:00
'label' => ( intval ( $contact [ 'readonly' ]) ? L10n :: t ( 'Unignore' ) : L10n :: t ( 'Ignore' )),
2018-01-06 02:05:18 +00:00
'url' => 'contacts/' . $contact [ 'id' ] . '/ignore' ,
2018-01-21 18:33:59 +00:00
'title' => L10n :: t ( 'Toggle Ignored status' ),
2018-01-06 02:05:18 +00:00
'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-08-25 13:48:00 +00:00
if ( $contact [ 'uid' ] != 0 ) {
$contact_actions [ 'archive' ] = [
2018-10-06 03:17:44 +00:00
'label' => ( intval ( $contact [ 'archive' ]) ? L10n :: t ( 'Unarchive' ) : L10n :: t ( 'Archive' )),
2018-08-25 13:48:00 +00:00
'url' => 'contacts/' . $contact [ 'id' ] . '/archive' ,
'title' => L10n :: t ( 'Toggle Archive status' ),
'sel' => ( intval ( $contact [ 'archive' ]) ? 'active' : '' ),
'id' => 'toggle-archive' ,
];
2016-02-08 14:00:53 +00:00
2018-08-25 13:48:00 +00:00
$contact_actions [ 'delete' ] = [
'label' => L10n :: t ( 'Delete' ),
'url' => 'contacts/' . $contact [ 'id' ] . '/drop' ,
'title' => L10n :: t ( 'Delete contact' ),
'sel' => '' ,
'id' => 'delete' ,
];
}
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
}