web/hdalab/views/ajax.py
changeset 252 a46461f8a74f
parent 250 7c3f54ce68af
child 253 1113c3874dd6
equal deleted inserted replaced
251:e6675a5b2195 252:a46461f8a74f
    47     # recursive function used by cattree
    47     # recursive function used by cattree
    48     catlabel = category.label
    48     catlabel = category.label
    49     tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
    49     tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
    50     taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
    50     taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
    51     resobj = {
    51     resobj = {
    52           'category': category.label,
    52           'label': category.label,
    53           'tags': [],
    53           'themes': [],
    54           'contents': []
    54           'contents': []
    55           }
    55       }
    56     for label in taglabels:
    56     for label in taglabels:
    57         if label == catlabel:
    57         if label == catlabel:
    58             globtags[label] = {'level': level, 'access': resobj }
    58             globtags[label] = {'level': level, 'access': resobj }
    59         else:
    59         else:
    60             tag_in_list = {'label' : label, 'contents': []}
    60             tag_in_list = {'label' : label, 'contents': []}
    61             resobj['tags'].append(tag_in_list)
    61             resobj['themes'].append(tag_in_list)
    62             globtags[label] = {'level': (level + 1), 'access': tag_in_list }
    62             globtags[label] = {'level': (level + 1), 'access': tag_in_list }
    63             
    63             
    64     if level < max_level:
    64     if level < max_level:
    65         subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
    65         subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
    66         resobj['sub_categories'] = [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
    66         resobj['themes'] += [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
    67     return resobj
    67     return resobj
    68 
    68 
    69 def cleantags(category):
    69 def cleantags(category):
    70     if category.has_key('contents') and len(category['contents']) == 0:
    70     if category.has_key('contents') and len(category['contents']) == 0:
    71         del category['contents']
    71         del category['contents']
    72     if category.has_key('contents'):
    72     if category.has_key('contents'):
    73         category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
    73         category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
    74     if category.has_key('tags'):
    74     if category.has_key('themes'):
    75         category['tags'] = [cleantags(tag) for tag in category['tags'] if len(tag['contents'])]
    75         themes = []
    76         if len(category['tags']) == 0:
    76         for theme in category['themes']:
    77             del category['tags']
    77             clean_theme = cleantags(theme)
    78         else:
    78             if clean_theme.has_key('themes') or clean_theme.has_key('contents'):
    79             category['tags'] = sorted(category['tags'], key=lambda tag: tag['label'])
    79                 themes.append(clean_theme)
    80     if category.has_key('sub_categories'):
    80         category['themes'] = sorted(themes, key=lambda cat: cat['label'])
    81         sub_cats = []
    81         if len(category['themes']) == 0:
    82         for sub_cat in category['sub_categories']:
    82             del category['themes']
    83             cat = cleantags(sub_cat)
       
    84             if cat.has_key('tags') or cat.has_key('sub_categories') or cat.has_key('contents'):
       
    85                 sub_cats.append(cat)
       
    86         category['sub_categories'] = sorted(sub_cats, key=lambda cat: cat['category'])
       
    87         if len(category['sub_categories']) == 0:
       
    88             del category['sub_categories']
       
    89     return category
    83     return category
    90 
    84 
    91 def cattree(request):
    85 def cattree(request):
    92     # Gets the category tree from a label
    86     # Gets the category tree from a label
    93     ROOT_MAX_TAG_ORDER = 8
    87     ROOT_MAX_TAG_ORDER = 8
   432     
   426     
   433     contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name } for ds in datasheets]
   427     contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name } for ds in datasheets]
   434     
   428     
   435     contents = sorted(contents, key=lambda e: -e['score'])
   429     contents = sorted(contents, key=lambda e: -e['score'])
   436     
   430     
   437     res = { 'category': label }
   431     res = { 'label': label }
   438     
   432     
   439     if len(contents):
   433     if len(contents):
   440         res['contents'] = contents
   434         res['contents'] = contents
   441     
   435     
   442     if len(sub):
   436     if len(sub):
   443         subcats = [subtree(st) for st in sub]
   437         subcats = [subtree(st) for st in sub]
   444         subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('sub_categories',[]))]
   438         subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('themes',[]))]
   445         res['sub_categories'] = subcats
   439         res['themes'] = subcats
   446     
   440     
   447     return res
   441     return res
   448 
   442 
   449 def filltree(request):
   443 def filltree(request):
   450     
   444