cgi-bin/DW/Hooks/SiteSearch.pm
author fu
Thu Feb 23 02:21:54 2012 +0800
changeset 4315 34b3c4ba3afb
parent 4087 0363ba0c8e9a
permissions -rw-r--r--
http://bugs.dwscoalition.org/show_bug.cgi?id=3859

Tweak for grammar / clarity / wording.

Patch by fu.
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;