Changeset 4241


Ignore:
Timestamp:
29/09/08 09:53:25 (11 years ago)
Author:
cbyrom
Message:

Make People and Coverage template sections editable + add code to controller
to extract input data and update this appropriately.

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/editatom.py

    r4237 r4241  
    1313from xml.parsers.expat import ExpatError 
    1414import logging 
    15 from ndgUtils.models.Atom import Atom 
     15from ndgUtils.models.Atom import Atom, Person 
    1616from formencode import Schema, validators, Invalid 
    1717from genshi.filters import HTMLFormFiller 
     
    133133 
    134134        c.title='Editing [%s]'%self.ndgObject 
     135         
     136        c.saveLink = h.url_for(controller='editatom',action='edit', saveData='1') 
     137        c.saveLink2 = h.url_for(controller='editatom',action='edit', saveData='2') 
    135138        inputs = request.params 
    136139        logging.debug("Input params, '%s'" %inputs) 
     
    144147 
    145148        if saveData: 
     149            logging.info("Saving atom data") 
     150            authors = self.extractAuthorDetails(inputs) 
     151            if authors: 
     152                c.atom.addAuthors(authors) 
     153 
    146154            self.saveAtomToExist(c.atom) 
    147155                         
     
    160168                logging.debug(c.key) 
    161169                logging.debug(c.default) 
    162                  
    163170 
    164171                c.blkfrag=1 
     
    184191        return render('error') 
    185192 
     193 
     194    def extractAuthorDetails(self, inputs): 
     195        ''' 
     196        Retrieve author data from inputs and set appropriately on Atom, if any 
     197        found 
     198        @return: list of Person objects with the author data 
     199        ''' 
     200        logging.info("Extracting author data from inputs") 
     201        processedAuthors = [] 
     202        authors = [] 
     203        for key in inputs: 
     204            keyBits = key.split('.') 
     205            if len(keyBits) == 3 and keyBits[1] not in processedAuthors: 
     206                 
     207                authorType = -1 
     208                if key.lower().startswith('author'): 
     209                    authorType = Person.AUTHOR_TYPE 
     210                elif key.lower().startswith('contributor'): 
     211                    authorType = Person.CONTRIBUTOR_TYPE 
     212                elif key.lower().startswith('responsible'): 
     213                    authorType = Person.RESPONSIBLE_PARTY_TYPE 
     214                else: 
     215                    continue 
     216 
     217                author = Person(personType = authorType) 
     218                keyStem = ".".join(keyBits[0:2]) 
     219                author.name = inputs.get(keyStem + '.name') or "" 
     220                author.uri = inputs.get(keyStem + '.uri') or "" 
     221                author.role = inputs.get(keyStem + '.role') or "" 
     222                 
     223                logging.info("Adding new author info") 
     224                logging.debug("Extracted author (type:'%s', name:'%s', uri:'%s', role:'%s')" \ 
     225                              %(author.type, author.name, author.uri, author.role)) 
     226                authors.append(author) 
     227                processedAuthors.append(keyBits[1]) 
     228 
     229        logging.info("Finished extracting author data") 
     230        return authors 
     231                 
    186232 
    187233    def saveAtomToExist(self, atom): 
     
    208254        Create a new atom 
    209255        ''' 
    210         logging.debug("--------------------------%s--------------------" %saveData) 
    211256        if saveData: 
    212257            logging.info("Creating basic atom") 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom.html

    r4230 r4241  
    2929                        </div> 
    3030                        <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
    31                         <div py:replace="People('Author', [c.atom.author])"/> 
    32                         <div py:replace="People('Contributors', c.atom.contributors)"/> 
     31                        <div py:replace="People('Author', [c.atom.author], False)"/> 
     32                        <div py:replace="People('Contributors', c.atom.contributors, False)"/> 
    3333                        <div py:replace="FullParameterList(c.atom.parameters)"/> 
    3434                        <div py:replace="SummaryParameterList(c.atom.parameters)"/> 
    35                         <div py:replace="Coverage()"/> 
     35                        <div py:replace="Coverage(None)"/> 
    3636                        <div py:replace="FullDeployments(c.atom.ME.deployments)"/> 
    3737                        <div py:replace="SummaryDeployments(c.atom.ME.deployments)"/> 
    3838                        <div py:replace="People('Responsible Parties',  
    39                                 c.atom.ME.responsibleParties)"/> 
     39                                c.atom.ME.responsibleParties, False)"/> 
    4040                            <div py:replace="Services()"/> 
    4141              </div> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_creator.html

    r4237 r4241  
    3737                                <td></td> 
    3838                                <td> 
    39                                         <input type="submit" value="Submit" /> 
    40                                         <input type="submit" name="cancel" value="Cancel" /> 
     39                                        <input type="submit" value="Create" /> 
    4140                                </td> 
    4241                                </tr></table> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_editor.html

    r4237 r4241  
    2323 
    2424                                <h4>  Mandatory Material </h4> 
    25                                 <form action="${h.url_for(controller = 'editatom', action='edit', saveData='1')}" method="post"> 
     25                                <form action="${c.saveLink}" method="post"> 
    2626                                <table summary=""><tbody><tr> 
    2727                                <th><label for="title">Title:</label></th> 
    2828                                <td> 
    29                                         ${Markup(h.text_field('title',c.atom.title,size="172"))} 
     29                                        ${Markup(h.text_field('title',c.atom.title,width="100%"))} 
    3030                                        <span py:if="'title' in c.errors" class="error">${c.errors.title}</span> 
    3131                                </td> 
     
    3535                                <td> 
    3636                                        ${Markup(h.select('subtype',option_tags=c.subTypes))} 
    37                                         <span py:if="'subtype' in c.errors" class="error">${c.errors.subtype}</span> 
    3837                                </td> 
    3938                            </tr> 
     
    4948                        </div> 
    5049 
    51         <h4> Summary </h4> 
    52         <div py:replace="txtBlkEd('Summary',c.atom.Summary,'absDiv',h.url(controller='editatom',action='edit', saveData='2'))" id="absDiv"/> 
     50                <h4> Summary </h4> 
     51            <div py:replace="txtBlkEd('Summary',c.atom.Summary,'absDiv', 
     52                        c.saveLink2)" id="absDiv"/> 
    5353                </div> 
    5454        </div> 
     55                        <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
     56                        <div py:replace="People('Author', [c.atom.author], c.saveLink)"/> 
     57                        <div py:replace="People('Contributors', c.atom.contributors, c.saveLink)"/> 
     58                        <div py:replace="FullParameterList(c.atom.parameters)"/> 
     59                        <div py:replace="Coverage(c.saveLink)"/> 
     60                        <div py:replace="FullDeployments(c.atom.ME.deployments)"/> 
     61                        <div py:replace="People('Responsible Parties',  
     62                                c.atom.ME.responsibleParties, c.saveLink)"/> 
    5563  </body> 
    5664</html> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_functions.html

    r4237 r4241  
    1010    <xi:include href="utils.html" /> 
    1111     
    12     <div class="metadataSection" py:def="People(ptype,listOfPeople)"> 
    13         <table py:if="listOfPeople"> 
    14             <tr><td class="linehead"><span class="heading0">$ptype</span></td></tr> 
     12    <div class="metadataSection" py:def="People(ptype,listOfPeople,editLink)"> 
     13        <?python         
     14                                divID = ptype + 'peopleDiv' 
     15                                edID=divID+'ed'  
     16                ?> 
     17        <table py:if="listOfPeople or editLink"> 
     18            <tr><td class="linehead"> 
     19                    <table> 
     20                        <tr><td>$ptype</td> 
     21                            <span py:if="editLink" py:strip=""> 
     22                                <td align="right"> 
     23                                        <span class="txtBlktog"> 
     24                                        <a href="javascript:;" title="Toggle Form"  
     25                                             onclick="swapLayers('$divID', '$edID'); return false;"> 
     26                                        Add/Edit</a> 
     27                                        </span> 
     28                                    </td> 
     29                            </span> 
     30                                        </tr> 
     31                                </table> 
     32            </td></tr> 
    1533            <tr><td> 
     34                <div id = "$divID"> 
     35                                <div py:replace="PeopleTable(listOfPeople, ptype, None)"/> 
     36                        </div> 
     37                        </td></tr> 
     38                <tr py:if="editLink"><td> 
     39                        <div id="$edID" class="hidden"> 
     40                                <div py:replace="PeopleTable(listOfPeople, ptype, editLink)"/> 
     41                        </div> 
     42                        </td></tr> 
     43        </table> 
     44    </div> 
     45 
     46        <div py:def="PeopleTable(listOfPeople, ptype, editLink)"> 
     47                <form action="${editLink}" method="post"> 
    1648            <table> 
    17                     <tr py:for="person in listOfPeople"> 
    18                         <td class="cellhead">$person.role</td> 
    19                         <td>$person.name</td> 
    20                         <td><a href="$person.uri">$person.uri</a></td> 
     49                <tr> 
     50                        <?python 
     51                                hasRole = False 
     52                                if ptype == "Responsible Parties": 
     53                                        hasRole = True 
     54                                                 
     55                                extraRows = 3 
     56                                if ptype == "Author": 
     57                                        extraRows = 0 
     58                        ?> 
     59                        <span py:if="not editLink and not listOfPeople" py:strip=""> 
     60                                <td colspan="3">No data specified at present</td> 
     61                        </span> 
     62                        <span py:if="editLink or listOfPeople" py:strip=""> 
     63                                <th py:if="hasRole" align="left">Role</th> 
     64                                <th align="left">Name</th> 
     65                                <th align="left">URI</th> 
     66                        </span> 
     67                </tr> 
     68                    <tr py:for="i, person in enumerate(listOfPeople)"> 
     69                        <span py:if="hasRole" py:strip=""> 
     70                                <td py:if="editLink"> 
     71                                            ${Markup(h.text_field(ptype + '.' + str(i) + '.role',person.role))} 
     72                                        </td> 
     73                        <td py:if="not editLink"> 
     74                                $person.role 
     75                                </td> 
     76                        </span> 
     77                        <td> 
     78                        <span py:if="editLink" py:strip=""> 
     79                                    ${Markup(h.text_field(ptype + '.' + str(i) + '.name',person.name))} 
     80                                </span> 
     81                        <span py:if="not editLink" py:strip=""> 
     82                                $person.name 
     83                                </span> 
     84                        </td> 
     85                        <td> 
     86                        <span py:if="editLink" py:strip=""> 
     87                                    ${Markup(h.text_field(ptype + '.' + str(i) + '.uri',person.uri))} 
     88                                </span> 
     89                        <span py:if="not editLink" py:strip=""> 
     90                                <a href="$person.uri">$person.uri</a> 
     91                                </span> 
     92                        </td> 
    2193                                </tr> 
     94                                <!--! Add a few more rows when in edit mode  --> 
     95                        <span py:if="editLink" py:strip=""> 
     96                    <tr py:for="i in range(len(listOfPeople), len(listOfPeople) + extraRows)"> 
     97                        <td py:if="hasRole"> 
     98                                    ${Markup(h.text_field(ptype + '.' + str(i) + '.role'))} 
     99                        </td> 
     100                        <td> 
     101                                    ${Markup(h.text_field(ptype + '.' + str(i) + '.name'))} 
     102                        </td> 
     103                        <td> 
     104                                    ${Markup(h.text_field(ptype + '.' + str(i) + '.uri'))} 
     105                        </td> 
     106                                </tr> 
     107                         
     108                                <tr><td> 
     109                      ${Markup(h.submit(value="Update"))} 
     110                      </td></tr> 
     111                                </span> 
    22112                        </table> 
    23                         </td></tr> 
    24         </table>  
    25     </div> 
     113                </form> 
     114        </div> 
     115 
    26116     
    27117    <div class="metadataSection" py:def="SummaryDeployments(deployments)" id="summaryDeployment"> 
     
    162252    </div> 
    163253     
    164     <div class="metadataSection" py:def="Coverage()"> 
     254    <div class="metadataSection" py:def="Coverage(editLink)"> 
     255        <?python         
     256                                divID = 'spatialtemporalDiv' 
     257                                edID = divID+'ed'  
     258                ?> 
    165259        <table> 
    166             <tr><td class="linehead" colspan="2"><span class="heading0"> Data Coverage</span> </td></tr> 
     260            <tr><td class="linehead" colspan="2"> 
     261                    <table> 
     262                        <tr><td>Data Coverage</td> 
     263                            <span py:if="editLink" py:strip=""> 
     264                                <td align="right"> 
     265                                        <span class="txtBlktog"> 
     266                                        <a href="javascript:;" title="Toggle Form"  
     267                                             onclick="swapLayers('$divID', '$edID'); return false;"> 
     268                                        Add/Edit</a> 
     269                                        </span> 
     270                                    </td> 
     271                            </span> 
     272                                        </tr> 
     273                                </table> 
     274                                </td> 
     275                        </tr> 
    167276            <tr> 
    168                 <td><div py:replace="Spatial()"/></td> 
    169                 <td><div py:replace="Temporal()"/></td> 
    170                 </tr> 
    171         </table> 
    172     </div> 
    173  
    174     <div py:def="Temporal()" py:strip=""> 
     277                <td> 
     278                <div id="$divID"> 
     279                        <table><tr> 
     280                        <td><div py:replace="Spatial(None)"/></td> 
     281                        <td><div py:replace="Temporal(None)"/></td> 
     282                    </tr></table> 
     283                </div> 
     284                </td> 
     285            </tr> 
     286            <span py:if="editLink" py:strip=""> 
     287                                <form action="${editLink}" method="post"> 
     288                <tr> 
     289                        <td> 
     290                        <div id="$edID" class="hidden"> 
     291                                <table><tr> 
     292                                <td><div py:replace="Spatial(editLink)"/></td> 
     293                            <td><div py:replace="Temporal(editLink)"/></td> 
     294                            </tr> 
     295                            <tr><td> 
     296                                 ${Markup(h.submit(value="Update"))} 
     297                                 </td></tr> 
     298                            </table> 
     299                        </div> 
     300                    </td> 
     301                    </tr> 
     302                                </form> 
     303                        </span> 
     304        </table> 
     305    </div> 
     306 
     307    <div py:def="Temporal(editLink)" py:strip=""> 
    175308                <table><tr><td colspan="2" class="cellhead">Temporal coverage</td></tr> 
    176             <span py:if="c.atom.t1 or c.atom.t2" py:strip=""> 
    177                                 <tr><td>Start Date:</td><td>${c.atom.t1}</td></tr> 
    178                                 <tr><td>End Date:</td><td>${c.atom.t2}</td></tr> 
     309            <span py:if="c.atom.t1 or c.atom.t2 or editLink" py:strip=""> 
     310                                <tr><td>Start Date:</td> 
     311                                <td> 
     312                                <span py:if="editLink" py:strip=""> 
     313                                ${Markup(h.text_field('t1', c.atom.t1))} 
     314                                </span> 
     315                        <span py:if="not editLink" py:strip=""> 
     316                        ${c.atom.t1} 
     317                                </span> 
     318                                </td></tr> 
     319                                <tr><td>End Date:</td> 
     320                                <td> 
     321                                <span py:if="editLink" py:strip=""> 
     322                                ${Markup(h.text_field('t2', c.atom.t2))} 
     323                                </span> 
     324                        <span py:if="not editLink" py:strip=""> 
     325                        ${c.atom.t2} 
     326                                </span> 
     327                                </td></tr> 
    179328            </span> 
    180329            <span py:if="not c.atom.t1 and not c.atom.t2" py:strip=""> 
     
    184333    </div> 
    185334                             
    186     <div py:def="Spatial()" py:strip=""> 
     335    <div py:def="Spatial(editLink)" py:strip=""> 
    187336        <table> 
    188337            <tr><td colspan="2" class="cellhead">Spatial coverage</td></tr> 
    189             <span py:if="not c.atom.minX and not c.atom.minY and not c.atom.maxX and not c.atom.maxY" py:strip=""> 
     338            <span py:if="not c.atom.minX and not c.atom.minY and not c.atom.maxX and not c.atom.maxY and not editLink" py:strip=""> 
    190339                    <tr><td colspan="2">No spatial coverage information available.</td></tr> 
    191340                </span> 
    192             <span py:if="c.atom.minX or c.atom.minY or c.atom.maxX or c.atom.maxY" py:strip=""> 
    193                                 <tr><td colspan="2" align="center">${c.atom.maxY}</td></tr> 
    194                         <tr><td align="center">${c.atom.minX}</td><td align="center">${c.atom.maxX}</td></tr> 
    195                         <tr><td colspan="2" align="center">${c.atom.minY}</td></tr> 
     341            <span py:if="c.atom.minX or c.atom.minY or c.atom.maxX or c.atom.maxY or editLink" py:strip=""> 
     342                                <tr> 
     343                                <td colspan="2" align="center"> 
     344                                <span py:if="editLink" py:strip=""> 
     345                                ${Markup(h.text_field('maxY', c.atom.maxY))} 
     346                                </span> 
     347                        <span py:if="not editLink" py:strip=""> 
     348                        ${c.atom.maxY} 
     349                                </span> 
     350                                </td></tr> 
     351                        <tr><td align="center"> 
     352                                <span py:if="editLink" py:strip=""> 
     353                                ${Markup(h.text_field('minX', c.atom.minX))} 
     354                                </span> 
     355                        <span py:if="not editLink" py:strip=""> 
     356                        ${c.atom.minX} 
     357                                </span> 
     358                        </td><td align="center"> 
     359                                <span py:if="editLink" py:strip=""> 
     360                                ${Markup(h.text_field('maxX', c.atom.maxX))} 
     361                                </span> 
     362                        <span py:if="not editLink" py:strip=""> 
     363                        ${c.atom.maxX} 
     364                                </span> 
     365                        </td></tr> 
     366                        <tr><td colspan="2" align="center"> 
     367                                <span py:if="editLink" py:strip=""> 
     368                                ${Markup(h.text_field('minY', c.atom.minY))} 
     369                                </span> 
     370                        <span py:if="not editLink" py:strip=""> 
     371                        ${c.atom.minY} 
     372                                </span> 
     373                        </td></tr> 
    196374                </span> 
    197375        </table>  
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/utils.html

    r4232 r4241  
    6868                      h.hidden_field("divID",value=divID) + 
    6969                      h.hidden_field("key",value=key) +  
    70                       h.hidden_field('providerid',value=c.pid) +  
    71                       h.hidden_field('localid',value=c.localID) +  
    72                       h.hidden_field('database',value=c.db) + 
    73                       h.text_area(key,default,size="72x10"))} 
     70                      h.text_area(key,default,size="172x10"))} 
    7471                      <center> ${Markup(h.submit(value="Update"))}</center> 
    7572                      ${Markup(h.end_form())} 
Note: See TracChangeset for help on using the changeset viewer.