1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-14 14:21:23 +00:00

Merge branch 'add-user-from-csv-file' of git://github.com/imwhatiam/seahub into imwhatiam-add-user-from-csv-file

This commit is contained in:
zhengxie
2014-05-16 16:33:22 +08:00
3 changed files with 79 additions and 2 deletions

View File

@@ -18,6 +18,7 @@
<li class="tabnav-tab"><a href="{% url 'sys_useradmin_admins' %}">{% trans "Admins" %}</a></li> <li class="tabnav-tab"><a href="{% url 'sys_useradmin_admins' %}">{% trans "Admins" %}</a></li>
</ul> </ul>
<button id="add-user-btn" class="fright"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add user" %}</span></button> <button id="add-user-btn" class="fright"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add user" %}</span></button>
<button id="upload-file-btn" class="fright"><span class="icon-upload-alt"></span>{% trans "Upload csv file"%}</button>
</div> </div>
<form id="add-user-form" action="" method="post" class="hide">{% csrf_token %} <form id="add-user-form" action="" method="post" class="hide">{% csrf_token %}
@@ -32,6 +33,15 @@
<input type="submit" value="{% trans "Submit" %}" class="submit" /> <input type="submit" value="{% trans "Submit" %}" class="submit" />
</form> </form>
<form id="upload-file-form" class="hide" enctype= "multipart/form-data" method = "post" action = "{{ SITE_ROOT }}useradmin/batchadduser/">{% csrf_token %}
<h3>{% trans "Add user from local file" %}</h3><br />
<input type = "file" name = "file" /><br />
<p class="tip">{% trans "1. please upload a 'csv' format file;"%}</p>
<p class="tip">{% trans "2. row 1, column 1 for username title;"%}</p>
<p class="tip">{% trans "3. row 1, column 2 for password title;"%}</p>
<input type = "submit" value = "submit"/>
</form>
{% include "sysadmin/useradmin_table.html"%} {% include "sysadmin/useradmin_table.html"%}
{% include "snippets/admin_paginator.html" %} {% include "snippets/admin_paginator.html" %}
@@ -111,6 +121,9 @@ $('#add-user-form').submit(function() {
}); });
return false; return false;
}); });
$('#upload-file-btn').click(function () {
$('#upload-file-form').modal();
});
{% include "sysadmin/useradmin_js.html" %} {% include "sysadmin/useradmin_js.html" %}
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -195,7 +195,7 @@ urlpatterns = patterns('',
url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'), url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'),
url(r'^useradmin/batchmakeadmin/$', batch_user_make_admin, name='batch_user_make_admin'), url(r'^useradmin/batchmakeadmin/$', batch_user_make_admin, name='batch_user_make_admin'),
url(r'^useradmin/batchadduser/$', batch_add_user, name='batch_add_user'),
) )
if settings.SERVE_STATIC: if settings.SERVE_STATIC:

View File

@@ -6,6 +6,7 @@ import logging
import simplejson as json import simplejson as json
import re import re
import datetime import datetime
import csv, chardet, StringIO
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib import messages from django.contrib import messages
@@ -22,7 +23,7 @@ from seahub.base.accounts import User
from seahub.base.models import UserLastLogin from seahub.base.models import UserLastLogin
from seahub.base.decorators import sys_staff_required from seahub.base.decorators import sys_staff_required
from seahub.auth.decorators import login_required from seahub.auth.decorators import login_required
from seahub.utils import IS_EMAIL_CONFIGURED, string2list from seahub.utils import IS_EMAIL_CONFIGURED, string2list, is_valid_email
from seahub.views import get_system_default_repo_id from seahub.views import get_system_default_repo_id
from seahub.forms import SetUserQuotaForm, AddUserForm from seahub.forms import SetUserQuotaForm, AddUserForm
from seahub.profile.models import Profile, DetailedProfile from seahub.profile.models import Profile, DetailedProfile
@@ -849,3 +850,66 @@ def batch_user_make_admin(request):
result['success'] = True result['success'] = True
return HttpResponse(json.dumps(result), content_type=content_type) return HttpResponse(json.dumps(result), content_type=content_type)
@login_required
@sys_staff_required
def batch_add_user(request):
if request.method != 'POST':
raise Http404
next = request.META.get('HTTP_REFERER', None)
if not next:
next = reverse(sys_user_admin)
if request.FILES.has_key('file'):
f = request.FILES['file']
if f.name[-3:] != "csv":
messages.error(request, _(u'Failed! Please upload a csv format file.'))
return HttpResponseRedirect(next)
content = f.read()
encoding = chardet.detect(content)['encoding']
if encoding != 'utf-8':
content = content.decode(encoding, 'replace').encode('utf-8')
filestream = StringIO.StringIO(content)
lines_of_csv = filestream.read().splitlines()
dialect = csv.Sniffer().sniff(content)
reader = csv.DictReader(lines_of_csv, dialect=dialect)
username_title = lines_of_csv[0].split(',')[0]
password_title = lines_of_csv[0].split(',')[1]
if username_title == password_title or username_title == "" or password_title == "":
messages.error(request, _(u'Failed! wrong csv format.'))
return HttpResponseRedirect(next)
failed = {}
for row in reader:
email = row[username_title]
password = row[password_title]
if is_valid_email(email):
try:
User.objects.get(email=email)
failed[email] = 'Already exist'
continue
except User.DoesNotExist:
if password != '':
User.objects.create_user(email, password, is_staff=False,
is_active=True)
else:
failed[email] = 'Has no password'
else:
failed[email] = 'Unvalid email address'
failed = sorted(failed.items(),key=lambda e:e[1],reverse=True)
for item in failed:
messages.error(request, _(u"%s: add '%s' failed.") % (item[1], item[0]))
else:
messages.error(request, _(u'Please select a csv file first.'))
return HttpResponseRedirect(next)