Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #52 from jenkinsci/jenkins-35168
[FIXED JENKINS-35168] Resolve the context `ModelObject` when `it` isn't a `ModelObeject`
  • Loading branch information
stephenc committed May 27, 2016
2 parents be60a05 + 3169dcd commit e2bd270
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
Expand Up @@ -94,9 +94,30 @@ public String getDisplayName() {
return Messages.CredentialsSelectHelper_DisplayName();
}

/**
* Fixes up the context in case we are called from a page where the context is not a ModelObject.
*
* @param context the initial guess of the context.
* @return the resolved context.
* @since 2.0.7
*/
@CheckForNull
@Restricted(NoExternalUse.class)
public ModelObject resolveContext(Object context) {
if (context instanceof ModelObject) {
return (ModelObject) context;
}
StaplerRequest request = Stapler.getCurrentRequest();
if (request != null) {
return request.findAncestorObject(ModelObject.class);
}
return null;
}

/**
* Returns the {@link StoreItem} instances for the current Stapler request.
*
* @param context the context in which to retrieve the store items.
* @param includeUser {@code true} to also include any User scoped stores.
* @return the {@link StoreItem} instances for the current Stapler request.
* @since 2.0.5
Expand Down
9 changes: 7 additions & 2 deletions src/main/resources/lib/credentials/select.jelly
Expand Up @@ -45,13 +45,17 @@
<st:attribute name="includeUser">
If the user's scoped stores should be included
</st:attribute>
<st:attribute name="context">
The context within which to look up the stores. (defaults to <code>it</code> (jelly) / <code>my</code> (groovy))
</st:attribute>
</st:documentation>
<f:prepareDatabinding/>
<j:set var="value" value="${attrs.value ?: instance[attrs.field] ?: attrs.default}" />
<j:set var="paramValue" value="${attrs.expressionAllowed and value.startsWith('${') and value.endsWith('}')}"/>
<j:set var="paramDefault" value="${attrs.expressionAllowed and attrs.default.startsWith('${') and attrs.default.endsWith('}')}"/>
<j:set var="selectHelper" value="${app.getDescriptorByName('com.cloudbees.plugins.credentials.CredentialsSelectHelper')}"/>
<j:set var="includeUser" value="${attrs.includeUser ? true : false}"/>
<j:set var="context" value="${selectHelper.resolveContext(attrs.context ?: it)}"/>
<div class="credentials-select-control">
<j:if test="${attrs.expressionAllowed}">
<label field-disabled="true">
Expand All @@ -71,8 +75,9 @@
default="${paramDefault?'':attrs.default}" value="${paramValue?(paramDefault?'':attrs.default):value}"/>
<!-- TODO add support for checking permissions against stores in request path -->
<st:nbsp/>
<j:set var="storeItems" value="${selectHelper.getStoreItems(context, includeUser)}"/>
<j:choose>
<j:when test="${h.hasPermission(selectHelper.CREATE)}">
<j:when test="${h.hasPermission(selectHelper.CREATE) and storeItems != null and !storeItems.isEmpty()}">
<button type="button" class="credentials-add-menu" menualign="${attrs.menuAlign}"
suffix="${attrs.name}">
<l:icon class="icon-credentials-new-credential icon-sm"/>
Expand All @@ -81,7 +86,7 @@
<div class="credentials-add-menu-items yuimenu">
<div class="bd">
<ul class="first-of-type">
<j:forEach var="storeItem" items="${selectHelper.getStoreItems(it, includeUser)}">
<j:forEach var="storeItem" items="${storeItems}">
<li class="yuimenuitem" data-url="${storeItem.url}/dialog" disabled="${storeItem.enabled?null:'disabled'}">
<span class="yuimenuitemlabel" tooltip="${storeItem.description}">
<l:icon class="${storeItem.iconClassName} icon-sm"/>
Expand Down

0 comments on commit e2bd270

Please sign in to comment.