From 97040264f92881ac3afd31b87bb62d53237eb8ea Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Sat, 19 Jul 2014 15:04:53 +0200 Subject: [PATCH] Add functionality to import upstream users --- pgcommitfest/commitfest/ajax.py | 30 +++++++++ .../static/commitfest/js/commitfest.js | 61 +++++++++++++++++++ .../commitfest/templates/base_form.html | 44 ++++++++++++- 3 files changed, 133 insertions(+), 2 deletions(-) diff --git a/pgcommitfest/commitfest/ajax.py b/pgcommitfest/commitfest/ajax.py index 06f6691..d1d8bcb 100644 --- a/pgcommitfest/commitfest/ajax.py +++ b/pgcommitfest/commitfest/ajax.py @@ -3,6 +3,7 @@ from django.http import HttpResponse, Http404 from django.conf import settings from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.decorators import login_required +from django.contrib.auth.models import User from django.db import transaction import httplib @@ -10,6 +11,8 @@ import socket import urllib import simplejson +from auth import user_search + class HttpResponseServiceUnavailable(HttpResponse): status_code = 503 @@ -148,11 +151,38 @@ def detachThread(request): return 'OK' +def searchUsers(request): + if request.GET.has_key('s') and request.GET['s']: + return user_search(request.GET['s']) + else: + return [] + +def importUser(request): + if request.GET.has_key('u') and request.GET['u']: + u = user_search(userid=request.GET['u']) + if len (u) != 1: + return "Internal error, duplicate user found" + + u = u[0] + + if User.objects.filter(username=u['u']).exists(): + return "User already exists" + User(username=u['u'], + first_name=u['f'], + last_name=u['l'], + email=u['e'], + password='setbypluginnotsha1', + ).save() + return 'OK' + else: + raise Http404() _ajax_map={ 'getThreads': getThreads, 'attachThread': attachThread, 'detachThread': detachThread, + 'searchUsers': searchUsers, + 'importUser': importUser, } # Main entrypoint for /ajax// diff --git a/pgcommitfest/commitfest/static/commitfest/js/commitfest.js b/pgcommitfest/commitfest/static/commitfest/js/commitfest.js index 972dd67..1ac3bc2 100644 --- a/pgcommitfest/commitfest/static/commitfest/js/commitfest.js +++ b/pgcommitfest/commitfest/static/commitfest/js/commitfest.js @@ -143,3 +143,64 @@ function togglePatchFilterButton(buttonId, collapseId) { toggleButtonCollapse(buttonId, collapseId); } + + +/* + * Upstream user search dialog + */ +function search_and_store_user() { + $('#doSelectUserButton').unbind('click'); + $('#doSelectUserButton').click(function() { + if (!$('#searchUserList').val()) { return false; } + + /* Create this user locally */ + $.get('/ajax/importUser/', { + 'u': $('#searchUserList').val(), + }).success(function(data) { + if (data == 'OK') { + alert('User imported!'); + $('#searchUserModal').modal('hide'); + } else { + alert('Failed to import user: ' + data); + } + }).fail(function(data, statustxt) { + alert('Failed to import user: ' + statustxt); + }); + + return false; + }); + + $('#searchUserModal').modal(); +} + +function findUsers() { + if (!$('#searchUserSearchField').val()) { + alert('No search term specified'); + return false; + } + $('#searchUserListWrap').addClass('loading'); + $('#searchUserSearchButton').addClass('disabled'); + $.get('/ajax/searchUsers/', { + 's': $('#searchUserSearchField').val(), + }).success(function(data) { + sel = $('#searchUserList'); + sel.find('option').remove(); + $.each(data, function(i,u) { + sel.append(''); + }); + }).always(function() { + $('#searchUserListWrap').removeClass('loading'); + $('#searchUserSearchButton').removeClass('disabled'); + searchUserListChanged(); + }); + return false; +} + +function searchUserListChanged() { + if ($('#searchUserList').val()) { + $('#doSelectUserButton').removeClass('disabled'); + } + else { + $('#doSelectUserButton').addClass('disabled'); + } +} diff --git a/pgcommitfest/commitfest/templates/base_form.html b/pgcommitfest/commitfest/templates/base_form.html index ac42f43..c6cf605 100644 --- a/pgcommitfest/commitfest/templates/base_form.html +++ b/pgcommitfest/commitfest/templates/base_form.html @@ -79,9 +79,35 @@ div.form-group div.controls input.threadpick-input { {%if threadbrowse %} {%include "thread_attach.inc" %} {%endif%} + + {%endblock%} -{%if threadbrowse %} {%block morescript%} {%endblock%} -{%endif%} -- 2.39.5