[Rt-commit] rt branch, 4.4/rt-search-attributes, created. rt-4.2.11-248-g589ee48
Dustin Graves
dustin at bestpractical.com
Thu Oct 22 12:48:19 EDT 2015
The branch, 4.4/rt-search-attributes has been created
at 589ee4832e1bde5421344694c8d057b54614e44f (commit)
- Log -----------------------------------------------------------------
commit 589ee4832e1bde5421344694c8d057b54614e44f
Author: Dustin Graves <dustin at bestpractical.com>
Date: Thu Oct 22 15:47:26 2015 +0000
add script to search attributes
Fixes: I#31294
diff --git a/sbin/rt-search-attributes b/sbin/rt-search-attributes
new file mode 100755
index 0000000..41320f2
--- /dev/null
+++ b/sbin/rt-search-attributes
@@ -0,0 +1,169 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
+# <sales at bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN { # BEGIN RT CMD BOILERPLATE
+ require File::Spec;
+ require Cwd;
+ my @libs = ("lib", "local/lib");
+ my $bin_path;
+
+ for my $lib (@libs) {
+ unless ( File::Spec->file_name_is_absolute($lib) ) {
+ $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1];
+ $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+ }
+ unshift @INC, $lib;
+ }
+
+}
+
+my %args;
+use Getopt::Long;
+GetOptions( \%args, 'help|h', 'content|c' );
+
+my ($name, $search) = @ARGV;
+
+if ($args{help} || !$name) {
+ require Pod::Usage;
+ Pod::Usage::pod2usage({ verbose => 2 });
+ exit;
+}
+
+require RT;
+RT::LoadConfig();
+RT::Init();
+
+require RT::Attribute;
+my $attrs = RT::Attributes->new( RT->SystemUser );
+
+# search for name
+$attrs->Limit(
+ FIELD => 'Name',
+ OPERATOR => 'LIKE',
+ VALUE => $name,
+ CASESENSITIVE => 0,
+);
+
+my @fields = qw(Id ObjectType ObjectId Name Description);
+
+use Data::Dumper;
+
+# compile search code into sub since eval is slow
+my $predicate;
+$predicate = eval "
+ sub {
+ my \$attr = shift;
+ my ( \$Id, \$ObjectType, \$ObjectId, \$Name, \$Description, \$Content) =
+ (\$attr->Id, \$attr->ObjectType, \$attr->ObjectId, \$attr->Name, \$attr->Description, \$attr->Content);
+
+ # allow lowercase to be kind
+ my (\$id, \$objecttype, \$objectid, \$name, \$description, \$content) =
+ (\$Id, \$ObjectType, \$ObjectId, \$Name, \$Description, \$Content);
+
+ # shorthand for content
+ \$_ = \$attr->Content;
+
+ # return executed search code
+ $search;
+ }" if defined $search;
+
+if (defined $search and not defined $predicate) {
+ print "Error evaluating expression '$search'\n";
+ exit;
+}
+
+while ( my $attr = $attrs->Next ) {
+ # search for desired field
+ if (not defined $predicate or $predicate->($attr)) {
+ # print attribute's information
+ foreach my $field ( @fields ) {
+ print "$field: " . $attr->$field . "\n";
+ }
+ # print content
+ print Data::Dumper->Dump([$attr->Content], ['Content']) if ($args{content});
+ print "\n";
+ }
+}
+
+
+__END__
+
+=head1 NAME
+
+rt-search-attributes - search RT::Attribute objects
+
+=head1 SYNOPSIS
+
+rt-search-attributes [OPTION] ATTRIBUTE_NAME [QUALIFYING_CODE]
+
+=head1 DESCRIPTION
+
+This script searches all attributes named ATTRIBUTE_NAME with optional
+qualifying code QUALIFYING_CODE and prints out the details of matching
+attributes.
+
+QUALIFYING_CODE can use a number of variables to call on RT::Attribute's
+properties:
+ $Id, $ObjectType, $ObjectId, $Name, $Description, $Content
+ $_ is available as shorthand for $Content
+
+-c, --content
+ Print attribute content
+
+-h, --help
+ Display this help and exit
+
+e.g.
+
+rt-search-attributes SavedSearch '$id > 10'
+rt-search-attributes HomepageSettings
+rt-search-attributes Search '$_->{Query} =~ /Status/'
-----------------------------------------------------------------------
More information about the rt-commit
mailing list