2010-07-01 23:48:07 +00:00
< ? php
function profiles_post ( & $a ) {
if ( ! local_user ()) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-08-09 04:03:08 +00:00
$namechanged = false ;
2011-01-20 23:30:45 +00:00
call_hooks ( 'profile_post' , $_POST );
2010-09-27 00:24:20 +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
);
2010-08-09 04:03:08 +00:00
if ( ! count ( $orig )) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile not found.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
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' ]));
if ( ! strlen ( $profile_name )) {
2010-08-19 11:59:31 +00:00
notify ( t ( 'Profile Name is required.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-07-10 23:47:10 +00:00
$year = intval ( $_POST [ 'year' ]);
if ( $year < 1900 || $year > 2100 || $year < 0 )
$year = 0 ;
$month = intval ( $_POST [ 'month' ]);
if (( $month > 12 ) || ( $month < 0 ))
$month = 0 ;
$mtab = array ( 0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 );
$day = intval ( $_POST [ 'day' ]);
if (( $day > $mtab [ $month ]) || ( $day < 0 ))
$day = 0 ;
$dob = '0000-00-00' ;
$dob = sprintf ( '%04d-%02d-%02d' , $year , $month , $day );
2010-07-01 23:48:07 +00:00
$name = notags ( trim ( $_POST [ 'name' ]));
2010-08-09 04:03:08 +00:00
if ( $orig [ 0 ][ 'name' ] != $name )
$namechanged = true ;
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' ]));
2010-12-20 01:46:26 +00:00
$keywords = notags ( trim ( $_POST [ 'keywords' ]));
2010-08-19 12:29:43 +00:00
$marital = notags ( trim ( $_POST [ 'marital' ]));
2010-08-10 05:58:58 +00:00
if ( $marital != $orig [ 0 ][ 'marital' ])
$maritalchanged = true ;
2010-12-04 06:46:42 +00:00
$with = (( x ( $_POST , 'with' )) ? notags ( trim ( $_POST [ 'with' ])) : '' );
// linkify the relationship target if applicable
if ( strlen ( $with )) {
if ( $with != strip_tags ( $orig [ 0 ][ 'with' ])) {
$prf = '' ;
$lookup = $with ;
if (( strpos ( $lookup , '@' )) || ( strpos ( $lookup , 'http://' ))) {
$newname = $lookup ;
$links = @ lrdd ( $lookup );
if ( count ( $links )) {
foreach ( $links as $link ) {
if ( $link [ '@attributes' ][ 'rel' ] === 'http://webfinger.net/rel/profile-page' ) {
$prf = $link [ '@attributes' ][ 'href' ];
}
}
}
}
else {
$newname = $lookup ;
if ( strstr ( $lookup , ' ' )) {
$r = q ( " SELECT * FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $newname ),
intval ( local_user ())
);
}
else {
$r = q ( " SELECT * FROM `contact` WHERE `nick` = '%s' AND `uid` = %d LIMIT 1 " ,
dbesc ( $lookup ),
intval ( local_user ())
);
}
if ( count ( $r )) {
$prf = $r [ 0 ][ 'url' ];
$newname = $r [ 0 ][ 'name' ];
}
}
if ( $prf ) {
$with = str_replace ( $lookup , '<a href="' . $prf . '">' . $newname . '</a>' , $with );
}
}
else
$with = $orig [ 0 ][ 'with' ];
}
2010-07-10 23:47:10 +00:00
$sexual = notags ( trim ( $_POST [ 'sexual' ]));
2010-07-01 23:48:07 +00:00
$homepage = notags ( trim ( $_POST [ 'homepage' ]));
2010-07-10 23:47:10 +00:00
$politic = notags ( trim ( $_POST [ 'politic' ]));
$religion = notags ( trim ( $_POST [ 'religion' ]));
$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' ]));
2010-08-20 05:04:18 +00:00
$hide_friends = (( $_POST [ 'hide-friends' ] == 1 ) ? 1 : 0 );
2010-08-19 11:59:31 +00:00
2010-07-01 23:48:07 +00:00
$r = q ( " UPDATE `profile`
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' ,
2010-07-10 23:47:10 +00:00
`sexual` = '%s' ,
2010-07-01 23:48:07 +00:00
`homepage` = '%s' ,
2010-07-10 23:47:10 +00:00
`politic` = '%s' ,
`religion` = '%s' ,
2010-12-20 01:46:26 +00:00
`keywords` = '%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' ,
`hide-friends` = % d
2010-07-01 23:48:07 +00:00
WHERE `id` = % d AND `uid` = % d LIMIT 1 " ,
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 ),
2010-07-10 23:47:10 +00:00
dbesc ( $sexual ),
2010-07-01 23:48:07 +00:00
dbesc ( $homepage ),
2010-07-10 23:47:10 +00:00
dbesc ( $politic ),
dbesc ( $religion ),
2010-12-20 01:46:26 +00:00
dbesc ( $keywords ),
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 ]),
intval ( $_SESSION [ 'uid' ])
);
if ( $r )
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile updated.' ) . EOL );
2010-07-09 10:10:28 +00:00
2010-08-09 04:03:08 +00:00
if ( $namechanged && $is_default ) {
$r = q ( " UPDATE `contact` SET `name-date` = '%s' WHERE `self` = 1 AND `uid` = %d LIMIT 1 " ,
dbesc ( datetime_convert ()),
2010-11-25 00:35:35 +00:00
intval ( local_user ())
2010-08-09 04:03:08 +00:00
);
}
2010-08-20 05:04:18 +00:00
2010-08-19 11:59:31 +00:00
if ( $is_default ) {
// Update global directory in background
$url = $_SESSION [ 'my_url' ];
if ( $url && strlen ( get_config ( 'system' , 'directory_submit_url' )))
2011-02-23 23:16:12 +00:00
proc_run ( 'php' , " include/directory.php " , " $url " );
2010-08-19 11:59:31 +00:00
}
2010-07-01 23:48:07 +00:00
}
}
function profiles_content ( & $a ) {
2011-01-19 03:25:28 +00:00
2010-10-31 23:38:22 +00:00
$o = '' ;
2010-09-19 04:11:18 +00:00
$o .= '<script> $(document).ready(function() { $(\'#nav-profiles-link\').addClass(\'nav-selected\'); });</script>' ;
2010-11-25 00:35:35 +00:00
2010-07-01 23:48:07 +00:00
if ( ! local_user ()) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-09-27 00:24:20 +00:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === " drop " ) && intval ( $a -> argv [ 2 ])) {
2010-09-09 03:14:17 +00:00
$r = q ( " SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 AND `self` = 0 LIMIT 1 " ,
2010-07-10 23:47:10 +00:00
intval ( $a -> argv [ 2 ]),
2010-11-25 00:35:35 +00:00
intval ( local_user ())
2010-07-10 23:47:10 +00:00
);
if ( ! count ( $r )) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile not found.' ) . EOL );
2010-07-10 23:47:10 +00:00
goaway ( $a -> get_baseurl () . '/profiles' );
return ; // NOTREACHED
}
// 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 " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()),
2010-07-10 23:47:10 +00:00
intval ( $a -> argv [ 2 ]),
2010-11-25 00:35:35 +00:00
intval ( local_user ())
2010-07-10 23:47:10 +00:00
);
$r = q ( " DELETE FROM `profile` WHERE `id` = %d LIMIT 1 " ,
intval ( $a -> argv [ 2 ])
);
if ( $r )
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile deleted.' ) . EOL );
2010-07-10 23:47:10 +00:00
goaway ( $a -> get_baseurl () . '/profiles' );
return ; // NOTREACHED
}
2010-09-27 00:24:20 +00:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] === 'new' )) {
2010-07-01 23:48:07 +00:00
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()));
2010-07-01 23:48:07 +00:00
$num_profiles = count ( $r0 );
2010-08-19 11:59:31 +00:00
$name = t ( 'Profile-' ) . ( $num_profiles + 1 );
2010-07-01 23:48:07 +00:00
$r1 = q ( " SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1 " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()));
2010-07-01 23:48:07 +00:00
$r2 = q ( " INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
VALUES ( % d , '%s' , '%s' , '%s' , '%s' ) " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()),
2010-07-01 23:48:07 +00:00
dbesc ( $name ),
dbesc ( $r1 [ 0 ][ 'name' ]),
dbesc ( $r1 [ 0 ][ 'photo' ]),
2011-01-02 22:26:23 +00:00
dbesc ( $r1 [ 0 ][ 'thumb' ])
2010-07-01 23:48:07 +00:00
);
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()),
2010-07-01 23:48:07 +00:00
dbesc ( $name )
);
2011-01-02 22:26:23 +00:00
2010-08-19 11:59:31 +00:00
notice ( t ( 'New profile created.' ) . EOL );
2010-07-01 23:48:07 +00:00
if ( count ( $r3 ) == 1 )
goaway ( $a -> get_baseurl () . '/profiles/' . $r3 [ 0 ][ 'id' ]);
goaway ( $a -> get_baseurl () . '/profiles' );
}
2010-09-27 00:24:20 +00:00
if (( $a -> argc > 2 ) && ( $a -> argv [ 1 ] === 'clone' )) {
2010-07-09 23:28:50 +00:00
$r0 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()));
2010-07-09 23:28:50 +00:00
$num_profiles = count ( $r0 );
2010-08-19 11:59:31 +00:00
$name = t ( 'Profile-' ) . ( $num_profiles + 1 );
2010-07-09 23:28:50 +00:00
$r1 = q ( " SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()),
2010-07-09 23:28:50 +00:00
intval ( $a -> argv [ 2 ])
);
if ( ! count ( $r1 )) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile unavailable to clone.' ) . EOL );
2010-07-09 23:28:50 +00:00
return ;
}
unset ( $r1 [ 0 ][ 'id' ]);
$r1 [ 0 ][ 'is-default' ] = 0 ;
$r1 [ 0 ][ 'publish' ] = 0 ;
2010-08-20 05:04:18 +00:00
$r1 [ 0 ][ 'net-publish' ] = 0 ;
2010-07-09 23:28:50 +00:00
$r1 [ 0 ][ 'profile-name' ] = dbesc ( $name );
2010-07-09 23:45:43 +00:00
dbesc_array ( $r1 [ 0 ]);
2010-11-09 23:11:47 +00:00
$r2 = dbq ( " INSERT INTO `profile` (` "
2010-07-09 23:28:50 +00:00
. implode ( " `, ` " , array_keys ( $r1 [ 0 ]))
. " `) VALUES (' "
. implode ( " ', ' " , array_values ( $r1 [ 0 ]))
. " ') " );
$r3 = q ( " SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1 " ,
2010-11-25 00:35:35 +00:00
intval ( local_user ()),
2010-07-09 23:28:50 +00:00
dbesc ( $name )
);
2010-08-19 11:59:31 +00:00
notice ( t ( 'New profile created.' ) . EOL );
2010-07-09 23:28:50 +00:00
if ( count ( $r3 ) == 1 )
goaway ( $a -> get_baseurl () . '/profiles/' . $r3 [ 0 ][ 'id' ]);
goaway ( $a -> get_baseurl () . '/profiles' );
return ; // NOTREACHED
}
2010-10-31 23:40:09 +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
);
if ( ! count ( $r )) {
2010-08-19 11:59:31 +00:00
notice ( t ( 'Profile not found.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-07-20 02:09:58 +00:00
profile_load ( $a , $a -> user [ 'nickname' ], $r [ 0 ][ 'id' ]);
2010-07-01 23:48:07 +00:00
2010-11-16 05:06:44 +00:00
require_once ( 'include/profile_selectors.php' );
2010-07-01 23:48:07 +00:00
2010-09-23 01:00:19 +00:00
$tpl = load_view_file ( 'view/profed_head.tpl' );
2010-08-19 11:59:31 +00:00
2010-09-23 01:00:19 +00:00
$opt_tpl = load_view_file ( " view/profile-hide-friends.tpl " );
2010-07-11 09:52:47 +00:00
$hide_friends = replace_macros ( $opt_tpl , array (
'$yes_selected' => (( $r [ 0 ][ 'hide-friends' ]) ? " checked= \" checked \" " : " " ),
'$no_selected' => (( $r [ 0 ][ 'hide-friends' ] == 0 ) ? " checked= \" checked \" " : " " )
));
2010-07-01 23:48:07 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( $tpl , array ( '$baseurl' => $a -> get_baseurl ()));
2010-07-09 14:02:22 +00:00
$a -> page [ 'htmlhead' ] .= " <script type= \" text/javascript \" src= \" include/country.js \" ></script> " ;
2010-07-10 14:09:57 +00:00
2010-07-01 23:48:07 +00:00
$is_default = (( $r [ 0 ][ 'is-default' ]) ? 1 : 0 );
2010-09-23 01:00:19 +00:00
$tpl = load_view_file ( " view/profile_edit.tpl " );
2010-07-01 23:48:07 +00:00
$o .= replace_macros ( $tpl , array (
2010-07-20 02:09:58 +00:00
'$disabled' => (( $is_default ) ? 'onclick="return false;" style="color: #BBBBFF;"' : '' ),
2010-07-01 23:48:07 +00:00
'$baseurl' => $a -> get_baseurl (),
'$profile_id' => $r [ 0 ][ 'id' ],
'$profile_name' => $r [ 0 ][ 'profile-name' ],
2010-08-19 11:59:31 +00:00
'$default' => (( $is_default ) ? '<p id="profile-edit-default-desc">' . t ( 'This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.' ) . '</p>' : " " ),
2010-07-01 23:48:07 +00:00
'$name' => $r [ 0 ][ 'name' ],
2011-01-19 03:25:28 +00:00
'$pdesc' => $r [ 0 ][ 'pdesc' ],
2010-07-10 14:09:57 +00:00
'$dob' => dob ( $r [ 0 ][ 'dob' ]),
2010-07-11 09:52:47 +00:00
'$hide_friends' => $hide_friends ,
2010-07-01 23:48:07 +00:00
'$address' => $r [ 0 ][ 'address' ],
'$locality' => $r [ 0 ][ 'locality' ],
'$region' => $r [ 0 ][ 'region' ],
'$postal_code' => $r [ 0 ][ 'postal-code' ],
'$country_name' => $r [ 0 ][ 'country-name' ],
2010-08-19 11:59:31 +00:00
'$age' => (( intval ( $r [ 0 ][ 'dob' ])) ? '(' . t ( 'Age: ' ) . age ( $r [ 0 ][ 'dob' ], $a -> user [ 'timezone' ], $a -> user [ 'timezone' ]) . ')' : '' ),
2010-07-01 23:48:07 +00:00
'$gender' => gender_selector ( $r [ 0 ][ 'gender' ]),
'$marital' => marital_selector ( $r [ 0 ][ 'marital' ]),
2010-12-04 06:46:42 +00:00
'$with' => strip_tags ( $r [ 0 ][ 'with' ]),
2010-07-10 14:09:57 +00:00
'$sexual' => sexpref_selector ( $r [ 0 ][ 'sexual' ]),
2010-07-01 23:48:07 +00:00
'$about' => $r [ 0 ][ 'about' ],
'$homepage' => $r [ 0 ][ 'homepage' ],
2010-07-10 15:18:58 +00:00
'$politic' => $r [ 0 ][ 'politic' ],
'$religion' => $r [ 0 ][ 'religion' ],
2010-12-20 01:46:26 +00:00
'$keywords' => $r [ 0 ][ 'keywords' ],
2010-07-10 15:18:58 +00:00
'$music' => $r [ 0 ][ 'music' ],
'$book' => $r [ 0 ][ 'book' ],
'$tv' => $r [ 0 ][ 'tv' ],
'$film' => $r [ 0 ][ 'film' ],
'$interest' => $r [ 0 ][ 'interest' ],
'$romance' => $r [ 0 ][ 'romance' ],
'$work' => $r [ 0 ][ 'work' ],
'$education' => $r [ 0 ][ 'education' ],
2010-08-20 05:04:18 +00:00
'$contact' => $r [ 0 ][ 'contact' ]
2010-07-01 23:48:07 +00:00
));
2011-01-20 23:30:45 +00:00
$arr = array ( 'profile' => $r [ 0 ], 'entry' => $o );
call_hooks ( 'profile_edit' , $arr );
2010-07-01 23:48:07 +00:00
return $o ;
}
else {
$r = q ( " SELECT * FROM `profile` WHERE `uid` = %d " ,
2010-11-25 00:35:35 +00:00
local_user ());
2010-07-01 23:48:07 +00:00
if ( count ( $r )) {
2010-09-23 01:00:19 +00:00
$o .= load_view_file ( 'view/profile_listing_header.tpl' );
$tpl_default = load_view_file ( 'view/profile_entry_default.tpl' );
$tpl = load_view_file ( 'view/profile_entry.tpl' );
2010-07-01 23:48:07 +00:00
foreach ( $r as $rr ) {
$template = (( $rr [ 'is-default' ]) ? $tpl_default : $tpl );
$o .= replace_macros ( $template , array (
'$photo' => $rr [ 'thumb' ],
'$id' => $rr [ 'id' ],
2011-01-12 20:44:22 +00:00
'$alt' => t ( 'Profile Image' ),
2010-07-01 23:48:07 +00:00
'$profile_name' => $rr [ 'profile-name' ]
));
}
}
return $o ;
}
}