Changeset 1387


Ignore:
Timestamp:
02/20/07 18:09:02 (13 years ago)
Author:
jukka
Message:

Closed #1154, spent 10h. Haven't tested all possible interactions with collections; when removing stories from templates check that links to collections make sense. The old adding-method 'addRefsToResources' works, but instead of it faster addRelatedContent, addRelatedMethod or addRelatedTool should be used.

Location:
trunk
Files:
4 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Collection.py

    r1378 r1387  
    2828from AccessControl import ClassSecurityInfo, Unauthorized 
    2929 
    30 from config import PROJECTNAME, ALL_CONTENT_TYPES, CONTENT_TYPES, DEFAULT_ICONS 
     30from config import PROJECTNAME, ALL_CONTENT_TYPES, CONTENT_TYPES, DEFAULT_ICONS, ACTIVITY_TYPES, TOOLS_TYPES 
    3131from Resources import CommonMixIn 
    3232from permissions import MODIFY_CONTENT 
     
    5555            ), 
    5656    ), 
     57    ReferenceField('relatedContent', 
     58        relationship = 'relatesToContent', 
     59        multiValued = True, 
     60        isMetadata = True, 
     61        languageIndependent = False, 
     62        index = 'KeywordIndex', 
     63        write_permission = ModifyPortalContent, 
     64        allowed_types= ALL_CONTENT_TYPES, 
     65        widget = ReferenceBrowserWidget( 
     66            allow_search = True, 
     67            allow_browse = True, 
     68            show_indexes = False, 
     69            force_close_on_insert = True, 
     70            startup_directory = "content", 
     71            size = 4, 
     72            i18n_domain = "lemill", 
     73            label = "Related Content", 
     74            label_msgid = "label_related_content", 
     75            description = "", 
     76            description_msgid = "help_story_related_content", 
     77            visible = {'edit' : 'invisible', 'view' : 'invisible' } 
     78            ) 
     79        ), 
     80    ReferenceField('relatedMethods', 
     81        relationship = 'relatesToMethods', 
     82        multiValued = True, 
     83        isMetadata = True, 
     84        languageIndependent = False, 
     85        index = 'KeywordIndex', 
     86        write_permission = ModifyPortalContent, 
     87        allowed_types=('Document','Activity',), 
     88        widget = ReferenceBrowserWidget( 
     89            allow_search = True, 
     90            allow_browse = True, 
     91            show_indexes = False, 
     92            force_close_on_insert = True, 
     93            startup_directory = "methods", 
     94            size = 4, 
     95            i18n_domain = "lemill", 
     96            label = "Related Methods", 
     97            label_msgid = "label_related_methods", 
     98            description = "", 
     99            description_msgid = "help_story_related_methods", 
     100            visible = {'edit' : 'invisible', 'view' : 'invisible' } 
     101            ) 
     102        ), 
     103    ReferenceField('relatedTools', 
     104        relationship = 'relatesToTools', 
     105        multiValued = True, 
     106        isMetadata = True, 
     107        languageIndependent = False, 
     108        index = 'KeywordIndex', 
     109        write_permission = ModifyPortalContent, 
     110        allowed_types=('Document','Tool',), 
     111        widget = ReferenceBrowserWidget( 
     112            allow_search = True, 
     113            allow_browse = True, 
     114            show_indexes = False, 
     115            force_close_on_insert = True, 
     116            startup_directory = "tools", 
     117            size = 4, 
     118 
     119            i18n_domain = "lemill", 
     120            label = "Related Tools", 
     121            label_msgid = "label_related_tools", 
     122            description = "", 
     123            description_msgid = "help_story_related_tools", 
     124            visible = {'edit' : 'invisible', 'view' : 'invisible' } 
     125            ) 
     126        ) 
    57127)) 
    58128 
     
    94164        self._renameAfterCreation() 
    95165 
    96     def getLargestCount(self): 
    97         f = self.getReferenceImpl() 
     166    def getLargestCount(self, reftype='relatedContent'): 
     167        field = self.Schema().get(reftype) 
     168        rtype=field.relationship 
     169        f = self.getReferenceImpl(relationship=rtype) 
     170 
    98171        highest = 1001 
    99172        for a in f: 
     
    105178        return highest 
    106179 
     180 
     181    security.declareProtected(MODIFY_CONTENT,'addRelatedContent') 
     182    def addRelatedContent(self, ref, empty=0): 
     183        """ add reference to content """ 
     184        self.addRefsToResources(ref, empty, reftype="relatedContent") 
     185 
     186    security.declareProtected(MODIFY_CONTENT,'addRelatedMethods') 
     187    def addRelatedMethods(self, ref, empty=0): 
     188        """ add reference to methods """ 
     189        self.addRefsToResources(ref, empty, reftype="relatedMethods") 
     190 
     191    security.declareProtected(MODIFY_CONTENT,'addRelatedTools') 
     192    def addRelatedTools(self, ref, empty=0): 
     193        """ add reference to tools """ 
     194        self.addRefsToResources(ref, empty, reftype="relatedTools") 
     195 
    107196    security.declareProtected(MODIFY_CONTENT,'addRefsToResources') 
    108     def addRefsToResources(self, ref, empty=0): 
     197    def addRefsToResources(self, ref, empty=0, reftype=None): 
    109198        """ add reference to resource """ 
    110         field = self.Schema().get('refsToResources') 
     199        from types import ListType, TupleType 
     200        if reftype: 
     201            field = self.Schema().get(reftype) 
     202        else: 
     203            if type(ref) == ListType or type(ref) == TupleType: 
     204                for x in ref: # if entry is a list of mixed type entries, run this method again for each component. 
     205                    self.addRefsToResources(x) 
     206                return 1 
     207            uc=getToolByName(self, 'uid_catalog') 
     208            obj=uc(UID=ref) 
     209            objtype=obj[0].portal_type 
     210            if objtype in CONTENT_TYPES:                        
     211                reftype='relatedContent' 
     212            elif objtype in ACTIVITY_TYPES: 
     213                reftype='relatedMethods' 
     214            elif objtype in TOOLS_TYPES: 
     215                reftype='relatedTools' 
     216            else: 
     217                reftype='refsToResources' 
     218            field = self.Schema().get(reftype) 
     219 
    111220        prev = field.getRaw(self) 
    112221        new_value = [] 
    113         from types import ListType, TupleType 
    114222        if type(ref) == ListType or type(ref) == TupleType: 
    115223            new_value = prev 
     
    120228        else: 
    121229            new_value = prev+[ref,] 
    122         field.set(self, new_value, collection_position=self.getLargestCount()) 
     230        field.set(self, new_value, collection_position=self.getLargestCount(reftype)) 
    123231 
    124232    def getItemCount(self): 
    125233        """ return how many items are in collection """ 
    126         return len(self.getRefsToResources()) 
    127  
    128     def getSortedList(self): 
     234        return len(self.getRelatedMethods())+len(self.getRelatedTools())+len(self.getRelatedContent()) 
     235 
     236    def getSortedList(self, reftype='relatedContent'): 
    129237        #f = self.getField('refsToResources') 
    130         f = self.getReferenceImpl() 
     238        field = self.Schema().get(reftype) 
     239        rtype=field.relationship 
     240        f = self.getReferenceImpl(relationship=rtype) 
    131241        arr = [] 
    132242        err_base = 12345123 
     
    141251        return arr 
    142252 
    143     def getResources(self): 
     253    def getResources(self, reftype='relatedContent'): 
    144254        """ ... """ 
    145255        #return self.getRefsToResources() 
    146         sorted = self.getSortedList() 
     256        sorted = self.getSortedList(reftype) 
    147257        arr = [] 
    148258        for x in sorted: 
     
    150260        return arr         
    151261 
     262 
     263    security.declareProtected(MODIFY_CONTENT,'delContent') 
     264    def delContent(self, objid,REQUEST=None): 
     265        """ front for delResources """ 
     266        if objid: 
     267            self.delResources(objid, reftype='relatedContent') 
     268        return REQUEST.RESPONSE.redirect(self.absolute_url()) 
     269 
     270    security.declareProtected(MODIFY_CONTENT,'delMethods') 
     271    def delMethods(self, objid,REQUEST=None): 
     272        """ front for delResources """ 
     273        if objid: 
     274            self.delResources(objid, reftype='relatedMethods') 
     275        return REQUEST.RESPONSE.redirect(self.absolute_url()) 
     276 
     277    security.declareProtected(MODIFY_CONTENT,'delTools') 
     278    def delTools(self, objid,REQUEST=None): 
     279        """ front for delResources """ 
     280        if objid: 
     281            self.delResources(objid, reftype='relatedTools') 
     282        return REQUEST.RESPONSE.redirect(self.absolute_url()) 
     283 
    152284    security.declareProtected(MODIFY_CONTENT,'delResources') 
    153     def delResources(self, REQUEST): 
     285    def delResources(self, objid, reftype='relatedContent'): 
    154286        """ delete selected resource """ 
    155         field = self.Schema().get('refsToResources') 
    156         prev = field.getRaw(self, aslist=True) 
    157         counter = 1 
    158         new = [] 
    159         for x in prev: 
    160             if REQUEST.get(str(counter)) != "True": 
    161                 new.append(x) 
    162             counter = counter + 1 
    163         field.set(self, new) 
     287        field = self.Schema().get(reftype) 
     288        objlist = field.get(self) 
     289 
     290        newlist = [o.UID() for o in objlist if o.id!=objid] 
     291        field.set(self, newlist) 
    164292        # if collection is empty, delete it too 
    165         if new == []: 
    166             self.collections.delCollection(self.getId()) 
    167             return True 
    168         else: 
    169             return False 
     293#        if new == []: 
     294#            self.collections.delCollection(self.getId()) 
     295#            return True 
     296#        else: 
     297#            return False 
     298        return False 
     299 
     300 
     301    security.declareProtected(MODIFY_CONTENT,'moveUpContent') 
     302    def moveUpContent(self, objid,REQUEST=None): 
     303        """ Front for more general moveUpResources """ 
     304        if objid: 
     305            self.moveUpResources(objid, reftype='relatedContent') 
     306        return REQUEST.RESPONSE.redirect(self.absolute_url()) 
    170307 
    171308    security.declareProtected(MODIFY_CONTENT,'moveUpResources') 
    172     def moveUpResources(self, REQUEST): 
     309    def moveUpResources(self, objid, reftype='relatedContent'): 
    173310        """ move up """ 
    174         id = REQUEST.get("id") 
    175         field = self.getField('refsToResources') 
    176         sorted = self.getSortedList() 
     311        field = self.getField(reftype) 
     312        sorted = self.getSortedList(reftype) 
    177313        cur_pos = 0 
    178314        count = 0 
    179315        for x in sorted: 
    180             if x[1].getTargetObject().UID() == id: 
     316            if x[1].getTargetObject().id == objid: 
    181317                cur_pos = count 
    182318                break 
     
    203339            #field.set(self, new_list) 
    204340 
     341 
     342    security.declareProtected(MODIFY_CONTENT,'moveDownContent') 
     343    def moveDownContent(self, objid,REQUEST=None): 
     344        """ Front for more general moveDownResources """ 
     345        if objid: 
     346            self.moveDownResources(objid, reftype='relatedContent') 
     347        return REQUEST.RESPONSE.redirect(self.absolute_url()) 
     348 
     349 
    205350    security.declareProtected(MODIFY_CONTENT,'moveDownResources') 
    206     def moveDownResources(self, REQUEST): 
     351    def moveDownResources(self, objid, reftype='relatedContent'): 
    207352        """ move down """ 
    208         id = REQUEST.get("id") 
    209         field = self.getField('refsToResources') 
    210         sorted = self.getSortedList() 
     353        field = self.getField(reftype) 
     354        sorted = self.getSortedList(reftype=reftype) 
    211355        cur_pos = 0 
    212356        count = 0 
    213357        for x in sorted: 
    214             if x[1].getTargetObject().UID() == id: 
     358            if x[1].getTargetObject().id == objid: 
    215359                cur_pos = count 
    216360                break 
     
    233377            field.set(self, new_list, collection_position=curr_pos) 
    234378 
    235     def isReadyForStory(self): 
    236         """ returns true or false. Write a story button appears only when 
    237         there is at least one object from each three sections """ 
    238         has_content = 0 
    239         has_act = 0 
    240         has_tool = 0 
    241         for x in self.getRefsToResources(): 
    242             if x.meta_type in CONTENT_TYPES: has_content = 1 
    243             if x.meta_type == 'Activity': has_act = 1 
    244             if x.meta_type == 'Tool': has_tool = 1 
    245         if 1 == has_content == has_act == has_tool: 
    246             return True 
    247         return False 
    248  
    249379    def amIOwner(self): 
    250380        """ check owner of object """ 
    251381        roles = self.portal_membership.getAuthenticatedMember().getRolesInContext(self) 
    252382        return 'Owner' in roles 
     383 
    253384 
    254385    def manage_afterAdd(self, item, container): 
     
    257388        if not hasattr(item.aq_base, 'left_slots'): 
    258389            self._setProperty('left_slots', ['here/portlet_%s_actions/macros/portlet' % item.meta_type.lower(),], 'lines') 
     390 
     391    security.declareProtected(MODIFY_CONTENT,'cleanRefsToResources') 
     392    def cleanRefsToResources(self): 
     393        """ Check if (deprecated) RefsToResources contains stuff that should be in relatedContent etc. """ 
     394        objlist=self.getRefsToResources() 
     395        field=self.getField('refsToResources') 
     396        newlist=[] 
     397        for o in objlist: 
     398            objtype=o.meta_type 
     399            if objtype in CONTENT_TYPES:                        
     400                reftype='relatedContent' 
     401            elif objtype in ACTIVITY_TYPES: 
     402                reftype='relatedMethods' 
     403            elif objtype in TOOLS_TYPES: 
     404                reftype='relatedTools' 
     405            else: 
     406                reftype='keeper' 
     407            if reftype==keeper: 
     408                newlist.append(o.UID()) 
     409            else: 
     410                self.addRefsToResources(o.UID(),reftype=reftype) 
     411        field.set(self, newlist) 
     412                 
    259413 
    260414registerType(Collection, PROJECTNAME) 
  • trunk/Extensions/Install.py

    r1385 r1387  
    761761                    member.stories.manage_addLocalRoles(member_as_owner, ['Owner',]) 
    762762            print >>out, "Migration from 1.6.1 complete" 
    763     if old<="1.7": 
     763        if old<="1.7": 
    764764            print >>out, "Starting migration from 1.7" 
    765         old_id='activities' 
    766         new_id='methods' 
    767         import pdb 
    768         pdb.set_trace() 
    769         folder = getattr(self,old_id) 
    770         self.manage_renameObject(old_id,new_id) 
    771         folder.id=new_id 
    772         # Set up redirector 
    773         red = Redirector(old_id) 
    774         red.redirect_to = folder.UID() 
    775         self._setObject(old_id,red) 
    776         # Change folder title 
    777         folder.setTitle('Methods') 
    778         # Remove unnecessary topic - it will be replaced with a properly named one 
    779         folder._delObject('activities') 
     765            old_id='activities' 
     766            new_id='methods' 
     767            import pdb 
     768            pdb.set_trace() 
     769            folder = getattr(self,old_id) 
     770            self.manage_renameObject(old_id,new_id) 
     771            folder.id=new_id 
     772            # Set up redirector 
     773            red = Redirector(old_id) 
     774            red.redirect_to = folder.UID() 
     775            self._setObject(old_id,red) 
     776            # Change folder title 
     777            folder.setTitle('Methods') 
     778            # Remove unnecessary topic - it will be replaced with a properly named one 
     779            folder._delObject('activities') 
     780 
     781            print >>out, "Split existing collections to refer resources/methods/tools separately" 
     782            # Get collections folder and run cleaning script 
     783            for member in self.community.objectValues('MemberFolder'): 
     784                if hasattr(member.aq_base, 'collections'): 
     785                    for c in member.collections.objectValues('Collection'): 
     786                        c.cleanRefsToResources() 
     787            print >>out, "Migration from 1.7 complete"             
     788 
    780789 
    781790def uninstall(self): 
  • trunk/skins/lemill/collection_view.cpt

    r1105 r1387  
    2828            errors python:request.get('errors', {}); 
    2929            use_view_action site_properties/typesUseViewActionInListings; 
    30             searchterm string:;"> 
     30            searchterm string:; 
     31            isOwner here/amIOwner; 
     32            "> 
    3133 
    32         <h1 tal:content="here/Title"></h1> 
     34        <h1 i18n:translate="collection_title">Collection: <span i18n:name="title" tal:replace="here/Title"/></h1> 
    3335 
    34         <div tal:content="structure here/Description"></div> 
    35          
    36         <tal:objects tal:define="object_list python:here.getResources()"> 
    37         <tal:isNotOwner tal:condition="python:str(member)!=str(here.Creator())"> 
    38             <span metal:use-macro="here/resource_list_macro/macros/resources_list" /> 
    39         </tal:isNotOwner> 
    40         <tal:isOwner tal:condition="python:str(member)==str(here.Creator())"> 
    41 <form action="" method="post" tal:define="inCollection python:True" tal:attributes="action string:${here/absolute_url}/${template/id};"> 
    42         <span metal:use-macro="here/resource_list_macro/macros/resources_list" /> 
    43              
    44             <div id="delete_button_div" style="display:block"> 
    45             <div class="formControls" align="right"> 
    46                 <div id="delete_button"> 
    47                                 <input class="context" 
    48                                 tabindex="" 
    49                                 type="button" 
    50                                 value="Delete" 
    51                                 id="delete" 
    52                                 name="delete" 
    53                                 onClick="javascript:hide_div('delete_button_div'); show_div('delete_confirmation_div');" 
    54                                 i18n:attributes="value" i18n:domain="plone" 
    55                                 tal:attributes="tabindex tabindex/next;" /> 
    56                 </div> 
    57                         </div> 
    58                     </div> 
    59                     <div id="delete_confirmation_div" style="display:none"> 
    60                         <div class="formControls" align="right"> 
    61                             <div id="cancel_button" style="display:inline" i18n:translate="help_delete_resources"> 
    62                             This action deletes all selected resources! 
    63                             </div> 
    64                             <div id="cancel_button" style="display:inline"> 
    65                                 <input class="context" 
    66                                 tabindex="" 
    67                                 type="button" 
    68                                 value="Cancel" 
    69                                 id="cancel" 
    70                                 name="cancel" 
    71                                 onClick="javascript:show_div('delete_button_div'); hide_div('delete_confirmation_div');" 
    72                                 i18n:attributes="value label_cancel;" i18n:domain="plone" 
    73                                 tal:attributes="tabindex tabindex/next;"/> 
    74                             </div> 
    75                             <div id="save_button" style="display:inline"> 
    76                                 <input class="context" 
    77                                 tabindex="" 
    78                                 type="submit" 
    79                                 value="Delete" 
    80                                 id="delete" 
    81                                 name="form.button.Delete" 
    82                                 i18n:attributes="value" i18n:domain="plone" 
    83                                 tal:attributes="tabindex tabindex/next;" /> 
    84                             </div> 
    85                         </div> 
    86                     </div> 
    87                     <input type="hidden" name="form.submitted" value="1" /> 
    88                 </form> 
    89         </tal:isOwner> 
    90         </tal:objects> 
     36        <h2 i18n:translate="label_learning_story">Learning story</h2>  
     37        <div tal:condition="here/Description" tal:replace="structure here/Description" /> 
     38        <p tal:condition="not:here/Description" i18n:translate="learning_story_explanation">You have not written a learning story about this collection yet. 
     39If you have used these resources in a learning session you can share 
     40your experiences by <a href="edit">writing a learning story</a>.</p> 
     41 
     42    <tal:content condition="here/getRelatedContent" tal:define="resources python:here.getResources(reftype='relatedContent');"> 
     43        <h2 i18n:translate="label_content">Content</h2> 
     44        <table width="100%" border="0" cellpadding="4" cellspacing="0"> 
     45            <tr tal:repeat="obj resources"> 
     46                <td class="coverimage_cell_small"><img src="" alt="" class="coverimage_small" tal:attributes="src obj/getCoverImageURL; alt obj/title_or_id | nothing" /></td> 
     47                <td><a href="" tal:attributes="href string:${obj/absolute_url}/view" tal:content="obj/title_or_id">Media Computer - From Math to Augmentation</a></td> 
     48                <tal:editing_allowed tal:condition="isOwner">  
     49                    <td class="button_cell" ><a href="" tal:condition="not:repeat/obj/start" tal:attributes="href python:'%s/moveUpContent?objid=%s' % (here.absolute_url(), obj.id)"><img src="images/button_move_up.png" alt="Move up" /></a></td> 
     50                    <td class="button_cell" ><a href="" tal:condition="not:repeat/obj/end" tal:attributes="href python:'%s/moveDownContent?objid=%s' % (here.absolute_url(), obj.id)"><img src="images/button_move_down.png" alt="Move down" /></a></td> 
     51                    <td class="button_cell"><a href="" tal:attributes="href python:'%s/delContent?objid=%s' % (here.absolute_url(), obj.id)"><img src="images/button_remove.png" alt="Remove from collection" /></a></td> 
     52                </tal:editing_allowed> 
     53            </tr> 
     54        </table> 
     55    </tal:content> 
     56     
     57    <tal:methods condition="here/getRelatedMethods" tal:define="resources python:here.getResources(reftype='relatedMethods');"> 
     58        <h2 i18n:translate="label_methods">Methods</h2> 
     59        <table width="100%" border="0" cellpadding="4" cellspacing="0"> 
     60            <tr tal:repeat="obj resources"> 
     61                <td class="coverimage_cell_small"><img src="" alt="" class="coverimage_small" tal:attributes="src obj/getCoverImageURL; alt obj/title_or_id | nothing" /></td> 
     62                <td><a href="" tal:attributes="href string:${obj/absolute_url}/view" tal:content="obj/title_or_id">Media Computer - From Math to Augmentation</a></td> 
     63                <tal:editing_allowed tal:condition="isOwner">  
     64                    <td class="button_cell" /> 
     65                    <td class="button_cell" /> 
     66                    <td class="button_cell"><a href="" tal:attributes="href python:'%s/delMethods?objid=%s' % (here.absolute_url(), obj.id)"><img src="images/button_remove.png" alt="Remove from collection" /></a></td> 
     67                </tal:editing_allowed> 
     68            </tr> 
     69        </table> 
     70    </tal:methods> 
     71     
     72    <tal:tools condition="here/getRelatedTools" tal:define="resources python:here.getResources(reftype='relatedTools');"> 
     73        <h2 i18n:translate="label_tools">Tools</h2> 
     74        <table width="100%" border="0" cellpadding="4" cellspacing="0"> 
     75            <tr tal:repeat="obj resources"> 
     76                <td class="coverimage_cell_small"><img src="" alt="" class="coverimage_small" tal:attributes="src obj/getCoverImageURL; alt obj/title_or_id | nothing" /></td> 
     77                <td><a href="" tal:attributes="href string:${obj/absolute_url}/view" tal:content="obj/title_or_id">Media Computer - From Math to Augmentation</a></td> 
     78                <tal:editing_allowed tal:condition="isOwner">  
     79                    <td class="button_cell" /> 
     80                    <td class="button_cell" /> 
     81                    <td class="button_cell"><a href="" tal:attributes="href python:'%s/delTools?objid=%s' % (here.absolute_url(), obj.id)"><img src="images/button_remove.png" alt="Remove from collection" /></a></td> 
     82                </tal:editing_allowed> 
     83            </tr> 
     84        </table> 
     85    </tal:tools> 
     86 
    9187      </metal:main_macro> 
    9288    </metal:fill>     
  • trunk/skins/lemill/front-page.pt

    r1385 r1387  
    1414            <div> 
    1515                <a href="#" tal:attributes="href portal_url"><img src="" alt="LeMill" /></a> 
    16                 <p i18n:translate="introduction"> 
     16                <p i18n:translate="text_introduction_front-page"> 
    1717                Web community for <strong>finding</strong>, <strong>authoring</strong> and <strong>sharing</strong> learning resources 
    1818                </p> 
     
    2323                New to LeMill?              
    2424                </p> 
    25                 <p tal:condition="isAnon" i18n:translate="join_or_tour"> 
     25                <p tal:condition="isAnon" i18n:translate="link_join_or_tour_front-page"> 
    2626                <a href="join">Join</a> or <a href="content/tour">take a tour</a> 
    2727                </p> 
    2828                <p tal:condition="not:isAnon"> 
    29                 <a href="content/tour" i18n:translate="take_a_tour">Take a tour</a> 
     29                <a href="content/tour" i18n:translate="link_take_a_tour_front-page">Take a tour</a> 
    3030                </p> 
    3131            </div> 
  • trunk/skins/lemill/portlet_collection_actions.pt

    r1105 r1387  
    1313            <a href="delc" tal:attributes="href string:${context/absolute_url}/delete_c"><tal:block i18n:translate="label_delete_collection">Delete collection</tal:block></a> 
    1414        </li> 
    15         <li tal:condition="context/isReadyForStory"> 
    16             <a href="" tal:attributes="href string:${context/absolute_url}/start_story"><tal:block i18n:translate="label_write_a_tip">Write a tip for use</tal:block></a> 
    17         </li> 
    1815    </ul> 
    1916</div> 
  • trunk/skins/lemill_eun/ploneCustom.css

    r1317 r1387  
    494494} 
    495495/**/ 
     496 
     497 
     498.coverimage_small { 
     499    height: 30px; 
     500    } 
     501 
     502.coverimage_cell_small { 
     503    text-align: center; 
     504    width: 50px; 
     505    } 
     506 
     507.button_cell { 
     508    width: 20px; 
     509    } 
  • trunk/skins/lemill_tables/ploneCustom.css

    r1367 r1387  
    523523    background-color: #666699; 
    524524    } 
     525 
     526.coverimage_small { 
     527    height: 30px; 
     528    } 
     529 
     530.coverimage_cell_small { 
     531    text-align: center; 
     532    width: 50px; 
     533    } 
     534 
     535.button_cell { 
     536    width: 20px; 
     537    } 
  • trunk/tests/testCollections.py

    r983 r1387  
    6969        mat.edit(title=MAT_TITLE) 
    7070 
    71         obj.addRefsToResources([mat,]) 
     71        obj.addRelatedContent([mat,]) 
    7272 
    7373        res = self.publish(obj.absolute_url_path(),basic=auth).getBody() 
     
    8686        mat = self.construct('MultimediaMaterial','foobar',self.portal.content) 
    8787 
    88         col.addRefsToResources([mat,]) 
     88        col.addRelatedContent([mat,]) 
    8989 
    9090        res = self.publish(mat.absolute_url_path()+'/view').getBody() 
Note: See TracChangeset for help on using the changeset viewer.