2010-07-02 01:48:07 +02:00
< ? php
2017-11-15 15:47:28 +01:00
/**
* @ file mod / profiles . php
*/
2018-01-25 03:08:45 +01:00
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2018-10-17 22:35:49 +02:00
use Friendica\BaseModule ;
2018-01-15 16:15:00 +01:00
use Friendica\Content\ContactSelector ;
2017-12-04 15:04:36 +01:00
use Friendica\Content\Feature ;
2018-01-15 20:51:56 +01:00
use Friendica\Content\Nav ;
2018-12-26 07:06:24 +01:00
use Friendica\Core\Hook ;
2018-10-31 15:35:50 +01:00
use Friendica\Core\Renderer ;
2017-11-05 13:15:53 +01:00
use Friendica\Core\Worker ;
2018-07-20 14:19:26 +02:00
use Friendica\Database\DBA ;
2019-12-16 00:28:31 +01:00
use Friendica\DI ;
2018-03-31 05:33:19 +02:00
use Friendica\Model\Contact ;
2017-12-07 15:09:28 +01:00
use Friendica\Model\GContact ;
2018-02-03 18:25:58 +01:00
use Friendica\Model\Profile ;
2019-01-07 05:49:13 +01:00
use Friendica\Model\User ;
2019-12-27 22:19:28 +01:00
use Friendica\Module\Security\Login ;
2017-05-07 20:44:30 +02:00
use Friendica\Network\Probe ;
2018-01-27 03:38:34 +01:00
use Friendica\Util\DateTimeFormat ;
2018-11-08 16:14:37 +01:00
use Friendica\Util\Strings ;
2018-02-03 18:25:58 +01:00
use Friendica\Util\Temporal ;
2010-07-02 01:48:07 +02:00
2017-01-09 13:14:55 +01:00
function profiles_init ( App $a ) {
2013-01-03 18:47:45 +01:00
2018-01-15 20:51:56 +01:00
Nav :: setSelected ( 'profiles' );
2013-01-03 18:47:45 +01:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2013-01-03 18:47:45 +01:00
return ;
}
2017-03-25 13:22:39 +01:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === " drop " ) && intval ( $a -> argv [ 2 ])) {
2013-01-03 18:47:45 +01: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 ())
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $r )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile not found.' ) . EOL );
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles' );
2013-01-03 18:47:45 +01:00
return ; // NOTREACHED
}
2014-03-09 09:19:14 +01:00
2018-10-17 22:35:49 +02:00
BaseModule :: checkFormSecurityTokenRedirectOnError ( '/profiles' , 'profile_drop' , 't' );
2013-01-03 18:47:45 +01:00
// move every contact using this profile as their default to the user default
2019-01-07 07:23:49 +01:00
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 " ,
2013-01-03 18:47:45 +01:00
intval ( local_user ()),
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2019-01-07 07:23:49 +01:00
q ( " DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d " ,
2013-01-03 18:47:45 +01:00
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r )) {
2020-01-18 20:52:34 +01:00
info ( DI :: l10n () -> t ( 'Profile deleted.' ) . EOL );
2017-03-25 13:22:39 +01:00
}
2013-01-03 18:47:45 +01:00
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles' );
2013-01-03 18:47:45 +01:00
return ; // NOTREACHED
}
2017-03-25 13:22:39 +01:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] === 'new' )) {
2014-03-09 09:19:14 +01:00
2018-10-17 22:35:49 +02:00
BaseModule :: checkFormSecurityTokenRedirectOnError ( '/profiles' , 'profile_new' , 't' );
2013-01-03 18:47:45 +01:00
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
intval ( local_user ()));
2017-03-25 13:22:39 +01:00
2018-07-21 14:46:04 +02:00
$num_profiles = ( DBA :: isResult ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 18:47:45 +01:00
2020-01-18 20:52:34 +01:00
$name = DI :: l10n () -> t ( 'Profile-' ) . ( $num_profiles + 1 );
2013-01-03 18:47:45 +01:00
$r1 = q ( " SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1 " ,
intval ( local_user ()));
2014-03-09 09:19:14 +01:00
2019-01-07 07:23:49 +01:00
q ( " INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
2013-01-03 18:47:45 +01:00
VALUES ( % d , '%s' , '%s' , '%s' , '%s' ) " ,
intval ( local_user ()),
2018-07-21 15:10:13 +02:00
DBA :: escape ( $name ),
DBA :: escape ( $r1 [ 0 ][ 'name' ]),
DBA :: escape ( $r1 [ 0 ][ 'photo' ]),
DBA :: escape ( $r1 [ 0 ][ 'thumb' ])
2013-01-03 18:47:45 +01:00
);
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
intval ( local_user ()),
2018-07-21 15:10:13 +02:00
DBA :: escape ( $name )
2013-01-03 18:47:45 +01:00
);
2020-01-18 20:52:34 +01:00
info ( DI :: l10n () -> t ( 'New profile created.' ) . EOL );
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r3 ) && count ( $r3 ) == 1 ) {
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
2017-03-25 13:22:39 +01:00
}
2014-03-09 09:19:14 +01:00
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles' );
2014-03-11 23:52:32 +01:00
}
2013-01-03 18:47:45 +01:00
2017-03-25 13:22:39 +01:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === 'clone' )) {
2014-03-09 09:19:14 +01:00
2018-10-17 22:35:49 +02:00
BaseModule :: checkFormSecurityTokenRedirectOnError ( '/profiles' , 'profile_clone' , 't' );
2013-01-03 18:47:45 +01:00
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
intval ( local_user ()));
2017-03-25 13:22:39 +01:00
2018-07-21 14:46:04 +02:00
$num_profiles = ( DBA :: isResult ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 18:47:45 +01:00
2020-01-18 20:52:34 +01:00
$name = DI :: l10n () -> t ( 'Profile-' ) . ( $num_profiles + 1 );
2013-01-03 18:47:45 +01:00
$r1 = q ( " SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
intval ( local_user ()),
intval ( $a -> argv [ 2 ])
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $r1 )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile unavailable to clone.' ) . EOL );
2018-12-26 06:40:12 +01:00
exit ();
2013-01-03 18:47:45 +01:00
}
unset ( $r1 [ 0 ][ 'id' ]);
$r1 [ 0 ][ 'is-default' ] = 0 ;
2014-03-11 23:52:32 +01:00
$r1 [ 0 ][ 'publish' ] = 0 ;
$r1 [ 0 ][ 'net-publish' ] = 0 ;
2018-07-21 15:10:13 +02:00
$r1 [ 0 ][ 'profile-name' ] = DBA :: escape ( $name );
2013-01-03 18:47:45 +01:00
2018-07-20 14:19:26 +02:00
DBA :: insert ( 'profile' , $r1 [ 0 ]);
2013-01-03 18:47:45 +01:00
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
intval ( local_user ()),
2018-07-21 15:10:13 +02:00
DBA :: escape ( $name )
2013-01-03 18:47:45 +01:00
);
2020-01-18 20:52:34 +01:00
info ( DI :: l10n () -> t ( 'New profile created.' ) . EOL );
2018-07-21 14:46:04 +02:00
if (( DBA :: isResult ( $r3 )) && ( count ( $r3 ) == 1 )) {
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
2017-03-25 13:22:39 +01:00
}
2014-03-09 09:19:14 +01:00
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles' );
2014-03-09 09:19:14 +01:00
2013-01-03 18:47:45 +01:00
return ; // NOTREACHED
}
2017-03-25 13:22:39 +01:00
if (( $a -> argc > 1 ) && ( intval ( $a -> argv [ 1 ]))) {
2013-01-03 18:47:45 +01:00
$r = q ( " SELECT id FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $a -> argv [ 1 ]),
intval ( local_user ())
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $r )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile not found.' ) . EOL );
2018-12-26 06:40:12 +01:00
exit ();
2013-01-03 18:47:45 +01:00
}
2018-01-15 03:22:39 +01:00
Profile :: load ( $a , $a -> user [ 'nickname' ], $r [ 0 ][ 'id' ]);
2013-01-03 18:47:45 +01:00
}
}
2018-07-28 01:25:57 +02:00
function profile_clean_keywords ( $keywords )
{
2017-03-25 13:22:39 +01:00
$keywords = str_replace ( " , " , " " , $keywords );
2015-01-25 13:19:37 +01:00
$keywords = explode ( " " , $keywords );
2018-01-15 14:05:12 +01:00
$cleaned = [];
2015-01-25 13:19:37 +01:00
foreach ( $keywords as $keyword ) {
$keyword = trim ( strtolower ( $keyword ));
2015-01-26 01:07:15 +01:00
$keyword = trim ( $keyword , " # " );
2017-03-25 13:22:39 +01:00
if ( $keyword != " " ) {
2015-01-25 13:19:37 +01:00
$cleaned [] = $keyword ;
2017-03-25 13:22:39 +01:00
}
2015-01-25 13:19:37 +01:00
}
$keywords = implode ( " , " , $cleaned );
return $keywords ;
}
2017-01-09 13:14:55 +01:00
function profiles_post ( App $a ) {
2010-07-02 01:48:07 +02:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Permission denied.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2010-08-09 06:03:08 +02:00
$namechanged = false ;
2018-12-26 07:06:24 +01:00
Hook :: callAll ( 'profile_post' , $_POST );
2011-01-21 00:30:45 +01:00
2017-03-24 22:33:57 +01:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] !== " new " ) && intval ( $a -> argv [ 1 ])) {
2010-08-09 06:03:08 +02:00
$orig = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2010-07-02 01:48:07 +02:00
intval ( $a -> argv [ 1 ]),
2010-11-25 01:35:35 +01:00
intval ( local_user ())
2010-07-02 01:48:07 +02:00
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $orig )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile not found.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2014-03-09 09:19:14 +01:00
2018-10-17 22:35:49 +02:00
BaseModule :: checkFormSecurityTokenRedirectOnError ( '/profiles' , 'profile_edit' );
2014-03-11 23:52:32 +01:00
2010-08-09 06:03:08 +02:00
$is_default = (( $orig [ 0 ][ 'is-default' ]) ? 1 : 0 );
2010-07-02 01:48:07 +02:00
2018-11-09 19:29:42 +01:00
$profile_name = Strings :: escapeTags ( trim ( $_POST [ 'profile_name' ]));
2017-03-24 22:33:57 +01:00
if ( ! strlen ( $profile_name )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile Name is required.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2014-03-11 23:52:32 +01:00
2019-12-24 18:45:30 +01:00
$dob = ! empty ( $_POST [ 'dob' ]) ? Strings :: escapeHtml ( trim ( $_POST [ 'dob' ])) : '0000-00-00' ;
2015-01-10 00:34:08 +01:00
2017-03-25 13:18:28 +01:00
$y = substr ( $dob , 0 , 4 );
2017-03-24 22:33:57 +01:00
if (( ! ctype_digit ( $y )) || ( $y < 1900 )) {
2015-05-22 18:53:18 +02:00
$ignore_year = true ;
2017-03-24 22:33:57 +01:00
} else {
2015-05-22 18:53:18 +02:00
$ignore_year = false ;
2017-03-24 22:33:57 +01:00
}
2018-11-22 05:53:45 +01:00
if ( ! in_array ( $dob , [ '0000-00-00' , DBA :: NULL_DATE ])) {
2017-04-11 23:00:45 +02:00
if ( strpos ( $dob , '0000-' ) === 0 || strpos ( $dob , '0001-' ) === 0 ) {
2015-05-22 18:53:18 +02:00
$ignore_year = true ;
2017-03-24 22:33:57 +01:00
$dob = substr ( $dob , 5 );
2015-05-22 18:53:18 +02:00
}
2017-03-24 22:33:57 +01:00
if ( $ignore_year ) {
2018-01-27 03:38:34 +01:00
$dob = '0000-' . DateTimeFormat :: utc ( '1900-' . $dob , 'm-d' );
2018-01-26 13:29:32 +01:00
} else {
2018-01-27 03:38:34 +01:00
$dob = DateTimeFormat :: utc ( $dob , 'Y-m-d' );
2017-03-24 22:33:57 +01:00
}
2015-05-22 18:53:18 +02:00
}
2015-10-25 09:15:36 +01:00
2018-11-09 19:29:42 +01:00
$name = Strings :: escapeTags ( trim ( $_POST [ 'name' ]));
2010-08-09 06:03:08 +02:00
2017-03-25 13:22:39 +01:00
if ( ! strlen ( $name )) {
2012-08-19 23:39:43 +02:00
$name = '[No Name]' ;
}
2017-03-24 22:33:57 +01:00
if ( $orig [ 0 ][ 'name' ] != $name ) {
2010-08-09 06:03:08 +02:00
$namechanged = true ;
2017-03-24 22:33:57 +01:00
}
2012-08-19 23:39:43 +02:00
2019-12-24 18:45:30 +01:00
$pdesc = Strings :: escapeTags ( trim ( $_POST [ 'pdesc' ] ? ? '' ));
$gender = Strings :: escapeTags ( trim ( $_POST [ 'gender' ] ? ? '' ));
$address = Strings :: escapeTags ( trim ( $_POST [ 'address' ] ? ? '' ));
$locality = Strings :: escapeTags ( trim ( $_POST [ 'locality' ] ? ? '' ));
$region = Strings :: escapeTags ( trim ( $_POST [ 'region' ] ? ? '' ));
$postal_code = Strings :: escapeTags ( trim ( $_POST [ 'postal_code' ] ? ? '' ));
$country_name = Strings :: escapeTags ( trim ( $_POST [ 'country_name' ] ? ? '' ));
$pub_keywords = profile_clean_keywords ( Strings :: escapeTags ( trim ( $_POST [ 'pub_keywords' ] ? ? '' )));
$prv_keywords = profile_clean_keywords ( Strings :: escapeTags ( trim ( $_POST [ 'prv_keywords' ] ? ? '' )));
$marital = Strings :: escapeTags ( trim ( $_POST [ 'marital' ] ? ? '' ));
$howlong = Strings :: escapeTags ( trim ( $_POST [ 'howlong' ] ? ? '' ));
2010-08-10 07:58:58 +02:00
2018-11-30 15:06:22 +01:00
$with = ( ! empty ( $_POST [ 'with' ]) ? Strings :: escapeTags ( trim ( $_POST [ 'with' ])) : '' );
2010-12-04 07:46:42 +01:00
2017-03-25 13:18:28 +01:00
if ( ! strlen ( $howlong )) {
2018-10-21 07:53:47 +02:00
$howlong = DBA :: NULL_DATETIME ;
2017-03-19 09:04:04 +01:00
} else {
2018-01-27 03:38:34 +01:00
$howlong = DateTimeFormat :: convert ( $howlong , 'UTC' , date_default_timezone_get ());
2017-03-19 09:04:04 +01:00
}
2010-12-04 07:46:42 +01:00
// linkify the relationship target if applicable
2012-04-13 06:58:15 +02:00
$withchanged = false ;
2017-03-24 22:33:57 +01:00
if ( strlen ( $with )) {
if ( $with != strip_tags ( $orig [ 0 ][ 'with' ])) {
2012-04-13 06:58:15 +02:00
$withchanged = true ;
2010-12-04 07:46:42 +01:00
$prf = '' ;
$lookup = $with ;
2017-03-25 13:18:28 +01:00
if ( strpos ( $lookup , '@' ) === 0 ) {
2017-03-24 22:33:57 +01:00
$lookup = substr ( $lookup , 1 );
}
2011-02-25 21:12:25 +01:00
$lookup = str_replace ( '_' , ' ' , $lookup );
2017-03-24 22:33:57 +01:00
if ( strpos ( $lookup , '@' ) || ( strpos ( $lookup , 'http://' ))) {
2010-12-04 07:46:42 +01:00
$newname = $lookup ;
2016-07-09 20:09:09 +02:00
$links = @ Probe :: lrdd ( $lookup );
2017-03-24 22:33:57 +01:00
if ( count ( $links )) {
foreach ( $links as $link ) {
if ( $link [ '@attributes' ][ 'rel' ] === 'http://webfinger.net/rel/profile-page' ) {
2016-06-10 11:24:38 +02:00
$prf = $link [ '@attributes' ][ 'href' ];
2010-12-04 07:46:42 +01:00
}
}
}
2017-03-23 23:05:53 +01:00
} else {
2010-12-04 07:46:42 +01:00
$newname = $lookup ;
2014-03-09 09:19:14 +01:00
2012-09-30 01:55:40 +02:00
$r = q ( " SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1 " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $newname ),
2012-09-30 01:55:40 +02:00
intval ( local_user ())
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $r )) {
2012-09-30 01:55:40 +02:00
$r = q ( " SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1 " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $lookup ),
2012-09-30 01:55:40 +02:00
intval ( local_user ())
);
2010-12-04 07:46:42 +01:00
}
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r )) {
2010-12-04 07:46:42 +01:00
$prf = $r [ 0 ][ 'url' ];
$newname = $r [ 0 ][ 'name' ];
}
}
2015-01-10 00:34:08 +01:00
2017-03-23 23:05:53 +01:00
if ( $prf ) {
2017-03-24 22:33:57 +01:00
$with = str_replace ( $lookup , '<a href="' . $prf . '">' . $newname . '</a>' , $with );
if ( strpos ( $with , '@' ) === 0 ) {
2017-03-23 23:05:53 +01:00
$with = substr ( $with , 1 );
}
2010-12-04 07:46:42 +01:00
}
2017-03-24 22:33:57 +01:00
} else {
2010-12-04 07:46:42 +01:00
$with = $orig [ 0 ][ 'with' ];
2017-03-24 22:33:57 +01:00
}
2010-12-04 07:46:42 +01:00
}
2017-03-24 22:33:57 +01:00
/// @TODO Not flexible enough for later expansion, let's have more OOP here
2018-11-09 19:29:42 +01:00
$sexual = Strings :: escapeTags ( trim ( $_POST [ 'sexual' ]));
$xmpp = Strings :: escapeTags ( trim ( $_POST [ 'xmpp' ]));
$homepage = Strings :: escapeTags ( trim ( $_POST [ 'homepage' ]));
2014-06-22 09:44:59 +02:00
if (( strpos ( $homepage , 'http' ) !== 0 ) && ( strlen ( $homepage ))) {
2016-06-10 11:24:38 +02:00
// neither http nor https in URL, add them
$homepage = 'http://' . $homepage ;
2014-01-12 09:16:46 +01:00
}
2018-11-09 19:29:42 +01:00
$hometown = Strings :: escapeTags ( trim ( $_POST [ 'hometown' ]));
$politic = Strings :: escapeTags ( trim ( $_POST [ 'politic' ]));
$religion = Strings :: escapeTags ( trim ( $_POST [ 'religion' ]));
2010-07-11 01:47:10 +02:00
2018-11-09 19:27:58 +01:00
$likes = Strings :: escapeHtml ( trim ( $_POST [ 'likes' ]));
$dislikes = Strings :: escapeHtml ( trim ( $_POST [ 'dislikes' ]));
$about = Strings :: escapeHtml ( trim ( $_POST [ 'about' ]));
$interest = Strings :: escapeHtml ( trim ( $_POST [ 'interest' ]));
$contact = Strings :: escapeHtml ( trim ( $_POST [ 'contact' ]));
$music = Strings :: escapeHtml ( trim ( $_POST [ 'music' ]));
$book = Strings :: escapeHtml ( trim ( $_POST [ 'book' ]));
$tv = Strings :: escapeHtml ( trim ( $_POST [ 'tv' ]));
$film = Strings :: escapeHtml ( trim ( $_POST [ 'film' ]));
$romance = Strings :: escapeHtml ( trim ( $_POST [ 'romance' ]));
$work = Strings :: escapeHtml ( trim ( $_POST [ 'work' ]));
$education = Strings :: escapeHtml ( trim ( $_POST [ 'education' ]));
2012-04-11 01:31:49 +02:00
2010-08-20 07:04:18 +02:00
$hide_friends = (( $_POST [ 'hide-friends' ] == 1 ) ? 1 : 0 );
2010-07-02 01:48:07 +02:00
2020-01-18 16:54:50 +01:00
DI :: pConfig () -> set ( local_user (), 'system' , 'detailled_profile' , ! empty ( $_POST [ 'detailed_profile' ]) ? 1 : 0 );
2012-04-13 06:10:32 +02:00
2018-01-15 14:05:12 +01:00
$changes = [];
2017-03-23 23:05:53 +01:00
if ( $is_default ) {
if ( $marital != $orig [ 0 ][ 'marital' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = '[color=#ff0000]♥[/color] ' . DI :: l10n () -> t ( 'Marital Status' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $withchanged ) {
2020-01-18 20:52:34 +01:00
$changes [] = '[color=#ff0000]♥[/color] ' . DI :: l10n () -> t ( 'Romantic Partner' );
2012-06-25 06:16:55 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $likes != $orig [ 0 ][ 'likes' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Likes' );
2012-06-25 06:16:55 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $dislikes != $orig [ 0 ][ 'dislikes' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Dislikes' );
2012-06-25 06:16:55 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $work != $orig [ 0 ][ 'work' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Work/Employment' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $religion != $orig [ 0 ][ 'religion' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Religion' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $politic != $orig [ 0 ][ 'politic' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Political Views' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $gender != $orig [ 0 ][ 'gender' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Gender' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $sexual != $orig [ 0 ][ 'sexual' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Sexual Preference' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $xmpp != $orig [ 0 ][ 'xmpp' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'XMPP' );
2016-09-25 17:28:00 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $homepage != $orig [ 0 ][ 'homepage' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Homepage' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $interest != $orig [ 0 ][ 'interest' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Interests' );
2012-04-29 10:42:48 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $address != $orig [ 0 ][ 'address' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Address' );
2012-05-26 00:56:18 +02: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 23:05:53 +01:00
if ( $locality != $orig [ 0 ][ 'locality' ] || $region != $orig [ 0 ][ 'region' ]
2012-04-29 10:49:54 +02:00
|| $country_name != $orig [ 0 ][ 'country-name' ]) {
2020-01-18 20:52:34 +01:00
$changes [] = DI :: l10n () -> t ( 'Location' );
2012-04-29 10:42:48 +02:00
}
2014-03-09 09:19:14 +01:00
}
$r = q ( " UPDATE `profile`
2010-07-02 01:48:07 +02:00
SET `profile-name` = '%s' ,
`name` = '%s' ,
2011-01-19 04:25:28 +01:00
`pdesc` = '%s' ,
2010-07-02 01:48:07 +02:00
`gender` = '%s' ,
2010-07-11 01:47:10 +02:00
`dob` = '%s' ,
2010-07-02 01:48:07 +02:00
`address` = '%s' ,
`locality` = '%s' ,
`region` = '%s' ,
`postal-code` = '%s' ,
`country-name` = '%s' ,
`marital` = '%s' ,
2010-12-04 07:46:42 +01:00
`with` = '%s' ,
2012-06-02 11:30:26 +02:00
`howlong` = '%s' ,
2010-07-11 01:47:10 +02:00
`sexual` = '%s' ,
2016-09-25 17:28:00 +02:00
`xmpp` = '%s' ,
2010-07-02 01:48:07 +02:00
`homepage` = '%s' ,
2012-06-03 05:58:20 +02:00
`hometown` = '%s' ,
2010-07-11 01:47:10 +02:00
`politic` = '%s' ,
`religion` = '%s' ,
2011-03-14 08:28:49 +01:00
`pub_keywords` = '%s' ,
`prv_keywords` = '%s' ,
2012-06-25 06:16:55 +02:00
`likes` = '%s' ,
`dislikes` = '%s' ,
2010-07-11 01:47:10 +02:00
`about` = '%s' ,
`interest` = '%s' ,
`contact` = '%s' ,
`music` = '%s' ,
`book` = '%s' ,
`tv` = '%s' ,
`film` = '%s' ,
`romance` = '%s' ,
`work` = '%s' ,
2010-08-20 07:04:18 +02:00
`education` = '%s' ,
2011-06-20 01:47:03 +02:00
`hide-friends` = % d
2014-03-09 09:19:14 +01:00
WHERE `id` = % d AND `uid` = % d " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $profile_name ),
DBA :: escape ( $name ),
DBA :: escape ( $pdesc ),
DBA :: escape ( $gender ),
DBA :: escape ( $dob ),
DBA :: escape ( $address ),
DBA :: escape ( $locality ),
DBA :: escape ( $region ),
DBA :: escape ( $postal_code ),
DBA :: escape ( $country_name ),
DBA :: escape ( $marital ),
DBA :: escape ( $with ),
DBA :: escape ( $howlong ),
DBA :: escape ( $sexual ),
DBA :: escape ( $xmpp ),
DBA :: escape ( $homepage ),
DBA :: escape ( $hometown ),
DBA :: escape ( $politic ),
DBA :: escape ( $religion ),
DBA :: escape ( $pub_keywords ),
DBA :: escape ( $prv_keywords ),
DBA :: escape ( $likes ),
DBA :: escape ( $dislikes ),
DBA :: escape ( $about ),
DBA :: escape ( $interest ),
DBA :: escape ( $contact ),
DBA :: escape ( $music ),
DBA :: escape ( $book ),
DBA :: escape ( $tv ),
DBA :: escape ( $film ),
DBA :: escape ( $romance ),
DBA :: escape ( $work ),
DBA :: escape ( $education ),
2010-08-20 07:04:18 +02:00
intval ( $hide_friends ),
2010-07-02 01:48:07 +02:00
intval ( $a -> argv [ 1 ]),
2012-04-13 06:10:32 +02:00
intval ( local_user ())
2010-07-02 01:48:07 +02:00
);
2018-07-21 14:46:04 +02:00
/// @TODO decide to use DBA::isResult() here and check $r
2017-03-23 23:05:53 +01:00
if ( $r ) {
2020-01-18 20:52:34 +01:00
info ( DI :: l10n () -> t ( 'Profile updated.' ) . EOL );
2017-03-23 23:05:53 +01:00
}
2010-07-09 12:10:28 +02:00
2017-03-23 23:05:53 +01:00
if ( $is_default ) {
2018-03-24 07:15:18 +01:00
if ( $namechanged ) {
2019-01-07 07:23:49 +01:00
q ( " UPDATE `user` set `username` = '%s' where `uid` = %d " ,
2018-07-21 15:10:13 +02:00
DBA :: escape ( $name ),
2018-03-24 07:15:18 +01:00
intval ( local_user ())
);
}
Contact :: updateSelfFromUserID ( local_user ());
2015-01-10 00:34:08 +01:00
2010-08-19 13:59:31 +02:00
// Update global directory in background
$url = $_SESSION [ 'my_url' ];
2020-01-19 21:21:13 +01:00
if ( $url && strlen ( DI :: config () -> get ( 'system' , 'directory' ))) {
2017-11-18 08:59:30 +01:00
Worker :: add ( PRIORITY_LOW , " Directory " , $url );
2016-12-20 11:36:03 +01:00
}
2011-10-20 14:43:33 +02:00
2017-11-19 17:59:37 +01:00
Worker :: add ( PRIORITY_LOW , 'ProfileUpdate' , local_user ());
2016-05-05 15:08:05 +02:00
// Update the global contact for the user
2017-12-07 15:09:28 +01:00
GContact :: updateForUser ( local_user ());
2010-08-19 13:59:31 +02:00
}
2010-07-02 01:48:07 +02:00
}
}
2017-01-09 13:14:55 +01:00
function profiles_content ( App $a ) {
2011-01-19 04:25:28 +01:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Permission denied.' ) . EOL );
2018-10-07 16:34:08 +02:00
return Login :: form ();
2013-01-12 13:58:54 +01:00
}
2010-11-01 00:38:22 +01:00
$o = '' ;
2010-07-10 01:28:50 +02:00
2017-03-23 23:05:53 +01:00
if (( $a -> argc > 1 ) && ( intval ( $a -> argv [ 1 ]))) {
2010-07-02 01:48:07 +02:00
$r = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( $a -> argv [ 1 ]),
2010-11-25 01:35:35 +01:00
intval ( local_user ())
2010-07-02 01:48:07 +02:00
);
2018-07-21 14:46:04 +02:00
if ( ! DBA :: isResult ( $r )) {
2020-01-18 20:52:34 +01:00
notice ( DI :: l10n () -> t ( 'Profile not found.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2018-01-15 14:05:12 +01:00
2019-12-30 20:02:09 +01:00
DI :: page ()[ 'htmlhead' ] .= Renderer :: replaceMacros ( Renderer :: getMarkupTemplate ( 'profed_head.tpl' ), [
2019-12-30 23:00:08 +01:00
'$baseurl' => DI :: baseUrl () -> get ( true ),
2018-01-15 14:05:12 +01:00
]);
2012-04-11 03:08:06 +02:00
2018-10-31 15:44:06 +01:00
$opt_tpl = Renderer :: getMarkupTemplate ( " profile-hide-friends.tpl " );
2018-10-31 15:35:50 +01:00
$hide_friends = Renderer :: replaceMacros ( $opt_tpl ,[
2018-01-15 14:05:12 +01:00
'$yesno' => [
2014-06-27 18:12:15 +02:00
'hide-friends' , //Name
2020-01-18 20:52:34 +01:00
DI :: l10n () -> t ( 'Hide contacts and friends:' ), //Label
2014-06-27 18:12:15 +02:00
!! $r [ 0 ][ 'hide-friends' ], //Value
'' , //Help string
2020-01-18 20:52:34 +01:00
[ DI :: l10n () -> t ( 'No' ), DI :: l10n () -> t ( 'Yes' )] //Off - On strings
2018-01-15 14:05:12 +01:00
],
2020-01-18 20:52:34 +01:00
'$desc' => DI :: l10n () -> t ( 'Hide your contact/friend list from viewers of this profile?' ),
'$yes_str' => DI :: l10n () -> t ( 'Yes' ),
'$no_str' => DI :: l10n () -> t ( 'No' ),
2010-07-11 11:52:47 +02:00
'$yes_selected' => (( $r [ 0 ][ 'hide-friends' ]) ? " checked= \" checked \" " : " " ),
'$no_selected' => (( $r [ 0 ][ 'hide-friends' ] == 0 ) ? " checked= \" checked \" " : " " )
2018-01-15 14:05:12 +01:00
]);
2010-07-11 11:52:47 +02:00
2015-10-25 09:15:36 +01:00
$personal_account = ! ( in_array ( $a -> user [ " page-flags " ],
2019-01-06 18:37:48 +01:00
[ User :: PAGE_FLAGS_COMMUNITY , User :: PAGE_FLAGS_PRVGROUP ]));
2012-04-11 03:08:06 +02:00
2020-01-18 16:50:57 +01:00
$detailed_profile = ( DI :: pConfig () -> get ( local_user (), 'system' , 'detailled_profile' ) AND $personal_account );
2012-04-11 03:08:06 +02:00
2010-07-02 01:48:07 +02:00
$is_default = (( $r [ 0 ][ 'is-default' ]) ? 1 : 0 );
2018-10-31 15:44:06 +01:00
$tpl = Renderer :: getMarkupTemplate ( " profile_edit.tpl " );
2018-10-31 15:35:50 +01:00
$o .= Renderer :: replaceMacros ( $tpl , [
2015-10-25 09:15:36 +01:00
'$personal_account' => $personal_account ,
2019-02-24 00:11:48 +01:00
'$detailled_profile' => $detailed_profile ,
2015-10-25 09:15:36 +01:00
2018-01-15 14:05:12 +01:00
'$details' => [
2019-02-24 00:11:48 +01:00
'detailed_profile' , //Name
2020-01-18 20:52:34 +01:00
DI :: l10n () -> t ( 'Show more profile fields:' ), //Label
2019-02-24 00:11:48 +01:00
$detailed_profile , //Value
2016-06-10 11:24:38 +02:00
'' , //Help string
2020-01-18 20:52:34 +01:00
[ DI :: l10n () -> t ( 'No' ), DI :: l10n () -> t ( 'Yes' )] //Off - On strings
2018-01-15 14:05:12 +01:00
],
2016-06-10 11:24:38 +02:00
2017-12-04 15:01:27 +01:00
'$multi_profiles' => Feature :: isEnabled ( local_user (), 'multi_profiles' ),
2018-10-17 22:35:49 +02:00
'$form_security_token' => BaseModule :: getFormSecurityToken ( " profile_edit " ),
'$form_security_token_photo' => BaseModule :: getFormSecurityToken ( " profile_photo " ),
'$profile_clone_link' => (( Feature :: isEnabled ( local_user (), 'multi_profiles' )) ? 'profiles/clone/' . $r [ 0 ][ 'id' ] . '?t=' . BaseModule :: getFormSecurityToken ( " profile_clone " ) : " " ),
'$profile_drop_link' => 'profiles/drop/' . $r [ 0 ][ 'id' ] . '?t=' . BaseModule :: getFormSecurityToken ( " profile_drop " ),
2016-06-10 11:24:38 +02:00
2020-01-18 20:52:34 +01:00
'$profile_action' => DI :: l10n () -> t ( 'Profile Actions' ),
'$banner' => DI :: l10n () -> t ( 'Edit Profile Details' ),
'$submit' => DI :: l10n () -> t ( 'Submit' ),
'$profpic' => DI :: l10n () -> t ( 'Change Profile Photo' ),
2018-07-24 16:20:16 +02:00
'$profpiclink' => '/photos/' . $a -> user [ 'nickname' ],
2020-01-18 20:52:34 +01:00
'$viewprof' => DI :: l10n () -> t ( 'View this profile' ),
'$viewallprof' => DI :: l10n () -> t ( 'View all profiles' ),
'$editvis' => DI :: l10n () -> t ( 'Edit visibility' ),
'$cr_prof' => DI :: l10n () -> t ( 'Create a new profile using these settings' ),
'$cl_prof' => DI :: l10n () -> t ( 'Clone this profile' ),
'$del_prof' => DI :: l10n () -> t ( 'Delete this profile' ),
'$lbl_basic_section' => DI :: l10n () -> t ( 'Basic information' ),
'$lbl_picture_section' => DI :: l10n () -> t ( 'Profile picture' ),
'$lbl_location_section' => DI :: l10n () -> t ( 'Location' ),
'$lbl_preferences_section' => DI :: l10n () -> t ( 'Preferences' ),
'$lbl_status_section' => DI :: l10n () -> t ( 'Status information' ),
'$lbl_about_section' => DI :: l10n () -> t ( 'Additional information' ),
'$lbl_interests_section' => DI :: l10n () -> t ( 'Interests' ),
'$lbl_personal_section' => DI :: l10n () -> t ( 'Personal' ),
'$lbl_relation_section' => DI :: l10n () -> t ( 'Relation' ),
'$lbl_miscellaneous_section' => DI :: l10n () -> t ( 'Miscellaneous' ),
'$lbl_profile_photo' => DI :: l10n () -> t ( 'Upload Profile Photo' ),
'$lbl_gender' => DI :: l10n () -> t ( 'Your Gender:' ),
'$lbl_marital' => DI :: l10n () -> t ( '<span class="heart">♥</span> Marital Status:' ),
'$lbl_sexual' => DI :: l10n () -> t ( 'Sexual Preference:' ),
'$lbl_ex2' => DI :: l10n () -> t ( 'Example: fishing photography software' ),
2016-06-10 11:24:38 +02:00
2010-07-20 04:09:58 +02:00
'$disabled' => (( $is_default ) ? 'onclick="return false;" style="color: #BBBBFF;"' : '' ),
2019-12-30 23:00:08 +01:00
'$baseurl' => DI :: baseUrl () -> get ( true ),
2010-07-02 01:48:07 +02:00
'$profile_id' => $r [ 0 ][ 'id' ],
2020-01-18 20:52:34 +01:00
'$profile_name' => [ 'profile_name' , DI :: l10n () -> t ( 'Profile Name:' ), $r [ 0 ][ 'profile-name' ], DI :: l10n () -> t ( 'Required' ), '*' ],
2016-06-10 11:24:38 +02:00
'$is_default' => $is_default ,
2020-01-18 20:52:34 +01:00
'$default' => (( $is_default ) ? '<p id="profile-edit-default-desc">' . DI :: l10n () -> t ( 'This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.' ) . '</p>' : " " ),
'$name' => [ 'name' , DI :: l10n () -> t ( 'Your Full Name:' ), $r [ 0 ][ 'name' ]],
'$pdesc' => [ 'pdesc' , DI :: l10n () -> t ( 'Title/Description:' ), $r [ 0 ][ 'pdesc' ]],
2019-09-21 11:15:52 +02:00
'$dob' => Temporal :: getDateofBirthField ( $r [ 0 ][ 'dob' ], $a -> user [ 'timezone' ]),
2010-07-11 11:52:47 +02:00
'$hide_friends' => $hide_friends ,
2020-01-18 20:52:34 +01:00
'$address' => [ 'address' , DI :: l10n () -> t ( 'Street Address:' ), $r [ 0 ][ 'address' ]],
'$locality' => [ 'locality' , DI :: l10n () -> t ( 'Locality/City:' ), $r [ 0 ][ 'locality' ]],
'$region' => [ 'region' , DI :: l10n () -> t ( 'Region/State:' ), $r [ 0 ][ 'region' ]],
'$postal_code' => [ 'postal_code' , DI :: l10n () -> t ( 'Postal/Zip Code:' ), $r [ 0 ][ 'postal-code' ]],
'$country_name' => [ 'country_name' , DI :: l10n () -> t ( 'Country:' ), $r [ 0 ][ 'country-name' ]],
'$age' => (( intval ( $r [ 0 ][ 'dob' ])) ? '(' . DI :: l10n () -> t ( 'Age: ' ) . Temporal :: getAgeByTimezone ( $r [ 0 ][ 'dob' ], $a -> user [ 'timezone' ], $a -> user [ 'timezone' ]) . ')' : '' ),
'$gender' => DI :: l10n () -> t ( ContactSelector :: gender ( $r [ 0 ][ 'gender' ])),
'$marital' => [ 'selector' => ContactSelector :: maritalStatus ( $r [ 0 ][ 'marital' ]), 'value' => DI :: l10n () -> t ( $r [ 0 ][ 'marital' ])],
'$with' => [ 'with' , DI :: l10n () -> t ( " Who: \x28 if applicable \x29 " ), strip_tags ( $r [ 0 ][ 'with' ]), DI :: l10n () -> t ( 'Examples: cathy123, Cathy Williams, cathy@example.com' )],
'$howlong' => [ 'howlong' , DI :: l10n () -> t ( 'Since [date]:' ), ( $r [ 0 ][ 'howlong' ] <= DBA :: NULL_DATETIME ? '' : DateTimeFormat :: local ( $r [ 0 ][ 'howlong' ]))],
'$sexual' => [ 'selector' => ContactSelector :: sexualPreference ( $r [ 0 ][ 'sexual' ]), 'value' => DI :: l10n () -> t ( $r [ 0 ][ 'sexual' ])],
'$about' => [ 'about' , DI :: l10n () -> t ( 'Tell us about yourself...' ), $r [ 0 ][ 'about' ]],
'$xmpp' => [ 'xmpp' , DI :: l10n () -> t ( " XMPP \x28 Jabber \x29 address: " ), $r [ 0 ][ 'xmpp' ], DI :: l10n () -> t ( " The XMPP address will be propagated to your contacts so that they can follow you. " )],
'$homepage' => [ 'homepage' , DI :: l10n () -> t ( 'Homepage URL:' ), $r [ 0 ][ 'homepage' ]],
'$hometown' => [ 'hometown' , DI :: l10n () -> t ( 'Hometown:' ), $r [ 0 ][ 'hometown' ]],
'$politic' => [ 'politic' , DI :: l10n () -> t ( 'Political Views:' ), $r [ 0 ][ 'politic' ]],
'$religion' => [ 'religion' , DI :: l10n () -> t ( 'Religious Views:' ), $r [ 0 ][ 'religion' ]],
'$pub_keywords' => [ 'pub_keywords' , DI :: l10n () -> t ( 'Public Keywords:' ), $r [ 0 ][ 'pub_keywords' ], DI :: l10n () -> t ( " \x28 Used for suggesting potential friends, can be seen by others \x29 " )],
'$prv_keywords' => [ 'prv_keywords' , DI :: l10n () -> t ( 'Private Keywords:' ), $r [ 0 ][ 'prv_keywords' ], DI :: l10n () -> t ( " \x28 Used for searching profiles, never shown to others \x29 " )],
'$likes' => [ 'likes' , DI :: l10n () -> t ( 'Likes:' ), $r [ 0 ][ 'likes' ]],
'$dislikes' => [ 'dislikes' , DI :: l10n () -> t ( 'Dislikes:' ), $r [ 0 ][ 'dislikes' ]],
'$music' => [ 'music' , DI :: l10n () -> t ( 'Musical interests' ), $r [ 0 ][ 'music' ]],
'$book' => [ 'book' , DI :: l10n () -> t ( 'Books, literature' ), $r [ 0 ][ 'book' ]],
'$tv' => [ 'tv' , DI :: l10n () -> t ( 'Television' ), $r [ 0 ][ 'tv' ]],
'$film' => [ 'film' , DI :: l10n () -> t ( 'Film/dance/culture/entertainment' ), $r [ 0 ][ 'film' ]],
'$interest' => [ 'interest' , DI :: l10n () -> t ( 'Hobbies/Interests' ), $r [ 0 ][ 'interest' ]],
'$romance' => [ 'romance' , DI :: l10n () -> t ( 'Love/romance' ), $r [ 0 ][ 'romance' ]],
'$work' => [ 'work' , DI :: l10n () -> t ( 'Work/employment' ), $r [ 0 ][ 'work' ]],
'$education' => [ 'education' , DI :: l10n () -> t ( 'School/education' ), $r [ 0 ][ 'education' ]],
'$contact' => [ 'contact' , DI :: l10n () -> t ( 'Contact information and Social Networks' ), $r [ 0 ][ 'contact' ]],
2018-01-15 14:05:12 +01:00
]);
$arr = [ 'profile' => $r [ 0 ], 'entry' => $o ];
2018-12-26 07:06:24 +01:00
Hook :: callAll ( 'profile_edit' , $arr );
2011-01-21 00:30:45 +01:00
2010-07-02 01:48:07 +02:00
return $o ;
2017-03-23 23:05:53 +01:00
} else {
// If we don't support multi profiles, don't display this list.
2017-12-04 15:01:27 +01:00
if ( ! Feature :: isEnabled ( local_user (), 'multi_profiles' )) {
2017-03-23 23:05:53 +01:00
$r = q ( " SELECT * FROM `profile` WHERE `uid` = %d AND `is-default`=1 " ,
2014-06-28 01:30:10 +02:00
local_user ()
);
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r )) {
2014-06-28 01:30:10 +02:00
//Go to the default profile.
2019-12-16 00:28:31 +01:00
DI :: baseUrl () -> redirect ( 'profiles/' . $r [ 0 ][ 'id' ]);
2014-06-28 01:30:10 +02:00
}
}
2015-10-25 09:15:36 +01:00
2012-06-18 21:18:43 +02:00
$r = q ( " SELECT * FROM `profile` WHERE `uid` = %d " ,
2010-11-25 01:35:35 +01:00
local_user ());
2017-03-23 23:05:53 +01:00
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r )) {
2015-10-25 09:15:36 +01:00
2018-10-31 15:44:06 +01:00
$tpl = Renderer :: getMarkupTemplate ( 'profile_entry.tpl' );
2016-12-20 21:15:53 +01:00
$profiles = '' ;
foreach ( $r as $rr ) {
2018-10-31 15:35:50 +01:00
$profiles .= Renderer :: replaceMacros ( $tpl , [
2019-12-16 00:36:31 +01:00
'$photo' => DI :: baseUrl () -> remove ( $rr [ 'thumb' ]),
2016-12-20 21:15:53 +01:00
'$id' => $rr [ 'id' ],
2020-01-18 20:52:34 +01:00
'$alt' => DI :: l10n () -> t ( 'Profile Image' ),
2011-04-13 06:21:33 +02:00
'$profile_name' => $rr [ 'profile-name' ],
2020-01-18 20:52:34 +01:00
'$visible' => (( $rr [ 'is-default' ]) ? '<strong>' . DI :: l10n () -> t ( 'visible to everybody' ) . '</strong>'
: '<a href="' . 'profperm/' . $rr [ 'id' ] . '" />' . DI :: l10n () -> t ( 'Edit visibility' ) . '</a>' )
2018-01-15 14:05:12 +01:00
]);
2010-07-02 01:48:07 +02:00
}
2016-06-10 11:24:38 +02:00
2018-10-31 15:44:06 +01:00
$tpl_header = Renderer :: getMarkupTemplate ( 'profile_listing_header.tpl' );
2018-10-31 15:35:50 +01:00
$o .= Renderer :: replaceMacros ( $tpl_header ,[
2020-01-18 20:52:34 +01:00
'$header' => DI :: l10n () -> t ( 'Edit/Manage Profiles' ),
'$chg_photo' => DI :: l10n () -> t ( 'Change profile photo' ),
'$cr_new' => DI :: l10n () -> t ( 'Create New Profile' ),
2018-10-17 22:35:49 +02:00
'$cr_new_link' => 'profiles/new?t=' . BaseModule :: getFormSecurityToken ( " profile_new " ),
2016-12-20 21:15:53 +01:00
'$profiles' => $profiles
2018-01-15 14:05:12 +01:00
]);
2010-07-02 01:48:07 +02:00
}
return $o ;
}
2016-02-07 15:11:34 +01:00
2011-05-23 11:39:57 +02:00
}