Beispiel #1
0
 def create_review( self, trans, **kwd ):
     # The value of the received id is the encoded repository id.
     message = escape( kwd.get( 'message', '' ) )
     status = kwd.get( 'status', 'done' )
     repository_id = kwd.get( 'id', None )
     changeset_revision = kwd.get( 'changeset_revision', None )
     previous_review_id = kwd.get( 'previous_review_id', None )
     create_without_copying = 'create_without_copying' in kwd
     if repository_id:
         if changeset_revision:
             # Make sure there is not already a review of the revision by the user.
             repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
             if review_util.get_review_by_repository_id_changeset_revision_user_id( app=trans.app,
                                                                                    repository_id=repository_id,
                                                                                    changeset_revision=changeset_revision,
                                                                                    user_id=trans.security.encode_id( trans.user.id ) ):
                 message = "You have already created a review for revision <b>%s</b> of repository <b>%s</b>." % ( changeset_revision, escape( repository.name ) )
                 status = "error"
             else:
                 # See if there are any reviews for previous changeset revisions that the user can copy.
                 if not create_without_copying and \
                         not previous_review_id and \
                         review_util.has_previous_repository_reviews( trans.app, repository, changeset_revision ):
                     return trans.response.send_redirect( web.url_for( controller='repository_review',
                                                                       action='select_previous_review',
                                                                       **kwd ) )
                 # A review can be initially performed only on an installable revision of a repository, so make sure we have metadata associated
                 # with the received changeset_revision.
                 repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
                 if repository_metadata:
                     metadata = repository_metadata.metadata
                     if metadata:
                         review = trans.app.model.RepositoryReview( repository_id=repository_metadata.repository_id,
                                                                    changeset_revision=changeset_revision,
                                                                    user_id=trans.user.id,
                                                                    rating=None,
                                                                    deleted=False )
                         trans.sa_session.add( review )
                         trans.sa_session.flush()
                         if previous_review_id:
                             review_to_copy = review_util.get_review( trans.app, previous_review_id )
                             self.copy_review( trans, review_to_copy, review )
                         review_id = trans.security.encode_id( review.id )
                         message = "Begin your review of revision <b>%s</b> of repository <b>%s</b>." \
                             % ( changeset_revision, repository.name )
                         status = 'done'
                         trans.response.send_redirect( web.url_for( controller='repository_review',
                                                                    action='edit_review',
                                                                    id=review_id,
                                                                    message=message,
                                                                    status=status ) )
                 else:
                     message = "A new review cannot be created for revision <b>%s</b> of repository <b>%s</b>.  Select a valid revision and try again." \
                         % ( changeset_revision, escape( repository.name ) )
                     kwd[ 'message' ] = message
                     kwd[ 'status' ] = 'error'
         else:
             return trans.response.send_redirect( web.url_for( controller='repository_review',
                                                               action='manage_repository_reviews',
                                                               **kwd ) )
     return trans.response.send_redirect( web.url_for( controller='repository_review',
                                                       action='view_or_manage_repository',
                                                       **kwd ) )
def render_render_tool_shed_repository_actions(context,repository,metadata=None,changeset_revision=None):
    context.caller_stack._push_frame()
    try:
        h = context.get('h', UNDEFINED)
        trans = context.get('trans', UNDEFINED)
        __M_writer = context.writer()
        # SOURCE LINE 3
        __M_writer(u'\n    ')
        # SOURCE LINE 4

        from tool_shed.util.review_util import can_browse_repository_reviews, changeset_revision_reviewed_by_user, get_review_by_repository_id_changeset_revision_user_id
        from tool_shed.util.shed_util_common import changeset_is_malicious
        
        if repository.metadata_revisions:
            has_metadata = True
        else:
            has_metadata = False
        
        is_admin = trans.user_is_admin()
        
        if repository.deprecated:
            is_deprecated = True
        else:
            is_deprecated = False
        
        if repository.is_new( trans.app ):
            is_new = True
        else:
            is_new = False
        
        if changeset_is_malicious( trans, trans.security.encode_id( repository.id ), repository.tip( trans.app ) ):
            is_malicious = True
        else:
            is_malicious = False
        
        can_browse_contents = not is_new
        
        if can_browse_repository_reviews( trans, repository ):
            can_browse_reviews = True
        else:
            can_browse_reviews = False
        
        if trans.user and trans.user != repository.user:
            can_contact_owner = True
        else:
            can_contact_owner = False
        
        if not is_new and trans.user and ( is_admin or repository.user == trans.user ) and not is_deprecated:
            can_deprecate = True
        else:
            can_deprecate = False
        
        if not is_deprecated and trans.app.security_agent.can_push( trans.app, trans.user, repository ):
            can_push = True
        else:
            can_push = False
        
        if not is_deprecated and not is_new and ( not is_malicious or can_push ):
            can_download = True
        else:
            can_download = False
        
        if ( is_admin or ( trans.user and trans.user == repository.user ) ) and not repository.deleted and not repository.deprecated and not is_new:
            can_reset_all_metadata = True
        else:
            can_reset_all_metadata = False
        
        if can_push and not is_deprecated:
            can_upload = True
        else:
            can_upload = False
        
        if not is_new and not is_deprecated and trans.user and repository.user != trans.user:
            can_rate = True
        else:
            can_rate = False
        
        if changeset_revision is not None:
            if has_metadata and not is_deprecated and trans.app.security_agent.user_can_review_repositories( trans.user ):
                can_review_repository = True
            else:
                can_review_repository = False
            if changeset_revision_reviewed_by_user( trans, trans.user, repository, changeset_revision ):
                reviewed_by_user = True
            else:
                reviewed_by_user = False
        else:
            can_review_repository = False
            reviewed_by_user = False
        
        if reviewed_by_user:
            review = get_review_by_repository_id_changeset_revision_user_id( trans=trans,
                                                                             repository_id=trans.security.encode_id( repository.id ),
                                                                             changeset_revision=changeset_revision,
                                                                             user_id=trans.security.encode_id( trans.user.id ) )
            review_id = trans.security.encode_id( review.id )
        else:
            review_id = None
        
        if not is_new and not is_deprecated:
            can_set_metadata = True
        else:
            can_set_metadata = False
        
        if changeset_revision is not None:
            if changeset_revision == repository.tip( trans.app ):
                changeset_revision_is_repository_tip = True
            else:
                changeset_revision_is_repository_tip = False
        else:
            changeset_revision_is_repository_tip = False
        
        if trans.user and ( is_admin or repository.user == trans.user ) and is_deprecated:
            can_undeprecate = True
        else:
            can_undeprecate = False
        
        if is_admin or repository.user == trans.user:
            can_manage = True
        else:
            can_manage = False
        
        can_view_change_log = not is_new
        
        if can_push:
            browse_label = 'Browse or delete repository tip files'
        else:
            browse_label = 'Browse repository tip files'
            
        
        # SOURCE LINE 123
        __M_writer(u'\n\n    <br/><br/>\n    <ul class="manage-table-actions">\n')
        # SOURCE LINE 127
        if is_new:
            # SOURCE LINE 128
            if can_upload:
                # SOURCE LINE 129
                __M_writer(u'                <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='upload', action='upload', repository_id=trans.security.encode_id( repository.id ) )))
                __M_writer(u'">Upload files to repository</a>\n')
                pass
            # SOURCE LINE 131
            if can_undeprecate:
                # SOURCE LINE 132
                __M_writer(u'                <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='deprecate', id=trans.security.encode_id( repository.id ), mark_deprecated=False )))
                __M_writer(u'">Mark repository as not deprecated</a>\n')
                pass
            # SOURCE LINE 134
        else:
            # SOURCE LINE 135
            __M_writer(u'            <li><a class="action-button" id="repository-')
            __M_writer(unicode(repository.id))
            __M_writer(u'-popup" class="menubutton">Repository Actions</a></li>\n            <div popupmenu="repository-')
            # SOURCE LINE 136
            __M_writer(unicode(repository.id))
            __M_writer(u'-popup">\n')
            # SOURCE LINE 137
            if can_review_repository:
                # SOURCE LINE 138
                if reviewed_by_user:
                    # SOURCE LINE 139
                    __M_writer(u'                        <a class="action-button" target="galaxy_main" href="')
                    __M_writer(unicode(h.url_for( controller='repository_review', action='edit_review', id=review_id )))
                    __M_writer(u'">Manage my review of this revision</a>\n')
                    # SOURCE LINE 140
                else:
                    # SOURCE LINE 141
                    __M_writer(u'                        <a class="action-button" target="galaxy_main" href="')
                    __M_writer(unicode(h.url_for( controller='repository_review', action='create_review', id=trans.app.security.encode_id( repository.id ), changeset_revision=changeset_revision )))
                    __M_writer(u'">Add a review to this revision</a>\n')
                    pass
                pass
            # SOURCE LINE 144
            if can_browse_reviews:
                # SOURCE LINE 145
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository_review', action='manage_repository_reviews', id=trans.app.security.encode_id( repository.id ) )))
                __M_writer(u'">Browse reviews of this repository</a>\n')
                pass
            # SOURCE LINE 147
            if can_upload:
                # SOURCE LINE 148
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='upload', action='upload', repository_id=trans.security.encode_id( repository.id ) )))
                __M_writer(u'">Upload files to repository</a>\n')
                pass
            # SOURCE LINE 150
            if can_manage:
                # SOURCE LINE 151
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='manage_repository', id=trans.app.security.encode_id( repository.id ), changeset_revision=repository.tip( trans.app ) )))
                __M_writer(u'">Manage repository</a>\n')
                # SOURCE LINE 152
            else:
                # SOURCE LINE 153
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='view_repository', id=trans.app.security.encode_id( repository.id ), changeset_revision=repository.tip( trans.app ) )))
                __M_writer(u'">View repository</a>\n')
                pass
            # SOURCE LINE 155
            if can_view_change_log:
                # SOURCE LINE 156
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='view_changelog', id=trans.app.security.encode_id( repository.id ) )))
                __M_writer(u'">View change log</a>\n')
                pass
            # SOURCE LINE 158
            if can_browse_contents:
                # SOURCE LINE 159
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='browse_repository', id=trans.app.security.encode_id( repository.id ) )))
                __M_writer(u'">')
                __M_writer(filters.html_escape(unicode(browse_label )))
                __M_writer(u'</a>\n')
                pass
            # SOURCE LINE 161
            if can_rate:
                # SOURCE LINE 162
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='rate_repository', id=trans.app.security.encode_id( repository.id ) )))
                __M_writer(u'">Rate repository</a>\n')
                pass
            # SOURCE LINE 164
            if can_contact_owner:
                # SOURCE LINE 165
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='contact_owner', id=trans.security.encode_id( repository.id ) )))
                __M_writer(u'">Contact repository owner</a>\n')
                pass
            # SOURCE LINE 167
            if can_reset_all_metadata:
                # SOURCE LINE 168
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='reset_all_metadata', id=trans.security.encode_id( repository.id ) )))
                __M_writer(u'">Reset all repository metadata</a>\n')
                pass
            # SOURCE LINE 170
            if can_deprecate:
                # SOURCE LINE 171
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='deprecate', id=trans.security.encode_id( repository.id ), mark_deprecated=True )))
                __M_writer(u'" confirm="Click Ok to deprecate this repository.">Mark repository as deprecated</a>\n')
                pass
            # SOURCE LINE 173
            if can_undeprecate:
                # SOURCE LINE 174
                __M_writer(u'                    <a class="action-button" target="galaxy_main" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='deprecate', id=trans.security.encode_id( repository.id ), mark_deprecated=False )))
                __M_writer(u'">Mark repository as not deprecated</a>\n')
                pass
            # SOURCE LINE 176
            if can_download:
                # SOURCE LINE 177
                __M_writer(u'                    <a class="action-button" href="')
                __M_writer(unicode(h.url_for( controller='repository', action='download', repository_id=trans.app.security.encode_id( repository.id ), changeset_revision=repository.tip( trans.app ), file_type='gz' )))
                __M_writer(u'">Download as a .tar.gz file</a>\n                    <a class="action-button" href="')
                # SOURCE LINE 178
                __M_writer(unicode(h.url_for( controller='repository', action='download', repository_id=trans.app.security.encode_id( repository.id ), changeset_revision=repository.tip( trans.app ), file_type='bz2' )))
                __M_writer(u'">Download as a .tar.bz2 file</a>\n                    <a class="action-button" href="')
                # SOURCE LINE 179
                __M_writer(unicode(h.url_for( controller='repository', action='download', repository_id=trans.app.security.encode_id( repository.id ), changeset_revision=repository.tip( trans.app ), file_type='zip' )))
                __M_writer(u'">Download as a zip file</a>\n')
                pass
            # SOURCE LINE 181
            __M_writer(u'            </div>\n')
            pass
        # SOURCE LINE 183
        __M_writer(u'    </ul>\n')
        return ''
    finally:
        context.caller_stack._pop_frame()