|
mark@1757
|
1 |
#!/usr/bin/perl
|
|
mark@1757
|
2 |
#
|
|
mark@1757
|
3 |
# DW::Hooks::SiteSearch
|
|
mark@1757
|
4 |
#
|
|
mark@1757
|
5 |
# Hooks for Site Search functionality.
|
|
mark@1757
|
6 |
#
|
|
mark@1757
|
7 |
# Authors:
|
|
mark@1757
|
8 |
# Mark Smith <mark@dreamwidth.org>
|
|
mark@1757
|
9 |
#
|
|
mark@1757
|
10 |
# Copyright (c) 2009 by Dreamwidth Studios, LLC.
|
|
mark@1757
|
11 |
#
|
|
mark@1757
|
12 |
# This program is free software; you may redistribute it and/or modify it under
|
|
mark@1757
|
13 |
# the same terms as Perl itself. For a copy of the license, please reference
|
|
mark@1757
|
14 |
# 'perldoc perlartistic' or 'perldoc perlgpl'.
|
|
mark@1757
|
15 |
#
|
|
mark@1757
|
16 |
|
|
mark@1757
|
17 |
package DW::Hooks::SiteSearch;
|
|
mark@1757
|
18 |
|
|
mark@1757
|
19 |
use strict;
|
|
mark@2019
|
20 |
use LJ::Hooks;
|
|
mark@1757
|
21 |
|
|
fu@4087
|
22 |
sub _sphinx_db {
|
|
fu@4087
|
23 |
# ensure we can talk to our system
|
|
fu@4087
|
24 |
return LJ::get_dbh( 'sphinx_search' )
|
|
fu@4087
|
25 |
or die "Unable to get sphinx_search database handle.\n";
|
|
fu@4087
|
26 |
}
|
|
fu@4087
|
27 |
|
|
mark@2019
|
28 |
LJ::Hooks::register_hook( 'setprop', sub {
|
|
mark@1757
|
29 |
my %opts = @_;
|
|
mark@1757
|
30 |
return unless $opts{prop} eq 'opt_blockglobalsearch';
|
|
mark@1757
|
31 |
|
|
fu@4199
|
32 |
my $dbh = _sphinx_db() or return 0;
|
|
mark@1757
|
33 |
$dbh->do( 'UPDATE posts_raw SET allow_global_search = ? WHERE journal_id = ?',
|
|
mark@1757
|
34 |
undef, $opts{value} eq 'Y' ? 0 : 1, $opts{u}->id );
|
|
mark@1757
|
35 |
die $dbh->errstr if $dbh->err;
|
|
mark@1757
|
36 |
|
|
mark@1757
|
37 |
# looks good
|
|
mark@1757
|
38 |
return 1;
|
|
mark@1757
|
39 |
} );
|
|
mark@1757
|
40 |
|
|
fu@4087
|
41 |
|
|
fu@4087
|
42 |
# set when the user's status(vis) changes
|
|
fu@4087
|
43 |
# the user may still undelete or be unsuspended
|
|
fu@4087
|
44 |
# so we don't want to remove from indexing just yet
|
|
fu@4087
|
45 |
sub _mark_deleted {
|
|
fu@4087
|
46 |
my ( $u, $is_deleted ) = @_;
|
|
fu@4087
|
47 |
|
|
fu@4199
|
48 |
my $dbh = _sphinx_db() or return 0;
|
|
fu@4087
|
49 |
$dbh->do( 'UPDATE posts_raw SET is_deleted = ? where journal_id = ?',
|
|
fu@4087
|
50 |
undef, $is_deleted, $u->id );
|
|
fu@4087
|
51 |
die $dbh->errstr if $dbh->err;
|
|
fu@4087
|
52 |
|
|
fu@4087
|
53 |
return 1;
|
|
fu@4087
|
54 |
}
|
|
fu@4087
|
55 |
|
|
fu@4087
|
56 |
LJ::Hooks::register_hook( 'account_delete', sub { _mark_deleted( $_[0], 1 ) } );
|
|
fu@4087
|
57 |
LJ::Hooks::register_hook( 'account_cancel', sub { _mark_deleted( $_[0], 1 ) } );
|
|
fu@4087
|
58 |
LJ::Hooks::register_hook( 'account_makevisible', sub {
|
|
fu@4087
|
59 |
my ( $u, %opts ) = @_;
|
|
fu@4087
|
60 |
|
|
fu@4087
|
61 |
my $old = $opts{old_statusvis};
|
|
fu@4087
|
62 |
_mark_deleted( $u, 0 ) if $old eq "D" || $old eq "S";
|
|
fu@4087
|
63 |
} );
|
|
fu@4087
|
64 |
|
|
fu@4087
|
65 |
|
|
fu@4087
|
66 |
LJ::Hooks::register_hook( 'purged_user', sub {
|
|
fu@4087
|
67 |
my ( $u ) = @_;
|
|
fu@4087
|
68 |
|
|
fu@4087
|
69 |
my $sclient = LJ::theschwartz() or die;
|
|
fu@4087
|
70 |
|
|
fu@4087
|
71 |
# queue up a copier job, which will notice that the entries by this user have been deleted...
|
|
fu@4087
|
72 |
$sclient->insert_jobs( TheSchwartz::Job->new_from_array( 'DW::Worker::Sphinx::Copier',
|
|
fu@4087
|
73 |
{ userid => $u->id } ) );
|
|
fu@4087
|
74 |
|
|
fu@4087
|
75 |
});
|
|
fu@4087
|
76 |
|
|
mark@1757
|
77 |
1;
|