Changeset 5134 for MILK


Ignore:
Timestamp:
23/03/09 16:00:56 (10 years ago)
Author:
cbyrom
Message:

Add search functionality for doing searches in 'browse' mode against
the local browse service + add templates to support this - making the
atom search result template more generic for re-use.

Location:
MILK/trunk/milk_server/milk_server
Files:
2 added
11 edited
1 moved

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editorconstants.py

    r5099 r5134  
    1414HELP_PAGE_TITLE = 'Atom Editor Help Page' 
    1515 
    16 NO_SEARCH_RESULTS = 'No data found for search selections' 
     16NO_SEARCH_RESULTS = 'No data found for search' 
    1717EDIT_TITLE = 'Editing [%s]' 
    1818CREATE_ATOM_TITLE = 'Create new atom' 
  • MILK/trunk/milk_server/milk_server/controllers/browse/discovery.py

    r5099 r5134  
    11''' 
    22Controller for the discovery search functionality 
     3TODO: this is a complete mess and really needs tidying up! 
    34''' 
    45import socket, logging 
     
    2829         
    2930        self.__setup() 
     31         
    3032        # parse the query string and hand off to a discovery engine 
    31          
    3233        if self.inputs=={} or 'ClearForm' in self.inputs:  
    3334            return self.__advancedPrompt() 
     
    4748        # maybe not in that order. The next simplest is one with 
    4849        # a specified textTarget, after that we need all the inputs. 
    49          
    5050        if 'searchString' in self.inputs and 'textTarget' not in self.inputs: 
    5151            # it's a simple text search 
     
    6060            return render('content') 
    6161         
    62          
    63         if 'geoSearchType' not in self.inputs:self.inputs['geoSearchType']='overlaps' 
     62        if 'geoSearchType' not in self.inputs: 
     63            self.inputs['geoSearchType']='overlaps' 
     64             
    6465        if len(self.inputs)==6: 
    65              
    6666            # now we add the defaults ... 
    6767            # this is kind of historical ... 
     
    9494                    return render('content') 
    9595                     
    96              
    9796            expected=['startDateDay','startDateMon','startDateYear', 
    98                             'endDateDay','endDateMon','endDateYear'] 
     97                      'endDateDay','endDateMon','endDateYear'] 
    9998            self.__checkform(expected) 
    10099            if self.message!='':  
     
    147146            #overriding text target which is ignored currently ... yuck ... 
    148147            textTarget=self.inputs['searchTarget'] 
    149             if textTarget=='Browse':textTarget='ndg_B_metadata' 
     148            if textTarget == 'Browse': 
     149                textTarget = SearchClient.ATOM_TARGET#'ndg_B_metadata' 
    150150        else: 
    151151            logging.error("Unrecognised search type, '%s'" \ 
     
    189189                                                  searchString,geoSearch) 
    190190        hits=ws.hits 
    191         if hits==0: 
     191        if hits==0 and textTarget != SearchClient.ATOM_TARGET: 
    192192            outMessage = 'No records found [contraints: %s]' %searchConstraints 
    193193            logging.info(outMessage)  
     
    380380        c.results=ws.results 
    381381        c.searchTarget=self.inputs['searchTarget'] 
     382        textTarget = self.inputs['textTarget'] 
     383 
     384        # check if we're doing a search against atoms - NB, this should be the 
     385        # default eventually - so we can remove all the alternative options 
     386        isAtom = False 
     387        if textTarget == SearchClient.ATOM_TARGET: 
     388            isAtom = True 
    382389         
    383390        for r in c.results: 
    384391            id = r.id 
    385392                # cope with atom docs 
    386             if id.startswith('tag'): 
    387                 id = id.split('/')[-1] 
    388             n=ndgObject(id,config=self.cf) 
    389             r.link={'Browse':n.BURL,'NumSim':n.URL}[c.searchTarget] 
    390          
    391         return render('browse/short_results') 
     393            if isAtom: 
     394                r.link = r.href 
     395            else: 
     396                n=ndgObject(id,config=self.cf) 
     397                r.link={'Browse':n.BURL,'NumSim':n.URL}[c.searchTarget] 
     398 
     399        if isAtom: 
     400            c.searchTerm = " - for search term, '%s'" %self.inputs['searchString'] 
     401            if c.results: 
     402                c.searchTerm += ' [%s results found]' %len(c.results) 
     403            return render('genshi', 'browse/short_atom_results') 
     404        else: 
     405            return render('browse/short_results') 
    392406             
    393407    def clearSession(self): 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_creator.html

    r4730 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <head> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_editor.html

    r5128 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <head> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_granulator.html

    r4965 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <xi:include href="../utils.html" /> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_help.html

    r4845 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <head> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_home.html

    r4730 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <head> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_list.html

    r4846 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
     7        <xi:include href="../atom_list_results.html" /> 
    78        <head> 
    89        <title py:content="c.title">title</title> 
     
    5859                </div> 
    5960                <div py:if="c.searchData" class="metadata"> 
    60                             <h3>Results</h3> 
    61                         <div class="headingblock"> 
    62                                 <table py:if="not c.results"> 
    63                                         <tr><td>$NO_SEARCH_RESULTS</td></tr> 
    64                                 </table> 
    65                                 <form action="${c.associateLink}" method="post"> 
    66                         <table width="100%" py:if="c.results" border="1"> 
    67                                 <tr> 
    68                                 <th>Edit</th> 
    69                                 <th>Provider ID</th> 
    70                                 <th>Created</th> 
    71                                 <th>Type</th> 
    72                                 <th>Title</th> 
    73                                 <th>Subtype</th> 
    74                                 <th py:if="c.assocAtomType" align="center">Add</th> 
    75                                 </tr> 
    76                                 <?python  
    77                                         from ndg.common.src.models.Atom import Atom as a 
    78                                         delim = a.DELIMITER 
    79                                         refLabel = a.ATOM_REF_LABEL + delim 
    80                                         c.showAddButton = False 
    81                                 ?> 
    82                                 <tr py:for="atom in c.results"> 
    83                                 <?python 
    84                                         if atom and atom.name != None: 
    85                                                 subType = "None" 
    86                                                 subTypeVTI = None 
    87                                                 if atom.subtype: 
    88                                                         try: 
    89                                                                 subTypeVTI = g.vtd.getTermItemfromFullVocabURI(atom.subtype) 
    90                                                                 subType = g.vtd.tidySubTypeTitle(subTypeVTI.title) 
    91                                                         except: 
    92                                                                 subType = atom.subtype 
    93  
    94                                                 vti = None 
    95                                                 try: 
    96                                                         vti = g.vtd.getTermItemfromFullVocabURI(atom.type) 
    97                                                         type = vti.title 
    98                                                 except: 
    99                                                         type = atom.type 
    100                                                 atomType = atom.type 
    101                                                 allowAdd = False 
    102                                                 if vti and c.assocAtomType: 
    103                                                         if c.assocAtomType == g.vtd.DEPLOYMENT_TERM and g.vtd.isDeployable(vti): 
    104                                                                 if not subTypeVTI or subTypeVTI.termID != g.vtd.DEPLOYMENT_TERM: 
    105                                                                         allowAdd = True 
    106                                                         elif c.assocAtomType == g.vtd.DE_TERM and (g.vtd.isDeployment(subTypeVTI) or g.vtd.isGranule(vti)): 
    107                                                                 allowAdd = True 
    108                                                                 if g.vtd.isDeployment(subTypeVTI): 
    109                                                                         atomType = g.vtd.getTermCurrentVocabURL(g.vtd.DEPLOYMENT_TERM) 
    110                                                 if allowAdd: 
    111                                                         c.showAddButton = True 
    112                                         ?> 
    113                                 <td> 
    114                                 <a href="$atom.href" onclick="Div_show('loading');">Edit</a> 
    115                                 </td> 
    116                                 <td> 
    117                                 ${Markup(atom.providerID)} 
    118                                 </td> 
    119                                 <td> 
    120                                 ${Markup(atom.created)} 
    121                                 </td> 
    122                                 <td> 
    123                                 ${Markup(type)} 
    124                                 </td> 
    125                                 <td> 
    126                             ${Markup(atom.name)} 
    127                                 </td> 
    128                                 <td> 
    129                                 ${Markup(subType)} 
    130                                 </td> 
    131                                 <td py:if="allowAdd" align="center"> 
    132                                 ${Markup(h.check_box(refLabel + atom.href + delim + (atom.name or "") + delim + (atomType)))} 
    133                                 </td> 
    134                                 </tr> 
    135                                 <tr py:if="c.assocAtomType and c.showAddButton"> 
    136                                 <td colspan = "6"/> 
    137                                 <td align="center"> 
    138                                 ${Markup(h.submit('Add selections', name='add', **{'onclick': 'Div_show("loading");'}))} 
    139                         </td></tr> 
    140                         </table> 
    141                         </form> 
    142                 </div> 
     61                                <div py:replace="AtomListResults(c.results)" /> 
    14362                </div> 
    14463        </div> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/error.html

    r4730 r5134  
    22        xmlns:py="http://genshi.edgewall.org/"  
    33        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    4         <xi:include href="layout.html" /> 
     4        <xi:include href="../layout.html" /> 
    55        <head> 
    66        <title py:content="c.title">title</title> 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/granulite_example.html

    r4730 r5134  
    33        xmlns:py="http://genshi.edgewall.org/"  
    44        xmlns:xi="http://www.w3.org/2001/XInclude"> 
    5         <xi:include href="layout.html" /> 
     5        <xi:include href="../layout.html" /> 
    66        <xi:include href="atom_functions.html" /> 
    77        <head> 
  • MILK/trunk/milk_server/milk_server/templates/layout.html

    r5128 r5134  
    22        xmlns:py="http://genshi.edgewall.org/" 
    33        xmlns:xi="http://www.w3.org/2001/XInclude" py:strip=""> 
    4 <xi:include href="../ndgPage.html" /> 
     4<xi:include href="ndgPage.html" /> 
    55<?python from milk_server.controllers.atom_editor.editorconstants import *?> 
    66 
     
    3535              <div py:replace="searchOneLine()"/> 
    3636          </div> 
     37      <div py:if="not g.discoveryEnabled"> 
     38            <div py:replace="localTextSearch()"/> 
     39          </div> 
    3740      <div id="content"> 
    3841                <table py:if="g.atomEditorEnabled and c.title != ATOM_HOME_TITLE" class="homeHelpBar"> 
  • MILK/trunk/milk_server/milk_server/templates/ndgPage.html

    r5116 r5134  
    44 
    55        <xi:include href="utils.html" /> 
    6     
     6<?python 
     7from ndg.common.src.clients.xmldb.eXist.searchclient import SearchClient 
     8?>    
    79    <head py:def="pagehead()" py:strip="True"> 
    810        <title py:content="c.title">title</title> 
     
    5658          </div> 
    5759    </div> 
     60     
     61    <!--! One line search box for the local browse service --> 
     62    <div py:def="localTextSearch()" class="searchBar"> 
     63        <table width="100%"><tr><td align="left"> 
     64        <form action="$g.discoveryURL"> 
     65            Browse text search<span py:replace="helpIcon('nts_help', 'div')"/>&nbsp; 
     66            <input type="text" size="25" name="searchString"/> 
     67            <input type="submit" value="Search"/> 
     68            <input type="hidden" name="searchTarget" value="Browse"/> 
     69            <input type="hidden" name="textTarget" value="$SearchClient.ATOM_TARGET"/> 
     70         </form> 
     71         </td> 
     72                </tr></table> 
     73          <div id="nts_help" class="hidden"> 
     74            <div class="helptxt"><p>  
     75            This will do a completely new text search against the local browse documents.  
     76            </p></div> 
     77          </div> 
     78    </div> 
     79 
    5880     
    5981    <div py:def="PageTabs(tabv)" id="PageTabs"> 
Note: See TracChangeset for help on using the changeset viewer.