Skip to content

Commit c2dd6d7

Browse files
committed
add link for sending mail on project page
1 parent bb6e9b7 commit c2dd6d7

File tree

7 files changed

+58
-26
lines changed

7 files changed

+58
-26
lines changed

readthedocs/projects/forms.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,13 @@ def clean_name(self):
117117
project_exist = Project.objects.filter(slug=potential_slug).exists()
118118
if project_exist:
119119
project = Project.objects.get(slug=potential_slug)
120-
for user in project.users.all():
121-
if user.is_superuser:
122-
email = user.email
120+
project_url = project.get_absolute_url()
123121
if project.is_abandoned:
124-
self.fields['abandon'] = forms.CharField(
125-
widget=forms.HiddenInput())
126-
self.fields['mail_id'] = forms.EmailField(
127-
initial=email, widget=forms.HiddenInput())
128-
self.fields['proj_name'] = forms.CharField(
129-
initial=name, widget=forms.HiddenInput())
130-
raise forms.ValidationError(
131-
_('Invalid project name, a project already exists with that name')) # yapf: disable # noqa
122+
err_msg = ('Invalid project name, a <a href="{}" style="color: red">'
123+
'project</a> already exists with that name').format(project_url)
124+
else:
125+
err_msg = 'Invalid project name, a project already exists with that name'
126+
raise forms.ValidationError(mark_safe(err_msg)) # yapf: disable # noqa
132127
return name
133128

134129
def clean_repo(self):
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.9.12 on 2018-03-04 09:24
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('projects', '0023_migrate-alias-slug'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='project',
17+
name='abandoned_mail_sent',
18+
field=models.BooleanField(default=False),
19+
),
20+
21+
]

readthedocs/projects/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class Project(models.Model):
8383
related_name='projects')
8484
name = models.CharField(_('Name'), max_length=255)
8585
slug = models.SlugField(_('Slug'), max_length=255, unique=True)
86+
abandoned_mail_sent = models.BooleanField(default=False)
8687
description = models.TextField(_('Description'), blank=True,
8788
help_text=_('The reStructuredText '
8889
'description of the project'))
@@ -575,6 +576,11 @@ def is_abandoned(self):
575576
return False
576577
return True
577578

579+
@property
580+
def is_abandoned_mail_sent(self):
581+
"""Is abandoned mail sent."""
582+
return self.abandoned_mail_sent
583+
578584
@property
579585
def is_type_sphinx(self):
580586
"""Is project type Sphinx."""

readthedocs/projects/urls/private.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
private.project_manage,
3737
name='projects_manage'),
3838

39+
url(r'^(?P<project_slug>[-\w]+)/send_mail/$',
40+
private.send_mail,
41+
name='send_mail'),
42+
3943
url(r'^(?P<project_slug>[-\w]+)/comments_moderation/$',
4044
private.project_comments_moderation,
4145
name='projects_comments_moderation'),
@@ -103,10 +107,6 @@
103107
url(r'^(?P<project_slug>[-\w]+)/advertising/$',
104108
ProjectAdvertisingUpdate.as_view(),
105109
name='projects_advertising'),
106-
107-
url(r'^import/manual/send_mail/$',
108-
private.send_mail,
109-
name='send_mail'),
110110
]
111111

112112
domain_urls = [

readthedocs/projects/views/private.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from readthedocs.builds.models import Version, VersionAlias
2828
from readthedocs.core.mixins import ListViewWithForm, LoginRequiredMixin
2929
from readthedocs.core.utils import broadcast, trigger_build, send_email
30+
from readthedocs.core.permissions import AdminPermission
3031
from readthedocs.integrations.models import HttpExchange, Integration
3132
from readthedocs.oauth.services import registry
3233
from readthedocs.oauth.utils import attach_webhook, update_webhook
@@ -264,10 +265,14 @@ def is_advanced(self):
264265
return data.get('advanced', True)
265266

266267

267-
def send_mail(request):
268+
@login_required
269+
def send_mail(request, project_slug):
268270
"""Sends abandoned project email."""
269-
email = request.POST.get('mail_id')
270-
proj_name = request.POST.get('proj_name')
271+
project = Project.objects.get(slug=project_slug)
272+
proj_name = project_slug
273+
for user in project.users.all():
274+
if AdminPermission.is_admin(user, project):
275+
email = user.email
271276
context = {'proj_name': proj_name}
272277
subject = 'Rename request for abandoned project'
273278
send_email(
@@ -276,7 +281,8 @@ def send_mail(request):
276281
template='projects/email/abandon_project.txt',
277282
template_html='projects/email/abandon_project.html',
278283
context=context)
279-
messages.success(request, _('Mail sent!'))
284+
project.abandoned_mail_sent = True
285+
project.save()
280286
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
281287

282288

readthedocs/templates/core/project_bar_base.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@ <h1>
2424
</h1>
2525
</div>
2626

27+
<div class="abandon=project">
28+
{% if not project.is_abandoned_mail_sent %}
29+
<form action="{% url "send_mail" project.slug %}" method="post">
30+
{% csrf_token %}
31+
<input type="submit" name="submit-btn" value="{% trans "Email project owner with our abandoned project email" %}"/>
32+
</form>
33+
{% else %}
34+
<p><strong>{%trans "Abandonment mail is sent to the owner of the project." %}</strong></p>
35+
{% endif %}
36+
</div>
37+
2738
<div class="options">
2839

2940
{% if not project.has_valid_webhook and request.user|is_admin:project %}

readthedocs/templates/projects/import_base.html

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,6 @@
55

66
{% block content %}
77
<div class="module wizard wizard-project">
8-
{% if wizard.form.fields.abandon %}
9-
<form action="{% url "send_mail" %}" method="post">
10-
{% csrf_token %}
11-
<input type="hidden" name="mail_id" value="{{ wizard.form.fields.mail_id.initial }}">
12-
<input type="hidden" name="proj_name" value="{{ wizard.form.fields.proj_name.initial }}">
13-
<input type="submit" name="submit-btn" value="{% trans "Email project owner with our abandoned project email" %}">
14-
{% endif %}
158
<form action="{% url "projects_import_manual" %}" method="post">
169

1710
{% csrf_token %}

0 commit comments

Comments
 (0)