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-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-01-17 19:42:40 +01:00
use Friendica\Core\Addon ;
2017-11-07 03:22:52 +01:00
use Friendica\Core\Config ;
2018-01-21 19:33:59 +01:00
use Friendica\Core\L10n ;
2017-11-07 03:22:52 +01:00
use Friendica\Core\PConfig ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-11-05 13:15:53 +01:00
use Friendica\Core\Worker ;
2017-11-08 04:57:46 +01:00
use Friendica\Database\DBM ;
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-01-28 12:18:08 +01:00
use Friendica\Model\Item ;
2018-02-03 18:25:58 +01:00
use Friendica\Model\Profile ;
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-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 ())
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2016-02-17 08:08:28 +01:00
goaway ( 'profiles' );
2013-01-03 18:47:45 +01:00
return ; // NOTREACHED
}
2014-03-09 09:19:14 +01:00
2013-01-03 18:47:45 +01: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 09:19:14 +01:00
$r = 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 ())
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2018-01-22 15:16:25 +01:00
info ( L10n :: t ( 'Profile deleted.' ) . EOL );
2017-03-25 13:22:39 +01:00
}
2013-01-03 18:47:45 +01:00
2016-02-17 08:08:28 +01:00
goaway ( '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
2013-01-03 18:47:45 +01: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 13:22:39 +01:00
2017-11-08 04:57:46 +01:00
$num_profiles = ( DBM :: is_result ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 18:47:45 +01:00
2018-01-22 15:16:25 +01:00
$name = 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
2013-01-03 18:47:45 +01: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 19:33:59 +01:00
info ( L10n :: t ( 'New profile created.' ) . EOL );
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r3 ) && count ( $r3 ) == 1 ) {
2017-03-25 13:22:39 +01:00
goaway ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
}
2014-03-09 09:19:14 +01:00
2016-02-17 08:08:28 +01:00
goaway ( '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
2013-01-03 18:47:45 +01: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 13:22:39 +01:00
2017-11-08 04:57:46 +01:00
$num_profiles = ( DBM :: is_result ( $r0 ) ? count ( $r0 ) : 0 );
2013-01-03 18:47:45 +01:00
2018-01-22 15:16:25 +01:00
$name = 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 ])
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r1 )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile unavailable to clone.' ) . EOL );
2013-01-03 18:47:45 +01:00
killme ();
return ;
}
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 ;
2013-01-03 18:47:45 +01:00
$r1 [ 0 ][ 'profile-name' ] = dbesc ( $name );
2017-09-15 21:41:30 +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 ()),
dbesc ( $name )
);
2018-01-21 19:33:59 +01:00
info ( L10n :: t ( 'New profile created.' ) . EOL );
2017-11-08 04:57:46 +01:00
if (( DBM :: is_result ( $r3 )) && ( count ( $r3 ) == 1 )) {
2016-02-17 08:08:28 +01:00
goaway ( 'profiles/' . $r3 [ 0 ][ 'id' ]);
2017-03-25 13:22:39 +01:00
}
2014-03-09 09:19:14 +01:00
2016-02-17 08:08:28 +01:00
goaway ( '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 ())
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2013-01-03 18:47:45 +01:00
killme ();
return ;
}
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
}
2015-01-10 00:34:08 +01:00
2016-02-07 15:11:34 +01:00
2013-01-03 18:47:45 +01:00
}
2015-01-25 13:19:37 +01: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 ()) {
2018-01-21 19:33:59 +01:00
notice ( 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-01-17 19:42:40 +01:00
Addon :: callHooks ( '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
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $orig )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2014-03-09 09:19:14 +01:00
2012-03-12 21:17:37 +01:00
check_form_security_token_redirectOnErr ( '/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
$profile_name = notags ( trim ( $_POST [ 'profile_name' ]));
2017-03-24 22:33:57 +01:00
if ( ! strlen ( $profile_name )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile Name is required.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2014-03-11 23:52:32 +01:00
2018-01-23 23:51:30 +01:00
$dob = $_POST [ 'dob' ] ? escape_tags ( 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-01-15 14:05:12 +01:00
if ( ! in_array ( $dob , [ '0000-00-00' , '0001-01-01' ])) {
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
2010-07-02 01:48:07 +02:00
$name = notags ( 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
2011-01-19 04:25:28 +01:00
$pdesc = notags ( trim ( $_POST [ 'pdesc' ]));
2010-07-02 01:48:07 +02: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 13:19:37 +01:00
$pub_keywords = profile_clean_keywords ( notags ( trim ( $_POST [ 'pub_keywords' ])));
$prv_keywords = profile_clean_keywords ( notags ( trim ( $_POST [ 'prv_keywords' ])));
2010-08-19 14:29:43 +02:00
$marital = notags ( trim ( $_POST [ 'marital' ]));
2012-06-02 11:30:26 +02:00
$howlong = notags ( trim ( $_POST [ 'howlong' ]));
2010-08-10 07:58:58 +02:00
2010-12-04 07:46:42 +01:00
$with = (( x ( $_POST , 'with' )) ? notags ( trim ( $_POST [ 'with' ])) : '' );
2017-03-25 13:18:28 +01:00
if ( ! strlen ( $howlong )) {
2017-02-28 00:37:15 +01:00
$howlong = NULL_DATE ;
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 " ,
dbesc ( $newname ),
intval ( local_user ())
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r )) {
2012-09-30 01:55:40 +02:00
$r = q ( " SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $lookup ),
intval ( local_user ())
);
2010-12-04 07:46:42 +01:00
}
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $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
2010-07-11 01:47:10 +02:00
$sexual = notags ( trim ( $_POST [ 'sexual' ]));
2016-09-25 17:28:00 +02:00
$xmpp = notags ( trim ( $_POST [ 'xmpp' ]));
2010-07-02 01:48:07 +02:00
$homepage = notags ( 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
}
2012-06-03 05:58:20 +02:00
$hometown = notags ( trim ( $_POST [ 'hometown' ]));
2010-07-11 01:47:10 +02:00
$politic = notags ( trim ( $_POST [ 'politic' ]));
$religion = notags ( trim ( $_POST [ 'religion' ]));
2017-01-27 04:57:53 +01: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-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
2017-11-07 03:22:52 +01:00
PConfig :: set ( local_user (), 'system' , 'detailled_profile' , (( $_POST [ 'detailled_profile' ] == 1 ) ? 1 : 0 ));
2012-04-13 06:10:32 +02:00
2018-01-15 14:05:12 +01:00
$changes = [];
2012-04-29 10:42:48 +02:00
$value = '' ;
2017-03-23 23:05:53 +01:00
if ( $is_default ) {
if ( $marital != $orig [ 0 ][ 'marital' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = '[color=#ff0000]♥[/color] ' . L10n :: t ( 'Marital Status' );
2012-04-29 10:42:48 +02:00
$value = $marital ;
}
2017-03-23 23:05:53 +01:00
if ( $withchanged ) {
2018-01-22 15:16:25 +01:00
$changes [] = '[color=#ff0000]♥[/color] ' . L10n :: t ( 'Romantic Partner' );
2012-04-29 10:42:48 +02:00
$value = strip_tags ( $with );
2012-06-25 06:16:55 +02:00
}
2017-03-23 23:05:53 +01:00
if ( $likes != $orig [ 0 ][ 'likes' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Likes' );
2012-06-25 06:16:55 +02:00
$value = $likes ;
}
2017-03-23 23:05:53 +01:00
if ( $dislikes != $orig [ 0 ][ 'dislikes' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Dislikes' );
2012-06-25 06:16:55 +02:00
$value = $dislikes ;
}
2017-03-23 23:05:53 +01:00
if ( $work != $orig [ 0 ][ 'work' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = 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' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Religion' );
2012-04-29 10:42:48 +02:00
$value = $religion ;
}
2017-03-23 23:05:53 +01:00
if ( $politic != $orig [ 0 ][ 'politic' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Political Views' );
2012-04-29 10:42:48 +02:00
$value = $politic ;
}
2017-03-23 23:05:53 +01:00
if ( $gender != $orig [ 0 ][ 'gender' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Gender' );
2012-04-29 10:42:48 +02:00
$value = $gender ;
}
2017-03-23 23:05:53 +01:00
if ( $sexual != $orig [ 0 ][ 'sexual' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Sexual Preference' );
2012-04-29 10:42:48 +02:00
$value = $sexual ;
}
2017-03-23 23:05:53 +01:00
if ( $xmpp != $orig [ 0 ][ 'xmpp' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'XMPP' );
2016-09-25 17:28:00 +02:00
$value = $xmpp ;
}
2017-03-23 23:05:53 +01:00
if ( $homepage != $orig [ 0 ][ 'homepage' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Homepage' );
2012-04-29 10:42:48 +02:00
$value = $homepage ;
}
2017-03-23 23:05:53 +01:00
if ( $interest != $orig [ 0 ][ 'interest' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Interests' );
2012-04-29 10:42:48 +02:00
$value = $interest ;
}
2017-03-23 23:05:53 +01:00
if ( $address != $orig [ 0 ][ 'address' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = 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' ]) {
2018-01-22 15:16:25 +01:00
$changes [] = L10n :: t ( 'Location' );
2012-05-26 00:56:18 +02:00
$comma1 = ((( $locality ) && ( $region || $country_name )) ? ', ' : ' ' );
$comma2 = (( $region && $country_name ) ? ', ' : '' );
$value = $locality . $comma1 . $region . $comma2 . $country_name ;
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 " ,
2010-07-02 01:48:07 +02:00
dbesc ( $profile_name ),
dbesc ( $name ),
2011-01-19 04:25:28 +01:00
dbesc ( $pdesc ),
2010-07-02 01:48:07 +02:00
dbesc ( $gender ),
2010-07-11 01:47:10 +02:00
dbesc ( $dob ),
2010-07-02 01:48:07 +02:00
dbesc ( $address ),
dbesc ( $locality ),
dbesc ( $region ),
dbesc ( $postal_code ),
dbesc ( $country_name ),
dbesc ( $marital ),
2010-12-04 07:46:42 +01:00
dbesc ( $with ),
2012-06-02 11:30:26 +02:00
dbesc ( $howlong ),
2010-07-11 01:47:10 +02:00
dbesc ( $sexual ),
2016-09-25 17:28:00 +02:00
dbesc ( $xmpp ),
2010-07-02 01:48:07 +02:00
dbesc ( $homepage ),
2012-06-03 05:58:20 +02:00
dbesc ( $hometown ),
2010-07-11 01:47:10 +02:00
dbesc ( $politic ),
dbesc ( $religion ),
2011-03-14 08:28:49 +01:00
dbesc ( $pub_keywords ),
dbesc ( $prv_keywords ),
2012-06-25 06:16:55 +02:00
dbesc ( $likes ),
dbesc ( $dislikes ),
2010-07-02 01:48:07 +02:00
dbesc ( $about ),
2010-07-11 01:47:10 +02:00
dbesc ( $interest ),
dbesc ( $contact ),
dbesc ( $music ),
dbesc ( $book ),
dbesc ( $tv ),
dbesc ( $film ),
dbesc ( $romance ),
dbesc ( $work ),
dbesc ( $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
);
2017-03-23 23:05:53 +01:00
if ( $r ) {
2018-01-22 15:16:25 +01:00
info ( 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 ) {
$r = q ( " UPDATE `user` set `username` = '%s' where `uid` = %d " ,
dbesc ( $name ),
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' ];
2017-11-07 03:22:52 +01:00
if ( $url && strlen ( 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 ()) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2013-01-12 13:58:54 +01:00
return ;
}
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
);
2017-11-08 04:57:46 +01:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Profile not found.' ) . EOL );
2010-07-02 01:48:07 +02:00
return ;
}
2018-01-15 14:05:12 +01:00
$a -> page [ 'htmlhead' ] .= replace_macros ( get_markup_template ( 'profed_head.tpl' ), [
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl ( true ),
2018-01-15 14:05:12 +01:00
]);
$a -> page [ 'end' ] .= replace_macros ( get_markup_template ( 'profed_end.tpl' ), [
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl ( true ),
2018-01-15 14:05:12 +01:00
]);
2012-04-11 03:08:06 +02:00
2011-05-11 13:37:13 +02:00
$opt_tpl = get_markup_template ( " profile-hide-friends.tpl " );
2018-01-15 14:05:12 +01:00
$hide_friends = replace_macros ( $opt_tpl ,[
'$yesno' => [
2014-06-27 18:12:15 +02:00
'hide-friends' , //Name
2018-01-22 15:16:25 +01:00
L10n :: t ( 'Hide contacts and friends:' ), //Label
2014-06-27 18:12:15 +02:00
!! $r [ 0 ][ 'hide-friends' ], //Value
'' , //Help string
2018-01-22 15:16:25 +01:00
[ L10n :: t ( 'No' ), L10n :: t ( 'Yes' )] //Off - On strings
2018-01-15 14:05:12 +01:00
],
2018-01-22 15:16:25 +01: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 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 " ],
2018-01-15 14:05:12 +01:00
[ PAGE_COMMUNITY , PAGE_PRVGROUP ]));
2012-04-11 03:08:06 +02:00
2017-11-07 03:22:52 +01:00
$detailled_profile = ( 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 );
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( " profile_edit.tpl " );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2015-10-25 09:15:36 +01:00
'$personal_account' => $personal_account ,
'$detailled_profile' => $detailled_profile ,
2018-01-15 14:05:12 +01:00
'$details' => [
2016-06-10 11:24:38 +02:00
'detailled_profile' , //Name
2018-01-22 15:16:25 +01:00
L10n :: t ( 'Show more profile fields:' ), //Label
2016-06-10 11:24:38 +02:00
$detailled_profile , //Value
'' , //Help string
2018-01-22 15:16:25 +01:00
[ L10n :: t ( 'No' ), 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' ),
2016-06-10 11:24:38 +02:00
'$form_security_token' => get_form_security_token ( " profile_edit " ),
'$form_security_token_photo' => get_form_security_token ( " profile_photo " ),
2017-12-04 15:01:27 +01: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 11:24:38 +02:00
'$profile_drop_link' => 'profiles/drop/' . $r [ 0 ][ 'id' ] . '?t=' . get_form_security_token ( " profile_drop " ),
2018-01-22 15:16:25 +01: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 11:24:38 +02:00
2010-07-20 04:09:58 +02:00
'$disabled' => (( $is_default ) ? 'onclick="return false;" style="color: #BBBBFF;"' : '' ),
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl ( true ),
2010-07-02 01:48:07 +02:00
'$profile_id' => $r [ 0 ][ 'id' ],
2018-01-22 15:16:25 +01:00
'$profile_name' => [ 'profile_name' , L10n :: t ( 'Profile Name:' ), $r [ 0 ][ 'profile-name' ], L10n :: t ( 'Required' ), '*' ],
2016-06-10 11:24:38 +02:00
'$is_default' => $is_default ,
2018-01-22 15:16:25 +01: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 18:25:58 +01:00
'$dob' => Temporal :: getDateofBirthField ( $r [ 0 ][ 'dob' ]),
2010-07-11 11:52:47 +02:00
'$hide_friends' => $hide_friends ,
2018-01-22 15:16:25 +01: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 18:25:58 +01:00
'$age' => (( intval ( $r [ 0 ][ 'dob' ])) ? '(' . L10n :: t ( 'Age: ' ) . Temporal :: getAgeByTimezone ( $r [ 0 ][ 'dob' ], $a -> user [ 'timezone' ], $a -> user [ 'timezone' ]) . ')' : '' ),
2018-01-15 16:15:00 +01:00
'$gender' => ContactSelector :: gender ( $r [ 0 ][ 'gender' ]),
'$marital' => ContactSelector :: maritalStatus ( $r [ 0 ][ 'marital' ]),
2018-01-22 15:16:25 +01: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 03:38:34 +01:00
'$howlong' => [ 'howlong' , L10n :: t ( 'Since [date]:' ), ( $r [ 0 ][ 'howlong' ] <= NULL_DATE ? '' : DateTimeFormat :: local ( $r [ 0 ][ 'howlong' ]))],
2018-01-15 16:15:00 +01:00
'$sexual' => ContactSelector :: sexualPreference ( $r [ 0 ][ 'sexual' ]),
2018-01-22 15:16:25 +01:00
'$about' => [ 'about' , L10n :: t ( 'Tell us about yourself...' ), $r [ 0 ][ 'about' ]],
2018-01-24 22:51:32 +01: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 15:16:25 +01: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 14:05:12 +01:00
]);
$arr = [ 'profile' => $r [ 0 ], 'entry' => $o ];
2018-01-17 19:42:40 +01:00
Addon :: callHooks ( '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 ()
);
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2014-06-28 01:30:10 +02:00
//Go to the default profile.
2017-03-24 22:40:25 +01:00
goaway ( '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
2017-11-08 04:57:46 +01:00
if ( DBM :: is_result ( $r )) {
2015-10-25 09:15:36 +01:00
2011-05-11 13:37:13 +02:00
$tpl = get_markup_template ( 'profile_entry.tpl' );
2016-12-20 21:15:53 +01:00
$profiles = '' ;
foreach ( $r as $rr ) {
2018-01-15 14:05:12 +01:00
$profiles .= replace_macros ( $tpl , [
2016-12-20 21:15:53 +01:00
'$photo' => $a -> remove_baseurl ( $rr [ 'thumb' ]),
'$id' => $rr [ 'id' ],
2018-01-22 15:16:25 +01:00
'$alt' => L10n :: t ( 'Profile Image' ),
2011-04-13 06:21:33 +02:00
'$profile_name' => $rr [ 'profile-name' ],
2018-01-22 15:16:25 +01: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 14:05:12 +01:00
]);
2010-07-02 01:48:07 +02:00
}
2016-06-10 11:24:38 +02:00
$tpl_header = get_markup_template ( 'profile_listing_header.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl_header ,[
2018-01-22 15:16:25 +01:00
'$header' => L10n :: t ( 'Edit/Manage Profiles' ),
'$chg_photo' => L10n :: t ( 'Change profile photo' ),
'$cr_new' => L10n :: t ( 'Create New Profile' ),
2016-06-10 11:24:38 +02:00
'$cr_new_link' => 'profiles/new?t=' . get_form_security_token ( " 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
}