'jquery' },
"js/jquery.settings.js"
);
LJ::set_active_resource_group( "jquery" );
my $remote = LJ::get_remote();
my $authas;
my $u;
$authas = $GET{authas} || $remote->user if $remote;
my $can_view_other = $remote && $remote->has_priv( "canview", "subscriptions" );
if ( $can_view_other && $GET{user} && $GET{cat} && $GET{cat} eq 'notifications' ) {
# impersonation mode - check for $u->user ne $authas
$u = LJ::load_user( $GET{user} );
}
if ( $remote && ! defined $u ) {
$u = LJ::get_authas_user($authas);
return LJ::bad_input($ML{'error.invalidauth'})
unless $u;
}
my @cats_order = qw(
account
display
community
notifications
mobile
shortcuts
privacy
history
othersites
);
# the different navigation categories and their settings
my %cats_with_settings = (
account => {
name => $ML{'.cat.account'},
visible => 1,
disabled => !$u ? 1 : 0,
form => 0,
desc => $ML{'.cat.account.desc'},
settings => [qw(
DW::Setting::Display::AccountLevel
LJ::Setting::Display::AccountStatus
LJ::Setting::Display::Email
LJ::Setting::Display::Password
DW::Setting::Display::Manage2FA
)],
},
display => {
name => $ML{'.cat.display'},
visible => 1,
disabled => 0,
form => 1,
desc => $ML{'.cat.display.desc'},
settings => [qw(
LJ::Setting::TimeZone
DW::Setting::TimeFormat
LJ::Setting::ImagePlaceholders
LJ::Setting::EmbedPlaceholders
DW::Setting::CutDisable
DW::Setting::CutInbox
LJ::Setting::EmailFormat
LJ::Setting::EntryEditor
DW::Setting::JournalEntryStyle
DW::Setting::JournalIconsStyle
DW::Setting::ViewEntryStyle
DW::Setting::ViewIconsStyle
DW::Setting::ViewJournalStyle
LJ::Setting::NavStrip
LJ::Setting::NCTalkLinks
LJ::Setting::StyleMine
DW::Setting::DisplayEchi
LJ::Setting::CtxPopup
LJ::Setting::AdultContent
DW::Setting::AdultContentReason
LJ::Setting::ViewingAdultContent
LJ::Setting::SafeSearch
DW::Setting::GoogleAnalytics
DW::Setting::GoogleAnalytics4
DW::Setting::ExcludeOwnStats
DW::Setting::StickyEntry
DW::Setting::MobileView
DW::Setting::RPAccount
LJ::Setting::SiteScheme
)],
},
shortcuts => {
name => $ML{'.cat.shortcuts'},
visible => 1,
disabled => !$u || $u->is_community ? 1 : 0,
form => 1,
desc => $ML{'.cat.shortcuts.desc2'},
settings => [qw(
DW::Setting::Shortcuts
DW::Setting::ShortcutsNext
DW::Setting::ShortcutsPrev
DW::Setting::ShortcutsTouch
DW::Setting::ShortcutsTouchNext
DW::Setting::ShortcutsTouchPrev
)],
},
notifications => {
name => $ML{'.cat.notifications'},
visible => 1,
disabled => !$u || $u->is_community ? 1 : 0,
form => 1,
desc => BML::ml( '.cat.notifications.desc', { aopts => "href='$LJ::SITEROOT/manage/circle/edit'" } ),
settings => [],
},
mobile => {
name => $ML{'.cat.mobile'},
visible => 1,
disabled => !$u || $u->is_community ? 1 : 0,
form => 1,
desc => $ML{'.cat.mobile.desc2'},
settings => [qw(
LJ::Setting::EmailPosting
DW::Setting::ResetReplyEmail
DW::Setting::ApiKeyDelete
DW::Setting::ApiKeyGenerate
)],
},
privacy => {
name => $ML{'.cat.privacy'},
visible => 1,
disabled => !$u ? 1 : 0,
form => 1,
desc => $ML{'.cat.privacy.desc'},
settings => [qw(
DW::Setting::EmailAlias
DW::Setting::ContactInfo
LJ::Setting::UserMessaging
LJ::Setting::MinSecurity
DW::Setting::SynLevel
LJ::Setting::SearchInclusion
LJ::Setting::EnableComments
LJ::Setting::CommentScreening
LJ::Setting::CommentCaptcha
DW::Setting::Captcha
LJ::Setting::CommentIP
LJ::Setting::Display::BanUsers
DW::Setting::AllowVgiftsFrom
DW::Setting::RandomPaidGifts
DW::Setting::GlobalSearch
DW::Setting::AllowSearchBy
DW::Setting::CommunityPromo
)],
},
history => {
name => $ML{'.cat.history'},
visible => 1,
disabled => !$u || $u->is_community ? 1 : 0,
form => 0,
desc => $ML{'.cat.history.desc'},
settings => [qw(
LJ::Setting::Display::Logins
LJ::Setting::Display::Emails
LJ::Setting::Display::EmailPosts
LJ::Setting::Display::Orders
DW::Setting::Display::CommunityInvites
DW::Setting::Display::OpenIDClaim
)],
},
othersites => {
name => $ML{'.cat.othersites'},
visible => 1,
disabled => !$u || $u->is_community ? 1 : 0,
form => 1,
desc => $ML{'.cat.othersites.desc'},
settings => [qw(
DW::Setting::XPostAccounts
)],
},
community => {
name => $ML{'.cat.community'},
visible => $u && $u->is_community ? 1 : 0,
disabled => 0,
form => 1,
desc => $ML{'.cat.community.desc'},
settings => [qw(
DW::Setting::CommunityMembership
DW::Setting::CommunityPostLevel
DW::Setting::CommunityPostLevelNew
DW::Setting::CommunityEntryModeration
DW::Setting::CommunityJoinLinks
DW::Setting::CommunityGuidelinesLocation
DW::Setting::CommunityGuidelinesEntry
)],
}
);
LJ::Hooks::run_hook("settings_extra_cats", \@cats_order, \%cats_with_settings, user => $u);
my $given_cat = $GET{cat};
if ($u) {
$given_cat = "account"
unless defined $cats_with_settings{$given_cat} &&
$cats_with_settings{$given_cat}->{visible} &&
!$cats_with_settings{$given_cat}->{disabled};
} else {
$given_cat = "display";
}
if ( $u && $u->user ne $authas ) {
# can only impersonate notification settings -
# if invisible or disabled, print this error
return LJ::bad_input( $ML{'error.invalidauth'} )
if $given_cat ne 'notifications';
# don't allow editing
$cats_with_settings{notifications}->{form} = 0;
}
my @settings = @{$cats_with_settings{$given_cat}->{settings}};
# remove any settings that don't exist for this category
my $remove_setting = sub {
my $el_ref = shift;
splice(@settings, $$el_ref, 1);
$$el_ref--;
};
for (my $i = 0; $i < scalar @settings; $i++) {
my $setting = $settings[$i];
if (eval "use $setting; 1;") {
$remove_setting->(\$i) unless $setting->should_render($u);
} else {
$remove_setting->(\$i);
}
}
my $save_rv;
my $submit_msg;
if (LJ::did_post()) {
return LJ::bad_input($ML{'error.invalidform'})
unless LJ::check_form_auth();
# can't make changes while impersonating
return LJ::bad_input( $ML{'error.invalidauth'} )
if $u && $u->user ne $authas;
if ( $given_cat eq "notifications" && $POST{deleteinactive} ) {
$u->delete_all_inactive_subscriptions;
$submit_msg .= "
";
} elsif ( $given_cat eq "notifications" ) {
my @notif_errors = $u->save_subscriptions( \%POST );
delete $u->{_subscriptions};
return BML::redirect($POST{ret_url}) if $POST{ret_url} && !scalar @notif_errors;
# save the LJ::Setting notifications too
unless ($POST{post_to_settings_page}) {
$save_rv = LJ::Setting->save_all($u, \%POST, \@settings);
}
if (scalar @notif_errors || LJ::Setting->save_had_errors($save_rv)) {
$submit_msg .= LJ::error_list(@notif_errors) . "
";
} else {
$submit_msg .= "
";
}
} else {
$save_rv = LJ::Setting->save_all($u, \%POST, \@settings);
if (LJ::Setting->save_had_errors($save_rv)) {
$submit_msg .= "
";
} else {
$submit_msg .= "
";
}
}
}
if ( $given_cat eq "notifications" && $u->user eq $authas ) {
# look for deletions from GET
my $deleted_subs = 0;
foreach my $subscr ($u->subscriptions) {
my $id = $subscr->id;
next unless $id;
if ($GET{"deletesub_$id"}) {
$subscr->delete;
$deleted_subs = 1;
}
}
$submit_msg .= "
"
if $deleted_subs;
}
my $ret = "
" . $linkbar . "
"; } $ret .= "" . BML::ml('.intro3', { aopts1 => "href='$LJ::SITEROOT/manage/profile/$getextra'", aopts2 => "href='$LJ::SITEROOT/customize/$getextra'" }) . "
" if $u; $ret .= $submit_msg; $ret .= "