Edit File: rescan_user_dovecot_fts
#!/usr/local/cpanel/3rdparty/bin/perl package scripts::rescan_user_dovecot_fts; # cpanel - scripts/rescan_user_dovecot_fts Copyright 2017 cPanel, Inc. # All rights Reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cpanel license. Unauthorized copying is prohibited use strict; use warnings; use Try::Tiny; use Cpanel::AcctUtils::Account (); use Cpanel::Dovecot::Utils (); use Whostmgr::Email::Action (); use Cpanel::PwCache (); use Getopt::Long (); use Pod::Usage (); our $SOLR_IS_INSTALLED_TEST_FILE = '/home/cpanelsolr/server/solr/solr.xml'; =encoding utf-8 =head1 NAME scripts::rescan_users_dovecot_fts =head1 SYNOPSIS rescan_users_dovecot_fts ( --user <username> | --help ) This script will call a dovecot FTS (full text search) rescan for each mailbox on a specified account if the 'cpanel-dovecot-solr' RPM is installed. If not, the script informs that the RPM isn't installed and returns. =cut __PACKAGE__->command_line(@ARGV) unless caller(); sub command_line { my ( $class, @args ) = @_; die "This must run as root!\n" if $>; my ( $user, $help ); if ( !Getopt::Long::GetOptionsFromArray( \@args, 'user=s' => \$user, help => \$help, ) || $help ) { print _help(); return; } if ( !$user ) { warn "You must specify a username!\n"; print _help(); return; } elsif ( !Cpanel::AcctUtils::Account::accountexists($user) ) { warn "You do not have a user named '$user'.\n"; print _help(); return; } if ( !is_solr_installed() ) { warn "The 'cpanel-dovecot-solr' rpm is not installed. Full text search rescan not possible\n"; return; } my $script = $class->new(); $script->process_user($user); return; } sub _help { my $msg = shift; my $val; open my $wfh, '>', \$val or die "Failed to open to a scalar: $!"; Pod::Usage::pod2usage( -exitval => 'NOEXIT', -message => $msg, -verbose => 1, -noperldoc => 1, -output => $wfh, ); return $val; } sub process_user { my ( $self, $user ) = @_; print "Rescanning mailboxes for full text search indexing for '$user'..."; my $rescanned_count = Whostmgr::Email::Action::do_with_each_mail_account( $user, sub { my ($email_account) = @_; Cpanel::Dovecot::Utils::fts_rescan_mailbox( account => $email_account ); } ); print "...$rescanned_count rescanned... Done\n"; return; } sub new { my ( $class, %OPTS ) = @_; my $self = bless {}, $class; return $self; } # TODO: Move this check into Cpanel::Dovecot::Solr::is_installed # once CPANEL-12103 is fixed. sub is_solr_installed { if ( -e $SOLR_IS_INSTALLED_TEST_FILE && Cpanel::PwCache::getpwnam('cpanelsolr') ) { return 1; } return 0; } 1;