Commit 8477618b authored by Shelepnev Dmitry's avatar Shelepnev Dmitry
Browse files

Add equal search in SerachBooksFeed and SearchSeriesFeed

parent 34917fce
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -345,7 +345,9 @@ class SearchBooksFeed(AuthFeed):
        # Поиск книг по начальной подстроке
        elif searchtype == 'b':
            books = Book.objects.extra(where=["upper(title) like %s"], params=["%s%%"%searchterms.upper()])
        # Поиск книг по автору
        # Поиск книг по точному совпадению наименования
        elif searchtype == 'e':
            books = Book.objects.extra(where=["upper(title)=%s"], params=["%s"%searchterms.upper()])        # Поиск книг по автору
        elif searchtype == 'a':
            try:
                author_id = int(searchterms)
@@ -599,6 +601,8 @@ class SearchSeriesFeed(AuthFeed):
            series = Series.objects.extra(where=["upper(ser) like %s"], params=["%%%s%%"%searchterms.upper()])
        elif searchtype == 'b':
            series = Series.objects.extra(where=["upper(ser) like %s"], params=["%s%%"%searchterms.upper()]) 
        elif searchtype == 'e':
            series = Series.objects.extra(where=["upper(ser)=%s"], params=["%s"%searchterms.upper()])             
        elif searchtype == 'a':
            try:
                self.author_id = int(searchterms)
@@ -734,13 +738,13 @@ class BooksFeed(AuthFeed):
    def items(self, obj):
        length, chars = obj
        if self.lang_code:
            sql="""select upper(substring(title,1,%(length)s)) as id, count(*) as cnt 
            sql="""select %(length)s as l, upper(substring(title,1,%(length)s)) as id, count(*) as cnt 
                   from opds_catalog_book 
                   where lang_code=%(lang_code)s and upper(title) like '%(chars)s%%'
                   group by upper(substring(title,1,%(length)s)) 
                   order by id"""%{'length':length, 'lang_code':self.lang_code, 'chars':chars}
        else:
            sql="""select upper(substring(title,1,%(length)s)) as id, count(*) as cnt 
            sql="""select %(length)s as l, upper(substring(title,1,%(length)s)) as id, count(*) as cnt 
                   from opds_catalog_book 
                   where upper(title) like '%(chars)s%%'
                   group by upper(substring(title,1,%(length)s)) 
@@ -756,10 +760,12 @@ class BooksFeed(AuthFeed):
        return _("Found: %s books")%item.cnt    

    def item_link(self, item):
        if item.cnt>=settings.SPLITITEMS:
        title_full = len(item.id)<item.l
        if item.cnt>=settings.SPLITITEMS and not title_full:
            return reverse("opds_catalog:chars_books", kwargs={"lang_code":self.lang_code,"chars":item.id})
        else:
            return reverse("opds_catalog:searchbooks", kwargs={"searchtype":'b', "searchterms":item.id})
            return reverse("opds_catalog:searchbooks", \
                           kwargs={"searchtype":'b' if not title_full else 'e', "searchterms":item.id})
        
    def item_enclosures(self, item):
        return (opdsEnclosure(self.item_link(item),"application/atom+xml;profile=opds-catalog;kind=navigation", "subsection"),)
@@ -850,13 +856,13 @@ class SeriesFeed(AuthFeed):
    def items(self, obj):
        length, chars = obj
        if self.lang_code:
            sql="""select upper(substring(ser,1,%(length)s)) as id, count(*) as cnt 
            sql="""select %(length)s as l, upper(substring(ser,1,%(length)s)) as id, count(*) as cnt 
                   from opds_catalog_series 
                   where lang_code=%(lang_code)s and upper(ser) like '%(chars)s%%'
                   group by upper(substring(ser,1,%(length)s)) 
                   order by id"""%{'length':length, 'lang_code':self.lang_code, 'chars':chars}
        else:
            sql="""select upper(substring(ser,1,%(length)s)) as id, count(*) as cnt 
            sql="""select %(length)s as l, upper(substring(ser,1,%(length)s)) as id, count(*) as cnt 
                   from opds_catalog_series 
                   where upper(ser) like '%(chars)s%%'
                   group by upper(substring(ser,1,%(length)s)) 
@@ -872,10 +878,12 @@ class SeriesFeed(AuthFeed):
        return _("Found: %s series")%item.cnt    

    def item_link(self, item):
        if item.cnt>=settings.SPLITITEMS:
        series_full = len(item.id)<item.l
        if item.cnt>=settings.SPLITITEMS and not series_full:
            return reverse("opds_catalog:chars_series", kwargs={"lang_code":self.lang_code,"chars":item.id})
        else:
            return reverse("opds_catalog:searchseries", kwargs={"searchtype":'b', "searchterms":item.id})
            return reverse("opds_catalog:searchseries", \
                           kwargs={"searchtype":'b' if not series_full else 'e', "searchterms":item.id})
        
    def item_enclosures(self, item):
        return (opdsEnclosure(self.item_link(item),"application/atom+xml;profile=opds-catalog;kind=navigation", "subsection"),)
+4 −4
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@ urlpatterns = [
    
    url(r'^search/$',feeds.OpenSearch, name='opensearch'),
  
    url(r'^search/books/(?P<searchtype>[bmasgu])/(?P<searchterms>.+)/(?P<page>\d+)/',feeds.SearchBooksFeed(), name='searchbooks'),
    url(r'^search/books/(?P<searchtype>[bmasgu])/(?P<searchterms>.+)/',feeds.SearchBooksFeed(), name='searchbooks'),    
    url(r'^search/books/(?P<searchtype>[bmasgue])/(?P<searchterms>.+)/(?P<page>\d+)/',feeds.SearchBooksFeed(), name='searchbooks'),
    url(r'^search/books/(?P<searchtype>[bmasgue])/(?P<searchterms>.+)/',feeds.SearchBooksFeed(), name='searchbooks'),    
    url(r'^search/books/(?P<searchtype>as)/(?P<searchterms>.+)/(?P<searchterms0>.+)/(?P<page>\d+)/',feeds.SearchBooksFeed(), name='searchbooks'),
    url(r'^search/books/(?P<searchtype>as)/(?P<searchterms>.+)/(?P<searchterms0>.+)/',feeds.SearchBooksFeed(), name='searchbooks'),
    url(r'^search/books/(?P<searchtype>as)/(?P<searchterms>.+)/',feeds.SelectSeriesFeed(), name='searchbooks'), 
@@ -37,8 +37,8 @@ urlpatterns = [
    url(r'^search/authors/(?P<searchtype>[bme])/(?P<searchterms>.+)/(?P<page>\d+)/',feeds.SearchAuthorsFeed(), name='searchauthors'),
    url(r'^search/authors/(?P<searchtype>[bme])/(?P<searchterms>.+)/',feeds.SearchAuthorsFeed(), name='searchauthors'),       
       
    url(r'^search/series/(?P<searchtype>[bma])/(?P<searchterms>.+)/(?P<page>\d+)/',feeds.SearchSeriesFeed(), name='searchseries'),
    url(r'^search/series/(?P<searchtype>[bma])/(?P<searchterms>.+)/',feeds.SearchSeriesFeed(), name='searchseries'), 
    url(r'^search/series/(?P<searchtype>[bmae])/(?P<searchterms>.+)/(?P<page>\d+)/',feeds.SearchSeriesFeed(), name='searchseries'),
    url(r'^search/series/(?P<searchtype>[bmae])/(?P<searchterms>.+)/',feeds.SearchSeriesFeed(), name='searchseries'), 
        
    url(r'^search/(?P<searchterms>.+)/',feeds.SearchTypesFeed(), name='searchtypes'),