TPac; indicate search results previously checked out user/berick/tpac-results-highlight-checked-out-items
authorBill Erickson <berick@esilibrary.com>
Tue, 29 Nov 2011 21:54:52 +0000 (16:54 -0500)
committerBill Erickson <berick@esilibrary.com>
Thu, 15 Dec 2011 18:32:52 +0000 (13:32 -0500)
When a user is logged in to the tpac and performs a search, indicate in
the results set when any of the result items were ever checked out by
the logged in user.

Items will only be tagged when the related org setting is enabled and
the user has opted-in to circ history tracking.

New org unit setting is "opac.search.tag_circulated_items" /
"Tag Circulated Items in Results"

In the search results, just below title/author/callnumber/copy-count, a
new line is displayed that says "I have checked out this item before"
with a purdy little checkmark.

Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous-opac-tag-circed-items.sql [new file with mode: 0644]
Open-ILS/src/templates/opac/parts/result/table.tt2
Open-ILS/web/css/skin/default/opac/style.css

index dc45d3b..eb166a6 100644 (file)
@@ -1292,14 +1292,14 @@ sub staged_search {
                 $results = [map {[$_->{id}]} @$results];
             }
 
-            tag_circulated_records($search_hash->{authtoken}, $results, $IAmMetabib) 
-                if $search_hash->{tag_circulated_records} and $search_hash->{authtoken};
-
             push @$new_ids, grep {defined($_)} map {$_->[0]} @$results;
             $results = [grep {defined $_->[0]} @$results];
             cache_staged_search_page($key, $page, $summary, $results) if $docache;
         }
 
+        tag_circulated_records($search_hash->{authtoken}, $results, $IAmMetabib) 
+            if $search_hash->{tag_circulated_records} and $search_hash->{authtoken};
+
         $current_page_summary = $summary;
 
         # add the new set of results to the set under construction
index cfaef71..f803f7f 100644 (file)
@@ -138,6 +138,28 @@ sub _get_search_limit {
     return 10; # default
 }
 
+sub tag_circed_items {
+    my $self = shift;
+    my $e = $self->editor;
+
+    return 0 unless $e->requestor;
+    return 0 unless $self->ctx->{get_org_setting}->(
+        $e->requestor->home_ou, 
+        'opac.search.tag_circulated_items');
+
+    # user has to be opted-in to circ history in some capacity
+    my $sets = $e->search_actor_user_setting({
+        usr => $e->requestor->id, 
+        name => [
+            'history.circ.retention_age', 
+            'history.circ.retention_start'
+        ]
+    });
+
+    return 0 unless @$sets;
+    return 1;
+}
+
 # context additions: 
 #   page_size
 #   hit_count
@@ -174,6 +196,7 @@ sub load_rresults {
     my $offset = $page * $limit;
     my $metarecord = $cgi->param('metarecord');
     my $results; 
+    my $tag_circs = $self->tag_circed_items;
 
     $ctx->{page_size} = $limit;
     $ctx->{search_page} = $page;
@@ -226,6 +249,11 @@ sub load_rresults {
         # the query string, not special args.
         my $args = {'limit' => $limit, 'offset' => $offset};
 
+        if ($tag_circs) {
+            $args->{tag_circulated_records} = 1;
+            $args->{authtoken} = $self->editor->authtoken;
+        }
+
         # Stuff these into the TT context so that templates can use them in redrawing forms
         $ctx->{processed_search_query} = $query;
 
@@ -276,6 +304,16 @@ sub load_rresults {
         );
     }
 
+    if ($tag_circs) {
+        for my $rec (@{$ctx->{records}}) {
+            my ($res_rec) = grep { $_->[0] == $rec->{id} } @{$results->{ids}};
+            # index 1 in the per-record result array is a boolean which
+            # indicates whether the record in question is in the users
+            # accessible circ history list
+            $rec->{user_circulated} = 1 if $res_rec->[1];
+        }
+    }
+
     $ctx->{search_facets} = $facets;
 
     return Apache2::Const::OK;
index 41e8d19..9d3d217 100644 (file)
@@ -4495,6 +4495,19 @@ INSERT into config.org_unit_setting_type
         'coust', 'description'),
     'bool', null)
 
+,( 'opac.search.tag_circulated_items', 'opac',
+    oils_i18n_gettext(
+        'opac.search.tag_circulated_items',
+        'Tag Circulated Items in Results',
+        'coust', 'label'
+    ),
+    oils_i18n_gettext(
+        'opac.search.tag_circulated_items',
+        'When a user is both logged in and has opted in to circ history tracking, turning on this setting will cause previous (or currenlty) circulated items to be highlighted in search results',
+        'coust', 'description'
+    ),
+    'bool', null)
+
 ;
 
 UPDATE config.org_unit_setting_type
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous-opac-tag-circed-items.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous-opac-tag-circed-items.sql
new file mode 100644 (file)
index 0000000..be200f7
--- /dev/null
@@ -0,0 +1,30 @@
+-- Evergreen DB patch XXXX.data.yaous-opac-tag-circed-items.sql
+--
+BEGIN;
+
+
+-- check whether patch can be applied
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+INSERT into config.org_unit_setting_type 
+    (name, grp, label, description, datatype) 
+    VALUES ( 
+        'opac.search.tag_circulated_items', 
+        'opac',
+        oils_i18n_gettext(
+            'opac.search.tag_circulated_items',
+            'Tag Circulated Items in Results',
+            'coust', 
+            'label'
+        ),
+        oils_i18n_gettext(
+            'opac.search.tag_circulated_items',
+            'When a user is both logged in and has opted in to circ history tracking, turning on this setting will cause previous (or currenlty) circulated items to be highlighted in search results',
+            'coust', 
+            'description'
+        ),
+        'bool'
+    );
+
+
+COMMIT;
index a8a277e..c0b8baf 100644 (file)
@@ -42,9 +42,7 @@
                                                         src='[% ctx.media_prefix %]/opac/extras/ac/jacket/small/[% ident | uri %]' /></a><br />
                                                 [% END %]
                                             </td>
-                                            <td class='result_table_title_cell'
-                                                name='result_table_title_cell'
-                                                valign="top">
+                                            <td class='result_table_title_cell' name='result_table_title_cell' valign="top">
                                                 <div class="bold">
                                                     <a name='record_[% rec.id %]' title="[% attrs.title | uri %]" name='item_title'
                                                         href="[% mkurl(ctx.opac_root _ '/record/' _ rec.id) %]"
                                                             #rec.copy_counts.available, rec.copy_counts.visible) 
                                                         %]
                                                     </div>
+                                                    [% IF rec.user_circulated %]
+                                                    <div class="result_item_circulated">
+                                                        <img src="[% ctx.media_prefix %]/images/green_check.png" alt="[% l('Checked Out Before') %]"/>
+                                                        <span style="position:relative;top:-3px;left:3px;">[%  l('I have checked this item out before') %]</span></a>
+                                                    </div>
+                                                    [% END %]
                                                 </div>
                                             </td>
 
                                                         class='classic_link hide_me'
                                                         name="googleBooks-link">[% l("Browse in Google Books Search") %]</a>
                                                 </span>
-
                                             </td>
                                             <td nowrap='nowrap' width="1" align="right">
                                                 <div class="result_table_utils_cont">
index 27eb9d8..aa63184 100644 (file)
@@ -1320,3 +1320,6 @@ table.bookbag-specific {
 #staff-saved-search { /* wraps .saved-searches-header and .saved-searches on the record page */
     border-right: 1px solid #333;
 }
+.result_item_circulated {
+    padding-top: 4px;
+}