diff options
| -rw-r--r-- | bitbake/lib/toaster/toastergui/templates/newproject.html | 35 | ||||
| -rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 29 |
2 files changed, 46 insertions, 18 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/newproject.html b/bitbake/lib/toaster/toastergui/templates/newproject.html index e5a6551967..ce01800e08 100644 --- a/bitbake/lib/toaster/toastergui/templates/newproject.html +++ b/bitbake/lib/toaster/toastergui/templates/newproject.html | |||
| @@ -6,36 +6,39 @@ | |||
| 6 | <div class="span6"> | 6 | <div class="span6"> |
| 7 | <div class="page-header"> | 7 | <div class="page-header"> |
| 8 | <h1>Create a new project</h1> | 8 | <h1>Create a new project</h1> |
| 9 | </div> | 9 | </div> |
| 10 | <form> | 10 | <div class="container-fluid"> |
| 11 | {% for a in alerts %} | ||
| 12 | <div class="alert alert-error row-fluid" role="alert">{{a}}</div> | ||
| 13 | {% endfor %} | ||
| 14 | </div> | ||
| 15 | <form method="POST">{% csrf_token %} | ||
| 11 | <fieldset> | 16 | <fieldset> |
| 12 | <label>Project name <span class="muted">(required)</span></label> | 17 | <label>Project name <span class="muted">(required)</span></label> |
| 13 | <input type="text" class="input-xlarge" required name="projectname"> | 18 | <input type="text" class="input-xlarge" required name="projectname" value="{{projectname}}"> |
| 14 | <label class="project-form"> | 19 | <label class="project-form"> |
| 15 | Project owner | 20 | Project owner |
| 16 | <i class="icon-question-sign get-help" title="The go-to person for this project"></i> | 21 | <i class="icon-question-sign get-help" title="The go-to person for this project"></i> |
| 17 | </label> | 22 | </label> |
| 18 | <form method="POST"> | 23 | <input type="text" name="username" value="{{username}}"> |
| 19 | <input type="text"> | ||
| 20 | <label class="project-form">Owner's email</label> | 24 | <label class="project-form">Owner's email</label> |
| 21 | <input type="email" class="input-large" name="email"> | 25 | <input type="email" class="input-large" name="email" value="{{email}}"> |
| 22 | <label class="project-form"> | 26 | <label class="project-form"> |
| 23 | Yocto Project version | 27 | Yocto Project version |
| 24 | <i class="icon-question-sign get-help" title="This sets the branch for the Yocto Project core layers (meta, meta-yocto and meta-yocto-bsp), and for the layers you use from the OpenEmbedded Metadata Index"></i> | 28 | <i class="icon-question-sign get-help" title="This sets the branch for the Yocto Project core layers (meta, meta-yocto and meta-yocto-bsp), and for the layers you use from the OpenEmbedded Metadata Index"></i> |
| 25 | </label> | 29 | </label> |
| 26 | <select> | 30 | <select name="projectversion"> |
| 27 | <option>Yocto Project 1.7 "D?"</option> | 31 | <option value="1.7" {%if projectversion == "1.7" %}selected{%endif%}>Yocto Project 1.7 "D?"</option> |
| 28 | <option>Yocto Project 1.6 "Daisy"</option> | 32 | <option value="1.6" {%if projectversion == "1.6" %}selected{%endif%}>Yocto Project 1.6 "Daisy"</option> |
| 29 | <option>Yocto Project 1.5 "Dora"</option> | 33 | <option value="1.5" {%if projectversion == "1.5" %}selected{%endif%}>Yocto Project 1.5 "Dora"</option> |
| 30 | </select> | 34 | </select> |
| 31 | </form> | ||
| 32 | </fieldset> | 35 | </fieldset> |
| 33 | 36 | ||
| 34 | <div class="form-actions"> | 37 | <div class="form-actions"> |
| 35 | <a href="project-with-targets.html" class="btn btn-primary btn-large">Create project</a> | 38 | <input type="submit" class="btn btn-primary btn-large" value="Create project"/> |
| 36 | </div> | 39 | </div> |
| 37 | </form> | 40 | </form> |
| 38 | </div> | 41 | </div> |
| 39 | </div> | 42 | </div> |
| 40 | </div> | 43 | </div> |
| 41 | {% endblock %} | 44 | {% endblock %} |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 7dc0108393..89c02d41ab 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
| @@ -1768,17 +1768,42 @@ def managedcontextprocessor(request): | |||
| 1768 | # a default "page not available" simple functions for interactive mode | 1768 | # a default "page not available" simple functions for interactive mode |
| 1769 | if toastermain.settings.MANAGED: | 1769 | if toastermain.settings.MANAGED: |
| 1770 | 1770 | ||
| 1771 | from django.contrib.auth.models import User | ||
| 1772 | from django.contrib.auth import authenticate, login | ||
| 1773 | from django.contrib.auth.decorators import login_required | ||
| 1774 | |||
| 1775 | |||
| 1771 | # new project | 1776 | # new project |
| 1772 | def newproject(request): | 1777 | def newproject(request): |
| 1773 | template = "newproject.html" | 1778 | template = "newproject.html" |
| 1774 | context = {} | 1779 | context = { |
| 1780 | 'email': request.user.email if request.user.is_authenticated() else '', | ||
| 1781 | 'username': request.user.username if request.user.is_authenticated() else '', | ||
| 1782 | } | ||
| 1783 | |||
| 1784 | |||
| 1775 | if request.method == "GET": | 1785 | if request.method == "GET": |
| 1776 | # render new project page | 1786 | # render new project page |
| 1777 | return render(request, template, context) | 1787 | return render(request, template, context) |
| 1778 | elif request.method == "POST": | 1788 | elif request.method == "POST": |
| 1779 | if request.method: | 1789 | mandatory_fields = ['projectname', 'email', 'username', 'projectversion'] |
| 1790 | if reduce( lambda x, y: x and y, map(lambda x: x in request.POST and len(request.POST[x]) > 0, mandatory_fields)): | ||
| 1791 | if not request.user.is_authenticated(): | ||
| 1792 | user = authenticate(username = request.POST['username'], password = 'nopass') | ||
| 1793 | if user is None: | ||
| 1794 | user = User.objects.create_user(username = request.POST['username'], email = request.POST['email'], password = "nopass") | ||
| 1795 | raise Exception("User cannot be authed, creating") | ||
| 1796 | user = authenticate(username = request.POST['username'], password = '') | ||
| 1797 | login(request, user) | ||
| 1798 | |||
| 1780 | return redirect(project) | 1799 | return redirect(project) |
| 1781 | else: | 1800 | else: |
| 1801 | alerts = [] | ||
| 1802 | # set alerts for missing fields | ||
| 1803 | map(lambda x: alerts.append('Field '+ x + ' not filled in') if not x in request.POST or len(request.POST[x]) == 0 else None, mandatory_fields) | ||
| 1804 | # fill in new page with already submitted values | ||
| 1805 | map(lambda x: context.__setitem__(x, request.POST[x]), mandatory_fields) | ||
| 1806 | context['alerts'] = alerts | ||
| 1782 | return render(request, template, context) | 1807 | return render(request, template, context) |
| 1783 | raise Exception("Invalid HTTP method for this page") | 1808 | raise Exception("Invalid HTTP method for this page") |
| 1784 | 1809 | ||
