[dw-free] Add text messaging setup to Manage Settings
[commit: http://hg.dwscoalition.org/dw-free/rev/5f21b4ae3f7b]
http://bugs.dwscoalition.org/show_bug.cgi?id=1573
Add configuration option for setting your text messaging settings on the
profile page, instead of its own separate page.
Patch by
kareila.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=1573
Add configuration option for setting your text messaging settings on the
profile page, instead of its own separate page.
Patch by
Files modified:
- bin/upgrading/en.dat
- cgi-bin/DW/Setting/TxtMsgSetup.pm
- htdocs/manage/settings/index.bml
--------------------------------------------------------------------------------
diff -r 422d252c7618 -r 5f21b4ae3f7b bin/upgrading/en.dat
--- a/bin/upgrading/en.dat Wed Sep 30 06:22:21 2009 +0000
+++ b/bin/upgrading/en.dat Wed Sep 30 06:32:35 2009 +0000
@@ -2815,6 +2815,24 @@ setting.synlevel.option.select.summary=B
setting.synlevel.option.select.title=Title Only
+setting.txtmsgsetup.details=(<a [[aopts]]>details</a>)
+
+setting.txtmsgsetup.error.notsecured=Information will not be saved if you don't allow anyone to send you messages.
+
+setting.txtmsgsetup.error.number=Phone number is missing or invalid.
+
+setting.txtmsgsetup.error.provider=Missing or invalid service provider.
+
+setting.txtmsgsetup.error.security=Invalid text message security setting.
+
+setting.txtmsgsetup.label=Text Messaging
+
+setting.txtmsgsetup.phone=Phone Number:
+
+setting.txtmsgsetup.select.provider=-- Select Carrier --
+
+setting.txtmsgsetup.vis=Who can send you text messages?
+
setting.timezone.error.invalid=Invalid time zone.
setting.timezone.label=Time Zone
@@ -2973,6 +2991,8 @@ settings.usermessaging.error.invalid=Inv
settings.usermessaging.helper=Only registered [[sitename]] users can send you messages. You also have options to receive messages only from users on your access list.
+settings.usermessaging.opt.a=Everyone
+
settings.usermessaging.opt.f=Access Only
settings.usermessaging.opt.m=Only Mutual Access
diff -r 422d252c7618 -r 5f21b4ae3f7b cgi-bin/DW/Setting/TxtMsgSetup.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/Setting/TxtMsgSetup.pm Wed Sep 30 06:32:35 2009 +0000
@@ -0,0 +1,174 @@
+#!/usr/bin/perl
+#
+# DW::Setting::TxtMsgSetup
+#
+# LJ::Setting module for specifying a cell provider and phone number
+# that allows people to send a user text messages via the site.
+# Refactored and repackaged from /manage/profile.
+#
+# Authors:
+# Jen Griffin <kareila@livejournal.com>
+#
+# Copyright (c) 2009 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself. For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+
+package DW::Setting::TxtMsgSetup;
+use base 'LJ::Setting';
+use strict;
+use warnings;
+
+sub should_render {
+ my ( $class, $u ) = @_;
+ return $u && $u->get_cap( 'textmessaging' ) ? 1 : 0;
+}
+
+sub label {
+ my $class = shift;
+ return $class->ml( 'setting.txtmsgsetup.label' );
+}
+
+sub option {
+ my ( $class, $u, $errs, $args ) = @_;
+ my $key = $class->pkgkey;
+
+ my $tminfo = LJ::TextMessage->tm_info( $u, remap_result => 1 );
+ LJ::text_out( \$_ ) foreach values %$tminfo;
+
+ my $ret = '';
+
+ unless ( $args && $args->{vis_only} ) {
+ unless ( $args && $args->{info_only} ) {
+ $ret .= " <label for='${key}txtmsg_number'>";
+ $ret .= $class->ml( 'setting.txtmsgsetup.phone' );
+ $ret .= "</label>";
+ }
+
+ my $number = $class->get_arg( $args, "txtmsg_number" ) || $tminfo->{number};
+
+ $ret .= LJ::html_text( { name => "${key}txtmsg_number",
+ id => "${key}txtmsg_number",
+ value => $number,
+ size => 15, maxlength => 40 } );
+
+ my $provider = $class->get_arg( $args, "txtmsg_provider" ) || $tminfo->{provider};
+ my @opts = ( "", $class->ml( 'setting.txtmsgsetup.select.provider' ) );
+ foreach my $p ( LJ::TextMessage::providers() ) {
+ my $info = LJ::TextMessage::provider_info( $p );
+ push @opts, ( $p, $info->{name} );
+ }
+
+ $ret .= LJ::html_select( { name => "${key}txtmsg_provider",
+ id => "${key}txtmsg_provider",
+ style => 'width: 25em; margin: 0 0.5em;',
+ selected => $provider },
+ @opts );
+
+ $ret .= " <label for='${key}txtmsg_provider'>";
+ $ret .= $class->ml( 'setting.txtmsgsetup.details', { aopts => "href='$LJ::SITEROOT/tools/textmessage?mode=details'" } );
+ $ret .= "</label>";
+
+ my $n_errs = $class->errdiv( $errs, "txtmsg_number" );
+ $ret .= "<br />$n_errs" if $n_errs;
+ my $p_errs = $class->errdiv( $errs, "txtmsg_provider" );
+ $ret .= "<br />$p_errs" if $p_errs;
+ $ret .= "<br />";
+ }
+ return $ret if $args && $args->{info_only};
+
+ $tminfo->{security} = 'none'
+ if $u->{'txtmsg_status'} =~ /^(?:off|none)$/;
+ my $security = $class->get_arg( $args, "txtmsg_security" ) || $tminfo->{security};
+
+ my @opts = (
+ all => $class->ml( "settings.usermessaging.opt.a" ),
+ reg => $class->ml( "settings.usermessaging.opt.y" ),
+ friends => $class->ml( "settings.usermessaging.opt.f" ),
+ none => $class->ml( "settings.usermessaging.opt.n" ),
+ );
+
+ $ret .= "<label for='${key}txtmsg_security'>";
+ $ret .= $class->ml( 'setting.txtmsgsetup.vis' );
+ $ret .= "</label> ";
+
+ $ret .= LJ::html_select( { name => "${key}txtmsg_security",
+ id => "${key}txtmsg_security",
+ selected => $security },
+ @opts );
+
+ my $errdiv = $class->errdiv( $errs, "txtmsg_security" );
+ $ret .= "<br />$errdiv" if $errdiv;
+
+ return $ret;
+}
+
+sub error_check {
+ my ( $class, $u, $args ) = @_;
+
+ # validate security setting
+ my $security = $class->get_arg( $args, "txtmsg_security" );
+ $class->errors( txtmsg_security => $class->ml( 'setting.txtmsgsetup.error.security' ) )
+ if $security && $security !~ /^(?:all|reg|friends|none)$/;
+
+ # only validate info if security is enforced
+ my $number = $class->get_arg( $args, "txtmsg_number" );
+ my $provider = $class->get_arg( $args, "txtmsg_provider" );
+ if ( $security && $security ne 'none' ) {
+ # check for something that looks like a phone number
+ $class->errors( txtmsg_number => $class->ml( 'setting.txtmsgsetup.error.number' ) )
+ unless $number && $number =~ /^[-+0-9]{9,}$/;
+ # check for valid provider
+ my %valid = map { $_ => 1 } LJ::TextMessage::providers();
+ $class->errors( txtmsg_provider => $class->ml( 'setting.txtmsgsetup.error.provider' ) )
+ unless $provider && $valid{$provider};
+ } else { # warn them that new info won't be saved
+ my $tminfo = LJ::TextMessage->tm_info( $u, remap_result => 1 );
+ $class->errors( txtmsg_number => $class->ml( 'setting.txtmsgsetup.error.notsecured' ) )
+ if $number && $number ne $tminfo->{number};
+ $class->errors( txtmsg_provider => $class->ml( 'setting.txtmsgsetup.error.notsecured' ) )
+ if $provider && $provider ne $tminfo->{provider};
+ }
+
+ return 1;
+}
+
+sub save {
+ my ( $class, $u, $args ) = @_;
+ $class->error_check( $u, $args );
+
+ my $number = $class->get_arg( $args, "txtmsg_number" );
+ my $provider = $class->get_arg( $args, "txtmsg_provider" );
+ my $security = $class->get_arg( $args, "txtmsg_security" );
+
+ my $tminfo = LJ::TextMessage->tm_info( $u, remap_result => 1 );
+ my $cleared = ( $tminfo->{provider} && ! $provider ) ||
+ ( $tminfo->{number} && ! $number );
+
+ my $txtmsg_status = $cleared || ( $security && $security eq 'none' )
+ ? "off" : "on";
+
+ LJ::update_user( $u, { 'txtmsg_status' => $txtmsg_status } );
+
+ my $dbh = LJ::get_db_writer();
+
+ if ( $cleared ) {
+ # clear out existing info
+ $dbh->do( "DELETE FROM txtmsg WHERE userid=?", undef, $u->userid );
+
+ } elsif ( $txtmsg_status eq "on" ) {
+ $dbh->do( "REPLACE INTO txtmsg (userid, provider, number, security)"
+ . " VALUES (?, ?, ?, ?)", undef,
+ $u->userid, $provider, $number, $security );
+ }
+
+ # clear text message security caches
+ delete $u->{_txtmsgsecurity};
+ $u->memc_delete( "txtmsgsecurity" );
+
+ return 1;
+}
+
+1;
diff -r 422d252c7618 -r 5f21b4ae3f7b htdocs/manage/settings/index.bml
--- a/htdocs/manage/settings/index.bml Wed Sep 30 06:22:21 2009 +0000
+++ b/htdocs/manage/settings/index.bml Wed Sep 30 06:32:35 2009 +0000
@@ -93,6 +93,7 @@ body<=
desc => $ML{'.cat.mobile.desc'},
settings => [qw(
LJ::Setting::EmailPosting
+ DW::Setting::TxtMsgSetup
LJ::Setting::Display::MobileApps
)],
},
--------------------------------------------------------------------------------
