mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-13 21:19:42 +02:00
merged pulled updates
This commit is contained in:
commit
b4827ff5a3
8 changed files with 105 additions and 20 deletions
|
@ -1611,6 +1611,16 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Even if the request is not deletable, we may need these empty strings for the td if the deletable column is displayed
|
// Even if the request is not deletable, we may need these empty strings for the td if the deletable column is displayed
|
||||||
let modalTrigger = '';
|
let modalTrigger = '';
|
||||||
|
|
||||||
|
let markupCreatorRow = '';
|
||||||
|
|
||||||
|
if (portfolioValue) {
|
||||||
|
markupCreatorRow = `
|
||||||
|
<td>
|
||||||
|
<span class="text-wrap break-word">${request.creator ? request.creator : ''}</span>
|
||||||
|
</td>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
// If the request is deletable, create modal body and insert it. This is true for both requests and portfolio requests pages
|
// If the request is deletable, create modal body and insert it. This is true for both requests and portfolio requests pages
|
||||||
if (request.is_deletable) {
|
if (request.is_deletable) {
|
||||||
let modalHeading = '';
|
let modalHeading = '';
|
||||||
|
@ -1634,7 +1644,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
role="button"
|
role="button"
|
||||||
id="button-toggle-delete-domain-alert-${request.id}"
|
id="button-toggle-delete-domain-alert-${request.id}"
|
||||||
href="#toggle-delete-domain-alert-${request.id}"
|
href="#toggle-delete-domain-alert-${request.id}"
|
||||||
class="usa-button--unstyled text-no-underline late-loading-modal-trigger"
|
class="usa-button text-secondary usa-button--unstyled text-no-underline late-loading-modal-trigger"
|
||||||
aria-controls="toggle-delete-domain-alert-${request.id}"
|
aria-controls="toggle-delete-domain-alert-${request.id}"
|
||||||
data-open-modal
|
data-open-modal
|
||||||
>
|
>
|
||||||
|
@ -1707,7 +1717,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
<div class="usa-accordion__heading">
|
<div class="usa-accordion__heading">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="usa-button usa-button--unstyled usa-accordion__button usa-button--more-actions"
|
class="usa-button usa-button--unstyled usa-button--with-icon usa-accordion__button usa-button--more-actions"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
aria-controls="more-actions-${request.id}"
|
aria-controls="more-actions-${request.id}"
|
||||||
>
|
>
|
||||||
|
@ -1722,7 +1732,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
role="button"
|
role="button"
|
||||||
id="button-toggle-delete-domain-alert-${request.id}"
|
id="button-toggle-delete-domain-alert-${request.id}"
|
||||||
href="#toggle-delete-domain-alert-${request.id}"
|
href="#toggle-delete-domain-alert-${request.id}"
|
||||||
class="usa-button--unstyled text-no-underline late-loading-modal-trigger"
|
class="usa-button text-secondary usa-button--unstyled text-no-underline late-loading-modal-trigger"
|
||||||
aria-controls="toggle-delete-domain-alert-${request.id}"
|
aria-controls="toggle-delete-domain-alert-${request.id}"
|
||||||
data-open-modal
|
data-open-modal
|
||||||
>
|
>
|
||||||
|
@ -1737,7 +1747,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const row = document.createElement('tr');
|
const row = document.createElement('tr');
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
<th scope="row" role="rowheader" data-label="Domain name">
|
<th scope="row" role="rowheader" data-label="Domain name">
|
||||||
|
@ -1746,6 +1755,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
<td data-sort-value="${new Date(request.last_submitted_date).getTime()}" data-label="Date submitted">
|
<td data-sort-value="${new Date(request.last_submitted_date).getTime()}" data-label="Date submitted">
|
||||||
${submissionDate}
|
${submissionDate}
|
||||||
</td>
|
</td>
|
||||||
|
${markupCreatorRow}
|
||||||
<td data-label="Status">
|
<td data-label="Status">
|
||||||
${request.status}
|
${request.status}
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -204,3 +204,7 @@ abbr[title] {
|
||||||
.left-auto {
|
.left-auto {
|
||||||
left: auto!important;
|
left: auto!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.break-word {
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
|
@ -144,8 +144,15 @@ class CheckPortfolioMiddleware:
|
||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# set the portfolio in the session if it is not set
|
old_updated_at = None
|
||||||
if "portfolio" not in request.session or request.session["portfolio"] is None:
|
if request.session.get("portfolio"):
|
||||||
|
old_updated_at = request.session.get("portfolio__updated_at")
|
||||||
|
request.session["portfolio__updated_at"] = request.session.get("portfolio").updated_at
|
||||||
|
|
||||||
|
should_update_portfolio = (
|
||||||
|
not request.session.get("portfolio") or old_updated_at != request.session.get("portfolio__updated_at")
|
||||||
|
)
|
||||||
|
if request.user.is_org_user(request) or should_update_portfolio:
|
||||||
# if multiple portfolios are allowed for this user
|
# if multiple portfolios are allowed for this user
|
||||||
if flag_is_active(request, "multiple_portfolios"):
|
if flag_is_active(request, "multiple_portfolios"):
|
||||||
# NOTE: we will want to change later to have a workflow for selecting
|
# NOTE: we will want to change later to have a workflow for selecting
|
||||||
|
@ -156,8 +163,8 @@ class CheckPortfolioMiddleware:
|
||||||
else:
|
else:
|
||||||
request.session["portfolio"] = None
|
request.session["portfolio"] = None
|
||||||
|
|
||||||
if request.session["portfolio"] is not None and current_path == self.home:
|
if request.session.get("portfolio"):
|
||||||
if request.user.is_org_user(request):
|
if current_path == self.home:
|
||||||
if request.user.has_domains_portfolio_permission(request.session["portfolio"]):
|
if request.user.has_domains_portfolio_permission(request.session["portfolio"]):
|
||||||
portfolio_redirect = reverse("domains")
|
portfolio_redirect = reverse("domains")
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -16,6 +16,24 @@
|
||||||
<use xlink:href="{%static 'img/sprite.svg'%}#arrow_back"></use>
|
<use xlink:href="{%static 'img/sprite.svg'%}#arrow_back"></use>
|
||||||
</svg><span class="margin-left-05">Previous step</span>
|
</svg><span class="margin-left-05">Previous step</span>
|
||||||
</a>
|
</a>
|
||||||
|
{% else %}
|
||||||
|
{% if portfolio %}
|
||||||
|
{% url 'domain-requests' as url_2 %}
|
||||||
|
<nav class="usa-breadcrumb padding-top-0" aria-label="Domain request breadcrumb">
|
||||||
|
<ol class="usa-breadcrumb__list">
|
||||||
|
<li class="usa-breadcrumb__list-item">
|
||||||
|
<a href="{{ url_2 }}" class="usa-breadcrumb__link"><span>Domain requests</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="usa-breadcrumb__list-item usa-current" aria-current="page">
|
||||||
|
{% if requested_domain__name %}
|
||||||
|
<span>{{ requested_domain__name }}</span>
|
||||||
|
{% else %}
|
||||||
|
<span>Start a new domain request</span>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% block form_messages %}
|
{% block form_messages %}
|
||||||
|
|
|
@ -8,7 +8,29 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<main id="main-content" class="grid-container">
|
<main id="main-content" class="grid-container">
|
||||||
<div class="grid-col desktop:grid-offset-2 desktop:grid-col-8">
|
<div class="grid-col desktop:grid-offset-2 desktop:grid-col-8">
|
||||||
<a href="{% url 'home' %}" class="breadcrumb__back">
|
{% comment %}
|
||||||
|
The back button should redirect to the domain request page if we are in the portfolio view.
|
||||||
|
Otherwise, lets just redirect back to home.
|
||||||
|
{% endcomment %}
|
||||||
|
{% if portfolio %}
|
||||||
|
{% url 'domain-requests' as url %}
|
||||||
|
{% else %}
|
||||||
|
{% url 'home' as url %}
|
||||||
|
{% endif %}
|
||||||
|
{% if portfolio %}
|
||||||
|
<nav class="usa-breadcrumb padding-top-0" aria-label="Domain request breadcrumb">
|
||||||
|
<ol class="usa-breadcrumb__list">
|
||||||
|
<li class="usa-breadcrumb__list-item">
|
||||||
|
<a href="{{ url }}" class="usa-breadcrumb__link"><span>Domain requests</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="usa-breadcrumb__list-item usa-current" aria-current="page">
|
||||||
|
<span>{{ DomainRequest.requested_domain.name }}</span
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ url }}" class="breadcrumb__back">
|
||||||
<svg class="usa-icon" aria-hidden="true" focusable="false" role="img">
|
<svg class="usa-icon" aria-hidden="true" focusable="false" role="img">
|
||||||
<use xlink:href="{% static 'img/sprite.svg' %}#arrow_back"></use>
|
<use xlink:href="{% static 'img/sprite.svg' %}#arrow_back"></use>
|
||||||
</svg>
|
</svg>
|
||||||
|
@ -17,6 +39,7 @@
|
||||||
Back to manage your domains
|
Back to manage your domains
|
||||||
</p>
|
</p>
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
<h1>Domain request for {{ DomainRequest.requested_domain.name }}</h1>
|
<h1>Domain request for {{ DomainRequest.requested_domain.name }}</h1>
|
||||||
<div
|
<div
|
||||||
class="usa-summary-box dotgov-status-box margin-top-3 padding-left-2"
|
class="usa-summary-box dotgov-status-box margin-top-3 padding-left-2"
|
||||||
|
|
|
@ -49,6 +49,9 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th data-sortable="requested_domain__name" scope="col" role="columnheader">Domain name</th>
|
<th data-sortable="requested_domain__name" scope="col" role="columnheader">Domain name</th>
|
||||||
<th data-sortable="last_submitted_date" scope="col" role="columnheader">Submitted</th>
|
<th data-sortable="last_submitted_date" scope="col" role="columnheader">Submitted</th>
|
||||||
|
{% if portfolio %}
|
||||||
|
<th data-sortable="creator" scope="col" role="columnheader">Created by</th>
|
||||||
|
{% endif %}
|
||||||
<th data-sortable="status" scope="col" role="columnheader">Status</th>
|
<th data-sortable="status" scope="col" role="columnheader">Status</th>
|
||||||
<th scope="col" role="columnheader"><span class="usa-sr-only">Action</span></th>
|
<th scope="col" role="columnheader"><span class="usa-sr-only">Action</span></th>
|
||||||
<!-- AJAX will conditionally add a th for delete actions -->
|
<!-- AJAX will conditionally add a th for delete actions -->
|
||||||
|
|
|
@ -152,6 +152,13 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
except DomainRequest.DoesNotExist:
|
except DomainRequest.DoesNotExist:
|
||||||
logger.debug("DomainRequest id %s did not have a DomainRequest" % id)
|
logger.debug("DomainRequest id %s did not have a DomainRequest" % id)
|
||||||
|
|
||||||
|
# If a user is creating a request, we assume that perms are handled upstream
|
||||||
|
if self.request.user.is_org_user(self.request):
|
||||||
|
self._domain_request = DomainRequest.objects.create(
|
||||||
|
creator=self.request.user,
|
||||||
|
portfolio=self.request.session.get("portfolio"),
|
||||||
|
)
|
||||||
|
else:
|
||||||
self._domain_request = DomainRequest.objects.create(creator=self.request.user)
|
self._domain_request = DomainRequest.objects.create(creator=self.request.user)
|
||||||
|
|
||||||
self.storage["domain_request_id"] = self._domain_request.id
|
self.storage["domain_request_id"] = self._domain_request.id
|
||||||
|
@ -395,6 +402,10 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
def get_context_data(self):
|
def get_context_data(self):
|
||||||
"""Define context for access on all wizard pages."""
|
"""Define context for access on all wizard pages."""
|
||||||
|
|
||||||
|
requested_domain_name = None
|
||||||
|
if self.domain_request.requested_domain is not None:
|
||||||
|
requested_domain_name = self.domain_request.requested_domain.name
|
||||||
|
|
||||||
context_stuff = {}
|
context_stuff = {}
|
||||||
if DomainRequest._form_complete(self.domain_request, self.request):
|
if DomainRequest._form_complete(self.domain_request, self.request):
|
||||||
modal_button = '<button type="submit" ' 'class="usa-button" ' ">Submit request</button>"
|
modal_button = '<button type="submit" ' 'class="usa-button" ' ">Submit request</button>"
|
||||||
|
@ -411,6 +422,7 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
You’ll only be able to withdraw your request.",
|
You’ll only be able to withdraw your request.",
|
||||||
"review_form_is_complete": True,
|
"review_form_is_complete": True,
|
||||||
"user": self.request.user,
|
"user": self.request.user,
|
||||||
|
"requested_domain__name": requested_domain_name,
|
||||||
}
|
}
|
||||||
else: # form is not complete
|
else: # form is not complete
|
||||||
modal_button = '<button type="button" class="usa-button" data-close-modal>Return to request</button>'
|
modal_button = '<button type="button" class="usa-button" data-close-modal>Return to request</button>'
|
||||||
|
@ -426,6 +438,7 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
Return to the request and visit the steps that are marked as "incomplete."',
|
Return to the request and visit the steps that are marked as "incomplete."',
|
||||||
"review_form_is_complete": False,
|
"review_form_is_complete": False,
|
||||||
"user": self.request.user,
|
"user": self.request.user,
|
||||||
|
"requested_domain__name": requested_domain_name,
|
||||||
}
|
}
|
||||||
return context_stuff
|
return context_stuff
|
||||||
|
|
||||||
|
@ -505,6 +518,9 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
# if user opted to save progress and return,
|
# if user opted to save progress and return,
|
||||||
# return them to the home page
|
# return them to the home page
|
||||||
if button == "save_and_return":
|
if button == "save_and_return":
|
||||||
|
if request.user.is_org_user(request):
|
||||||
|
return HttpResponseRedirect(reverse("domain-requests"))
|
||||||
|
else:
|
||||||
return HttpResponseRedirect(reverse("home"))
|
return HttpResponseRedirect(reverse("home"))
|
||||||
# otherwise, proceed as normal
|
# otherwise, proceed as normal
|
||||||
return self.goto_next_step()
|
return self.goto_next_step()
|
||||||
|
@ -774,6 +790,9 @@ class DomainRequestWithdrawn(DomainRequestPermissionWithdrawView):
|
||||||
domain_request = DomainRequest.objects.get(id=self.kwargs["pk"])
|
domain_request = DomainRequest.objects.get(id=self.kwargs["pk"])
|
||||||
domain_request.withdraw()
|
domain_request.withdraw()
|
||||||
domain_request.save()
|
domain_request.save()
|
||||||
|
if self.request.user.is_org_user(self.request):
|
||||||
|
return HttpResponseRedirect(reverse("domain-requests"))
|
||||||
|
else:
|
||||||
return HttpResponseRedirect(reverse("home"))
|
return HttpResponseRedirect(reverse("home"))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,7 @@ def serialize_domain_request(domain_request, user):
|
||||||
"last_submitted_date": domain_request.last_submitted_date,
|
"last_submitted_date": domain_request.last_submitted_date,
|
||||||
"status": domain_request.get_status_display(),
|
"status": domain_request.get_status_display(),
|
||||||
"created_at": format(domain_request.created_at, "c"), # Serialize to ISO 8601
|
"created_at": format(domain_request.created_at, "c"), # Serialize to ISO 8601
|
||||||
|
"creator": domain_request.creator.email,
|
||||||
"id": domain_request.id,
|
"id": domain_request.id,
|
||||||
"is_deletable": is_deletable,
|
"is_deletable": is_deletable,
|
||||||
"action_url": action_url_map.get(action_label),
|
"action_url": action_url_map.get(action_label),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue