Changeset 1895


Ignore:
Timestamp:
07/17/07 16:00:15 (13 years ago)
Author:
gabor
Message:

fixed #1428 spent 18h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LargeSectionFolder.py

    r1864 r1895  
    215215        if favlang == None: 
    216216            favlang = 'en' 
     217        elif favlang == 'cz': 
     218            favlang = 'cs' 
     219        hf=getToolByName(self, 'portal_membership').getHomeFolder() 
     220        if hf: 
     221            ulanguages=list(hf.getLanguage_skills()) 
     222        else: 
     223            ulanguages=[] 
     224        if favlang not in ulanguages: 
     225            ulanguages.append(favlang) 
    217226        good_results = [x for x in search_results if x.meta_type in FEATURED_TYPES and x.getHasCoverImage and x.review_state=='public' and x.Title] 
    218         if not language_dependant: 
    219             n=min(3,len(good_results)) 
    220             samples=sample(good_results,n) 
    221             return samples 
    222  
    223         favlang_results = [x for x in good_results if x.Language == favlang] 
    224         results_en=[] 
    225         # If 3 results or more, then return 
    226         if len(favlang_results) >= 3: 
    227             samples=sample(favlang_results,3) 
    228             return samples 
    229         # If less than 3 results for current language, then add english results 
    230         if len(favlang_results) < 3 and favlang!='en': 
    231             results_en = [x for x in good_results if x.Language == 'en'] 
    232             if len(results_en) >= 3: 
    233                 results_needed = 3 - len(favlang_results) 
    234                 samples = favlang_results + sample(results_en,results_needed) 
    235                 return samples 
    236         # If english results are not enough, then add any results 
    237         if len(favlang_results)+len(results_en) < 3: 
    238             if len(good_results) >=3: 
    239                 results_needed = 3 - len(favlang_results) - len(results_en) 
    240                 samples = favlang_results + results_en + sample(good_results,results_needed) 
    241                 return samples 
    242         n=min(3,len(good_results)) 
    243         samples=sample(good_results,n) 
    244         return samples 
     227 
     228        def scoreSorter(a, b): 
     229            if language_dependant: 
     230                if a.Language in ulanguages and b.Language not in ulanguages: 
     231                    return -1 
     232                if a.Language not in ulanguages and b.Language in ulanguages: 
     233                    return 1 
     234                if a.Language == 'en' and b.Language != 'en': 
     235                    return -1 
     236                if a.Language != 'en' and b.Language == 'en': 
     237                    return 1 
     238            return cmp(a.getScore, b.getScore) 
     239 
     240        #Sorting the good_results list by language and scores 
     241        good_results.sort(scoreSorter) 
     242 
     243        n = len(good_results) 
     244        n = min(n, max(3, n / 10)) 
     245        best_favlang_results = [] 
     246        best_en_results = [] 
     247        best_notfavlang_results = [] 
     248 
     249        #Sort the good_results list into groups 
     250        if language_dependant: 
     251            for i in range(n): 
     252                if good_results[i].Language in ulanguages: 
     253                    best_favlang_results.append(good_results[i]) 
     254                elif good_results[i].Language == 'en': 
     255                    best_en_results.append(good_results[i]) 
     256                else: 
     257                    best_notfavlang_results.append(good_results[i]) 
     258        else: 
     259            best_favlang_results = good_results[:n] 
     260             
     261        n = min(3, len(best_favlang_results)) 
     262        m = 0 
     263        k = 0 
     264        best_results = [] 
     265        #Creating the final list 
     266        if n > 0:    #If there are some materials which language matches the user's language we will add them to the list 
     267            best_results.extend(sample(best_favlang_results, n)) 
     268        if n < 3:    #If there were less than 3 materials which language matches the user's language 
     269            m = min(3 - n, len(best_en_results)) 
     270            if m > 0:    #If there are some English materials we will them to the list 
     271                best_results.extend(sample(best_en_results, m)) 
     272            z = n + m 
     273            if z < 3:   #If we still need more materials to reach 3 we will add some materials with other languages 
     274                k = min(3 - z, len(best_notfavlang_results)) 
     275                if k > 0:   #If there are some materials with other languages we will add them to the list 
     276                    best_results.extend(sample(best_notfavlang_results, k)) 
     277 
     278        #Randomizing the final list 
     279        if m > 0 or k > 0: 
     280            best_results = sample(best_results, n + m + k) 
     281 
     282        return best_results 
    245283         
    246284    def getTopResults(self, search_results, index_type): 
Note: See TracChangeset for help on using the changeset viewer.