package JCRList; # -------------------------------------------------------------------- # The copyright and all other proprietary rights in this Database # (including software - SEE LICENSING AGREEMENT) are the sole and # exclusive property of the Institute for Scientific Information # (ISI). This Database and source code, or any derivative works # thereof, are confidential and proprietary to ISI . Therefore, # duplication, reuse, redistribution, reverse assembling, reverse # compiling, or translation of the Database, source code, or any # portion thereof IS NOT PERMITTED. Consult Licensing Agreement. # -------------------------------------------------------------------- # $Id: JCRList.pm,v 1.39 2008/09/16 16:17:31 ssidanal Exp $ use strict; use Data::Dumper; use ISIBench; use JCRErrorList; use Log::Log4perl qw(get_logger); use VCRControl; use URL; use Util; use base qq(JCRPage); sub build_page { ISIBench::start(); my $logger = get_logger("JCRList"); my $self = shift; my $args = (ref $_[0] eq 'HASH') ? shift : { @_ }; my $request = $self->{request}; my $session = $self->{session}; my $year = $self->{session}->get('value' => 'year'); # Save required query params $self->_save_params(); my($sort_box_type,$help_tag); if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i || $request->{RQ} =~ /SELECT_ALL/i || $request->{RQ} =~ /LIST_MARKED/i ) { $sort_box_type = 'journal'; } elsif ( $request->{RQ} =~ /LIST_SUMMARY_CATEGORY/i ) { $sort_box_type = 'category'; } # Have the limits been changed? if ($request->{change_limits} eq 'true') { JCRUtil::purge_marked_list( 'session' => $self->{session}, 'db' => $self->{db}, ); } # Get the query list my $query = $self->_get_query(); unless (defined $query && (ref($query) =~ /hash/i)) { $logger->error("Could not build query!"); ISIBench::stop(); return $query; } $logger->debug("Returned query is: ", sub{Dumper($query)}); # Process any page button bar (such as mark page) requests $self->_process_button_clicks( 'query' => $query ); # Execute the query based upon the request my $data = $self->_execute_query( 'query' => $query ); my $count = $self->_execute_count( 'query' => $query ); if (((ref($count) =~ /hash/i) && ($count->{count}>0)) || ($request->{RQ} =~ /LIST_MARKED/i)) { $logger->debug("Execute Query Count Returned: ", sub{Dumper($count);}); $logger->debug("Execute Query Returned: ", sub{Dumper($data);}); # Build the JCRSelection page template my $vcr = VCRControl->new( 'lines_per_page' => $CF::recs_per_summary, 'num_page_links' => 10, 'total_lines' => $count->{count}, 'url_target' => $CF::app_path, 'url_params' => 'RQ=' . $request->{RQ}, 'images_url' => $CF::image_path, 'cursor' => $self->{summary_cursor}, ); unless (defined($vcr) && (ref($vcr) =~ /vcrcontrol/i)) { $logger->error("Could not create VCRControl Object! (#$vcr)"); ISIBench::stop(); return $vcr; } # Get the journal start and end count my $record_count = $vcr->range(); # Get the marked list buttons for this page my $ml_buttons = $self->_get_buttons(); $logger->debug("Loading Summary List template"); my $ret = $self->_set_template(); if ($ret) { ISIBench::stop(); return $ret; } # Set the page title if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i || $request->{RQ} =~ /SELECT_ALL/i ) { $self->set_title( 'title' => 'Journal Summary List' ); $help_tag = qq{2.7}; } elsif ( $request->{RQ} =~ /LIST_MARKED/i ) { $self->set_title( 'title' => 'Marked List' ); $help_tag = qq{2.11}; } elsif ( $request->{RQ} =~ /LIST_SUMMARY_CATEGORY/i ) { $self->set_title( 'title' => 'Category Summary List' ); $help_tag = qq{2.13}; } # Add the toolbar my $toolbar = $self->build_toolbar( 'help' => $help_tag ); unless (defined($toolbar) && (ref($toolbar) =~ /toolbar/i)) { ISIBench::stop(); return $toolbar; } if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i || $request->{RQ} =~ /SELECT_ALL/i || $request->{RQ} =~ /LIST_MARKED/i ) { my $marked = (ref($request->{mark}) =~ /array/i) ? $request->{mark} : [$request->{mark}]; $logger->debug("Marked Records on Page are: ", sub{Dumper($marked)}); my $num_marked_recs = scalar(@{$marked}); if ( $num_marked_recs == 1 ) { if ( !defined($marked->[0]) ) { $num_marked_recs=0; } } # Set other template vars if ( ($num_marked_recs == 0) && ($self->{mode} =~ /save/i || $self->{mode} =~ /print/i && ( $count->{count} <= $CF::recs_per_summary )) ) { $self->set( 'name' => 'error_msg', 'value' => 'NOTICE
None of the journals on the list are marked for output.
Please select at least one journal below.', ); } } $self->set( 'name' => 'selection', 'value' => $query->{display}, ); $self->set( 'name' => 'query_type', 'value' => $query->{type}, ); $self->set( 'name' => 'records', 'value' => $data, ); $self->set( 'name' => 'sorted_by', 'value' => JCRUtil::map_sort_names('sort' => $self->{summary_sort}), ); if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i || $request->{RQ} =~ /SELECT_ALL/i || $request->{RQ} =~ /LIST_MARKED/i ) { $self->set( 'name' => 'sort_j20', 'value' => ($self->{summary_sort} =~ /(?:journal|title)/) ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_cites', 'value' => ($self->{summary_sort} eq 'cites_all') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_impact', 'value' => ($self->{summary_sort} eq 'impact_current') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_immediacy', 'value' => ($self->{summary_sort} eq 'immediacy') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_articles', 'value' => ($self->{summary_sort} eq 'source_current') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_hlife', 'value' => ($self->{summary_sort} eq 'cited_hlife') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_eigen', 'value' => ($self->{summary_sort} eq 'eigen_factor') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_article_influence', 'value' => ($self->{summary_sort} eq 'article_influence') ? 'class=sorted' : '', ); $self->set( 'name' => 'sort_5yr_impact', 'value' => ($self->{summary_sort} eq 'impact_5year') ? 'class=sorted' : '', ); #Added For Eigen Fator, Article Influence and Five Year Impact factor. $self->set( 'name' => 'show_eigen_five_yr_impact', 'value' => ($year->{year} >= $CF::data_eigen_impact_start) ? 1 : 0, ); $self->set( 'name' => 'show_subject_category_summary_link', 'value' => ($year->{year} >= $CF::data_subject_category_start) ? 1 : 0, ); } elsif ( $request->{RQ} =~ /LIST_SUMMARY_CATEGORY/i ){ $self->set( 'name' => 'sort_cat', 'value' => ($self->{summary_sort} =~ /(?:category|cat_title)/) ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_cites', 'value' => ($self->{summary_sort} eq 'journal_cites') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_median_if', 'value' => ($self->{summary_sort} eq 'median_if') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_aggregate_if', 'value' => ($self->{summary_sort} eq 'aggregate_if') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_aggregate_immed_index', 'value' => ($self->{summary_sort} eq 'aggregate_immed_index') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_aggregate_cited_hlife', 'value' => ($self->{summary_sort} eq 'cited_hlife') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_num_journals', 'value' => ($self->{summary_sort} eq 'journal_count') ? 'class=sortedcat' : '', ); $self->set( 'name' => 'sort_num_articles', 'value' => ($self->{summary_sort} eq 'articles_count') ? 'class=sortedcat' : '', ); } $self->set( 'name' => 'record_start', 'value' => $self->{summary_cursor}, ); my $sort_select_box = JCRUtil::build_sort_box({'selected' => $self->{summary_sort}, 'sort_box_type' => $sort_box_type, 'year'=> $year->{year},}); $self->set( 'name' => 'sort_select_box', 'value' => $sort_select_box->{html}, ); $self->set( 'name' => 'recs_per_page', 'value' => $CF::recs_per_summary, ); # Vars for the VCR control $self->set( 'name' => 'vcr_control', 'value' => $vcr->draw(), ); $self->set( 'name' => 'journal_start', 'value' => $record_count->{start}, ); $self->set( 'name' => 'journal_end', 'value' => $record_count->{end}, ); $self->set( 'name' => 'journal_total', 'value' => $count->{count}, ); $self->set( 'name' => 'page_current', 'value' => $vcr->get_page(), ); $self->set( 'name' => 'page_total', 'value' => $vcr->{_total_pages}, ); $self->set( 'name' => 'error', 'value' => $self->{ERROR}, ); # End VCR Control vars if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i || $request->{RQ} =~ /SELECT_ALL/i ) { # Vars for the marked list buttons $self->set( 'name' => 'markedlist_buttons', 'value' => $ml_buttons->{html}, ); # Check records that are marked unless ($request->{RQ} =~ /list_marked/i) { my $marked_records = $self->_get_marked_list(); $logger->debug("Got Marked List: ", sub{Dumper($marked_records)}); $self->set( 'name' => 'marked_records', 'value' => $marked_records, ); } } } else { # Redisplay the Search page because of error $logger->debug("Loading jcr_search.html template"); my $ret = $self->set_template( 'template' => "jcr_search.html" ); if ($ret) { ISIBench::stop(); return $ret; } my $errorlist = JCRErrorList->new(); if ( $request->{RQ} =~ /LIST_SUMMARY_JOURNAL/i ) { $data = 3206 if (ref($data) =~ /(?:hash|array)/i); } elsif ( $request->{RQ} =~ /LIST_SUMMARY_CATEGORY/i ) { $data = 3006 if (ref($data) =~ /(?:hash|array)/i); } $data = 3206 if (ref($data) =~ /(?:hash|array)/i); my $error = $errorlist->map( 'error' => $data ); $self->set( 'name' => 'error', 'value' => qq|***** $error->{error} *****|, ); # Set the page title $self->set_title( 'title' => 'Search' ); my $search_select_box = JCRUtil::build_search_box('selected' => $request->{search_type}); $self->set( 'name' => 'search_select_box', 'value' => $search_select_box->{html}, ); $self->set( 'name' => 'search_term', 'value' => Util::encode_html('html' => $request->{search_term}), ); # Add the toolbar my $toolbar = $self->build_toolbar( 'help' => '2.5' ); unless (defined($toolbar) && (ref($toolbar) =~ /toolbar/i)) { ISIBench::stop(); return $toolbar; } } if (($request->{RQ} =~ /SELECT_ALL/i) && (defined $request->{'Submit.x'})) { my $edition = $session->get( 'value' => 'edition' ); my $log_edition = $edition->{'edition'}; my $data_string = qq{$log_edition}; # Log the View All Journals $session->log_event( 'event' => 'event_query', 'data' => { 'limits' => $data_string, }, ); # error checking my $error_string = $session->getError(); if ( length($error_string) > 1 ) { $logger->error("WURS Event not logged: $error_string"); } } ISIBench::stop(); return 0; } sub _update_marked_list { ISIBench::start(); my $logger = get_logger("JCRList"); my $self = shift; my $args = (ref $_[0] eq 'HASH') ? shift : { @_ }; my $request = $self->{request}; my $session = $self->{session}; # Create the new MarkedList object my $edition = $session->get( 'value' => 'edition' ); my $year = $session->get( 'value' => 'year' ); my $marked_list = JCR::MarkedList->new( 'session' => $session, 'max_marked' => $CF::marked_list_max, 'db' => $self->{db}, 'edition' => $edition->{edition}, 'year' => $year->{year}, ); unless (defined($marked_list) && (ref($marked_list) =~ /markedlist/i)) { $logger->debug("Could not create Marked List Object"); ISIBench::stop(); return $marked_list; } my @records = split /,/, $request->{page_records}; $logger->debug("Records on Page are: ", sub{Dumper(\@records)}); my $marked = (ref($request->{mark}) =~ /array/i) ? $request->{mark} : [$request->{mark}]; $logger->debug("Marked Records on Page are: ", sub{Dumper($marked)}); my %update; tie %update, "Tie::IxHash"; foreach my $record (@records){ $logger->debug("Current Record is : $record:"); my $temp_record = $record; $temp_record =~ s/\+/\\\+/; $update{$record} = (grep(/^$temp_record$/i, @{$marked})) ? 'checked' : ''; } $logger->debug("Update Marked List Hash: ", sub{Dumper(\%update)}); # Send the updated marked list to the DB my $ret = $marked_list->update_marked_list( 'journals' => \%update ); $logger->debug("Marking records return value is: $ret"); if ($ret > 0) { my $errorlist = JCRErrorList->new(); my $error = $errorlist->map( 'error' => $ret ); $self->{ERROR} = $error->{error}; } ISIBench::stop(); return $ret; } 1;