76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
|  | # <LJFUNC> | |||
|  | # name: LJ::comm_member_request | |||
|  | # des: Registers an authaction to add a user to a | |||
|  | #      community and sends an approval email | |||
|  | # | |||
|  | #   taken from lilib.pl, version 1.681: | |||
|  | #     http://cvs.livejournal.org/browse.cgi/livejournal/cgi-bin/ljlib.pl?rev=1.681&content-type=text/x-cvsweb-markup | |||
|  | # | |||
|  | # returns: Hashref; output of LJ::register_authaction() | |||
|  | #          includes datecreate of old row if no new row was created | |||
|  | # args: comm, u, attr? | |||
|  | # des-comm: Community user object | |||
|  | # des-u: User object to add to community | |||
|  | # des-attr: array of attributes new user will have | |||
|  | # </LJFUNC> | |||
|  | sub comm_member_request { | |||
|  |     my ($comm, $u, $attr) = @_; | |||
|  |     return undef unless ref $comm && ref $u; | |||
|  | 
 | |||
|  |     my $arg = join("&", "targetid=$u->{'userid'}", map { "$_=1" } sort @$attr); | |||
|  | 
 | |||
|  |     my $dbh = LJ::get_db_writer(); | |||
|  | 
 | |||
|  |     # check for duplicates within the same hour (to prevent spamming) | |||
|  |     my $oldaa = $dbh->selectrow_hashref("SELECT aaid, authcode, datecreate FROM authactions " . | |||
|  |                                         "WHERE userid=? AND arg1=? " . | |||
|  |                                         "AND action='comm_invite' AND used='N' " . | |||
|  |                                         "AND NOW() < datecreate + INTERVAL 1 HOUR " . | |||
|  |                                         "ORDER BY 1 DESC LIMIT 1", | |||
|  |                                         undef, $comm->{'userid'}, $arg); | |||
|  |     return $oldaa if $oldaa; | |||
|  | 
 | |||
|  |     # insert authactions row | |||
|  |     my $aa = LJ::register_authaction($comm->{'userid'}, 'comm_invite', $arg); | |||
|  |     return undef unless $aa; | |||
|  | 
 | |||
|  |     # if there are older duplicates, invalidate any existing unused authactions of this type | |||
|  |     $dbh->do("UPDATE authactions SET used='Y' WHERE userid=? AND aaid<>? AND arg1=? " . | |||
|  |              "AND action='comm_invite' AND used='N'", | |||
|  |              undef, $comm->{'userid'}, $aa->{'aaid'}, $arg); | |||
|  | 
 | |||
|  |     # email recipient user for confirmation | |||
|  |     $attr ||= []; | |||
|  |     my %attr_map = ('member'     => "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", | |||
|  |                     'admin'      => "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", | |||
|  |                     'post'       => "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", | |||
|  |                     'moderate'   => "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", | |||
|  |                     'preapprove' => "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", | |||
|  |                     ); | |||
|  | 
 | |||
|  |     my $cuser = $comm->{'user'}; | |||
|  |     my $body = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $u->{'user'},\n\n"; | |||
|  |     $body .= "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $cuser ($LJ::SITEROOT/community/$cuser/)\n" . | |||
|  |         "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:\n". | |||
|  |         join(", ", map { $attr_map{$_} } @$attr) . ".\n\n" . | |||
|  |         "<22><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> $cuser, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n" . | |||
|  |         "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,\n" . | |||
|  |         "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n\n" . | |||
|  |         "     $LJ::SITEROOT/approve/$aa->{'aaid'}.$aa->{'authcode'}\n\n" . | |||
|  |         "\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $LJ::SITENAME\n"; | |||
|  | 
 | |||
|  |     LJ::send_mail({ | |||
|  |         'to' => $u->{'email'}, | |||
|  |         'from' => $LJ::COMMUNITY_EMAIL, | |||
|  |         'fromname' => $LJ::SITENAME, | |||
|  |         'charset' => 'koi8-r', | |||
|  |         'subject' => "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: $cuser", | |||
|  |         'body' => $body | |||
|  |         }); | |||
|  | 
 | |||
|  |     return $aa; | |||
|  | } | |||
|  | 
 | |||
|  | 
 | |||
|  | 1; |