from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class ExternalUserCreationForm(UserCreationForm):
	"""
	In your templates directory create a version of admin/auth/user/add_user.html
	that includes the is_ldap_authenticated field. E.g.

	<div class="form-row">
  		<label for="id_is_ldap_authenticated" class="required">
			LDAP authenticated:</label> {{ form.is_ldap_authenticated }}
	</div>
	"""
    is_ldap_authenticated = forms.BooleanField(initial=True, required=False)
    
    def _is_ldap_user(self):
        result = False
        if self.cleaned_data.has_key('is_ldap_authenticated'):
            result = self.cleaned_data['is_ldap_authenticated']
        return result
            
    def clean(self):
        cleaned_data = super(ExternalUserCreationForm, self).clean()
        # Ignore password errors if we aren't using the password field
        if self._is_ldap_user():
            if self.errors.has_key('password1'):
                del self.errors['password1']
            if self.errors.has_key('password2'):
                del self.errors['password2']
        return cleaned_data
        
    def save(self, commit=True):
        if self._is_ldap_user():
            user = super(UserCreationForm, self).save(commit=False)
            user.set_unusable_password()
            if commit:
                user.save()
        else:
            user = super(ExternalUserCreationForm, self).save(commit=commit)
        return user


class ExtendedUserAdmin(UserAdmin):
    add_form = ExternalUserCreationForm


admin.site.unregister(User) 
admin.site.register(User, ExtendedUserAdmin)