Ignore:
Timestamp:
May 10, 2010 1:17:31 PM (14 years ago)
Author:
mylan
Message:

Split link_uid on link and uid columns

File:
1 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.referencedatagridfield/trunk/quintagroup/referencedatagridfield/_field.py

    r2276 r2278  
    2828    _properties.update({ 
    2929        'macro': "referencedatagridwidget", 
    30         'column_names': ['Title', 'Link or UID'], 
     30        'column_names': ["Title", "Link", "UID"], 
    3131        'helper_css': ('datagridwidget.css',), 
    3232        'helper_js': ('referencebrowser.js', 'datagridwidget.js',), 
     
    4040    _properties.update(DataGridField._properties.copy()) 
    4141    _properties.update({ 
    42         'columns': ('title', 'link_uid'), 
     42        'columns': ('title', 'link', 'uid'), 
    4343        'widget': ReferenceDataGridWidget, 
    4444        'multiValued' : True, 
     
    5555        """ 
    5656        The passed in object should be a records object, or a sequence of dictionaries 
    57         About link_uid data: 
     57        About link data: 
    5858          * interpretations: 
    59             * if data not starts with standard protocol names (http://, ftp://) it treats 
    60               as UID 
     59            * if data not starts with standard protocol names (http://, ftp://) than 
     60              *uid* field data will be used as reference 
    6161          * record removed if: 
    6262            * no data; 
    6363            * data contains UID of not existent object 
    6464        About title: 
    65           * if there is UID of existent object and record has not title data 
    66             - object's Title will be used. 
     65          * if there is UID of existent object and record has same title to the original 
     66            object - title will not be saved. 
    6767        """ 
    6868        catalog = getToolByName(instance, "uid_catalog") 
     
    7474            value = value, 
    7575 
    76         uids = [] 
    7776        result = [] 
    7877        for row in value: 
    79             data = {"title":"", "link_uid":""} 
     78            data = {"title":"", "link":"", "uid":""} 
    8079 
     80            uid = str(row.get("uid", "")).strip() 
     81            link = str(row.get("link", "")).strip() 
    8182            title = str(row.get('title', "")).strip() 
     83 
    8284            if not title == "": 
    8385                data["title"] = title 
    8486 
    85             link_uid = str(row.get('link_uid', "")).strip() 
    86             if link_uid == '': 
     87            if link == "": 
    8788                continue 
    88             elif self.isRemoteURL(link_uid): 
    89                 data["link_uid"] = urlparse.urlunparse(urlparse.urlparse(link_uid)) 
     89            elif self.isRemoteURL(link): 
     90                data["link"] = urlparse.urlunparse(urlparse.urlparse(link)) 
    9091            else: 
    91                 brains = catalog(UID=link_uid) 
     92                if uid == '': 
     93                    continue 
     94 
     95                brains = catalog(UID=uid) 
    9296                if len(brains) == 0: 
    9397                    continue 
    9498                # Found objects with pointed UID 
    95                 uids.append(link_uid) 
    9699                brain = brains[0] 
    97                 data["link_uid"] = link_uid 
     100                data["uid"] = uid 
     101                # Fix title for uid 
     102                if data['title'] == getattr(brain, "Title", ""): 
     103                    data['title'] = "" 
    98104            result.append(data) 
    99105 
    100106        DataGridField.set(self, instance, result, **kwargs) 
     107 
     108        uids = [r['uid'] for r in result if r['uid']!=""] 
    101109        ReferenceField.set(self, instance, uids, **kwargs) 
    102110         
     
    106114 
    107115        Value is a list object of rows. 
    108         Row id dictionary object with standard 'link_uid' and 'title' keys 
    109         plus extra informal *isLink* key 
     116        Row id dictionary object with standard 'link', 'uid' and 'title' keys 
     117        plus extra informal *url* and *url_title* keys 
    110118        """ 
    111119        purl = getToolByName(instance, "portal_url") 
     120        # use portal_catalog to hide protected object for the logged in user. 
    112121        catalog = getToolByName(instance, "portal_catalog") 
    113122 
     
    118127            result.append({ 
    119128                # DataGridField row data 
     129                "uid": row["uid"], 
     130                "link": row["link"], 
    120131                "title": row["title"], 
    121                 "link_uid": row["link_uid"], 
    122132                # View data 
    123                 "link": "", 
    124                 "link_title": row["title"]}) 
     133                "url": "", 
     134                "url_title": row["title"]}) 
    125135            data = result[-1] 
    126136            # Process remote URL and collect UIDs 
    127             link_uid = row["link_uid"] 
    128             if self.isRemoteURL(link_uid): 
    129                 data["link"] = quote(link_uid, safe='?$#@/:=+;$,&%') 
     137            if row["link"]: 
     138                data["url"] = quote(row["link"], safe='?$#@/:=+;$,&%') 
    130139                # if title not set for remote url - set it equals to url 
    131                 if not data["link_title"]: 
    132                     data["link_title"] = link_uid 
     140                if not data["url_title"]: 
     141                    data["url_title"] = row["link"] 
    133142            else: 
    134                 uids[link_uid] = data 
     143                uids[row["uid"]] = data 
    135144        # Process UIDs 
    136145        if uids: 
     
    138147            for b in brains: 
    139148                data = uids[b.UID] 
    140                 data["link"] = b.getURL() 
     149                data["url"] = b.getURL() 
    141150                # If title not set - get it from the brain 
    142                 if not data["link_title"]: 
    143                     data["link_title"] = self._brains_title_or_id(b, instance) 
     151                if not data["url_title"]: 
     152                    data["url_title"] = self._brains_title_or_id(b, instance) 
    144153 
    145154        return result 
Note: See TracChangeset for help on using the changeset viewer.