'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 = "
"; my ($getextra, $getsep) = ("", "?"); if ( $u && $u->user ne $remote->user ) { $getextra = "?authas=$authas"; $getsep = "&"; } $title = $windowtitle = LJ::Lang::ml('.title.anon'); if ($u) { $title = LJ::Lang::ml('.title.page', { user => $u->ljuser_display({ head_size => "24x24" }) }); $windowtitle = LJ::Lang::ml('.title.page', { user => $u->display_username }); $ret .= "
"; $ret .= "
"; $ret .= LJ::make_authas_select( $remote, { authas => $GET{authas}, showall => ( $given_cat eq "account" ) } ); $ret .= LJ::html_hidden( cat => $given_cat ); $ret .= "
"; $ret .= "
"; } # if they're working as a community, reproduce the community management linkbar: if ( $u && $u->is_community ) { my $linkbar; $linkbar = $u->maintainer_linkbar( "settingsaccount" ); $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 .= "
"; $ret .= ""; $ret .= "

"; $ret .= $cats_with_settings{$given_cat}->{desc}; $ret .= "

"; if ($given_cat eq "notifications") { $u = $u->subscription_default_setup; my $template_vars = { has_admin_form => $can_view_other, has_user_form => $cats_with_settings{$given_cat}->{form}, post_action => "$LJ::SITEROOT/manage/settings/$getextra${getsep}cat=$given_cat", viewing_self => ( $u->user eq $authas ) ? 1 : 0, get_args => \%GET, subscribe_interface => LJ::subscribe_interface( $u, journal => $u, categories => $u->subscription_categories_for_settings_page, settings_page => 1, num_per_page => 250, page => int( $GET{page} || 0 ), ) }; $ret .= DW::Template->template_string( 'tracking/settings-interface.tt', $template_vars ); } else { $ret .= "
"; $ret .= "
"; if ($cats_with_settings{$given_cat}->{form}) { if ( $LJ::ACTIVE_RES_GROUP ne "jquery" ) { my $confirm_msg = LJ::ejs($ML{'.form.confirm1'}); $ret .= ""; } $ret .= "
"; $ret .= LJ::form_auth(); } my $setting_ct = 0; $ret .= ""; foreach my $setting (@settings) { $setting_ct++ unless $setting->is_conditional_setting; my $errors = $setting->errors_from_save($save_rv); my $args = $setting->args_from_save($save_rv); my $label = $setting->label; my $option = $setting->option($u, $errors, $args, getargs => \%GET ); my $actionlink = $setting->actionlink($u); my $helpicon = LJ::help_icon($setting->helpurl($u)); my $last_class = $setting_ct == scalar @settings ? " last" : ""; my $row_class = $setting_ct % 2 == 0 ? "even" : "odd"; my $setting_id = $setting->pkgkey; $ret .= ""; $ret .= "" if $label; $ret .= ""; $ret .= ""; $ret .= ""; $ret .= ""; } $ret .= "
$label" . ($option ? $option : " ") . "" . ($actionlink ? $actionlink : " ") . "" . ($helpicon ? $helpicon : " ") . "
"; if ($given_cat eq "account") { my $account_stats = LJ::Hooks::run_hook("settings_account_stats", $u); if ($account_stats) { $ret .= ""; } } $ret .= "
"; $ret .= "
"; $ret .= "
"; $ret .= $cats_with_settings{$given_cat}->{form} ? LJ::html_submit($ML{'.btn.save'}) : " "; $ret .= "
"; $ret .= "" if $cats_with_settings{$given_cat}->{form}; } $ret .= "
"; $ret .= "
"; return $ret; } _code?> <=body title=> windowtitle=> head<= <=head page?>