<?php |
|
include_once $_SERVER [ 'PHP_ROOT' ]. '/html/init.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/home.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/requests.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/feed/newsfeed.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/poke.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/share.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/orientation.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/feed/newsfeed.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/mobile/register.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/forms_lib.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/contact_importer/contact_importer.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/feed/util.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/hiding_prefs.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/abtesting.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/friends.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/statusupdates.php' ; |
|
// lib/display/feed.php has to be declared here for scope issues. |
// This keeps display/feed.php cleaner and easier to understand. |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/display/feed.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/monetization_box.php' ; |
|
// require login |
$user = require_login(); |
print_time( 'require_login' ); |
param_request( array ( 'react' = > $PARAM_EXISTS )); |
|
// Check and fix broken emails |
// LN - disabling due to excessive can_see dirties and sets when enabled. |
//check_and_fix_broken_emails($user); |
// migrate AIM screenname from profile to screenname table if needed |
migrate_screenname( $user ); |
|
// homepage announcement variables |
$HIDE_ANNOUNCEMENT_BIT = get_site_variable( 'HIDE_ANNOUNCEMENT_BIT' ); |
$HIDE_INTRO_BITMASK = get_site_variable( 'HIDE_INTRO_BITMASK' ); |
|
// redirects |
if (is_sponsor_user()) { |
redirect( 'bizhome.php' , 'www' ); |
} |
|
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/mesg.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/invitetool.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/grammar.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/securityq.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/events.php' ; |
include_once $_SERVER [ 'PHP_ROOT' ]. '/lib/rooster/stories.php' ; |
|
// todo: password confirmation redirects here (from html/reset.php), |
// do we want a confirmation message? |
param_get_slashed( array ( |
'feeduser' = > $PARAM_INT , //debug: gets feed for user here |
'err' = > $PARAM_STRING , // returning from a failed entry on an orientation form |
'error' = > $PARAM_STRING , // an error can also be here because the profile photo upload code is crazy |
'ret' = > $PARAM_INT , 'success' = > $PARAM_INT , // successful profile picture upload |
'jn' = > $PARAM_INT , // joined a network for orientation |
'np' = > $PARAM_INT , // network pending (for work/address network) |
'me' = > $PARAM_STRING , // mobile error |
'mr' = > $PARAM_EXISTS , // force mobile reg view |
'mobile' = > $PARAM_EXISTS , // mobile confirmation code sent |
'jif' = > $PARAM_EXISTS , // just imported friends |
'ied' = > $PARAM_STRING , // import email domain |
'o' = > $PARAM_EXISTS , // first time orientation, passed on confirm |
'verified' = > $PARAM_EXISTS )); // verified mobile phone |
|
param_post( array ( |
'leave_orientation' = > $PARAM_EXISTS , |
'show_orientation' = > $PARAM_INT , // show an orientation step |
'hide_orientation' = > $PARAM_INT )); // skip an orientation step |
|
// homepage actions |
if ( $req_react && validate_expiring_hash( $req_react , $GLOBALS [ 'url_md5key' ])) { |
$show_reactivated_message = true; |
} else { |
$show_reactivated_message = false; |
} |
tpl_set( 'show_reactivated_message' , $show_reactivated_message ); |
|
|
// upcoming events |
events_check_future_events( $user ); // make sure big tunas haven't moved around |
$upcoming_events = events_get_imminent_for_user( $user ); |
|
// this is all stuff that can be fetched together! |
$upcoming_events_short = array (); |
obj_multiget_short( array_keys ( $upcoming_events ), true, $upcoming_events_short ); |
$new_pokes = 0; |
|
//only get the next N pokes for display |
//where N is set in the dbget to avoid caching issues |
$poke_stats = get_num_pokes( $user ); |
get_next_pokes( $user , true, $new_pokes ); |
$poke_count = $poke_stats [ 'unseen' ]; |
|
$targeted_data = array (); |
home_get_cache_targeted_data( $user , true, $targeted_data ); |
$announcement_data = array (); |
home_get_cache_announcement_data( $user , true, $announcement_data ); |
$orientation = 0; |
orientation_get_status( $user , true, $orientation ); |
$short_profile = array (); |
profile_get_short( $user , true, $short_profile ); |
|
// pure priming stuff |
privacy_get_network_settings( $user , true); |
$presence = array (); |
mobile_get_presence_data( $user , true, $presence ); |
feedback_get_event_weights( $user , true); |
|
// Determine if we want to display the feed intro message |
$intro_settings = 0; |
user_get_hide_intro_bitmask( $user , true, $intro_settings ); |
$user_friend_finder = true; |
contact_importer_get_used_friend_finder( $user , true, $used_friend_finder ); |
$all_requests = requests_get_cache_data( $user ); |
|
// FIXME?: is it sub-optimal to call this both in requests_get_cache_data and here? |
$friends_status = statusupdates_get_recent( $user , null, 3); |
memcache_dispatch(); // populate cache data |
|
// Merman's Admin profile always links to the Merman's home |
if (user_has_obj_attached( $user )) { |
redirect( 'mhome.php' , 'www' ); |
} |
|
if ( is_array ( $upcoming_events )) { |
foreach ( $upcoming_events as $event_id = > $data ) { |
$upcoming_events [ $event_id ][ 'name' ] = txt_set( $upcoming_events_short [ $event_id ][ 'name' ]); |
} |
} |
|
tpl_set( 'upcoming_events' , $upcoming_events ); |
|
// disabled account actions |
$disabled_warning = ((IS_DEV_SITE || IS_QA_SITE) && is_disabled_user( $user )); |
tpl_set( 'disabled_warning' , $disabled_warning ); |
|
// new pokes (no more messages here, they are in the top nav!) |
if (!user_is_guest( $user )) { |
tpl_set( 'poke_count' , $poke_count ); |
tpl_set( 'pokes' , $new_pokes ); |
} |
|
// get announcement computations |
tpl_set( 'targeted_data' , $targeted_data ); |
tpl_set( 'announcement_data' , $announcement_data ); |
|
|
// birthday notifications |
tpl_set( 'birthdays' , $birthdays = user_get_birthday_notifications( $user , $short_profile )); |
tpl_set( 'show_birthdays' , $show_birthdays = ( count ( $birthdays ) || ! $orientation )); |
|
// user info |
tpl_set( 'first_name' , user_get_first_name(txt_set( $short_profile [ 'id' ]))); |
tpl_set( 'user' , $user ); |
|
// decide if there are now any requests to show |
$show_requests = false; |
foreach ( $all_requests as $request_category ) { |
if ( $request_category ) { |
$show_requests = true; |
break ; |
} |
} |
tpl_set( 'all_requests' , $show_requests ? $all_requests : null); |
|
$permissions = privacy_get_reduced_network_permissions( $user , $user ); |
|
// status |
$user_info = array ( 'user' = > $user , 'firstname' = > user_get_first_name( $user ), 'see_all' = > '/statusupdates/?ref=hp' , 'profile_pic' = > make_profile_image_src_direct( $user , 'thumb' ), 'square_pic' = > make_profile_image_src_direct( $user , 'square' )); |
|
if (! empty ( $presence ) && $presence [ 'status_time' ] > (time() - 60 * 60 * 24 * 7)) { |
$status = array ( 'message' = > txt_set( $presence [ 'status' ]), 'time' = > $presence [ 'status_time' ], 'source' = > $presence [ 'status_source' ]); |
} else { |
$status = array ( 'message' = > null, 'time' = > null, 'source' = > null); |
} |
tpl_set( 'user_info' , $user_info ); |
|
tpl_set( 'show_status' , $show_status = ! $orientation ); |
tpl_set( 'status' , $status ); |
tpl_set( 'status_custom' , $status_custom = mobile_get_status_custom( $user )); |
tpl_set( 'friends_status' , $friends_status ); |
|
// orientation |
if ( $orientation ) { |
if ( $post_leave_orientation ) { |
orientation_update_status( $user , $orientation , 2); |
notification_notify_exit_orientation( $user ); |
dirty_user( $user ); |
redirect( 'home.php' ); |
} else if (orientation_eligible_exit( array ( 'uid' = > $user )) == 2) { |
orientation_update_status( $user , $orientation , 1); |
notification_notify_exit_orientation( $user ); |
dirty_user( $user ); |
redirect( 'home.php' ); |
} |
} |
|
// timezone - outside of stealth, update user's timezone if necessary |
$set_time = !user_is_alpha( $user , 'stealth' ); |
tpl_set( 'timezone_autoset' , $set_time ); |
if ( $set_time ) { |
$daylight_savings = get_site_variable( 'DAYLIGHT_SAVINGS_ON' ); |
tpl_set( 'timezone' , $short_profile [ 'timezone' ] - ( $daylight_savings ? 4 : 5)); |
} |
|
// set next step if we can |
if (! $orientation ) { |
user_set_next_step( $user , $short_profile ); |
} |
|
// note: don't make this an else with the above statement, because then no news feed stories will be fetched if they're exiting orientation |
if ( $orientation ) { |
extract(orientation_get_const()); |
|
require_js( 'js/dynamic_dialog.js' ); |
require_js( 'js/suggest.js' ); |
require_js( 'js/typeahead_ns.js' ); |
require_js( 'js/suggest.js' ); |
require_js( 'js/editregion.js' ); |
require_js( 'js/orientation.js' ); |
require_css( 'css/typeahead.css' ); |
require_css( 'css/editor.css' ); |
|
if ( $post_hide_orientation && $post_hide_orientation <= $ORIENTATION_MAX ) { |
$orientation [ 'orientation_bitmask' ] |= ( $post_hide_orientation * $ORIENTATION_SKIPPED_MODIFIER ); |
orientation_update_status( $user , $orientation ); |
} else if ( $post_show_orientation && $post_show_orientation <= $ORIENTATION_MAX ) { |
$orientation [ 'orientation_bitmask' ] &= ~ ( $post_show_orientation * $ORIENTATION_SKIPPED_MODIFIER ); |
orientation_update_status( $user , $orientation ); |
} |
|
$stories = orientation_get_stories( $user , $orientation ); |
switch ( $get_err ) { |
case $ORIENTATION_ERR_COLLEGE : |
$temp = array (); // the affil_retval_msg needs some parameters won't be used |
$stories [ $ORIENTATION_NETWORK ][ 'failed_college' ] = affil_retval_msg( $get_ret , $temp , $temp ); |
break ; |
case $ORIENTATION_ERR_CORP : |
$temp = array (); |
// We special case the network not recognized error here, because affil_retval_msg is retarded. |
$stories [ $ORIENTATION_NETWORK ][ 'failed_corp' ] = ( $get_ret == 70) ? 'The email you entered did not match any of our supported networks. ' . 'Click here to see our supported list. ' . 'Go here to suggest your network for the future.' : affil_retval_msg( $get_ret , $temp , $temp ); |
break ; |
} |
|
// photo upload error |
if ( $get_error ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_PROFILE ]][ 'upload_error' ] = pic_get_error_text( $get_error ); |
} |
// photo upload success |
else if ( $get_success == 1) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_PROFILE ]][ 'uploaded_pic' ] = true; |
// join network success |
} else if ( $get_jn ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_NETWORK ]][ 'joined' ] = array ( 'id' = > $get_jn , 'name' = > network_get_name( $get_jn )); |
// network join pending |
} else if ( $get_np ) { |
|
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_NETWORK ]][ 'join_pending' ] = array ( 'id' = > $get_np , 'email' = > get_affil_email_conf( $user , $get_np ), 'network' = > network_get_name( $get_np )); |
// just imported friend confirmation |
} else if ( $get_jif ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_NETWORK ]][ 'just_imported_friends' ] = true; |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_NETWORK ]][ 'domain' ] = $get_ied ; |
} |
|
// Mobile web API params |
if ( $get_mobile ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_MOBILE ]][ 'sent_code' ] = true; |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_MOBILE ]][ 'view' ] = 'confirm' ; |
} |
if ( $get_verified ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_MOBILE ]][ 'verified' ] = true; |
} |
if ( $get_me ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_MOBILE ]][ 'error' ] = $get_me ; |
} |
if ( $get_mr ) { |
$stories [ $ORIENTATION_ORDER [ $ORIENTATION_MOBILE ]][ 'view' ] = 'register' ; |
} |
|
if (orientation_eligible_exit( $orientation )) { |
tpl_set( 'orientation_show_exit' , true); |
} |
tpl_set( 'orientation_stories' , $stories ); |
|
//if in orientation, we hide all feed intros (all 1's in bitmask) |
$intro_settings = -1; |
|
} |
tpl_set( 'orientation' , $orientation ); |
|
// Rooster Stories |
if (! $orientation && ((get_site_variable( 'ROOSTER_ENABLED' ) == 2) || (get_site_variable( 'ROOSTER_DEV_ENABLED' ) == 2))) { |
$rooster_story_count = get_site_variable( 'ROOSTER_STORY_COUNT' ); |
if (!isset( $rooster_story_count )) { |
// Set default if something is wrong with the sitevar |
$rooster_story_count = 2; |
} |
$rooster_stories = rooster_get_stories( $user , $rooster_story_count , $log_omissions = true); |
if (! empty ( $rooster_stories ) && ! empty ( $rooster_stories [ 'stories' ])) { |
// Do page-view level logging here |
foreach ( $rooster_stories [ 'stories' ] as $story ) { |
rooster_log_action( $user , $story , ROOSTER_LOG_ACTION_VIEW); |
} |
tpl_set( 'rooster_stories' , $rooster_stories ); |
} |
} |
|
// set the variables for the home announcement code |
$hide_announcement_tpl = ( $intro_settings | $HIDE_INTRO_BITMASK ) & $HIDE_ANNOUNCEMENT_BIT ; |
// if on qa/dev site, special rules |
$HIDE_INTRO_ON_DEV = get_site_variable( 'HIDE_INTRO_ON_DEV' ); |
if ((IS_QA_SITE || IS_DEV_SITE) && ! $HIDE_INTRO_ON_DEV ) { |
$hide_announcement_tpl = 0; |
} |
|
tpl_set( 'hide_announcement' , $hide_announcement_tpl ); |
if ( $is_candidate = is_candidate_user( $user )) { |
tpl_set( 'hide_announcement' , false); |
} |
$home_announcement_tpl = ! $hide_announcement_tpl || $is_candidate ? home_get_announcement_info( $user ) : 0; |
tpl_set( 'home_announcement' , $home_announcement_tpl ); |
tpl_set( 'hide_announcement_bit' , $HIDE_ANNOUNCEMENT_BIT ); |
|
$show_friend_finder = ! $orientation && contact_importer_enabled( $user ) && !user_get_hiding_pref( $user , 'home_friend_finder' ); |
tpl_set( 'show_friend_finder' , $show_friend_finder ); |
if ( $show_friend_finder && (user_get_friend_count( $user ) > 20)) { |
tpl_set( 'friend_finder_hide_options' , array ( 'text' = > 'close' , 'onclick' = > "return clearFriendFinder()" )); |
} else { |
tpl_set( 'friend_finder_hide_options' , null); |
} |
|
$account_info = user_get_account_info( $user ); |
$account_create_time = $account_info [ 'time' ]; |
|
tpl_set( 'show_friend_finder_top' , ! $used_friend_finder ); |
|
tpl_set( 'user' , $user ); |
|
|
// MONETIZATION BOX |
$minimize_monetization_box = user_get_hiding_pref( $user , 'home_monetization' ); |
$show_monetization_box = (! $orientation && get_site_variable( 'HOMEPAGE_MONETIZATION_BOX' )); |
tpl_set( 'show_monetization_box' , $show_monetization_box ); |
tpl_set( 'minimize_monetization_box' , $minimize_monetization_box ); |
|
if ( $show_monetization_box ) { |
$monetization_box_data = monetization_box_user_get_data( $user ); |
txt_set( 'monetization_box_data' , $monetization_box_data ); |
} |
|
|
// ORIENTATION |
if ( $orientation ) { |
$network_ids = id_get_networks( $user ); |
$network_names = multiget_network_name( $network_ids ); |
$in_corp_network = in_array( $GLOBALS [ 'TYPE_CORP' ], array_map ( 'extract_network_type' , $network_ids )); |
$show_corp_search = $in_corp_network || get_age(user_get_basic_info_attr( $user , 'birthday' )) >= 21; |
$pending_hs = is_hs_pending_user( $user ); |
$hs_id = null; |
$hs_name = null; |
if ( $pending_hs ) { |
foreach (id_get_pending_networks( $user ) as $network ) { |
if (extract_network_type( $network [ 'network_key' ]) == $GLOBALS [ 'TYPE_HS' ]) { |
$hs_id = $network [ 'network_key' ]; |
$hs_name = network_get_name( $hs_id ); |
break ; |
} |
} |
} |
//$orientation_people = orientation_get_friend_and_inviter_ids($user); |
$orientation_people = array ( 'friends' = > user_get_all_friends( $user ), 'pending' = > array_keys (user_get_friend_requests( $user )), 'inviters' = > array (), // wc: don't show inviters for now |
); |
$orientation_info = array_merge ( $orientation_people , array ( 'network_names' = > $network_names , 'show_corp_search' = > $show_corp_search , 'pending_hs' = > array ( 'hs_id' = > $hs_id , 'hs_name' = > $hs_name ), 'user' = > $user , )); |
tpl_set( 'orientation_info' , $orientation_info ); |
|
tpl_set( 'simple_orientation_first_login' , $get_o ); // unused right now |
} |
|
|
// Roughly determine page length for ads |
// first, try page length using right-hand panel |
$ads_page_length_data = 3 + // 3 for profile pic + next step |
( $show_friend_finder ? 1 : 0) + ( $show_status ? ( $status_custom ? count ( $friends_status ) : 0) : 0) + ( $show_monetization_box ? 1 : 0) + ( $show_birthdays ? count ( $birthdays ) : 0) + count ( $new_pokes ); |
|
// page length using feed stories |
if ( $orientation ) { |
$ads_page_length_data = max( $ads_page_length_data , count ( $stories ) * 5); |
} |
tpl_set( 'ads_page_length_data' , $ads_page_length_data ); |
|
$feed_stories = null; |
if (! $orientation ) { // if they're not in orientation they get other cool stuff |
// ad_insert: the ad type to try to insert for the user |
// (0 if we don't want to try an insert) |
$ad_insert = get_site_variable( 'FEED_ADS_ENABLE_INSERTS' ); |
|
$feed_off = false; |
|
if (check_super( $user ) && $get_feeduser ) { |
$feed_stories = user_get_displayable_stories( $get_feeduser , 0, null, $ad_insert ); |
} else if (can_see( $user , $user , 'feed' )) { |
$feed_stories = user_get_displayable_stories( $user , 0, null, $ad_insert ); |
} else { |
$feed_off = true; |
} |
|
// Friend's Feed Selector - Requires dev.php constant |
if (is_friendfeed_user( $user )) { |
$friendfeed = array (); |
$friendfeed [ 'feeduser' ] = $get_feeduser ; |
$friendfeed [ 'feeduser_name' ] = user_get_name( $get_feeduser ); |
$friendfeed [ 'friends' ] = user_get_all_friends( $user ); |
tpl_set( 'friendfeed' , $friendfeed ); |
} |
|
$feed_stories = feed_adjust_timezone( $user , $feed_stories ); |
|
tpl_set( 'feed_off' , $feed_off ? redirect( 'privacy.php?view=feeds' , null, false) : false); |
} |
tpl_set( 'feed_stories' , $feed_stories ); |
|
render_template( $_SERVER [ 'PHP_ROOT' ]. '/html/home.phpt' ); |