mourningdove/cgi-bin/DW/Hooks/Display.pm
2026-05-24 01:03:05 +00:00

110 lines
2.9 KiB
Perl

#!/usr/bin/perl
#
# DW::Hooks::Display
#
# A file for miscellaneous display-related hooks.
#
# Authors:
# Denise Paolucci <denise@dreamwidth.org>
#
# 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::Hooks::Display;
use strict;
use LJ::Hooks;
# Displays extra info on finduser results. Called as:
# LJ::Hooks::run_hooks("finduser_extrainfo", $u })
# Currently used to return paid status, expiration date, and number of
# unused invite codes.
LJ::Hooks::register_hook(
'finduser_extrainfo',
sub {
my $u = shift;
my $ret;
my $paidstatus = DW::Pay::get_paid_status($u);
my $numinvites = DW::InviteCodes->unused_count( userid => $u->id );
unless ( DW::Pay::is_default_type($paidstatus) ) {
$ret .= " " . DW::Pay::type_name( $paidstatus->{typeid} );
$ret .=
$paidstatus->{permanent}
? ", never expires"
: ", expiring " . LJ::mysql_time( $paidstatus->{expiretime} );
$ret .= "\n";
}
if ($numinvites) {
$ret .= " Unused invites: " . $numinvites . "\n";
}
return $ret;
}
);
LJ::Hooks::register_hook(
'finduser_delve',
sub {
my ($us) = @_;
my @users = sort { $a->user cmp $b->user } grep { !$_->is_community } values %$us;
my $ret = '';
my @paid;
foreach my $u (@users) {
my %ok = ( $DW::Shop::STATE_PAID => 1, $DW::Shop::STATE_PROCESSED => 1 );
my @carts = grep { $ok{ $_->state } } DW::Shop::Cart->get_all($u);
push @paid, $u if @carts;
}
$ret .= sprintf( "%d accounts with payment history:\n", scalar @paid );
$ret .= sprintf( "%s\n", $_->user ) foreach @paid;
# infohistory
my $dbh = LJ::get_db_reader();
my $sth = $dbh->prepare("SELECT * FROM infohistory WHERE userid=?");
my %emails;
my %seen;
foreach my $u (@users) {
$sth->execute( $u->id );
next unless $sth->rows;
while ( my $info = $sth->fetchrow_hashref ) {
if ( $info->{what} && $info->{what} eq 'email' ) {
my $e = $info->{oldvalue};
$emails{$e} ||= [];
push @{ $emails{$e} }, $u->user;
$seen{ $u->user } = 1;
}
}
}
if ( my $num_changed = scalar keys %seen ) {
$ret .= sprintf( "%d additional historical email addresses on %d accounts:\n",
scalar keys %emails, $num_changed );
}
foreach my $e ( sort keys %emails ) {
$ret .= sprintf( "%s: used by %s\n", $e, join( ', ', @{ $emails{$e} } ) );
}
return $ret;
}
);
1;