diff --git a/app/assets/javascripts/application/search.js b/app/assets/javascripts/application/search.js index 4e7bfdf1e63cc9b03acf68ef9101e07da26a89ab..d6636b18e48bb20eb31c5441a1dc70477bad97c0 100644 --- a/app/assets/javascripts/application/search.js +++ b/app/assets/javascripts/application/search.js @@ -98,7 +98,7 @@ var search = function() { switch(action) { case 'add': // remove previous element if type is a single value only - var single_params = ['query', 'order']; + var single_params = ['query', 'order', 'year']; var index = single_params.indexOf(type); if (index > -1) { $.each($('.filter-panel').tagsinput('items'), function (i, v) { @@ -117,6 +117,7 @@ var search = function() { } // sidebar + // set values from params switch(type) { // search input case 'query': @@ -147,6 +148,18 @@ var search = function() { case 'school_year': watchCheckbox('school_year', 'filter-school-year', true); break; + case 'year': + var year = params.get('year').split('-'); + if (year.length === 1){ + $("#filter-year input[value=single]").prop('checked',true); + $("#filter-year input[name=singleYear]").val(year[0]); + } + else{ + $("#filter-year input[value=range]").prop('checked',true); + $("#filter-year input[name=startYear]").val(year[0]); + $("#filter-year input[name=endYear]").val(year[1]); + } + break; } }); } @@ -183,6 +196,36 @@ var search = function() { watchFilterSubject(); watchCheckbox('type', 'filter-type'); watchCheckbox('school_year', 'filter-school-year'); + watchFilterYear(); + watchFilterRegex(); + } + + function watchFilterYear(){ + $('#filter-year button').on('click', function(event){ + event.preventDefault(); + value = $('#filter-year input[name=year]:checked').val(); + switch (value) { + case "single": + params.add('year', $('#filter-year input[name=singleYear]').val()); + break; + case "range": + start_year = $('#filter-year input[name=startYear]').val(); + end_year = $('#filter-year input[name=endYear]').val(); + params.add('year', start_year + '-' + end_year); + break; + } + filtersFetchInterval(); + }); + } + + function watchFilterRegex() { + $('.regex-submit').on('click', function (event) { + event.preventDefault(); + $.each(['all','exact','any','none'], function(index, value){ + params.add('regex_' + value, $(".regex input[name="+value+"]").val()) + }); + filtersFetchInterval(); + }); } function watchFilterSubject() { @@ -290,7 +333,11 @@ var searchParameters = function() { subject: [], type: [], school_year: [], - year: "" + year: "", + regex_all: "", + regex_exact: "", + regex_any: "", + regex_none: "" } // clone default_params var params = JSON.parse(JSON.stringify(default_params)); diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 1e8eafc413ce8cb150f014e9ac573c3ec61bc4ca..3b604e8690fc23615c1c3ba9f12d055674fe51dd 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -10,6 +10,7 @@ class SearchController < ApplicationController params[:subject]= params[:subject].split(', ') params[:type] = params[:type].split(', ') params[:school_year] = params[:school_year].split(', ') + params[:year] = params[:year].split('-').take(2) page=1 if (params[:page]) page = params[:page].to_i diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index 77a56e3d1be7150deffd5e156cd6ac5df2b16dfb..702f1d4523653abd7818a8b6343745741fd8086a 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -164,6 +164,7 @@ module OrientDb query = "SELECT EXPAND(rid) FROM index:learningobject_search WHERE key LUCENE '#{qry}'" query = "SELECT * FROM (" + query + ") WHERE " + fetch_types(params[:type]) unless params[:type].blank? + query = "SELECT * FROM (" + query + ") WHERE " + fetch_year(params[:year]) unless params[:year].blank? query = "SELECT * FROM (" + query + ") ORDER BY #{order}" unless order.nil? query = "SELECT @rid.asString(), last_modified FROM (" + query + ")" learning_objects_hash = connection.query query, limit: 10000 @@ -191,6 +192,17 @@ module OrientDb hash end + def fetch_year(years) + if years.size() == 1 + year = years[0] + qry = "created_at.format('yyyy') = '#{year}'" + elsif years.size() == 2 + begin_year = years[0] + end_year = years[1] + qry = "created_at.format('yyyy') >= '#{begin_year}' AND created_at.format('yyyy') <= '#{end_year}'" + end + end + def fetch_types(types) qry = '' types.each do |type| diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb index 796b7fa4d399d3d2ee7a984344d3aafec7500f15..4bb5d880f82b47a6fd9675116aa3c3da766f3161 100644 --- a/app/views/search/index.html.erb +++ b/app/views/search/index.html.erb @@ -210,42 +210,42 @@ <h3 class="dropdown">Ano de Publicação<span class="caret caret-align-right"/></h3> <div class="dropdown-element"> - <form> + <form id="filter-year"> <input type="radio" name="year" value="single" checked>Ano:<br/> <input type="text" name="singleYear" size="8"> <br/> <input type="radio" name="year" value="range">Intervalo:<br/> <input type="text" name="startYear" size="8"> - <input type="text" name="endYear" size="8"> - <a onclick="getYearFilter()">Ano</a> + <br/><br/> + <button type="submit" class="btn btn-default">Pesquisar</button> </form> </div> <h3 class="dropdown">Pesquisa Avançada<span class="caret caret-align-right"/></h3> - <form method="get"> + <form method="get" class="regex"> <div class="dropdown-element"> <table style="width:100%"> <tr> <td>Todas estas palavras:</td> - <td><input type="text" name="All" ></td> + <td><input type="text" name="all" ></td> </tr> <tr> <td>A frase exata:</td> - <td><input type="text" name="Exact" ></td> + <td><input type="text" name="exact" ></td> </tr> <tr> <td>Qualquer uma destas palavras:</td> - <td><input type="text" name="Any"></td> + <td><input type="text" name="any"></td> </tr> <tr> <td>Nenhuma destas palavras:</td> - <td><input type="text" name="None"></td> + <td><input type="text" name="none"></td> </tr> <tr> <td></td> <td align="right"><br> - <button type="submit" class="btn btn-default">Pesquisar</button> + <button type="submit" class="btn btn-default regex-submit">Pesquisar</button> </td> - <a onclick="getWordsFilter()">Palavras</a> </tr> </table> </div> @@ -294,6 +294,7 @@ case 'subject': return 'label label-success'; case 'type' : return 'label label-default'; case 'school_year' : return 'label label-warning'; + case 'year' : return 'label label-info'; } }, freeInput: false