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 |