2010-07-01 23:48:07 +00:00
< ? php
2017-11-15 14:47:28 +00:00
/**
* @ file mod / profiles . php
*/
2018-01-25 02:08:45 +00:00
2017-04-30 04:07:00 +00:00
use Friendica\App ;
2018-01-15 15:15:00 +00:00
use Friendica\Content\ContactSelector ;
2017-12-04 14:04:36 +00:00
use Friendica\Content\Feature ;
2018-01-15 19:51:56 +00:00
use Friendica\Content\Nav ;
2018-01-17 18:42:40 +00:00
use Friendica\Core\Addon ;
2017-11-07 02:22:52 +00:00
use Friendica\Core\Config ;
2018-01-21 18:33:59 +00:00
use Friendica\Core\L10n ;
2017-11-07 02:22:52 +00:00
use Friendica\Core\PConfig ;
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 ;
2018-03-31 03:33:19 +00:00
use Friendica\Model\Contact ;
2017-12-07 14:09:28 +00:00
use Friendica\Model\GContact ;
2018-01-28 11:18:08 +00:00
use Friendica\Model\Item ;
2018-02-03 17:25:58 +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-02-03 17:25:58 +00:00
use Friendica\Util\Temporal ;
2010-07-01 23:48:07 +00:00
2017-01-09 12:14:55 +00:00
function profiles_init ( App $a ) {
2013-01-03 17:47:45 +00:00
2018-01-15 19:51:56 +00:00
Nav :: setSelected ( 'profiles' );
2013-01-03 17:47:45 +00:00
2016-12-20 10:56:34 +00:00
if ( ! local_user ()) {
2013-01-03 17:47:45 +00:00
return ;
}
2017-03-25 12:22:39 +00:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === " drop " ) && intval ( $a -> argv [ 2 ])) {
2013-01-03 17:47:45 +00:00
$r = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1 " ,
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2016-02-17 07:08:28 +00:00
goaway ( 'profiles' );
2013-01-03 17:47:45 +00:00
return ; // NOTREACHED
}
2014-03-09 08:19:14 +00:00
2013-01-03 17:47:45 +00:00
check_form_security_token_redirectOnErr ( '/profiles' , 'profile_drop' , 't' );
// move every contact using this profile as their default to the user default
$r = q ( " UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d " ,
intval ( local_user ()),
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2014-03-09 08:19:14 +00:00
$r = q ( " DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d " ,
2013-01-03 17:47:45 +00:00
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2018-01-22 14:16:25 +00:00
info ( L10n :: t ( 'Profile deleted.' ) . EOL );
2017-03-25 12:22:39 +00:00
}
2013-01-03 17:47:45 +00:00
2016-02-17 07:08:28 +00:00
goaway ( 'profiles' );
2013-01-03 17:47:45 +00:00
return ; // NOTREACHED
}
2017-03-25 12:22:39 +00:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] === 'new' )) {
2014-03-09 08:19:14 +00:00
2013-01-03 17:47:45 +00:00
check_form_security_token_redirectOnErr ( '/profiles' , 'profile_new' , 't' );
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
intval ( local_user ()));
2017-03-25 12:22:39 +00:00
2017-11-08 03:57:46 +00:00
$num_profiles = ( DBM :: is_result ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 17:47:45 +00:00
2018-01-22 14:16:25 +00:00
$name = L10n :: t ( 'Profile-' ) . ( $num_profiles + 1 );
2013-01-03 17:47:45 +00:00
$r1 = q ( " SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1 " ,
intval ( local_user ()));
2014-03-09 08:19:14 +00:00
2013-01-03 17:47:45 +00:00
$r2 = q ( " INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
VALUES ( % d , '%s' , '%s' , '%s' , '%s' ) " ,
intval ( local_user ()),
dbesc ( $name ),
dbesc ( $r1 [ 0 ][ 'name' ]),
dbesc ( $r1 [ 0 ][ 'photo' ]),
dbesc ( $r1 [ 0 ][ 'thumb' ])
);
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
intval ( local_user ()),
dbesc ( $name )
);
2018-01-21 18:33:59 +00:00
info ( L10n :: t ( 'New profile created.' ) . EOL );
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r3 ) && count ( $r3 ) == 1 ) {
2017-03-25 12:22:39 +00:00
goaway ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
}
2014-03-09 08:19:14 +00:00
2016-02-17 07:08:28 +00:00
goaway ( 'profiles' );
2014-03-11 22:52:32 +00:00
}
2013-01-03 17:47:45 +00:00
2017-03-25 12:22:39 +00:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === 'clone' )) {
2014-03-09 08:19:14 +00:00
2013-01-03 17:47:45 +00:00
check_form_security_token_redirectOnErr ( '/profiles' , 'profile_clone' , 't' );
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
intval ( local_user ()));
2017-03-25 12:22:39 +00:00
2017-11-08 03:57:46 +00:00
$num_profiles = ( DBM :: is_result ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 17:47:45 +00:00
2018-01-22 14:16:25 +00:00
$name = L10n :: t ( 'Profile-' ) . ( $num_profiles + 1 );
2013-01-03 17:47:45 +00:00
$r1 = q ( " SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
intval ( local_user ()),
intval ( $a -> argv [ 2 ])
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r1 )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile unavailable to clone.' ) . EOL );
2013-01-03 17:47:45 +00:00
killme ();
return ;
}
unset ( $r1 [ 0 ][ 'id' ]);
$r1 [ 0 ][ 'is-default' ] = 0 ;
2014-03-11 22:52:32 +00:00
$r1 [ 0 ][ 'publish' ] = 0 ;
$r1 [ 0 ][ 'net-publish' ] = 0 ;
2013-01-03 17:47:45 +00:00
$r1 [ 0 ][ 'profile-name' ] = dbesc ( $name );
2017-09-15 19:41:30 +00:00
dba :: insert ( 'profile' , $r1 [ 0 ]);
2013-01-03 17:47:45 +00:00
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
intval ( local_user ()),
dbesc ( $name )
);
2018-01-21 18:33:59 +00:00
info ( L10n :: t ( 'New profile created.' ) . EOL );
2017-11-08 03:57:46 +00:00
if (( DBM :: is_result ( $r3 )) && ( count ( $r3 ) == 1 )) {
2016-02-17 07:08:28 +00:00
goaway ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
2017-03-25 12:22:39 +00:00
}
2014-03-09 08:19:14 +00:00
2016-02-17 07:08:28 +00:00
goaway ( 'profiles' );
2014-03-09 08:19:14 +00:00
2013-01-03 17:47:45 +00:00
return ; // NOTREACHED
}
2017-03-25 12:22:39 +00:00
if (( $a -> argc > 1 ) && ( intval ( $a -> argv [ 1 ]))) {
2013-01-03 17:47:45 +00:00
$r = q ( " SELECT id FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $a -> argv [ 1 ]),
intval ( local_user ())
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2013-01-03 17:47:45 +00:00
killme ();
return ;
}
2018-01-15 02:22:39 +00:00
Profile :: load ( $a , $a -> user [ 'nickname' ], $r [ 0 ][ 'id' ]);
2013-01-03 17:47:45 +00:00
}
2015-01-09 23:34:08 +00:00
2016-02-07 14:11:34 +00:00
2013-01-03 17:47:45 +00:00
}
2015-01-25 12:19:37 +00:00
function profile_clean_keywords ( $keywords ) {
2017-03-25 12:22:39 +00:00
$keywords = str_replace ( " , " , " " , $keywords );
2015-01-25 12:19:37 +00:00
$keywords = explode ( " " , $keywords );
2018-01-15 13:05:12 +00:00
$cleaned = [];
2015-01-25 12:19:37 +00:00
foreach ( $keywords as $keyword ) {
$keyword = trim ( strtolower ( $keyword ));
2015-01-26 00:07:15 +00:00
$keyword = trim ( $keyword , " # " );
2017-03-25 12:22:39 +00:00
if ( $keyword != " " ) {
2015-01-25 12:19:37 +00:00
$cleaned [] = $keyword ;
2017-03-25 12:22:39 +00:00
}
2015-01-25 12:19:37 +00:00
}
$keywords = implode ( " , " , $cleaned );
return $keywords ;
}
2017-01-09 12:14:55 +00:00
function profiles_post ( App $a ) {
2010-07-01 23:48:07 +00:00
2016-12-20 10:56:34 +00:00
if ( ! local_user ()) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-08-09 04:03:08 +00:00
$namechanged = false ;
2018-01-17 18:42:40 +00:00
Addon :: callHooks ( 'profile_post' , $_POST );
2011-01-20 23:30:45 +00:00
2017-03-24 21:33:57 +00:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] !== " new " ) && intval ( $a -> argv [ 1 ])) {
2010-08-09 04:03:08 +00:00
$orig = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2010-07-01 23:48:07 +00:00
intval ( $a -> argv [ 1 ]),
2010-11-25 00:35:35 +00:00
intval ( local_user ())
2010-07-01 23:48:07 +00:00
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $orig )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2014-03-09 08:19:14 +00:00
2012-03-12 20:17:37 +00:00
check_form_security_token_redirectOnErr ( '/profiles' , 'profile_edit' );
2014-03-11 22:52:32 +00:00
2010-08-09 04:03:08 +00:00
$is_default = (( $orig [ 0 ][ 'is-default' ]) ? 1 : 0 );
2010-07-01 23:48:07 +00:00
$profile_name = notags ( trim ( $_POST [ 'profile_name' ]));
2017-03-24 21:33:57 +00:00
if ( ! strlen ( $profile_name )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile Name is required.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2014-03-11 22:52:32 +00:00
2018-01-23 22:51:30 +00:00
$dob = $_POST [ 'dob' ] ? escape_tags ( trim ( $_POST [ 'dob' ])) : '0000-00-00' ;
2015-01-09 23:34:08 +00:00
2017-03-25 12:18:28 +00:00
$y = substr ( $dob , 0 , 4 );
2017-03-24 21:33:57 +00:00
if (( ! ctype_digit ( $y )) || ( $y < 1900 )) {
2015-05-22 16:53:18 +00:00
$ignore_year = true ;
2017-03-24 21:33:57 +00:00
} else {
2015-05-22 16:53:18 +00:00
$ignore_year = false ;
2017-03-24 21:33:57 +00:00
}
2018-01-15 13:05:12 +00:00
if ( ! in_array ( $dob , [ '0000-00-00' , '0001-01-01' ])) {
2017-04-11 21:00:45 +00:00
if ( strpos ( $dob , '0000-' ) === 0 || strpos ( $dob , '0001-' ) === 0 ) {
2015-05-22 16:53:18 +00:00
$ignore_year = true ;
2017-03-24 21:33:57 +00:00
$dob = substr ( $dob , 5 );
2015-05-22 16:53:18 +00:00
}
2017-03-24 21:33:57 +00:00
if ( $ignore_year ) {
2018-01-27 02:38:34 +00:00
$dob = '0000-' . DateTimeFormat :: utc ( '1900-' . $dob , 'm-d' );
2018-01-26 12:29:32 +00:00
} else {
2018-01-27 02:38:34 +00:00
$dob = DateTimeFormat :: utc ( $dob , 'Y-m-d' );
2017-03-24 21:33:57 +00:00
}
2015-05-22 16:53:18 +00:00
}
2015-10-25 08:15:36 +00:00
2010-07-01 23:48:07 +00:00
$name = notags ( trim ( $_POST [ 'name' ]));
2010-08-09 04:03:08 +00:00
2017-03-25 12:22:39 +00:00
if ( ! strlen ( $name )) {
2012-08-19 21:39:43 +00:00
$name = '[No Name]' ;
}
2017-03-24 21:33:57 +00:00
if ( $orig [ 0 ][ 'name' ] != $name ) {
2010-08-09 04:03:08 +00:00
$namechanged = true ;
2017-03-24 21:33:57 +00:00
}
2012-08-19 21:39:43 +00:00
2011-01-19 03:25:28 +00:00
$pdesc = notags ( trim ( $_POST [ 'pdesc' ]));
2010-07-01 23:48:07 +00:00
$gender = notags ( trim ( $_POST [ 'gender' ]));
$address = notags ( trim ( $_POST [ 'address' ]));
$locality = notags ( trim ( $_POST [ 'locality' ]));
$region = notags ( trim ( $_POST [ 'region' ]));
$postal_code = notags ( trim ( $_POST [ 'postal_code' ]));
$country_name = notags ( trim ( $_POST [ 'country_name' ]));
2015-01-25 12:19:37 +00:00
$pub_keywords = profile_clean_keywords ( notags ( trim ( $_POST [ 'pub_keywords' ])));
$prv_keywords = profile_clean_keywords ( notags ( trim ( $_POST [ 'prv_keywords' ])));
2010-08-19 12:29:43 +00:00
$marital = notags ( trim ( $_POST [ 'marital' ]));
2012-06-02 09:30:26 +00:00
$howlong = notags ( trim ( $_POST [ 'howlong' ]));
2010-08-10 05:58:58 +00:00
2010-12-04 06:46:42 +00:00
$with = (( x ( $_POST , 'with' )) ? notags ( trim ( $_POST [ 'with' ])) : '' );
2017-03-25 12:18:28 +00:00
if ( ! strlen ( $howlong )) {
2017-02-27 23:37:15 +00:00
$howlong = NULL_DATE ;
2017-03-19 08:04:04 +00:00
} else {
2018-01-27 02:38:34 +00:00
$howlong = DateTimeFormat :: convert ( $howlong , 'UTC' , date_default_timezone_get ());
2017-03-19 08:04:04 +00:00
}
2010-12-04 06:46:42 +00:00
// linkify the relationship target if applicable
2012-04-13 04:58:15 +00:00
$withchanged = false ;
2017-03-24 21:33:57 +00:00
if ( strlen ( $with )) {
if ( $with != strip_tags ( $orig [ 0 ][ 'with' ])) {
2012-04-13 04:58:15 +00:00
$withchanged = true ;
2010-12-04 06:46:42 +00:00
$prf = '' ;
$lookup = $with ;
2017-03-25 12:18:28 +00:00
if ( strpos ( $lookup , '@' ) === 0 ) {
2017-03-24 21:33:57 +00:00
$lookup = substr ( $lookup , 1 );
}
2011-02-25 20:12:25 +00:00
$lookup = str_replace ( '_' , ' ' , $lookup );
2017-03-24 21:33:57 +00:00
if ( strpos ( $lookup , '@' ) || ( strpos ( $lookup , 'http://' ))) {
2010-12-04 06:46:42 +00:00
$newname = $lookup ;
2016-07-09 18:09:09 +00:00
$links = @ Probe :: lrdd ( $lookup );
2017-03-24 21:33:57 +00:00
if ( count ( $links )) {
foreach ( $links as $link ) {
if ( $link [ '@attributes' ][ 'rel' ] === 'http://webfinger.net/rel/profile-page' ) {
2016-06-10 09:24:38 +00:00
$prf = $link [ '@attributes' ][ 'href' ];
2010-12-04 06:46:42 +00:00
}
}
}
2017-03-23 22:05:53 +00:00
} else {
2010-12-04 06:46:42 +00:00
$newname = $lookup ;
2014-03-09 08:19:14 +00:00
2012-09-29 23:55:40 +00:00
$r = q ( " SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $newname ),
intval ( local_user ())
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2012-09-29 23:55:40 +00:00
$r = q ( " SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $lookup ),
intval ( local_user ())
);
2010-12-04 06:46:42 +00:00
}
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2010-12-04 06:46:42 +00:00
$prf = $r [ 0 ][ 'url' ];
$newname = $r [ 0 ][ 'name' ];
}
}
2015-01-09 23:34:08 +00:00
2017-03-23 22:05:53 +00:00
if ( $prf ) {
2017-03-24 21:33:57 +00:00
$with = str_replace ( $lookup , '<a href="' . $prf . '">' . $newname . '</a>' , $with );
if ( strpos ( $with , '@' ) === 0 ) {
2017-03-23 22:05:53 +00:00
$with = substr ( $with , 1 );
}
2010-12-04 06:46:42 +00:00
}
2017-03-24 21:33:57 +00:00
} else {
2010-12-04 06:46:42 +00:00
$with = $orig [ 0 ][ 'with' ];
2017-03-24 21:33:57 +00:00
}
2010-12-04 06:46:42 +00:00
}
2017-03-24 21:33:57 +00:00
/// @TODO Not flexible enough for later expansion, let's have more OOP here
2010-07-10 23:47:10 +00:00
$sexual = notags ( trim ( $_POST [ 'sexual' ]));
2016-09-25 15:28:00 +00:00
$xmpp = notags ( trim ( $_POST [ 'xmpp' ]));
2010-07-01 23:48:07 +00:00
$homepage = notags ( trim ( $_POST [ 'homepage' ]));
2014-06-22 07:44:59 +00:00
if (( strpos ( $homepage , 'http' ) !== 0 ) && ( strlen ( $homepage ))) {
2016-06-10 09:24:38 +00:00
// neither http nor https in URL, add them
$homepage = 'http://' . $homepage ;
2014-01-12 08:16:46 +00:00
}
2012-06-03 03:58:20 +00:00
$hometown = notags ( trim ( $_POST [ 'hometown' ]));
2010-07-10 23:47:10 +00:00
$politic = notags ( trim ( $_POST [ 'politic' ]));
$religion = notags ( trim ( $_POST [ 'religion' ]));
2017-01-27 03:57:53 +00:00
$likes = escape_tags ( trim ( $_POST [ 'likes' ]));
$dislikes = escape_tags ( trim ( $_POST [ 'dislikes' ]));
$about = escape_tags ( trim ( $_POST [ 'about' ]));
$interest = escape_tags ( trim ( $_POST [ 'interest' ]));
$contact = escape_tags ( trim ( $_POST [ 'contact' ]));
$music = escape_tags ( trim ( $_POST [ 'music' ]));
$book = escape_tags ( trim ( $_POST [ 'book' ]));
$tv = escape_tags ( trim ( $_POST [ 'tv' ]));
$film = escape_tags ( trim ( $_POST [ 'film' ]));
$romance = escape_tags ( trim ( $_POST [ 'romance' ]));
$work = escape_tags ( trim ( $_POST [ 'work' ]));
$education = escape_tags ( trim ( $_POST [ 'education' ]));
2012-04-10 23:31:49 +00:00
2010-08-20 05:04:18 +00:00
$hide_friends = (( $_POST [ 'hide-friends' ] == 1 ) ? 1 : 0 );
2010-07-01 23:48:07 +00:00
2017-11-07 02:22:52 +00:00
PConfig :: set ( local_user (), 'system' , 'detailled_profile' , (( $_POST [ 'detailled_profile' ] == 1 ) ? 1 : 0 ));
2012-04-13 04:10:32 +00:00
2018-01-15 13:05:12 +00:00
$changes = [];
2012-04-29 08:42:48 +00:00
$value = '' ;
2017-03-23 22:05:53 +00:00
if ( $is_default ) {
if ( $marital != $orig [ 0 ][ 'marital' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = '[color=#ff0000]♥[/color] ' . L10n :: t ( 'Marital Status' );
2012-04-29 08:42:48 +00:00
$value = $marital ;
}
2017-03-23 22:05:53 +00:00
if ( $withchanged ) {
2018-01-22 14:16:25 +00:00
$changes [] = '[color=#ff0000]♥[/color] ' . L10n :: t ( 'Romantic Partner' );
2012-04-29 08:42:48 +00:00
$value = strip_tags ( $with );
2012-06-25 04:16:55 +00:00
}
2017-03-23 22:05:53 +00:00
if ( $likes != $orig [ 0 ][ 'likes' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Likes' );
2012-06-25 04:16:55 +00:00
$value = $likes ;
}
2017-03-23 22:05:53 +00:00
if ( $dislikes != $orig [ 0 ][ 'dislikes' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Dislikes' );
2012-06-25 04:16:55 +00:00
$value = $dislikes ;
}
2017-03-23 22:05:53 +00:00
if ( $work != $orig [ 0 ][ 'work' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Work/Employment' );
2012-04-29 08:42:48 +00:00
}
2017-03-23 22:05:53 +00:00
if ( $religion != $orig [ 0 ][ 'religion' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Religion' );
2012-04-29 08:42:48 +00:00
$value = $religion ;
}
2017-03-23 22:05:53 +00:00
if ( $politic != $orig [ 0 ][ 'politic' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Political Views' );
2012-04-29 08:42:48 +00:00
$value = $politic ;
}
2017-03-23 22:05:53 +00:00
if ( $gender != $orig [ 0 ][ 'gender' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Gender' );
2012-04-29 08:42:48 +00:00
$value = $gender ;
}
2017-03-23 22:05:53 +00:00
if ( $sexual != $orig [ 0 ][ 'sexual' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Sexual Preference' );
2012-04-29 08:42:48 +00:00
$value = $sexual ;
}
2017-03-23 22:05:53 +00:00
if ( $xmpp != $orig [ 0 ][ 'xmpp' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'XMPP' );
2016-09-25 15:28:00 +00:00
$value = $xmpp ;
}
2017-03-23 22:05:53 +00:00
if ( $homepage != $orig [ 0 ][ 'homepage' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Homepage' );
2012-04-29 08:42:48 +00:00
$value = $homepage ;
}
2017-03-23 22:05:53 +00:00
if ( $interest != $orig [ 0 ][ 'interest' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Interests' );
2012-04-29 08:42:48 +00:00
$value = $interest ;
}
2017-03-23 22:05:53 +00:00
if ( $address != $orig [ 0 ][ 'address' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Address' );
2012-05-25 22:56:18 +00:00
// New address not sent in notifications, potential privacy issues
// in case this leaks to unintended recipients. Yes, it's in the public
// profile but that doesn't mean we have to broadcast it to everybody.
}
2017-03-23 22:05:53 +00:00
if ( $locality != $orig [ 0 ][ 'locality' ] || $region != $orig [ 0 ][ 'region' ]
2012-04-29 08:49:54 +00:00
|| $country_name != $orig [ 0 ][ 'country-name' ]) {
2018-01-22 14:16:25 +00:00
$changes [] = L10n :: t ( 'Location' );
2012-05-25 22:56:18 +00:00
$comma1 = ((( $locality ) && ( $region || $country_name )) ? ', ' : ' ' );
$comma2 = (( $region && $country_name ) ? ', ' : '' );
$value = $locality . $comma1 . $region . $comma2 . $country_name ;
2012-04-29 08:42:48 +00:00
}
2012-04-13 04:10:32 +00:00
2012-04-29 08:42:48 +00:00
profile_activity ( $changes , $value );
2012-04-13 04:10:32 +00:00
2014-03-09 08:19:14 +00:00
}
$r = q ( " UPDATE `profile`
2010-07-01 23:48:07 +00:00
SET `profile-name` = '%s' ,
`name` = '%s' ,
2011-01-19 03:25:28 +00:00
`pdesc` = '%s' ,
2010-07-01 23:48:07 +00:00
`gender` = '%s' ,
2010-07-10 23:47:10 +00:00
`dob` = '%s' ,
2010-07-01 23:48:07 +00:00
`address` = '%s' ,
`locality` = '%s' ,
`region` = '%s' ,
`postal-code` = '%s' ,
`country-name` = '%s' ,
`marital` = '%s' ,
2010-12-04 06:46:42 +00:00
`with` = '%s' ,
2012-06-02 09:30:26 +00:00
`howlong` = '%s' ,
2010-07-10 23:47:10 +00:00
`sexual` = '%s' ,
2016-09-25 15:28:00 +00:00
`xmpp` = '%s' ,
2010-07-01 23:48:07 +00:00
`homepage` = '%s' ,
2012-06-03 03:58:20 +00:00
`hometown` = '%s' ,
2010-07-10 23:47:10 +00:00
`politic` = '%s' ,
`religion` = '%s' ,
2011-03-14 07:28:49 +00:00
`pub_keywords` = '%s' ,
`prv_keywords` = '%s' ,
2012-06-25 04:16:55 +00:00
`likes` = '%s' ,
`dislikes` = '%s' ,
2010-07-10 23:47:10 +00:00
`about` = '%s' ,
`interest` = '%s' ,
`contact` = '%s' ,
`music` = '%s' ,
`book` = '%s' ,
`tv` = '%s' ,
`film` = '%s' ,
`romance` = '%s' ,
`work` = '%s' ,
2010-08-20 05:04:18 +00:00
`education` = '%s' ,
2011-06-19 23:47:03 +00:00
`hide-friends` = % d
2014-03-09 08:19:14 +00:00
WHERE `id` = % d AND `uid` = % d " ,
2010-07-01 23:48:07 +00:00
dbesc ( $profile_name ),
dbesc ( $name ),
2011-01-19 03:25:28 +00:00
dbesc ( $pdesc ),
2010-07-01 23:48:07 +00:00
dbesc ( $gender ),
2010-07-10 23:47:10 +00:00
dbesc ( $dob ),
2010-07-01 23:48:07 +00:00
dbesc ( $address ),
dbesc ( $locality ),
dbesc ( $region ),
dbesc ( $postal_code ),
dbesc ( $country_name ),
dbesc ( $marital ),
2010-12-04 06:46:42 +00:00
dbesc ( $with ),
2012-06-02 09:30:26 +00:00
dbesc ( $howlong ),
2010-07-10 23:47:10 +00:00
dbesc ( $sexual ),
2016-09-25 15:28:00 +00:00
dbesc ( $xmpp ),
2010-07-01 23:48:07 +00:00
dbesc ( $homepage ),
2012-06-03 03:58:20 +00:00
dbesc ( $hometown ),
2010-07-10 23:47:10 +00:00
dbesc ( $politic ),
dbesc ( $religion ),
2011-03-14 07:28:49 +00:00
dbesc ( $pub_keywords ),
dbesc ( $prv_keywords ),
2012-06-25 04:16:55 +00:00
dbesc ( $likes ),
dbesc ( $dislikes ),
2010-07-01 23:48:07 +00:00
dbesc ( $about ),
2010-07-10 23:47:10 +00:00
dbesc ( $interest ),
dbesc ( $contact ),
dbesc ( $music ),
dbesc ( $book ),
dbesc ( $tv ),
dbesc ( $film ),
dbesc ( $romance ),
dbesc ( $work ),
dbesc ( $education ),
2010-08-20 05:04:18 +00:00
intval ( $hide_friends ),
2010-07-01 23:48:07 +00:00
intval ( $a -> argv [ 1 ]),
2012-04-13 04:10:32 +00:00
intval ( local_user ())
2010-07-01 23:48:07 +00:00
);
2017-03-23 22:05:53 +00:00
if ( $r ) {
2018-01-22 14:16:25 +00:00
info ( L10n :: t ( 'Profile updated.' ) . EOL );
2017-03-23 22:05:53 +00:00
}
2010-07-09 10:10:28 +00:00
2017-03-23 22:05:53 +00:00
if ( $is_default ) {
2018-03-24 06:15:18 +00:00
if ( $namechanged ) {
$r = q ( " UPDATE `user` set `username` = '%s' where `uid` = %d " ,
dbesc ( $name ),
intval ( local_user ())
);
}
Contact :: updateSelfFromUserID ( local_user ());
2015-01-09 23:34:08 +00:00
2010-08-19 11:59:31 +00:00
// Update global directory in background
$url = $_SESSION [ 'my_url' ];
2017-11-07 02:22:52 +00:00
if ( $url && strlen ( Config :: get ( 'system' , 'directory' ))) {
2017-11-18 07:59:30 +00:00
Worker :: add ( PRIORITY_LOW , " Directory " , $url );
2016-12-20 10:36:03 +00:00
}
2011-10-20 12:43:33 +00:00
2017-11-19 16:59:37 +00:00
Worker :: add ( PRIORITY_LOW , 'ProfileUpdate' , local_user ());
2016-05-05 13:08:05 +00:00
// Update the global contact for the user
2017-12-07 14:09:28 +00:00
GContact :: updateForUser ( local_user ());
2010-08-19 11:59:31 +00:00
}
2010-07-01 23:48:07 +00:00
}
}
2016-02-07 14:11:34 +00:00
2012-04-29 08:42:48 +00:00
function profile_activity ( $changed , $value ) {
2012-04-13 04:10:32 +00:00
$a = get_app ();
2017-03-23 22:05:53 +00:00
if ( ! local_user () || ! is_array ( $changed ) || ! count ( $changed )) {
2012-04-13 04:10:32 +00:00
return ;
2017-03-23 22:05:53 +00:00
}
2012-04-13 04:10:32 +00:00
2017-11-07 02:22:52 +00:00
if ( $a -> user [ 'hidewall' ] || Config :: get ( 'system' , 'block_public' )) {
2012-04-13 04:10:32 +00:00
return ;
2017-03-23 22:05:53 +00:00
}
2012-04-13 04:10:32 +00:00
2017-11-07 02:22:52 +00:00
if ( ! PConfig :: get ( local_user (), 'system' , 'post_profilechange' )) {
2012-04-13 04:10:32 +00:00
return ;
2017-03-23 22:05:53 +00:00
}
2012-04-13 04:10:32 +00:00
2017-05-07 18:40:23 +00:00
require_once 'include/items.php' ;
2012-04-13 04:10:32 +00:00
$self = q ( " SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1 " ,
intval ( local_user ())
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $self )) {
2012-04-13 04:10:32 +00:00
return ;
2017-03-23 22:05:53 +00:00
}
2012-04-13 04:10:32 +00:00
2018-01-15 13:05:12 +00:00
$arr = [];
2016-03-20 14:01:50 +00:00
$arr [ 'guid' ] = get_guid ( 32 );
2015-10-25 08:15:36 +00:00
$arr [ 'uri' ] = $arr [ 'parent-uri' ] = item_new_uri ( $a -> get_hostname (), local_user ());
2012-04-13 04:10:32 +00:00
$arr [ 'uid' ] = local_user ();
$arr [ 'contact-id' ] = $self [ 0 ][ 'id' ];
$arr [ 'wall' ] = 1 ;
$arr [ 'type' ] = 'wall' ;
$arr [ 'gravity' ] = 0 ;
$arr [ 'origin' ] = 1 ;
$arr [ 'author-name' ] = $arr [ 'owner-name' ] = $self [ 0 ][ 'name' ];
$arr [ 'author-link' ] = $arr [ 'owner-link' ] = $self [ 0 ][ 'url' ];
$arr [ 'author-avatar' ] = $arr [ 'owner-avatar' ] = $self [ 0 ][ 'thumb' ];
$arr [ 'verb' ] = ACTIVITY_UPDATE ;
$arr [ 'object-type' ] = ACTIVITY_OBJ_PROFILE ;
2015-10-25 08:15:36 +00:00
2012-04-13 04:10:32 +00:00
$A = '[url=' . $self [ 0 ][ 'url' ] . ']' . $self [ 0 ][ 'name' ] . '[/url]' ;
$changes = '' ;
$t = count ( $changed );
$z = 0 ;
2017-03-23 22:05:53 +00:00
foreach ( $changed as $ch ) {
if ( strlen ( $changes )) {
if ( $z == ( $t - 1 )) {
2018-01-22 14:16:25 +00:00
$changes .= L10n :: t ( ' and ' );
2017-03-23 22:05:53 +00:00
} else {
2012-04-13 04:10:32 +00:00
$changes .= ', ' ;
2017-03-23 22:05:53 +00:00
}
2012-04-13 04:10:32 +00:00
}
$z ++ ;
$changes .= $ch ;
}
2018-01-22 14:16:25 +00:00
$prof = '[url=' . $self [ 0 ][ 'url' ] . '?tab=profile' . ']' . L10n :: t ( 'public profile' ) . '[/url]' ;
2012-04-13 04:10:32 +00:00
2017-03-23 22:05:53 +00:00
if ( $t == 1 && strlen ( $value )) {
2018-01-24 02:59:16 +00:00
$message = L10n :: t ( '%1$s changed %2$s to “%3$s”' , $A , $changes , $value );
$message .= " \n \n " . L10n :: t ( ' - Visit %1$s\'s %2$s' , $A , $prof );
2017-03-23 22:05:53 +00:00
} else {
2018-01-24 02:59:16 +00:00
$message = L10n :: t ( '%1$s has an updated %2$s, changing %3$s.' , $A , $prof , $changes );
2017-03-23 22:05:53 +00:00
}
2012-04-29 08:42:48 +00:00
2015-10-25 08:15:36 +00:00
$arr [ 'body' ] = $message ;
2012-04-13 04:10:32 +00:00
$arr [ 'object' ] = '<object><type>' . ACTIVITY_OBJ_PROFILE . '</type><title>' . $self [ 0 ][ 'name' ] . '</title>'
. '<id>' . $self [ 0 ][ 'url' ] . '/' . $self [ 0 ][ 'name' ] . '</id>' ;
2012-04-13 04:38:40 +00:00
$arr [ 'object' ] .= '<link>' . xmlify ( '<link rel="alternate" type="text/html" href="' . $self [ 0 ][ 'url' ] . '?tab=profile' . '" />' . " \n " );
2012-04-13 04:10:32 +00:00
$arr [ 'object' ] .= xmlify ( '<link rel="photo" type="image/jpeg" href="' . $self [ 0 ][ 'thumb' ] . '" />' . " \n " );
$arr [ 'object' ] .= '</link></object>' . " \n " ;
$arr [ 'allow_cid' ] = $a -> user [ 'allow_cid' ];
$arr [ 'allow_gid' ] = $a -> user [ 'allow_gid' ];
$arr [ 'deny_cid' ] = $a -> user [ 'deny_cid' ];
$arr [ 'deny_gid' ] = $a -> user [ 'deny_gid' ];
2018-01-28 11:18:08 +00:00
$i = Item :: insert ( $arr );
2016-12-20 10:56:34 +00:00
if ( $i ) {
2017-11-19 18:59:55 +00:00
Worker :: add ( PRIORITY_HIGH , " Notifier " , " activity " , $i );
2016-12-20 10:56:34 +00:00
}
2012-04-13 04:10:32 +00:00
}
2010-07-01 23:48:07 +00:00
2016-02-07 14:11:34 +00:00
2017-01-09 12:14:55 +00:00
function profiles_content ( App $a ) {
2011-01-19 03:25:28 +00:00
2016-12-20 10:56:34 +00:00
if ( ! local_user ()) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2013-01-12 12:58:54 +00:00
return ;
}
2010-10-31 23:38:22 +00:00
$o = '' ;
2010-07-09 23:28:50 +00:00
2017-03-23 22:05:53 +00:00
if (( $a -> argc > 1 ) && ( intval ( $a -> argv [ 1 ]))) {
2010-07-01 23:48:07 +00:00
$r = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $a -> argv [ 1 ]),
2010-11-25 00:35:35 +00:00
intval ( local_user ())
2010-07-01 23:48:07 +00:00
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 18:33:59 +00:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2018-01-15 13:05:12 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( get_markup_template ( 'profed_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 ( 'profed_end.tpl' ), [
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2018-01-15 13:05:12 +00:00
]);
2012-04-11 01:08:06 +00:00
2011-05-11 11:37:13 +00:00
$opt_tpl = get_markup_template ( " profile-hide-friends.tpl " );
2018-01-15 13:05:12 +00:00
$hide_friends = replace_macros ( $opt_tpl ,[
'$yesno' => [
2014-06-27 16:12:15 +00:00
'hide-friends' , //Name
2018-01-22 14:16:25 +00:00
L10n :: t ( 'Hide contacts and friends:' ), //Label
2014-06-27 16:12:15 +00:00
!! $r [ 0 ][ 'hide-friends' ], //Value
'' , //Help string
2018-01-22 14:16:25 +00:00
[ L10n :: t ( 'No' ), L10n :: t ( 'Yes' )] //Off - On strings
2018-01-15 13:05:12 +00:00
],
2018-01-22 14:16:25 +00:00
'$desc' => L10n :: t ( 'Hide your contact/friend list from viewers of this profile?' ),
'$yes_str' => L10n :: t ( 'Yes' ),
'$no_str' => L10n :: t ( 'No' ),
2010-07-11 09:52:47 +00:00
'$yes_selected' => (( $r [ 0 ][ 'hide-friends' ]) ? " checked= \" checked \" " : " " ),
'$no_selected' => (( $r [ 0 ][ 'hide-friends' ] == 0 ) ? " checked= \" checked \" " : " " )
2018-01-15 13:05:12 +00:00
]);
2010-07-11 09:52:47 +00:00
2015-10-25 08:15:36 +00:00
$personal_account = ! ( in_array ( $a -> user [ " page-flags " ],
2018-01-15 13:05:12 +00:00
[ PAGE_COMMUNITY , PAGE_PRVGROUP ]));
2012-04-11 01:08:06 +00:00
2017-11-07 02:22:52 +00:00
$detailled_profile = ( PConfig :: get ( local_user (), 'system' , 'detailled_profile' ) AND $personal_account );
2012-04-11 01:08:06 +00:00
2010-07-01 23:48:07 +00:00
$is_default = (( $r [ 0 ][ 'is-default' ]) ? 1 : 0 );
2011-05-11 11:37:13 +00:00
$tpl = get_markup_template ( " profile_edit.tpl " );
2018-01-15 13:05:12 +00:00
$o .= replace_macros ( $tpl , [
2015-10-25 08:15:36 +00:00
'$personal_account' => $personal_account ,
'$detailled_profile' => $detailled_profile ,
2018-01-15 13:05:12 +00:00
'$details' => [
2016-06-10 09:24:38 +00:00
'detailled_profile' , //Name
2018-01-22 14:16:25 +00:00
L10n :: t ( 'Show more profile fields:' ), //Label
2016-06-10 09:24:38 +00:00
$detailled_profile , //Value
'' , //Help string
2018-01-22 14:16:25 +00:00
[ L10n :: t ( 'No' ), L10n :: t ( 'Yes' )] //Off - On strings
2018-01-15 13:05:12 +00:00
],
2016-06-10 09:24:38 +00:00
2017-12-04 14:01:27 +00:00
'$multi_profiles' => Feature :: isEnabled ( local_user (), 'multi_profiles' ),
2016-06-10 09:24:38 +00:00
'$form_security_token' => get_form_security_token ( " profile_edit " ),
'$form_security_token_photo' => get_form_security_token ( " profile_photo " ),
2017-12-04 14:01:27 +00:00
'$profile_clone_link' => (( Feature :: isEnabled ( local_user (), 'multi_profiles' )) ? 'profiles/clone/' . $r [ 0 ][ 'id' ] . '?t=' . get_form_security_token ( " profile_clone " ) : " " ),
2016-06-10 09:24:38 +00:00
'$profile_drop_link' => 'profiles/drop/' . $r [ 0 ][ 'id' ] . '?t=' . get_form_security_token ( " profile_drop " ),
2018-01-22 14:16:25 +00:00
'$profile_action' => L10n :: t ( 'Profile Actions' ),
'$banner' => L10n :: t ( 'Edit Profile Details' ),
'$submit' => L10n :: t ( 'Submit' ),
'$profpic' => L10n :: t ( 'Change Profile Photo' ),
'$viewprof' => L10n :: t ( 'View this profile' ),
'$editvis' => L10n :: t ( 'Edit visibility' ),
'$cr_prof' => L10n :: t ( 'Create a new profile using these settings' ),
'$cl_prof' => L10n :: t ( 'Clone this profile' ),
'$del_prof' => L10n :: t ( 'Delete this profile' ),
'$lbl_basic_section' => L10n :: t ( 'Basic information' ),
'$lbl_picture_section' => L10n :: t ( 'Profile picture' ),
'$lbl_location_section' => L10n :: t ( 'Location' ),
'$lbl_preferences_section' => L10n :: t ( 'Preferences' ),
'$lbl_status_section' => L10n :: t ( 'Status information' ),
'$lbl_about_section' => L10n :: t ( 'Additional information' ),
'$lbl_interests_section' => L10n :: t ( 'Interests' ),
'$lbl_personal_section' => L10n :: t ( 'Personal' ),
'$lbl_relation_section' => L10n :: t ( 'Relation' ),
'$lbl_miscellaneous_section' => L10n :: t ( 'Miscellaneous' ),
'$lbl_profile_photo' => L10n :: t ( 'Upload Profile Photo' ),
'$lbl_gender' => L10n :: t ( 'Your Gender:' ),
'$lbl_marital' => L10n :: t ( '<span class="heart">♥</span> Marital Status:' ),
'$lbl_sexual' => L10n :: t ( 'Sexual Preference:' ),
'$lbl_ex2' => L10n :: t ( 'Example: fishing photography software' ),
2016-06-10 09:24:38 +00:00
2010-07-20 02:09:58 +00:00
'$disabled' => (( $is_default ) ? 'onclick="return false;" style="color: #BBBBFF;"' : '' ),
2017-08-26 07:32:10 +00:00
'$baseurl' => System :: baseUrl ( true ),
2010-07-01 23:48:07 +00:00
'$profile_id' => $r [ 0 ][ 'id' ],
2018-01-22 14:16:25 +00:00
'$profile_name' => [ 'profile_name' , L10n :: t ( 'Profile Name:' ), $r [ 0 ][ 'profile-name' ], L10n :: t ( 'Required' ), '*' ],
2016-06-10 09:24:38 +00:00
'$is_default' => $is_default ,
2018-01-22 14:16:25 +00:00
'$default' => (( $is_default ) ? '<p id="profile-edit-default-desc">' . L10n :: t ( 'This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.' ) . '</p>' : " " ),
'$name' => [ 'name' , L10n :: t ( 'Your Full Name:' ), $r [ 0 ][ 'name' ]],
'$pdesc' => [ 'pdesc' , L10n :: t ( 'Title/Description:' ), $r [ 0 ][ 'pdesc' ]],
2018-02-03 17:25:58 +00:00
'$dob' => Temporal :: getDateofBirthField ( $r [ 0 ][ 'dob' ]),
2010-07-11 09:52:47 +00:00
'$hide_friends' => $hide_friends ,
2018-01-22 14:16:25 +00:00
'$address' => [ 'address' , L10n :: t ( 'Street Address:' ), $r [ 0 ][ 'address' ]],
'$locality' => [ 'locality' , L10n :: t ( 'Locality/City:' ), $r [ 0 ][ 'locality' ]],
'$region' => [ 'region' , L10n :: t ( 'Region/State:' ), $r [ 0 ][ 'region' ]],
'$postal_code' => [ 'postal_code' , L10n :: t ( 'Postal/Zip Code:' ), $r [ 0 ][ 'postal-code' ]],
'$country_name' => [ 'country_name' , L10n :: t ( 'Country:' ), $r [ 0 ][ 'country-name' ]],
2018-02-03 17:25:58 +00:00
'$age' => (( intval ( $r [ 0 ][ 'dob' ])) ? '(' . L10n :: t ( 'Age: ' ) . Temporal :: getAgeByTimezone ( $r [ 0 ][ 'dob' ], $a -> user [ 'timezone' ], $a -> user [ 'timezone' ]) . ')' : '' ),
2018-01-15 15:15:00 +00:00
'$gender' => ContactSelector :: gender ( $r [ 0 ][ 'gender' ]),
'$marital' => ContactSelector :: maritalStatus ( $r [ 0 ][ 'marital' ]),
2018-01-22 14:16:25 +00:00
'$with' => [ 'with' , L10n :: t ( " Who: \x28 if applicable \x29 " ), strip_tags ( $r [ 0 ][ 'with' ]), L10n :: t ( 'Examples: cathy123, Cathy Williams, cathy@example.com' )],
2018-01-27 02:38:34 +00:00
'$howlong' => [ 'howlong' , L10n :: t ( 'Since [date]:' ), ( $r [ 0 ][ 'howlong' ] <= NULL_DATE ? '' : DateTimeFormat :: local ( $r [ 0 ][ 'howlong' ]))],
2018-01-15 15:15:00 +00:00
'$sexual' => ContactSelector :: sexualPreference ( $r [ 0 ][ 'sexual' ]),
2018-01-22 14:16:25 +00:00
'$about' => [ 'about' , L10n :: t ( 'Tell us about yourself...' ), $r [ 0 ][ 'about' ]],
2018-01-24 21:51:32 +00:00
'$xmpp' => [ 'xmpp' , L10n :: t ( " XMPP \x28 Jabber \x29 address: " ), $r [ 0 ][ 'xmpp' ], L10n :: t ( " The XMPP address will be propagated to your contacts so that they can follow you. " )],
2018-01-22 14:16:25 +00:00
'$homepage' => [ 'homepage' , L10n :: t ( 'Homepage URL:' ), $r [ 0 ][ 'homepage' ]],
'$hometown' => [ 'hometown' , L10n :: t ( 'Hometown:' ), $r [ 0 ][ 'hometown' ]],
'$politic' => [ 'politic' , L10n :: t ( 'Political Views:' ), $r [ 0 ][ 'politic' ]],
'$religion' => [ 'religion' , L10n :: t ( 'Religious Views:' ), $r [ 0 ][ 'religion' ]],
'$pub_keywords' => [ 'pub_keywords' , L10n :: t ( 'Public Keywords:' ), $r [ 0 ][ 'pub_keywords' ], L10n :: t ( " \x28 Used for suggesting potential friends, can be seen by others \x29 " )],
'$prv_keywords' => [ 'prv_keywords' , L10n :: t ( 'Private Keywords:' ), $r [ 0 ][ 'prv_keywords' ], L10n :: t ( " \x28 Used for searching profiles, never shown to others \x29 " )],
'$likes' => [ 'likes' , L10n :: t ( 'Likes:' ), $r [ 0 ][ 'likes' ]],
'$dislikes' => [ 'dislikes' , L10n :: t ( 'Dislikes:' ), $r [ 0 ][ 'dislikes' ]],
'$music' => [ 'music' , L10n :: t ( 'Musical interests' ), $r [ 0 ][ 'music' ]],
'$book' => [ 'book' , L10n :: t ( 'Books, literature' ), $r [ 0 ][ 'book' ]],
'$tv' => [ 'tv' , L10n :: t ( 'Television' ), $r [ 0 ][ 'tv' ]],
'$film' => [ 'film' , L10n :: t ( 'Film/dance/culture/entertainment' ), $r [ 0 ][ 'film' ]],
'$interest' => [ 'interest' , L10n :: t ( 'Hobbies/Interests' ), $r [ 0 ][ 'interest' ]],
'$romance' => [ 'romance' , L10n :: t ( 'Love/romance' ), $r [ 0 ][ 'romance' ]],
'$work' => [ 'work' , L10n :: t ( 'Work/employment' ), $r [ 0 ][ 'work' ]],
'$education' => [ 'education' , L10n :: t ( 'School/education' ), $r [ 0 ][ 'education' ]],
'$contact' => [ 'contact' , L10n :: t ( 'Contact information and Social Networks' ), $r [ 0 ][ 'contact' ]],
2018-01-15 13:05:12 +00:00
]);
$arr = [ 'profile' => $r [ 0 ], 'entry' => $o ];
2018-01-17 18:42:40 +00:00
Addon :: callHooks ( 'profile_edit' , $arr );
2011-01-20 23:30:45 +00:00
2010-07-01 23:48:07 +00:00
return $o ;
2017-03-23 22:05:53 +00:00
} else {
// If we don't support multi profiles, don't display this list.
2017-12-04 14:01:27 +00:00
if ( ! Feature :: isEnabled ( local_user (), 'multi_profiles' )) {
2017-03-23 22:05:53 +00:00
$r = q ( " SELECT * FROM `profile` WHERE `uid` = %d AND `is-default`=1 " ,
2014-06-27 23:30:10 +00:00
local_user ()
);
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2014-06-27 23:30:10 +00:00
//Go to the default profile.
2017-03-24 21:40:25 +00:00
goaway ( 'profiles/' . $r [ 0 ][ 'id' ]);
2014-06-27 23:30:10 +00:00
}
}
2015-10-25 08:15:36 +00:00
2012-06-18 19:18:43 +00:00
$r = q ( " SELECT * FROM `profile` WHERE `uid` = %d " ,
2010-11-25 00:35:35 +00:00
local_user ());
2017-03-23 22:05:53 +00:00
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2015-10-25 08:15:36 +00:00
2011-05-11 11:37:13 +00:00
$tpl = get_markup_template ( 'profile_entry.tpl' );
2016-12-20 20:15:53 +00:00
$profiles = '' ;
foreach ( $r as $rr ) {
2018-01-15 13:05:12 +00:00
$profiles .= replace_macros ( $tpl , [
2016-12-20 20:15:53 +00:00
'$photo' => $a -> remove_baseurl ( $rr [ 'thumb' ]),
'$id' => $rr [ 'id' ],
2018-01-22 14:16:25 +00:00
'$alt' => L10n :: t ( 'Profile Image' ),
2011-04-13 04:21:33 +00:00
'$profile_name' => $rr [ 'profile-name' ],
2018-01-22 14:16:25 +00:00
'$visible' => (( $rr [ 'is-default' ]) ? '<strong>' . L10n :: t ( 'visible to everybody' ) . '</strong>'
: '<a href="' . 'profperm/' . $rr [ 'id' ] . '" />' . L10n :: t ( 'Edit visibility' ) . '</a>' )
2018-01-15 13:05:12 +00:00
]);
2010-07-01 23:48:07 +00:00
}
2016-06-10 09:24:38 +00:00
$tpl_header = get_markup_template ( 'profile_listing_header.tpl' );
2018-01-15 13:05:12 +00:00
$o .= replace_macros ( $tpl_header ,[
2018-01-22 14:16:25 +00:00
'$header' => L10n :: t ( 'Edit/Manage Profiles' ),
'$chg_photo' => L10n :: t ( 'Change profile photo' ),
'$cr_new' => L10n :: t ( 'Create New Profile' ),
2016-06-10 09:24:38 +00:00
'$cr_new_link' => 'profiles/new?t=' . get_form_security_token ( " profile_new " ),
2016-12-20 20:15:53 +00:00
'$profiles' => $profiles
2018-01-15 13:05:12 +00:00
]);
2010-07-01 23:48:07 +00:00
}
return $o ;
}
2016-02-07 14:11:34 +00:00
2011-05-23 09:39:57 +00:00
}