Changeset 3056 for trunk


Ignore:
Timestamp:
10/12/10 01:40:16 (9 years ago)
Author:
jukka
Message:

Tidied up portfolios and memberpages

Location:
trunk
Files:
3 added
6 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/ConfigurationMethods.py

    r3052 r3056  
    330330        'content': ['tags','published','browse_resources','drafts','language','subject_area','target_group','browse_references','browse_pieces','recent'], 
    331331        'methods': ['language','tags','published','browse_methods'], 
    332         'tools': ['language','tags','published','browse_tools'] 
    333     } # Community is still kept 
     332        'tools': ['language','tags','published','browse_tools'], 
     333        'community':['portfolio'] 
     334    }  
    334335    #        'Community': 
    335336    #        # *********************** 
  • trunk/LeMillCatalogTool.py

    r3055 r3056  
    220220 
    221221 
    222     def createBrowsingOptions(self, REQUEST, results=None): 
     222    def createBrowsingOptions(self, REQUEST, results=None, **kw): 
    223223        """takes search results as input and returns a dictionary that tells what values there are available for each selection box and how many results there are of each value.""" 
    224224        t=time.time() 
     
    228228        path=REQUEST['ACTUAL_URL'].split('/') 
    229229        force_language=True 
    230  
    231         if 'content' in path: 
     230        if 'portfolio' in kw: 
     231            do_languages=False 
     232            do_subject_areas=True 
     233            do_target_groups=False 
     234            do_types=True 
     235            type_selection=SEARCHABLE_TYPES 
     236            do_edited=True 
     237            do_tags=False 
     238            count_indexes=('portal_type','getSubject_area') 
     239        elif 'content' in path: 
    232240            do_languages=True 
    233241            do_subject_areas=True 
     
    392400 
    393401    def decideBrowsingSubType(self): 
    394         """ Browse page header needs to know what kind of browsing is going on """ 
     402        """ Browse page heading needs to know what kind of browsing is going on """ 
    395403        form=self.REQUEST.form         
    396404        if 'state' in form: 
     
    403411 
    404412    def decideSearchSubType(self): 
    405         """ Search page header needs to know what kind of search is going on """ 
     413        """ Search page heading needs to know what kind of search is going on """ 
    406414        form=self.REQUEST.form         
    407415        if 'created' in form: 
     
    461469        else: # portal_type is determined by location  
    462470            path=REQUEST['ACTUAL_URL'].split('/') 
    463             if 'content' in path: 
     471            if 'portfolio' in kw: 
     472                keywords['portal_type']=list(CONTENT_TYPES)+['Activity','Tool'] 
     473                del keywords['portfolio'] 
     474            elif 'content' in path: 
    464475                keywords['portal_type']=CONTENT_TYPES 
    465476            elif 'methods' in path: 
     
    481492            keywords['sort_on']='getLatestEdit' 
    482493            del keywords['edited'] 
     494 
    483495        if not 'Language' in keywords: 
    484496            found=False 
     
    486498                if keywords['base']=='language': 
    487499                    found=True 
    488             for compensating in ['SearchableText','listCreators','getTarget_group','getTags','getSubject_area','created','getLatestEdit']: 
    489                 if compensating in keywords: 
    490                     found=True 
    491                     break 
     500            if 'portal_type' in keywords and keywords['portal_type']=='MemberFolder': 
     501                found=True 
     502                 
     503            if not found: 
     504                for compensating in ['SearchableText','listCreators','getTarget_group','getTags','getSubject_area','created','getLatestEdit']: 
     505                    if compensating in keywords: 
     506                        found=True 
     507                        break 
    492508            if not found: 
    493509                keywords['Language']=getToolByName(self, 'portal_languages').getLanguageCookie() or 'en' 
     
    495511            if not keywords['Language']: 
    496512                del keywords['Language'] 
     513        if 'base' in keywords: 
     514            del keywords['base'] 
    497515        print 'keywords:', keywords 
    498516        try: 
     
    500518        except ParseError: 
    501519            results = [] 
     520        print 'found ', len(results), ' items.' 
    502521        print 'browsing search:', time.time()-t 
    503522        return results 
     
    698717    ##############################      Clouds      ########################   
    699718 
    700     def buildCloudData(self, results, request=None): 
     719    def buildCloudData(self, results, request=None, size=8, portfolio=False): 
    701720        """ Build tag cloud result tuples (name, tagsize, obj_url, tag_value, nicename) for given form from result set """  
    702721        def adjustTag(val, steps=8): 
    703722            # helper method to adjust hit count of this tag to relative size (1,...,8)  
    704723            try: 
    705                 val=int((8*log(val-mincount,2))/log(maxcount-mincount,2)) 
     724                val=int((steps*log(val-mincount,2))/log(maxcount-mincount,2)) 
    706725            except (OverflowError, ZeroDivisionError): 
    707726                val=0 
     
    711730        lemill_tool = getToolByName(self, 'lemill_tool') 
    712731        if not results: 
    713             return []         
    714         src=dict(request.form.items()) 
    715         if 'base' not in src: 
    716             return []  
    717         portal_url=getToolByName(self, 'portal_url')() 
    718         path=request['ACTUAL_URL'].split('/') 
    719         if 'content' in path:  
    720             link_base='/'.join((portal_url,'content','browse')) 
    721         elif 'methods' in path: 
    722             link_base='/'.join((portal_url,'methods','browse')) 
    723         elif 'tools' in path: 
    724             link_base='/'.join((portal_url,'tools','browse')) 
    725         elif 'community' in path: 
    726             link_base='/'.join((portal_url,'community','browse')) 
    727         else: 
    728             link_base='/'.join((portal_url,'browse'))         
    729         lang_part='' 
    730         base=src['base'] 
    731         language=src.get('language','') 
    732         if language: 
    733             lang_part='language=%s&' % language 
    734         title_cloud=False 
    735         if base=='language': 
    736             link_root='%s?language=' % link_base         
    737             cloud_index='Language' 
    738         elif base=='tags': 
    739             link_root='%s?%stags=' % (link_base, lang_part)        
     732            return [] 
     733        if portfolio: 
    740734            cloud_index='getTags' 
    741         elif base=='subject_area': 
    742             link_root='%s?%ssubject_area=' % (link_base, lang_part)        
    743             cloud_index='getSubject_area' 
    744         elif base=='target_group': 
    745             link_root='%s?%starget_group=' % (link_base, lang_part)        
    746             cloud_index='getTarget_group' 
    747         elif base=='title': 
    748             resultlist=self.fastMetadata(results, ('sortable_title','getScore','getNicename', 'path'), cut=100) 
    749             maxcount=resultlist[0][1] 
    750             mincount=resultlist[-1][1]              
    751             resultlist.sort() 
    752             resultlist=[(x[2], adjustTag(x[1], steps=6), x[3]) for x in resultlist if x[2]]  
    753             return resultlist 
    754              
     735            mf=self.getMemberFolder()             
     736            link_root='%s/portfolio?tags=' % mf.absolute_url() 
     737        else:         
     738            src=dict(request.form.items()) 
     739            if 'base' not in src: 
     740                return []  
     741            portal_url=getToolByName(self, 'portal_url')() 
     742            path=request['ACTUAL_URL'].split('/') 
     743            if 'content' in path:  
     744                link_base='/'.join((portal_url,'content','browse')) 
     745            elif 'methods' in path: 
     746                link_base='/'.join((portal_url,'methods','browse')) 
     747            elif 'tools' in path: 
     748                link_base='/'.join((portal_url,'tools','browse')) 
     749            elif 'community' in path: 
     750                link_base='/'.join((portal_url,'community','browse')) 
     751            else: 
     752                link_base='/'.join((portal_url,'browse'))         
     753            lang_part='' 
     754            base=src['base'] 
     755            language=src.get('language','') 
     756            if language: 
     757                lang_part='language=%s&' % language 
     758            title_cloud=False 
     759            if base=='language': 
     760                link_root='%s?language=' % link_base         
     761                cloud_index='Language' 
     762            elif base=='tags': 
     763                link_root='%s?%stags=' % (link_base, lang_part)        
     764                cloud_index='getTags' 
     765            elif base=='subject_area': 
     766                link_root='%s?%ssubject_area=' % (link_base, lang_part)        
     767                cloud_index='getSubject_area' 
     768            elif base=='target_group': 
     769                link_root='%s?%starget_group=' % (link_base, lang_part)        
     770                cloud_index='getTarget_group' 
     771            elif base=='title': 
     772                resultlist=self.fastMetadata(results, ('sortable_title','getScore','getNicename', 'path'), cut=100) 
     773                if not resultlist: 
     774                    return [] 
     775                maxcount=resultlist[0][1] 
     776                mincount=resultlist[-1][1]              
     777                resultlist.sort() 
     778                resultlist=[(x[2], adjustTag(x[1], steps=6), x[3]) for x in resultlist if x[2]]  
     779                return resultlist 
    755780        hits=self.fastCount(results, cloud_index) 
     781        if not hits: 
     782            return [] 
    756783        resultlist=zip(hits.values(),hits.keys()) 
    757784        resultlist.sort(reverse=True) 
  • trunk/MemberFolder.py

    r3052 r3056  
    525525        return list(lst) 
    526526 
    527     def getResources(self, creator, n=False, filter=None, as_dict=False, private_materials=True): 
    528         """ Get resources from subject of this memberfolder by using general portfolio-topic """ 
    529         public_results = [] 
    530         pcatalog=getToolByName(self, 'portal_catalog') 
    531         lutool = getToolByName(self, 'lemill_usertool') 
    532         query={'Creator':creator} 
    533         # We also show private resources to Owner of the folder 
    534         if lutool.getAuthenticatedId()==creator and private_materials==True: 
    535             query['getState'] = ('public','draft','private') 
    536         else: 
    537             query['getState'] = ('public','draft') 
    538         if filter: 
    539             query['meta_type'] = filter 
    540         if as_dict and n: # fastest way to count resources 
    541             dict={}  
    542             query['meta_type'] = MATERIAL_TYPES 
    543             dict['Content']=len(pcatalog(query)) 
    544             query['meta_type'] = 'Activity' 
    545             dict['Activities']=len(pcatalog(query)) 
    546             query['meta_type'] = 'Tool' 
    547             dict['Tools']=len(pcatalog(query)) 
    548             query['meta_type'] = 'Collection' 
    549             dict['Collections']=len(pcatalog(query)) 
    550             query['meta_type'] = 'Piece' 
    551             dict['Pieces']=len(pcatalog(query)) 
    552             return dict                 
    553  
    554         results=pcatalog(query) 
    555         if as_dict: 
    556             # Make a dictionary with following keys: 'Content','Activities','Tools','Collections' 
    557             dict={'Content':[],'Activities':[],'Tools':[],'Collections':[],'Pieces':[]} 
    558             for res in results: 
    559                 if res.meta_type in MATERIAL_TYPES: 
    560                     dict['Content'].append(res) 
    561                 elif res.meta_type=='Activity': 
    562                     dict['Activities'].append(res) 
    563                 elif res.meta_type=='Tool': 
    564                     dict['Tools'].append(res) 
    565                 elif res.meta_type=='Collection': 
    566                     dict['Collections'].append(res) 
    567                 elif res.meta_type=='Piece': 
    568                     dict['Pieces'].append(res) 
    569             return dict                    
    570         if n: 
    571             return len(results) 
    572         return results 
    573  
    574527    def canNotify(self, prop): 
    575528        """ checks if notification preferences allow this kind of message """ 
     
    620573 
    621574 
    622     def getSamples(self): 
     575    def getSamples(self, n=4): 
    623576        """ get n number of samples """ 
    624577        my_id=self.getMemberId() 
    625         all_contents = list(self.portfolio.queryCatalog({'getState':'public', 'meta_type': self.getFeaturedTypes(), 'getHasCoverImage':True, 'Creator': my_id})) 
    626         if len(all_contents)<3: 
    627             all_contents+= list(self.portfolio.queryCatalog({'getState':'public', 'meta_type': ('Piece',), 'getHasCoverImage':True, 'Creator': my_id})) 
    628         good_results=[] 
    629         while all_contents and len(good_results)<3: 
    630             res=all_contents.pop(random.randint(0,len(all_contents)-1)) 
    631             if res: 
    632                 try:                 
    633                     obj=res.getObject() 
    634                     if obj: 
    635                         good_results.append(obj) 
    636                 except AttributeError: 
    637                     pass 
     578        pc=getToolByName(self, 'portal_catalog') 
     579        results = pc({'getState':'public', 'meta_type': self.getFeaturedTypes(), 'getHasCoverImage':True, 'Creator': my_id}) 
     580        if len(results)<n: 
     581            results = pc({'getState':'public', 'meta_type': list(self.getFeaturedTypes())+['Piece'], 'getHasCoverImage':True, 'Creator': my_id}) 
     582        indexes=range(len(results)) 
     583        choices=[] 
     584        while indexes and len(choices)<n: 
     585            choices.append(indexes.pop(random.randint(0,len(indexes)-1))) 
     586        good_results=[results[i] for i in choices] 
    638587        return good_results 
    639588         
  • trunk/config.py

    r3052 r3056  
    126126 'Activity': ('Method', 'Methods'), 
    127127 'Tool': ('Tool', 'Tools'),  
    128  'MemberFolder': ('Member', 'Members'), 
     128 'MemberFolder': ('Member', 'People'), 
    129129 'GroupBlog': ('Group', 'Groups'), 
    130130 'BlogPost': ('Forum post', 'Forum posts'), 
  • trunk/skins/lemill/lemill_community_view.pt

    r3052 r3056  
    2626   </span> 
    2727 
    28     <h1 i18n:translate="heading_browse_people">Browse people</h1>     
    29     <ul> 
    30         <li> 
    31             <a i18n:translate="label_browse_by_language" href="language" class="byTextsFont">By language</a>: 
    32             <span tal:repeat="result context/top3language_skills"> 
    33                 <a href="" tal:attributes="href python:'language?language_skills='+here.url_quote(result)" tal:content="python:here.script_getPrettyLanguage(result)">PLACEHOLDER</a>, 
    34             </span> 
    35             <a href="language">...</a> 
    36         </li>         
    37         <li> 
    38             <a i18n:translate="label_browse_by_name_cloud" class="byTextsFont">By name cloud</a> 
    39         </li>         
    40         <li> 
    41             <a i18n:translate="label_browse_by_location" href="country" class="byTextsFont">By location</a>: 
    42             <span tal:repeat="result context/top3locations"> 
    43                 <a href="" tal:attributes="href python:'country?location='+here.url_quote(result)" tal:content="result">PLACEHOLDER</a>, 
    44             </span> 
    45             <a href="country">...</a> 
    46         </li> 
    47         <li> 
    48             <a i18n:translate="label_browse_by_skills" href="skills" class="byTextsFont">By skills</a>: 
    49             <span tal:repeat="result context/top3skills"> 
    50                 <a href="" tal:attributes="href python:'skills?skills='+here.url_quote(result)" tal:content="result">PLACEHOLDER</a>, 
    51             </span> 
    52             <a href="skills">...</a> 
    53         </li> 
    54         <li> 
    55             <a i18n:translate="label_browse_by_interests" href="interests" class="byTextsFont">By interests</a>: 
    56             <span tal:repeat="result context/top3interests"> 
    57                 <a href="" tal:attributes="href python:'interests?interests='+here.url_quote(result)" tal:content="result">PLACEHOLDER</a>, 
    58             </span> 
    59             <a href="interests">...</a> 
    60         </li>         
    61         <li> 
    62             <a i18n:translate="label_browse_by_subject_area" href="subject_area" class="byTextsFont">By subject area</a>: 
    63             <span tal:repeat="result context/top3subject_areas"> 
    64                 <a href="" tal:attributes="href python:'subject_area?subject_area='+here.url_quote(result)" tal:content="result" i18n:translate="">PLACEHOLDER</a>, 
    65             </span> 
    66             <a href="subject_area">...</a> 
    67         </li> 
    68     </ul> 
    69     <h1 i18n:translate="heading_browse_groups">Browse groups</h1>     
    70     <ul> 
    71         <li> 
    72             <a i18n:translate="label_browse_by_language" href="g_language" class="byTextsFont">By language</a>: 
    73             <span tal:repeat="result context/top3group_languages"> 
    74                 <a href="" tal:attributes="href python:'g_language?language_skills='+here.url_quote(result)" tal:content="python:here.script_getPrettyLanguage(result)">PLACEHOLDER</a>, 
    75             </span> 
    76             <a href="g_language">...</a> 
    77         </li>         
    78         <li> 
    79             <a i18n:translate="label_browse_by_name_cloud" href="browse_groups" class="byTextsFont">By name cloud</a> 
    80         </li> 
    81         <li> 
    82             <a i18n:translate="label_browse_by_tags" href="tags" class="byTextsFont">By tags</a>: 
    83             <span tal:repeat="result context/top3group_tags"> 
    84                 <a href="" tal:attributes="href python:'tags?tag='+here.url_quote(result)" tal:content="result">PLACEHOLDER</a>, 
    85             </span> 
    86             <a href="tags">...</a> 
    87         </li>             
    88         <li> 
    89             <a i18n:translate="label_browse_by_subject_area" href="group_subject_area" class="byTextsFont">By subject area</a>:  
    90             <span tal:repeat="result context/top3group_subject_areas"> 
    91                 <a href="" tal:attributes="href python:'group_subject_area?subject_area='+here.url_quote(result)" tal:content="result" i18n:translate="">PLACEHOLDER</a>, 
    92             </span> 
    93             <a href="group_subject_area">...</a> 
    94         </li> 
    95     </ul> 
    96     <tal:group_recent_threads define="recents here/mergeLatestThreadsInMyGroups;"> 
    97            <h1 i18n:translate="heading_recent_forum_threads" tal:condition="recents">Recent forum threads in my groups</h1> 
    98            <table border="0" cellpadding="2" cellspacing="2" width="100%" tal:condition="recents"> 
    99                <tr> 
    100                    <th i18n:translate="label_discussion_topic">Topic</th> 
    101                    <th i18n:translate="">Group</th> 
    102                </tr> 
    103                <tr tal:repeat="post recents"> 
    104                    <td><a href="" tal:attributes="href post/getURL" tal:content="post/Title">PLACEHOLDER</a></td> 
    105                    <td tal:define="group python:here.getGroupById(post.getParentBlog)"><a href="" tal:attributes="href group/absolute_url" tal:content="group/title">PLACEHOLDER</a></td> 
    106                </tr> 
    107            </table> 
    108        </tal:group_recent_threads>     
     28  <div class="browse_links grid" tal:define="lang_filter context/getLanguageFilter"> 
     29 
     30    <h2>People</h2> 
     31    <dl> 
     32        <dt><a i18n:translate="label_people" href="cloud?base=location&type=MemberFolder">People</a></dt> 
     33        <dd><a href="">Languages</a>, <a href="">Subject areas</a>, <a href="">Countries</a></dd>     
     34    </dl> 
     35    <h2>Groups</h2> 
     36    <dl> 
     37        <dt><a i18n:translate="label_groups" href="cloud?base=title&type=GroupBlog">Groups</a></dt> 
     38        <dd><a href="">Languages</a>, <a href="">Subject areas</a>, <a href="">Countries</a></dd>     
     39        <tal:group_recent_threads define="recents here/mergeLatestThreadsInMyGroups;"> 
     40           <dt tal:condition="recents"><a i18n:translate="heading_recent_discussions" href="">Recent discussions in my groups</a></dt> 
     41           <dd><tal:repeater repeat="post recents"><a href="" tal:define="group python:here.getGroupById(post.getParentBlog)" tal:attributes="href group/absolute_url" tal:content="group/title">PLACEHOLDER</a>: <a href="" tal:attributes="href post/getURL" tal:content="post/Title">PLACEHOLDER</a><br/></tal:repeater> 
     42           </dd> 
     43        </tal:group_recent_threads>     
     44    </dl> 
     45  </div> 
    10946</metal:main> 
    11047 </body> 
  • trunk/skins/lemill/member_view.cpt

    r3051 r3056  
    1212 
    1313        <metal:main fill-slot="main"> 
    14         <tal:main-macro  
    15         tal:define="member_folder here/getMemberFolder | nothing;"> 
    16  
    17         <tal:noAuthor condition="not: nocall:member_folder"> 
    18             <div class="visualClear"><!-- --></div> 
    19             <div class="portalMessage" i18n:domain="plone" i18n:translate="text_no_user_by_name"> 
    20                 No user by that name 
    21             </div> 
    22         </tal:noAuthor> 
    23  
    24         <tal:haveAuthor condition="nocall:member_folder"> 
    25  
    2614        <tal:messages repeat="message here/getMessages"> 
    2715            <div metal:use-macro="python:path('here/macros_messages/macros/%s|nothing' % message)" /> 
    2816        </tal:messages> 
     17        <tal:main-inner tal:define="member_folder here/getMemberFolder | nothing;" tal:condition="nocall:member_folder"> 
     18        <h1 tal:content="member_folder/getNicename">fullname</h1> 
    2919 
     20        <ul tal:condition="python:context.amIOwner()"> 
     21            <li tal:condition="python: 'Manager' in member.getRolesInContext(here)"> 
     22                <img src="zope_icon.gif" alt="" /> 
     23                <a href="" 
     24                    tal:attributes="href string:${portal_url}/plone_memberprefs_panel" 
     25                    i18n:translate="label_manage_site">Manage this site</a> 
     26            </li> 
     27            <li tal:condition="not:context/lemill_tool/portal_integration"> 
     28                <img src="lock_icon.gif" alt="" /> 
     29                <a href="" 
     30                    tal:attributes="href string: ${here_url}/password_form" 
     31                    i18n:domain="plone" i18n:translate="">Change Password</a> 
     32            </li> 
     33            <li> 
     34                <img src="user.gif" alt="" /> 
     35                <a href="" 
     36                    tal:attributes="href string:${here_url}/personalize_form" 
     37                    i18n:translate="label_edit_member">Edit your information</a> 
     38            </li> 
     39        </ul> 
    3040 
    31         <div id="content" tal:omit-tag="" 
    32             class="documentEditable" 
    33             tal:define="showoptions python:context.amIOwner()" 
    34             tal:attributes="class python: test(showoptions, 'documentEditable', '')"> 
     41        <div tal:define="portrait context/getCoverImage; 
     42                        portrait_url portrait/absolute_url | nothing; 
     43                        email member_folder/getEmail | nothing; 
     44                        messenger1 member_folder/getMessenger1 | nothing; 
     45                        messenger2 member_folder/getMessenger2 | nothing; 
     46                        messenger3 member_folder/getMessenger3 | nothing; 
     47                        messengers python:[messenger1,messenger2,messenger3]; 
     48                        home_page member_folder/getHome_page | nothing; 
     49                        location_country member_folder/getLocation_country | nothing; 
     50                        location_area member_folder/getLocation_area | nothing; 
     51                        language_skills member_folder/getLanguage_skills | nothing; 
     52                        skills member_folder/getSkills | nothing; 
     53                        interests member_folder/getInterests | nothing; 
     54                        biography member_folder/getBiography | nothing; 
     55                        subjectarea member_folder/getSubject_area | nothing; 
     56                        members_url context/community/absolute_url | nothing;"> 
    3557 
    36             <h5 class="hiddenStructure" 
    37                 tal:condition="showoptions">Views</h5> 
     58            <p tal:condition="python:email and 'Manager' in member.getRolesInContext(here)" tal:omit-tag=""><tal:block i18n:domain="plone" i18n:translate="email">E-mail</tal:block>: <span tal:replace="email" /></p> 
     59            <p tal:condition="python:(not isAnon) and context.verifyMessengers(messengers)"> 
     60                <tal:rep tal:repeat="messenger messengers"><span tal:replace="messenger" /><br /></tal:rep> 
     61            </p> 
     62            <p tal:condition="home_page"> 
     63                <tal:block i18n:domain="plone" i18n:translate="label_homepage">Homepage</tal:block>: 
     64                <a href="#" tal:attributes="href home_page" tal:content="home_page"></a> 
     65            </p> 
    3866 
    39             <ul tal:condition="showoptions"> 
    40                 <li tal:condition="python: 'Manager' in member.getRolesInContext(here)"> 
    41                     <img src="zope_icon.gif" alt="" /> 
    42                     <a href="" 
    43                         tal:attributes="href string:${portal_url}/plone_memberprefs_panel" 
    44                         i18n:translate="label_manage_site">Manage this site</a> 
    45                 </li> 
    46                 <li tal:condition="not:context/lemill_tool/portal_integration"> 
    47                     <img src="lock_icon.gif" alt="" /> 
    48                     <a href="" 
    49                         tal:attributes="href string: ${here_url}/password_form" 
    50                         i18n:domain="plone" i18n:translate="">Change Password</a> 
    51                 </li> 
    52                 <li> 
    53                     <img src="user.gif" alt="" /> 
    54                     <a href="" 
    55                         tal:attributes="href string:${here_url}/personalize_form" 
    56                         i18n:translate="label_edit_member">Edit your information</a> 
    57                 </li> 
    58             </ul> 
     67            <tal:portfolio_samples define="samples context/getSamples"> 
     68                <h2 i18n:translate="heading_portfolio" tal:condition="samples"> 
     69                    Portfolio 
     70                </h2> 
     71           <tal:coverimages repeat="obj samples">    
     72             <div class="community_border featured_item grid" tal:define="first repeat/obj/start; last repeat/obj/end;" tal:attributes="style python:test(first, 'margin-left:0', test(last, 'margin-right:0', ''));"> 
     73                &nbsp;<a href="#" title="Cover image" tal:attributes="href string:${obj/getURL}/view; title obj/Title | nothing;">              
     74                  <img alt="Cover image" valign="middle" tal:attributes="src string:${obj/getURL}/coverImage; alt obj/Title | nothing;" src="images/default_learningresource.png" /> 
     75                </a>&nbsp; 
     76             </div> 
     77          </tal:coverimages> 
     78          <div class="clear"></div> 
     79     
     80          <tal:titles repeat="obj samples"> 
     81            <div class="resource_title grid" tal:define="first repeat/obj/start; last repeat/obj/end;" tal:attributes="style python:test(first, 'margin-left:0', test(last, 'margin-right:0', ''));"> 
     82                <a href="#"  tal:attributes="href string:${obj/getURL}/view" tal:content="python:context.lemill_tool.shortenTitle(obj.Title, 48)">PLACEHOLDER</a> 
     83            </div> 
     84          </tal:titles> 
     85     
     86            </tal:portfolio_samples> 
    5987 
    60             <div id="region-content"  
    61                 tal:define="portrait context/getCoverImage; 
    62                             portrait_url portrait/absolute_url | nothing; 
    63                             email member_folder/getEmail | nothing; 
    64                             phone member_folder/getPhone | nothing; 
    65                             mobile member_folder/getMobile | nothing; 
    66                             messenger1 member_folder/getMessenger1 | nothing; 
    67                             messenger2 member_folder/getMessenger2 | nothing; 
    68                             messenger3 member_folder/getMessenger3 | nothing; 
    69                             messengers python:[messenger1,messenger2,messenger3]; 
    70                             home_page member_folder/getHome_page | nothing; 
    71                             location_country member_folder/getLocation_country | nothing; 
    72                             location_area member_folder/getLocation_area | nothing; 
    73                             language_skills member_folder/getLanguage_skills | nothing; 
    74                             skills member_folder/getSkills | nothing; 
    75                             interests member_folder/getInterests | nothing; 
    76                             biography member_folder/getBiography | nothing; 
    77                             subjectarea member_folder/getSubject_area | nothing; 
    78                             members_url context/community/absolute_url | nothing;"> 
     88            <h2 i18n:translate="label_about_me">About me</h2> 
     89            <p tal:condition="biography" tal:replace="structure python:context.lemill_tool.parse_text(str(biography))"></p>  
     90            <p tal:condition="python: location_country and location_country!='No country specified'"><tal:block i18n:translate="label_country">Country</tal:block>: 
     91            <a href="#" tal:attributes="href string:$members_url/country?location=${location_country}" tal:content="location_country">Country</a> 
     92            </p> 
     93            <p tal:condition="location_area"><tal:block i18n:translate="label_area">Area</tal:block>: 
     94            <span tal:replace="location_area">area</span> 
     95            </p> 
     96            <p tal:condition="language_skills"><tal:block i18n:translate="label_language_skills">Preferred languages</tal:block>: 
     97            <span tal:repeat="languagename language_skills" tal:omit-tag=""> 
     98                <a href="#" tal:attributes="href string:$members_url/language?language_skills=${languagename}" tal:content="python:here.script_getPrettyLanguage(languagename)">PLACEHOLDER</a><span tal:condition="not: repeat/languagename/end" tal:omit-tag="">, </span>  
     99            </span> 
     100            </p> 
     101            <h2 i18n:translate="label_my_tags">My tags</h2> 
    79102 
    80                 <a name="documentContent"></a> 
     103          <div class="cloud" tal:define="wordtuples python:context.portal_catalog.buildCloudData(results, request, size=6, portfolio=True);"> 
     104            <tal:taggy repeat="wordinfo wordtuples"><tal:taggyvalues define="nicename python:wordinfo[0]; tagsize python:wordinfo[1]; link_url python:wordinfo[2]; "><a tal:attributes="href link_url;class string:size$tagsize" tal:content="nicename" i18n:translate="" /> </tal:taggyvalues></tal:taggy>  
     105          </div> 
    81106 
    82                 <!-- Author information --> 
    83                 <h1 class="documentFirstHeading"  
    84                     tal:content="member_folder/getNicename"> 
    85                     fullname 
    86                 </h1> 
     107<!-- 
     108                <span tal:condition="skills" tal:omit-tag=""> 
     109                    <p><tal:block i18n:translate="label_skills">Skills</tal:block>: 
     110                    <span tal:repeat="skill skills" tal:omit-tag=""> 
     111                        <a href="#" tal:attributes="href string:$members_url/skills?skills=${skill}" tal:content="skill">PLACEHOLDER</a><span tal:condition="not: repeat/skill/end" tal:omit-tag="">, </span>  
     112                    </span> 
     113                    </p> 
     114                </span> 
    87115 
    88                 <div tal:condition="not:isAnon" tal:omit-tag=""> 
    89                     <span tal:condition="email" tal:omit-tag=""> 
    90                         <p><tal:block i18n:domain="plone" i18n:translate="email">E-mail</tal:block>: 
    91                         <a tal:attributes="href python:'mailto:' + str(email)" tal:content="email">email</a> 
    92                         </p> 
     116                <span tal:condition="interests" tal:omit-tag=""> 
     117                    <p><tal:block i18n:translate="label_interests">Interests</tal:block>: 
     118                    <span tal:repeat="interest interests" tal:omit-tag=""> 
     119                        <a href="#" tal:attributes="href string:$members_url/interests?interests=${interest}" tal:content="interest">PLACEHOLDER</a><span tal:condition="not: repeat/interest/end" tal:omit-tag="">, </span>  
    93120                    </span> 
    94                     <span tal:condition="mobile" tal:omit-tag=""> 
    95                         <p tal:define="mobile python:str(mobile); 
    96                         sms python:test(mobile.startswith('*SMS*'),True, False);                         
    97                         mobile python:test(mobile.startswith('*SMS*'), mobile[5:], mobile)"><tal:block i18n:translate="label_phone">Phone</tal:block>: <b tal:replace="mobile"></b>  
    98                         <tal:block tal:condition="sms">(<tal:tran i18n:translate="label_sms_allowed">You may SMS me</tal:tran>.)</tal:block> 
    99                         </p> 
     121                    </p> 
     122                </span>                   
     123 
     124                <span tal:condition="subjectarea" tal:omit-tag=""> 
     125                    <p><tal:block i18n:translate="label_subject_area">Subject area</tal:block>: 
     126                    <span tal:repeat="subject subjectarea" tal:omit-tag=""> 
     127                        <a href="#" tal:attributes="href string:$members_url/subject_area?subject_area=${subject}" tal:content="subject" i18n:translate="">PLACEHOLDER</a><span tal:condition="not: repeat/subject/end" tal:omit-tag="">, </span> 
    100128                    </span> 
    101                     <tal:messengers tal:condition="python:context.verifyMessengers(messengers)"> 
    102                     <p> 
    103                        <tal:span tal:repeat="messenger messengers"> 
    104                            <tal:block tal:content="messenger"></tal:block><br /> 
    105                        </tal:span> 
    106129                    </p> 
    107                     </tal:messengers> 
    108                 </div> 
    109                     <span tal:condition="home_page" tal:omit-tag=""> 
    110                         <p> 
    111                             <tal:block i18n:domain="plone" i18n:translate="label_homepage">Homepage</tal:block>: 
    112                             <a href="#" tal:attributes="href home_page" tal:content="home_page"></a> 
    113                         </p> 
    114                     </span> 
    115  
    116                     <tal:portfolio_samples define="samples context/getSamples"> 
    117                         <h1 i18n:translate="heading_portfolio" tal:condition="samples"> 
    118                             Portfolio 
    119                         </h1> 
    120  
    121                         <table border="0" cellpadding="0" cellspacing="4" width="550" > 
    122                             <tr> 
    123                                 <td class="coverimagecell" tal:repeat="obj samples"> 
    124                                     <a href="" tal:attributes="href python:obj.absolute_url()+'/view'"> 
    125                                         <img src="" tal:attributes="src python:obj.absolute_url()+'/coverImage'; onclick string:document.location='${sample_link}/view'" style="cursor: pointer;" tal:define="sample_link obj/absolute_url;" /></a> 
    126                                 </td> 
    127                             </tr> 
    128                             <tr> 
    129                                 <td class="captioncell" tal:repeat="obj samples"> 
    130                                     <a href="#" tal:attributes="href python:obj.absolute_url()+'/view'" tal:content="python:obj.shortenedTitle(48)">PLACEHOLDER</a> 
    131                                 </td> 
    132                             </tr> 
    133                         </table> 
    134                     </tal:portfolio_samples> 
    135  
    136  
    137                     <span tal:condition="biography" tal:omit-tag=""> 
    138                         <h1 i18n:domain="plone" i18n:translate="label_biography">Biography</h1> 
    139                         <span tal:replace="structure python:context.lemill_tool.parse_text(str(biography))"></span>  
    140                     </span>  
    141  
    142                     <div class="visualClear">&nbsp;</div> 
    143  
    144                     <span tal:condition="python: location_country and location_country!='No country specified'" tal:omit-tag=""> 
    145                         <p><tal:block i18n:translate="label_country">Country</tal:block>: 
    146                         <a href="#" tal:attributes="href string:$members_url/country?location=${location_country}" tal:content="location_country">Country</a> 
    147                         </p> 
    148                     </span> 
    149  
    150                     <span tal:condition="location_area" tal:omit-tag=""> 
    151                         <p><tal:block i18n:translate="label_area">Area</tal:block>: 
    152                         <!--a href="#" tal:attributes="href string:$members_url/area?area=${location_area}" tal:content="location_area">Area</a--> 
    153                         <span tal:omit-tag="" tal:content="location_area"></span> 
    154                         </p> 
    155                     </span> 
    156  
    157                     <span tal:condition="language_skills" tal:omit-tag=""> 
    158                         <p><tal:block i18n:translate="label_language_skills">Preferred languages</tal:block>: 
    159                         <span tal:repeat="languagename language_skills" tal:omit-tag=""> 
    160                             <a href="#" tal:attributes="href string:$members_url/language?language_skills=${languagename}" tal:content="python:here.script_getPrettyLanguage(languagename)">PLACEHOLDER</a><span tal:condition="not: repeat/languagename/end" tal:omit-tag="">, </span>  
    161                         </span> 
    162                         </p> 
    163                     </span> 
    164  
    165                     <span tal:condition="skills" tal:omit-tag=""> 
    166                         <p><tal:block i18n:translate="label_skills">Skills</tal:block>: 
    167                         <span tal:repeat="skill skills" tal:omit-tag=""> 
    168                             <a href="#" tal:attributes="href string:$members_url/skills?skills=${skill}" tal:content="skill">PLACEHOLDER</a><span tal:condition="not: repeat/skill/end" tal:omit-tag="">, </span>  
    169                         </span> 
    170                         </p> 
    171                     </span> 
    172  
    173                     <span tal:condition="interests" tal:omit-tag=""> 
    174                         <p><tal:block i18n:translate="label_interests">Interests</tal:block>: 
    175                         <span tal:repeat="interest interests" tal:omit-tag=""> 
    176                             <a href="#" tal:attributes="href string:$members_url/interests?interests=${interest}" tal:content="interest">PLACEHOLDER</a><span tal:condition="not: repeat/interest/end" tal:omit-tag="">, </span>  
    177                         </span> 
    178                         </p> 
    179                     </span>                   
    180  
    181                     <span tal:condition="subjectarea" tal:omit-tag=""> 
    182                         <p><tal:block i18n:translate="label_subject_area">Subject area</tal:block>: 
    183                         <span tal:repeat="subject subjectarea" tal:omit-tag=""> 
    184                             <a href="#" tal:attributes="href string:$members_url/subject_area?subject_area=${subject}" tal:content="subject" i18n:translate="">PLACEHOLDER</a><span tal:condition="not: repeat/subject/end" tal:omit-tag="">, </span> 
    185                         </span> 
    186                         </p> 
    187                     </span> 
    188  
    189             </div> 
    190         </div> <!-- end simulated tabs --> 
    191  
    192         </tal:haveAuthor> 
    193  
    194         </tal:main-macro> 
     130                </span> 
     131--> 
     132        </div> 
     133        </tal:main-inner> 
    195134 
    196135        </metal:main> 
  • trunk/skins/lemill/portlet_member.pt

    r3052 r3056  
    6969                </span> 
    7070            </div> 
    71             <div class="portlet grid" tal:define="creator here/Creator;  
    72                 amounts_dict python:this_member.getResources(creator, n=True, as_dict=True); 
    73                 creator_url this_member/absolute_url; 
    74                 "> 
    75                 <div class="portlet-title" i18n:translate="heading_portfolio_portlet">Full portfolio</div> 
    76                 <ul> 
    77                     <li> 
    78                         <a i18n:translate="" href="portfolio" tal:attributes="href python:creator_url+'/portfolio?type=resource'">Content</a> 
    79                     (<span tal:replace="amounts_dict/Content" />)</li> 
    80                     <li> 
    81                         <a i18n:translate="" href="portfolio" tal:attributes="href python:creator_url+'/portfolio?type=Activity'">Methods</a> 
    82                     (<span tal:replace="amounts_dict/Activities" />) 
    83                     </li> 
    84                     <li> 
    85                         <a i18n:translate="" href="portfolio" tal:attributes="href python:creator_url+'/portfolio?type=Tool'">Tools</a> 
    86                     (<span tal:replace="amounts_dict/Tools" />) 
    87                     </li> 
    88                     <li> 
    89                         <a i18n:translate="label_collections" tal:attributes="href python:creator_url+'/collections'">Collections</a> 
    90                         (<span tal:replace="this_member/getCollectionsNumber" />) 
    91                     </li> 
    92                     <li> 
    93                         <a i18n:translate="label_tag_cloud" href="portfolio" tal:attributes="href python:creator_url+'/portfolio'">Tag cloud</a> 
    94                     </li> 
    95                 </ul> 
    96            </div> 
     71         <metal:options use-macro="here/portfolio/macros/portfolio_options" /> 
    9772 
    9873        </div> 
Note: See TracChangeset for help on using the changeset viewer.