Ignore:
Timestamp:
29/09/08 12:41:03 (11 years ago)
Author:
cbyrom
Message:

Add code to allow input/edit of online references + fix author/contributor
data to conform to the Atom 'email' convention - i.e. using an email
attribute instead of a uri one.

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

Legend:

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

    r4241 r4244  
    1313from xml.parsers.expat import ExpatError 
    1414import logging 
    15 from ndgUtils.models.Atom import Atom, Person 
     15from ndgUtils.models.Atom import Atom, Person, Link 
    1616from formencode import Schema, validators, Invalid 
    1717from genshi.filters import HTMLFormFiller 
     
    4545    Provides the pylons controller for editing NDG Atom documents. 
    4646    ''' 
     47     
    4748    def __setup(self,uri=None): 
    4849        ''' Common setup stuff for all the actions on this controller ''' 
     
    152153                c.atom.addAuthors(authors) 
    153154 
     155            onlineRefs = self.extractOnlineReferenceDetails(inputs) 
     156            if onlineRefs: 
     157                c.atom.relatedLinks = onlineRefs 
     158                 
    154159            self.saveAtomToExist(c.atom) 
    155160                         
     
    215220                    continue 
    216221 
     222                # NB, adding an empty object here is valid as it will clear out 
     223                # existing entries, potentially 
    217224                author = Person(personType = authorType) 
    218225                keyStem = ".".join(keyBits[0:2]) 
     
    229236        logging.info("Finished extracting author data") 
    230237        return authors 
     238 
     239 
     240    def extractOnlineReferenceDetails(self, inputs): 
     241        ''' 
     242        Retrieve online reference data from inputs and set appropriately on Atom, if any 
     243        found 
     244        @return: list of Link objects with the related links data 
     245        ''' 
     246        logging.info("Extracting related links data from inputs") 
     247        processedLinks = [] 
     248        links = [] 
     249        for key in inputs: 
     250            keyBits = key.split('.') 
     251            if len(keyBits) == 3 and keyBits[1] not in processedLinks: 
     252                 
     253                if key.lower().startswith(Atom.ONLINE_REF_LABEL): 
     254                    link = Link() 
     255                    keyStem = ".".join(keyBits[0:2]) 
     256                    # NB, adding an empty object here is valid as it will clear out 
     257                    # existing entries, potentially 
     258                    link.href = inputs.get(keyStem + '.href') or "" 
     259                    link.title = inputs.get(keyStem + '.title') or "" 
     260                    link.rel = inputs.get(keyStem + '.rel') or "" 
     261                     
     262                    logging.info("Adding new online reference info") 
     263                    logging.debug("Extracted online reference (href:'%s', title:'%s', rel:'%s')" \ 
     264                                  %(link.href, link.title, link.rel)) 
     265                    links.append(link) 
     266                    processedLinks.append(keyBits[1]) 
     267                else: 
     268                    continue 
     269 
     270        logging.info("Finished extracting links data") 
     271        return links 
    231272                 
    232273 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom.html

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

    r4243 r4244  
    5252                <div py:replace="txtBlkEd('Summary',c.atom.Summary,'absDiv', 
    5353                        c.saveLink2)" id="absDiv"/> 
    54                         <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
     54                        <div py:replace="OnlineReferences(c.atom.relatedLinks, c.saveLink)"/> 
    5555                        <div py:replace="People('Author', [c.atom.author], c.saveLink)"/> 
    5656                        <div py:replace="People('Contributors', c.atom.contributors, c.saveLink)"/> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_functions.html

    r4243 r4244  
    5050                        <?python 
    5151                                hasRole = False 
     52                                dataType = 'email' 
    5253                                if ptype == "Responsible Parties": 
    5354                                        hasRole = True 
     55                                        dataType = 'URI' 
    5456                                                 
    5557                                extraRows = 3 
     
    6365                                <th py:if="hasRole" align="left">Role</th> 
    6466                                <th align="left">Name</th> 
    65                                 <th align="left">URI</th> 
     67                                <th align="left">${dataType}</th> 
    6668                        </span> 
    6769                </tr> 
     
    193195    </span> 
    194196 
    195     <div class="metadataSection" py:def="OnlineReferences(links)"> 
    196         <table py:if="links" cellspacing="0" cellpadding="3"  
    197         border="0" width="100%"> 
    198                         <div class="linehead"> Online References</div> 
    199             <ul> 
    200                 <li py:for="link in links"><a href="$link.href">${link.title or link.rel or link.href}</a></li> 
    201             </ul> 
    202         </table> 
    203     </div> 
     197    <div class="metadataSection" py:def="OnlineReferences(links, editLink)"> 
     198        <?python         
     199                                divID = 'onlineRefDiv' 
     200                                edID = divID+'ed'  
     201                ?> 
     202                <table py:if="links or editLink"> 
     203            <tr><td class="linehead"> 
     204                    <table> 
     205                        <tr><td>Online References</td> 
     206                            <span py:if="editLink" py:strip=""> 
     207                                <td align="right"> 
     208                                        <span class="txtBlktog"> 
     209                                        <a href="javascript:;" title="Toggle Form"  
     210                                             onclick="swapLayers('$divID', '$edID'); return false;"> 
     211                                        Add/Edit</a> 
     212                                        </span> 
     213                                    </td> 
     214                            </span> 
     215                                        </tr> 
     216                                </table> 
     217                                </td> 
     218                        </tr> 
     219            <tr><td> 
     220                <div id = "$divID"> 
     221                            <ul> 
     222                                <li py:for="link in links"><a href="$link.href">${link.title or link.rel or link.href}</a></li> 
     223                        </ul> 
     224                        </div> 
     225                        </td></tr> 
     226                <tr py:if="editLink"><td> 
     227                        <div id="$edID" class="hidden"> 
     228                                <div py:replace="OnlineRefEditTable(links, editLink)"/> 
     229                        </div> 
     230                        </td></tr> 
     231                        <tr><td> 
     232            </td></tr> 
     233        </table> 
     234    </div> 
     235 
     236 
     237        <div py:def="OnlineRefEditTable(links, editLink)"> 
     238                <form action="${editLink}" method="post"> 
     239                        <?python 
     240                                from ndgUtils.models.Atom import Atom as a 
     241                                refLabel = a.ONLINE_REF_LABEL + "." 
     242                                extraRows = 3 
     243                        ?> 
     244            <table> 
     245                <tr> 
     246                        <th align="left">URI</th> 
     247                        <th align="left">Title</th> 
     248                                <th align="left">Relation</th> 
     249                </tr> 
     250                    <tr py:for="i, link in enumerate(links)"> 
     251                        <td> 
     252                                    ${Markup(h.text_field(refLabel + str(i) + '.href', link.href))} 
     253                                        </td> 
     254                        <td> 
     255                                    ${Markup(h.text_field(refLabel + str(i) + '.title', link.title))} 
     256                        </td> 
     257                        <td> 
     258                                    ${Markup(h.text_field(refLabel + str(i) + '.rel', link.rel))} 
     259                        </td> 
     260                                </tr> 
     261                    <tr py:for="i in range(len(links), len(links) + extraRows)"> 
     262                        <td> 
     263                                    ${Markup(h.text_field(refLabel + str(i) + '.href'))} 
     264                        </td> 
     265                        <td> 
     266                                    ${Markup(h.text_field(refLabel + str(i) + '.title'))} 
     267                        </td> 
     268                        <td> 
     269                                    ${Markup(h.text_field(refLabel + str(i) + '.rel'))} 
     270                        </td> 
     271                                </tr> 
     272                        <tr><td> 
     273                    ${Markup(h.submit(value="Update"))} 
     274                </td></tr> 
     275                        </table> 
     276                </form> 
     277        </div> 
    204278 
    205279 
Note: See TracChangeset for help on using the changeset viewer.