113 lines
4.2 KiB
Perl
113 lines
4.2 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
# This code was forked from the LiveJournal project owned and operated
|
|
# by Live Journal, Inc. The code has been modified and expanded by
|
|
# Dreamwidth Studios, LLC. These files were originally licensed under
|
|
# the terms of the license supplied by Live Journal, Inc, which can
|
|
# currently be found at:
|
|
#
|
|
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
|
|
#
|
|
# In accordance with the original license, this code and all its
|
|
# modifications are provided under the GNU General Public License.
|
|
# A copy of that license can be found in the LICENSE file included as
|
|
# part of this distribution.
|
|
|
|
use strict;
|
|
|
|
our %maint;
|
|
|
|
$maint{joinmail} = sub {
|
|
|
|
# this needs to be resumeable, so that it can run once every 10 or 15 minutes to digest things
|
|
# that are a day old but haven't been sent. also, the first query down there needs to include
|
|
# the right authaction type in the WHERE clause, and NOT do a GROUP BY.
|
|
print "Returning without running... I'm disabled right now.\n";
|
|
return 1;
|
|
|
|
my $dbr = LJ::get_db_reader();
|
|
|
|
# get all information
|
|
my $pending =
|
|
$dbr->selectall_arrayref( "SELECT userid, COUNT(arg1) FROM authactions "
|
|
. "WHERE used = 'N' AND datecreate > DATE_SUB(NOW(), INTERVAL 1 DAY)"
|
|
. "GROUP BY userid" )
|
|
|| [];
|
|
|
|
# get userids of communities
|
|
my @commids;
|
|
push @commids, $_->[0] + 0 foreach @$pending;
|
|
my $cus = LJ::load_userids(@commids);
|
|
|
|
# now let's get the maintainers of these
|
|
my $in = join ',', @commids;
|
|
my $maintrows = $dbr->selectall_arrayref(
|
|
"SELECT userid, targetid FROM reluser WHERE userid IN ($in) AND type = 'A'")
|
|
|| [];
|
|
my @maintids;
|
|
my %maints;
|
|
foreach (@$maintrows) {
|
|
push @{ $maints{ $_->[0] } }, $_->[1];
|
|
push @maintids, $_->[1];
|
|
}
|
|
my $mus = LJ::load_userids(@maintids);
|
|
|
|
# tell the maintainers that they got new people.
|
|
foreach my $row (@$pending) {
|
|
my $cuser = $cus->{ $row->[0] }{user};
|
|
print "$cuser: $row->[1] invites: ";
|
|
my %email; # see who we emailed on this comm
|
|
foreach my $mid ( @{ $maints{ $row->[0] } } ) {
|
|
print "$mid ";
|
|
next unless $mus->{$mid};
|
|
next if $email{ $mus->{$mid}{email} }++;
|
|
next unless $mus->{$mid}->prop('opt_communityjoinemail') eq 'D'; # Daily or Digest
|
|
|
|
my $body =
|
|
"Dear $mus->{$mid}{user},\n\n"
|
|
. "Over the past day or so, $row->[1] request(s) to join the \"$cuser\" community have "
|
|
. "been received. To look at the currently pending membership requests, please visit the pending "
|
|
. "membership page:\n\n"
|
|
. "\t$LJ::SITEROOT/communities/$cuser/queue/members\n\n"
|
|
. "You may also ignore this email. Outstanding requests to join will expire after a period of 30 days.\n\n"
|
|
. "If you wish to no longer receive these emails, you can unsubscribe:\n\n"
|
|
. "\t$LJ::SITEROOT/manage/settings/?cat=notifications\n\n"
|
|
. "Regards,\n$LJ::SITENAME Team\n";
|
|
|
|
LJ::send_mail(
|
|
{
|
|
to => $mus->{$mid}{email},
|
|
from => $LJ::COMMUNITY_EMAIL,
|
|
fromname => $LJ::SITENAME,
|
|
charset => 'utf-8',
|
|
subject => "$cuser Membership Requests",
|
|
body => $body,
|
|
wrap => 76,
|
|
}
|
|
);
|
|
}
|
|
print "\n";
|
|
}
|
|
};
|
|
|
|
$maint{clean_spamreports} = sub {
|
|
my $dbh = LJ::get_db_writer();
|
|
|
|
my ( $len, $ct );
|
|
|
|
print "-I- Deleting old spam reports.\n";
|
|
$len = 86400 * 90; # 90 days
|
|
$ct = $dbh->do("DELETE FROM spamreports WHERE reporttime < UNIX_TIMESTAMP() - $len") + 0;
|
|
print " Deleted $ct reports.\n";
|
|
|
|
if ($LJ::CLOSE_OLD_SPAMREPORTS) {
|
|
print "-I- Closing stale spam reports.\n";
|
|
$len = $LJ::CLOSE_OLD_SPAMREPORTS * 86400;
|
|
$ct = $dbh->do( "UPDATE spamreports SET state='closed' "
|
|
. "WHERE state = 'open' AND reporttime < UNIX_TIMESTAMP() - $len" ) + 0;
|
|
print " Closed $ct reports.\n";
|
|
}
|
|
|
|
};
|
|
|
|
1;
|