View | Details | Raw Unified | Return to bug 13049
Collapse All | Expand All

(-)a/C4/Members.pm (+55 lines)
Lines 2528-2533 sub GetBorrowersWithEmail { Link Here
2528
    return @result;
2528
    return @result;
2529
}
2529
}
2530
2530
2531
=head2 AddMember_Opac
2532
2533
=cut
2534
2531
sub AddMember_Opac {
2535
sub AddMember_Opac {
2532
    my ( %borrower ) = @_;
2536
    my ( %borrower ) = @_;
2533
2537
Lines 2574-2579 sub AddEnrolmentFeeIfNeeded { Link Here
2574
    }
2578
    }
2575
}
2579
}
2576
2580
2581
=head2 HasOverdues
2582
2583
=cut
2584
2577
sub HasOverdues {
2585
sub HasOverdues {
2578
    my ( $borrowernumber ) = @_;
2586
    my ( $borrowernumber ) = @_;
2579
2587
Lines 2585-2590 sub HasOverdues { Link Here
2585
    return $count;
2593
    return $count;
2586
}
2594
}
2587
2595
2596
=head2 DeleteExpiredOpacRegistrations
2597
2598
    Delete accounts that haven't been upgraded from the 'temporary' category
2599
    Returns the number of removed patrons
2600
2601
=cut
2602
2603
sub DeleteExpiredOpacRegistrations {
2604
2605
    my $delay = C4::Context->preference('PatronSelfRegistrationExpireTemporaryAccountsDelay');
2606
    my $category_code = C4::Context->preference('PatronSelfRegistrationDefaultCategory');
2607
2608
    return 0 if not $category_code or not defined $delay or $delay eq q||;
2609
2610
    my $query = qq|
2611
SELECT borrowernumber
2612
FROM borrowers
2613
WHERE categorycode = ? AND DATEDIFF( NOW(), dateenrolled ) > ? |;
2614
2615
    my $dbh = C4::Context->dbh;
2616
    my $sth = $dbh->prepare($query);
2617
    $sth->execute( $category_code, $delay );
2618
    my $cnt=0;
2619
    while ( my ($borrowernumber) = $sth->fetchrow_array() ) {
2620
        DelMember($borrowernumber);
2621
        $cnt++;
2622
    }
2623
    return $cnt;
2624
}
2625
2626
=head2 DeleteUnverifiedOpacRegistrations
2627
2628
    Delete all unverified self registrations in borrower_modifications,
2629
    older than the specified number of days.
2630
2631
=cut
2632
2633
sub DeleteUnverifiedOpacRegistrations {
2634
    my ( $days ) = @_;
2635
    my $dbh = C4::Context->dbh;
2636
    my $sql=qq|
2637
DELETE FROM borrower_modifications
2638
WHERE borrowernumber = 0 AND DATEDIFF( NOW(), timestamp ) > ?|;
2639
    my $cnt=$dbh->do($sql, undef, ($days) );
2640
    return $cnt eq '0E0'? 0: $cnt;
2641
}
2642
2588
END { }    # module clean-up code here (global destructor)
2643
END { }    # module clean-up code here (global destructor)
2589
2644
2590
1;
2645
1;
(-)a/misc/cronjobs/cleanup_database.pl (-5 / +41 lines)
Lines 70-83 Usage: $0 [-h|--help] [--sessions] [--sessdays DAYS] [-v|--verbose] [--zebraqueu Link Here
70
   --restrictions DAYS   purge patrons restrictions expired since more than DAYS days.
70
   --restrictions DAYS   purge patrons restrictions expired since more than DAYS days.
71
                         Defaults to 30 days if no days specified.
71
                         Defaults to 30 days if no days specified.
72
    --all-restrictions   purge all expired patrons restrictions.
72
    --all-restrictions   purge all expired patrons restrictions.
73
   --del-exp-selfreg  Delete expired self registration accounts
74
   --del-unv-selfreg DAYS  Delete unverified self registrations older than DAYS
73
USAGE
75
USAGE
74
    exit $_[0];
76
    exit $_[0];
75
}
77
}
76
78
77
my (
79
my (
78
    $help,   $sessions,          $sess_days, $verbose, $zebraqueue_days,
80
    $help,
79
    $mail,   $purge_merged,      $pImport,   $pLogs,   $pSearchhistory,
81
    $sessions,
80
    $pZ3950, $pListShareInvites, $pDebarments, $allDebarments,
82
    $sess_days,
83
    $verbose,
84
    $zebraqueue_days,
85
    $mail,
86
    $purge_merged,
87
    $pImport,
88
    $pLogs,
89
    $pSearchhistory,
90
    $pZ3950,
91
    $pListShareInvites,
92
    $pDebarments,
93
    $allDebarments,
94
    $pExpSelfReg,
95
    $pUnvSelfReg,
81
);
96
);
82
97
83
GetOptions(
98
GetOptions(
Lines 95-100 GetOptions( Link Here
95
    'list-invites:i'  => \$pListShareInvites,
110
    'list-invites:i'  => \$pListShareInvites,
96
    'restrictions:i'  => \$pDebarments,
111
    'restrictions:i'  => \$pDebarments,
97
    'all-restrictions' => \$allDebarments,
112
    'all-restrictions' => \$allDebarments,
113
    'del-exp-selfreg' => \$pExpSelfReg,
114
    'del-unv-selfreg' => \$pUnvSelfReg,
98
) || usage(1);
115
) || usage(1);
99
116
100
# Use default values
117
# Use default values
Lines 121-128 unless ( $sessions Link Here
121
    || $pZ3950
138
    || $pZ3950
122
    || $pListShareInvites
139
    || $pListShareInvites
123
    || $pDebarments
140
    || $pDebarments
124
    || $allDebarments )
141
    || $allDebarments
125
{
142
    || $pExpSelfReg
143
    || $pUnvSelfReg
144
) {
126
    print "You did not specify any cleanup work for the script to do.\n\n";
145
    print "You did not specify any cleanup work for the script to do.\n\n";
127
    usage(1);
146
    usage(1);
128
}
147
}
Lines 252-257 if($allDebarments) { Link Here
252
    print "$count restrictions were deleted.\nDone with all restrictions purge.\n" if $verbose;
271
    print "$count restrictions were deleted.\nDone with all restrictions purge.\n" if $verbose;
253
}
272
}
254
273
274
if( $pExpSelfReg ) {
275
    DeleteExpiredSelfRegs();
276
}
277
if( $pUnvSelfReg ) {
278
    DeleteUnverifiedSelfRegs( $pUnvSelfReg );
279
}
280
255
exit(0);
281
exit(0);
256
282
257
sub RemoveOldSessions {
283
sub RemoveOldSessions {
Lines 339-341 sub PurgeDebarments { Link Here
339
    }
365
    }
340
    return $count;
366
    return $count;
341
}
367
}
368
369
sub DeleteExpiredSelfRegs {
370
    my $cnt= C4::Members::DeleteExpiredOpacRegistrations();
371
    print "Removed $cnt expired self-registered borrowers\n" if $verbose;
372
}
373
374
sub DeleteUnverifiedSelfRegs {
375
    my $cnt= C4::Members::DeleteUnverifiedOpacRegistrations( $_[0] );
376
    print "Removed $cnt unverified self-registrations\n" if $verbose;
377
}
(-)a/misc/cronjobs/delete_expired_opac_registrations.pl (-28 / +6 lines)
Lines 42-47 GetOptions( Link Here
42
);
42
);
43
my $usage = << 'ENDUSAGE';
43
my $usage = << 'ENDUSAGE';
44
44
45
IMPORTANT: You should no longer call this script. Please use
46
cleanup_database.pl with parameter --del-exp-selfreg.
47
45
This script removes confirmed OPAC based patron registrations
48
This script removes confirmed OPAC based patron registrations
46
that have not been changed from the patron category specified
49
that have not been changed from the patron category specified
47
in the system preference PatronSelfRegistrationDefaultCategory
50
in the system preference PatronSelfRegistrationDefaultCategory
Lines 63-93 if ( $help || !$confirm ) { Link Here
63
    exit;
66
    exit;
64
}
67
}
65
68
66
# Delete accounts that haven't been upgraded from the 'temporary' category code
69
my $c= "$FindBin::Bin/cleanup_database.pl --del-exp-selfreg";
67
my $delay =
70
$c.= " -v" if $verbose;
68
  C4::Context->preference('PatronSelfRegistrationExpireTemporaryAccountsDelay');
71
system($c);
69
my $category_code =
70
  C4::Context->preference('PatronSelfRegistrationDefaultCategory');
71
72
die "PatronSelfRegistrationExpireTemporaryAccountsDelay and PatronSelfRegistrationDefaultCategory should be filled to use this script!"
73
    if not $category_code or not defined $delay or $delay eq q||;
74
75
my $query = "
76
    SELECT borrowernumber
77
    FROM borrowers
78
    WHERE
79
        categorycode = ?
80
      AND
81
        DATEDIFF( NOW(), dateenrolled ) > ?
82
";
83
84
my $dbh = C4::Context->dbh;
85
my $sth = $dbh->prepare($query);
86
$sth->execute( $category_code, $delay );
87
88
my $cnt=0;
89
while ( my ($borrowernumber) = $sth->fetchrow_array() ) {
90
    DelMember($borrowernumber);
91
    $cnt++;
92
}
93
print "Removed $cnt expired self-registered borrowers in category $category_code\n" if $verbose;
(-)a/misc/cronjobs/delete_unverified_opac_registrations.pl (-9 / +6 lines)
Lines 42-47 GetOptions( Link Here
42
);
42
);
43
my $usage = << 'ENDUSAGE';
43
my $usage = << 'ENDUSAGE';
44
44
45
IMPORTANT: You should no longer call this script. Please use
46
cleanup_database.pl with parameter --del-unv-selfreg.
47
45
This script removes unconfirmed OPAC based patron registrations
48
This script removes unconfirmed OPAC based patron registrations
46
that have not been confirmed within the required time period.
49
that have not been confirmed within the required time period.
47
50
Lines 59-70 if ( $help || !$confirm ) { Link Here
59
    exit;
62
    exit;
60
}
63
}
61
64
62
my $dbh = C4::Context->dbh;
65
my $d= $hours>=24? int($hours/24): 1;
63
66
my $c= "$FindBin::Bin/cleanup_database.pl -del-unv-selfreg $d";
64
$dbh->do( "
67
system($c);
65
         DELETE FROM borrower_modifications
66
         WHERE
67
             borrowernumber = 0
68
           AND
69
             TIME_TO_SEC( TIMEDIFF( NOW(), timestamp )) / 3600 > ?
70
", undef, $hours );
(-)a/t/db_dependent/Members.t (-2 / +23 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 74;
20
use Test::More tests => 75;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Data::Dumper;
22
use Data::Dumper;
23
use C4::Context;
23
use C4::Context;
Lines 384-389 subtest 'GetMemberAccountBalance' => sub { Link Here
384
    $dbh->rollback();
384
    $dbh->rollback();
385
};
385
};
386
386
387
subtest 'purgeSelfRegistration' => sub {
388
    plan tests => 2;
389
390
    #purge unverified
391
    my $d=360;
392
    C4::Members::DeleteUnverifiedOpacRegistrations($d);
393
    foreach(1..3) {
394
        $dbh->do("INSERT INTO borrower_modifications (timestamp, borrowernumber, verification_token) VALUES ('2014-01-01 01:02:03',0,?)", undef, (scalar localtime)."_$_");
395
    }
396
    is( C4::Members::DeleteUnverifiedOpacRegistrations($d), 3, 'Test for DeleteUnverifiedOpacRegistrations' );
397
398
    #purge members in temporary category
399
    my $c= 'XYZ';
400
    $dbh->do("INSERT IGNORE INTO categories (categorycode) VALUES ('$c')");
401
    C4::Context->set_preference('PatronSelfRegistrationDefaultCategory', $c );
402
    C4::Context->set_preference('PatronSelfRegistrationExpireTemporaryAccountsDelay', 360);
403
    C4::Members::DeleteExpiredOpacRegistrations();
404
    $dbh->do("INSERT INTO borrowers (surname, address, city, branchcode, categorycode, dateenrolled) VALUES ('Testaabbcc', 'Street 1', 'CITY', 'CPL', '$c', '2014-01-01 01:02:03')");
405
    is( C4::Members::DeleteExpiredOpacRegistrations(), 1, 'Test for DeleteExpiredOpacRegistrations');
406
    $dbh->rollback();
407
};
408
387
sub _find_member {
409
sub _find_member {
388
    my ($resultset) = @_;
410
    my ($resultset) = @_;
389
    my $found = $resultset && grep( { $_->{cardnumber} && $_->{cardnumber} eq $CARDNUMBER } @$resultset );
411
    my $found = $resultset && grep( { $_->{cardnumber} && $_->{cardnumber} eq $CARDNUMBER } @$resultset );
390
- 

Return to bug 13049