Skip to content

Commit 93e7ce0

Browse files
authored
orgs: add fields to application, add more info to admin view (#17898)
1 parent 869b9b8 commit 93e7ce0

File tree

11 files changed

+413
-87
lines changed

11 files changed

+413
-87
lines changed

tests/functional/manage/test_views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def test_changing_password_succeeds(self, webtest, socket_enabled):
114114

115115
class TestManageOrganizations:
116116
@pytest.mark.usefixtures("_enable_organizations")
117-
def test_create_organization(
117+
def test_create_organization_application(
118118
self,
119119
pyramid_services,
120120
user_service,
@@ -143,6 +143,8 @@ def test_create_organization(
143143
"language, and to support and facilitate the growth of a "
144144
"diverse and international community of Python programmers"
145145
),
146+
"usage": ("We plan to host projects owned by the PSF"),
147+
"membership_size": "2-5",
146148
}
147149
)
148150
db_request.registry.settings[

warehouse/admin/templates/admin/organization_applications/detail.html

Lines changed: 76 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -342,50 +342,44 @@ <h4 class="modal-title" id="declineModalLabel">
342342

343343
{% set information_requests = organization_application.information_requests %}
344344
{% set outstanding_information_requests = organization_application.information_requests|selectattr("additional", "defined")|map(attribute="additional")|selectattr("response", "undefined")|list %}
345-
<div class="col-md-9">
345+
<div class="col-md-7 col-lg-6">
346346
<div class="card">
347347
<div class="card-header with-border">
348-
<h3 class="card-title">Organization Request{% if information_requests %}{% if outstanding_information_requests %} <i class="fa-solid fa-envelope text-info"></i>{% else %} <i class="fa-solid fa-envelope-open text-green"></i><i class="fa-solid fa-reply text-green"></i>{% endif %}{% endif %}</h3>
348+
<h3 class="card-title">Organization Request{% if information_requests %}{% if outstanding_information_requests %} <i class="fa-solid fa-envelope text-info"></i>{% else %} <i class="fa-solid fa-envelope-open text-green"></i><i class="fa-solid fa-reply text-green"></i>{% endif %}{% endif %}
349+
- {{ organization_application.status.name }}
350+
</h3>
349351
</div>
350352
<div class="card-body">
351353
<div class="form-horizontal">
352354
<div class="form-group">
353-
<label class="col-sm-5 control-label">
354-
Approval Status
355+
<label class="col-12 control-label">
356+
Applicant
355357
</label>
356-
<div class="col-sm-7">
357-
{{ organization_application.status.value }}
358-
</div>
359-
</div>
360-
<div class="form-group">
361-
<label class="col-sm-5 control-label">
362-
Requesting User
363-
</label>
364-
<div class="col-sm-7">
358+
<div class="col-12">
365359
{% if user %}
366360
<a href="{{ request.route_url('admin.user.detail', username=user.username) }}" title="{{ user.username }}">{{ user.username }}</a><br>
367361
{% for email in user.emails %}
368-
<a href="mailto:{{ email.email }}">{{ email.email }}</a> {% if email.primary %}(primary){% endif %} {% if email.verified %}<i class="fa fa-check text-green"></i>{% else %}<i class="fa fa-times text-red"></i>{% endif %}
362+
<i class="fa-solid fa-envelope"></i> <a href="mailto:{{ email.email }}">{{ email.email }}</a> {% if email.primary %}(primary){% endif %} {% if email.verified %}<i class="fa fa-check text-green"></i>{% else %}<i class="fa fa-times text-red"></i>{% endif %}<br>
369363
{% endfor %}
370364
{% else %}
371365
<i>n/a</i>
372366
{% endif %}
373367
</div>
374368
</div>
375369
<div class="form-group">
376-
<label class="col-sm-5 control-label">
370+
<label class="col-12 control-label">
377371
Organization Account Name
378372
</label>
379-
<div class="col-sm-7">
373+
<div class="col-12">
380374
<input class="form-control" value="{{ organization_application.name }}" readonly>
381375
</div>
382376
</div>
383377
{% if conflicting_applications %}
384378
<div class="form-group">
385-
<label class="col-sm-5 control-label">
379+
<label class="col-12 control-label">
386380
Conflicting Applications <i class="fa fa-scale-unbalanced text-red"></i>
387381
</label>
388-
<div class="col-sm-7">
382+
<div class="col-12">
389383
<table class="table">
390384
<tr><th>Application</th><th>Submitted</th><th>Requestor</th></tr>
391385
{% for application in conflicting_applications %}
@@ -400,40 +394,96 @@ <h3 class="card-title">Organization Request{% if information_requests %}{% if ou
400394
</div>
401395
{% endif %}
402396
<div class="form-group">
403-
<label class="col-sm-5 control-label">
397+
<label class="col-12 control-label">
404398
Organization Name
405399
</label>
406-
<div class="col-sm-7">
400+
<div class="col-12">
407401
<input class="form-control" value="{{ organization_application.display_name }}" readonly>
408402
</div>
409403
</div>
410404
<div class="form-group">
411-
<label class="col-sm-5 control-label">
405+
<label class="col-12 control-label">
412406
Organization URL <i class="fa-solid fa-arrow-up-right-from-square"></i>
413407
</label>
414-
<div class="col-sm-7">
408+
<div class="col-12">
415409
<a href="{{ organization_application.link_url }}" rel="nofollow noopener noreferrer" target="_blank" data-check-link-url="{{ request.camo_url(organization_application.link_url) }}"><input class="form-control" value="{{ organization_application.link_url }}" readonly></a>
416410
</div>
417411
</div>
418412
<div class="form-group">
419-
<label class="col-sm-5 control-label">
413+
<label class="col-12 control-label">
420414
Organization Description
421415
</label>
422-
<div class="col-sm-7">
416+
<div class="col-12">
423417
<textarea class="form-control" rows="4" readonly>{{ organization_application.description }}</textarea>
424418
</div>
425419
</div>
426420
<div class="form-group">
427-
<label class="col-sm-5 control-label">
421+
<label class="col-12 control-label">
422+
Organization Membership Size
423+
</label>
424+
<div class="col-12">
425+
<input class="form-control" value="{{ organization_application.membership_size.value }}" readonly>
426+
</div>
427+
</div>
428+
<div class="form-group">
429+
<label class="col-12 control-label">
430+
Anticipated Usage
431+
</label>
432+
<div class="col-12">
433+
<input class="form-control" value="{{ organization_application.usage }}" readonly>
434+
</div>
435+
</div>
436+
<div class="form-group">
437+
<label class="col-12 control-label">
428438
Organization Type
429439
</label>
430-
<div class="col-sm-7">
440+
<div class="col-12">
431441
<input class="form-control" value="{{ organization_application.orgtype.value }}" readonly>
432442
</div>
433443
</div>
434444
</div>
435445
</div>
436446
</div>
447+
</div>
448+
<div class="col-md-2 col-lg-3">
449+
<div class="card">
450+
<div class="card-header with-border">
451+
<h4 class="card-title">User Organizations</h4>
452+
</div>
453+
<div class="card-body">
454+
{% for organization_role in user.organization_roles|sort() %}
455+
<div><a href="{{ request.route_path('admin.organization.detail', organization_id=organization_role.organization.id) }}">{{ organization_role.organization.name }}</a> - {{ organization_role.role_name.value }}</div>
456+
{% else %}
457+
<i>none!</i>
458+
{% endfor %}
459+
</div>
460+
</div>
461+
<div class="card">
462+
<div class="card-header with-border">
463+
<h4 class="card-title">User Organization Applications</h4>
464+
</div>
465+
<div class="card-body">
466+
{% for org_app in user.organization_applications|sort(attribute='status', reverse=True)|rejectattr('status', 'equalto', 'approved') %}
467+
<div><a href="{{ request.route_path('admin.organization_application.detail', organization_application_id=org_app.id) }}">{{ org_app.name }}</a> - {{ org_app.status }}</div>
468+
{% else %}
469+
<i>none!</i>
470+
{% endfor %}
471+
</div>
472+
</div>
473+
<div class="card">
474+
<div class="card-header with-border">
475+
<h4 class="card-title">User Projects</h4>
476+
</div>
477+
<div class="card-body">
478+
{% for project in user.projects|sort(attribute='name') %}
479+
<div><a href="{{ request.route_path('admin.project.detail', project_name=project.normalized_name) }}">{{ project.name }}</a></div>
480+
{% else %}
481+
<i>none!</i>
482+
{% endfor %}
483+
</div>
484+
</div>
485+
</div>
486+
<div class="col-md-9 col-lg-6 offset-md-3">
437487
<div class="card">
438488
<div class="card-header with-border">
439489
<h3 class="card-title">Information Requests</h3>

0 commit comments

Comments
 (0)