prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Refine Contact Us page
  **What behavior did you observe? Please describe the bug**
  - The language is very direct. Need to make it more user friendly. 
  - Add content to get to History Hub
  - Begin with options to self-service in Help Center or History Hub
  
  **What is the expected behavior?**
  As a user, I want to contact a community manager with a pressing question via the Contact Us form so that I can get a swift reply. It should also include: 
  - Friendlier language for the different fields
  - Contact Us form would autopopulate my email and tell CM what page they are referring to
  - I should be able to categorize my question in the Contact Us form to best route the question.
  - Some information telling me about History Hub
  
  **Got screenshots? This helps us identify the issue**
  
  ![contact](https://user-images.githubusercontent.com/7362915/46110939-4114f780-c1b3-11e8-9504-3e9358f6cfcb.PNG)
  
  
  **Additional context**
  Add any other context about the problem here.
  
  
  </issue>
  <code>
  [start of concordia/forms.py]
  1 from logging import getLogger
  2 
  3 from captcha.fields import CaptchaField
  4 from django import forms
  5 from django.contrib.auth import get_user_model
  6 from django_registration.forms import RegistrationForm
  7 
  8 from .models import TranscriptionStatus
  9 
  10 User = get_user_model()
  11 logger = getLogger(__name__)
  12 
  13 
  14 class UserRegistrationForm(RegistrationForm):
  15     newsletterOptIn = forms.BooleanField(
  16         label="Newsletter",
  17         required=False,
  18         help_text="Email me about campaign updates, upcoming events, and new features.",
  19     )
  20 
  21 
  22 class UserProfileForm(forms.Form):
  23     email = forms.CharField(
  24         label="Email address", required=True, widget=forms.EmailInput()
  25     )
  26 
  27     def __init__(self, *, request, **kwargs):
  28         self.request = request
  29         return super().__init__(**kwargs)
  30 
  31     def clean_email(self):
  32         data = self.cleaned_data["email"]
  33         if (
  34             User.objects.exclude(pk=self.request.user.pk)
  35             .filter(email__iexact=data)
  36             .exists()
  37         ):
  38             raise forms.ValidationError("That email address is not available")
  39         return data
  40 
  41 
  42 class ContactUsForm(forms.Form):
  43     referrer = forms.CharField(label="Referring Page", widget=forms.HiddenInput())
  44 
  45     email = forms.EmailField(label="Your email", required=True)
  46     subject = forms.CharField(label="Subject", required=False)
  47 
  48     category = forms.CharField(
  49         label="Category",
  50         required=True,
  51         widget=forms.Select(
  52             choices=(
  53                 ("General", "General"),
  54                 ("Campaign", "Question about campaign"),
  55                 ("Problem", "Something is not working"),
  56             )
  57         ),
  58     )
  59 
  60     link = forms.URLField(
  61         label="Link to the page you need support with", required=False
  62     )
  63 
  64     story = forms.CharField(
  65         label="Why are you contacting us", required=True, widget=forms.Textarea
  66     )
  67 
  68 
  69 class CaptchaEmbedForm(forms.Form):
  70     captcha = CaptchaField()
  71 
  72 
  73 class AssetFilteringForm(forms.Form):
  74     transcription_status = forms.ChoiceField(
  75         choices=TranscriptionStatus.CHOICES,
  76         required=False,
  77         label="Image Status",
  78         widget=forms.Select(attrs={"class": "form-control"}),
  79     )
  80 
  81     def __init__(self, status_counts, *args, **kwargs):
  82         super().__init__(*args, **kwargs)
  83 
  84         asset_statuses = {
  85             status: "%s (%d)" % (TranscriptionStatus.CHOICE_MAP[status], count)
  86             for status, count in status_counts.items()
  87         }
  88 
  89         filtered_choices = [("", f"All Images ({sum(status_counts.values())})")]
  90         for val, label in self.fields["transcription_status"].choices:
  91             if val in asset_statuses:
  92                 filtered_choices.append((val, asset_statuses[val]))
  93 
  94         self.fields["transcription_status"].choices = filtered_choices
  95 
  96 
  97 class AdminItemImportForm(forms.Form):
  98     import_url = forms.URLField(
  99         required=True, label="URL of the item/collection/search page to import"
  100     )
  101 
  102 
  103 class AdminProjectBulkImportForm(forms.Form):
  104     spreadsheet_file = forms.FileField(
  105         required=True,
  106         label="Spreadsheet containing the campaigns, projects, and items to import",
  107     )
  108
  [end of concordia/forms.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/concordia/forms.py b/concordia/forms.py
  --- a/concordia/forms.py
  +++ b/concordia/forms.py
  @@ -42,27 +42,16 @@
   class ContactUsForm(forms.Form):
       referrer = forms.CharField(label="Referring Page", widget=forms.HiddenInput())
   
  -    email = forms.EmailField(label="Your email", required=True)
  -    subject = forms.CharField(label="Subject", required=False)
  +    email = forms.EmailField(label="Your email:", required=True)
  +    subject = forms.CharField(label="Subject:", required=False)
   
  -    category = forms.CharField(
  -        label="Category",
  -        required=True,
  -        widget=forms.Select(
  -            choices=(
  -                ("General", "General"),
  -                ("Campaign", "Question about campaign"),
  -                ("Problem", "Something is not working"),
  -            )
  -        ),
  -    )
   
       link = forms.URLField(
  -        label="Link to the page you need support with", required=False
  +        label="Have a specific page you need help with? Add the link below:", required=False
       )
   
       story = forms.CharField(
  -        label="Why are you contacting us", required=True, widget=forms.Textarea
  +        label="Let us know how we can help:", required=True, widget=forms.Textarea
       )
  
verification_info: {"golden_diff": "diff --git a/concordia/forms.py b/concordia/forms.py\n--- a/concordia/forms.py\n+++ b/concordia/forms.py\n@@ -42,27 +42,16 @@\n class ContactUsForm(forms.Form):\n     referrer = forms.CharField(label=\"Referring Page\", widget=forms.HiddenInput())\n \n-    email = forms.EmailField(label=\"Your email\", required=True)\n-    subject = forms.CharField(label=\"Subject\", required=False)\n+    email = forms.EmailField(label=\"Your email:\", required=True)\n+    subject = forms.CharField(label=\"Subject:\", required=False)\n \n-    category = forms.CharField(\n-        label=\"Category\",\n-        required=True,\n-        widget=forms.Select(\n-            choices=(\n-                (\"General\", \"General\"),\n-                (\"Campaign\", \"Question about campaign\"),\n-                (\"Problem\", \"Something is not working\"),\n-            )\n-        ),\n-    )\n \n     link = forms.URLField(\n-        label=\"Link to the page you need support with\", required=False\n+        label=\"Have a specific page you need help with? Add the link below:\", required=False\n     )\n \n     story = forms.CharField(\n-        label=\"Why are you contacting us\", required=True, widget=forms.Textarea\n+        label=\"Let us know how we can help:\", required=True, widget=forms.Textarea\n     )\n", "issue": "Refine Contact Us page\n**What behavior did you observe? Please describe the bug**\r\n- The language is very direct. Need to make it more user friendly. \r\n- Add content to get to History Hub\r\n- Begin with options to self-service in Help Center or History Hub\r\n\r\n**What is the expected behavior?**\r\nAs a user, I want to contact a community manager with a pressing question via the Contact Us form so that I can get a swift reply. It should also include: \r\n- Friendlier language for the different fields\r\n- Contact Us form would autopopulate my email and tell CM what page they are referring to\r\n- I should be able to categorize my question in the Contact Us form to best route the question.\r\n- Some information telling me about History Hub\r\n\r\n**Got screenshots? This helps us identify the issue**\r\n\r\n![contact](https://user-images.githubusercontent.com/7362915/46110939-4114f780-c1b3-11e8-9504-3e9358f6cfcb.PNG)\r\n\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n\n", "before_files": [{"content": "from logging import getLogger\n\nfrom captcha.fields import CaptchaField\nfrom django import forms\nfrom django.contrib.auth import get_user_model\nfrom django_registration.forms import RegistrationForm\n\nfrom .models import TranscriptionStatus\n\nUser = get_user_model()\nlogger = getLogger(__name__)\n\n\nclass UserRegistrationForm(RegistrationForm):\n    newsletterOptIn = forms.BooleanField(\n        label=\"Newsletter\",\n        required=False,\n        help_text=\"Email me about campaign updates, upcoming events, and new features.\",\n    )\n\n\nclass UserProfileForm(forms.Form):\n    email = forms.CharField(\n        label=\"Email address\", required=True, widget=forms.EmailInput()\n    )\n\n    def __init__(self, *, request, **kwargs):\n        self.request = request\n        return super().__init__(**kwargs)\n\n    def clean_email(self):\n        data = self.cleaned_data[\"email\"]\n        if (\n            User.objects.exclude(pk=self.request.user.pk)\n            .filter(email__iexact=data)\n            .exists()\n        ):\n            raise forms.ValidationError(\"That email address is not available\")\n        return data\n\n\nclass ContactUsForm(forms.Form):\n    referrer = forms.CharField(label=\"Referring Page\", widget=forms.HiddenInput())\n\n    email = forms.EmailField(label=\"Your email\", required=True)\n    subject = forms.CharField(label=\"Subject\", required=False)\n\n    category = forms.CharField(\n        label=\"Category\",\n        required=True,\n        widget=forms.Select(\n            choices=(\n                (\"General\", \"General\"),\n                (\"Campaign\", \"Question about campaign\"),\n                (\"Problem\", \"Something is not working\"),\n            )\n        ),\n    )\n\n    link = forms.URLField(\n        label=\"Link to the page you need support with\", required=False\n    )\n\n    story = forms.CharField(\n        label=\"Why are you contacting us\", required=True, widget=forms.Textarea\n    )\n\n\nclass CaptchaEmbedForm(forms.Form):\n    captcha = CaptchaField()\n\n\nclass AssetFilteringForm(forms.Form):\n    transcription_status = forms.ChoiceField(\n        choices=TranscriptionStatus.CHOICES,\n        required=False,\n        label=\"Image Status\",\n        widget=forms.Select(attrs={\"class\": \"form-control\"}),\n    )\n\n    def __init__(self, status_counts, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        asset_statuses = {\n            status: \"%s (%d)\" % (TranscriptionStatus.CHOICE_MAP[status], count)\n            for status, count in status_counts.items()\n        }\n\n        filtered_choices = [(\"\", f\"All Images ({sum(status_counts.values())})\")]\n        for val, label in self.fields[\"transcription_status\"].choices:\n            if val in asset_statuses:\n                filtered_choices.append((val, asset_statuses[val]))\n\n        self.fields[\"transcription_status\"].choices = filtered_choices\n\n\nclass AdminItemImportForm(forms.Form):\n    import_url = forms.URLField(\n        required=True, label=\"URL of the item/collection/search page to import\"\n    )\n\n\nclass AdminProjectBulkImportForm(forms.Form):\n    spreadsheet_file = forms.FileField(\n        required=True,\n        label=\"Spreadsheet containing the campaigns, projects, and items to import\",\n    )\n", "path": "concordia/forms.py"}]}