##parameters=**kw
from Products.CMFCore.utils import getToolByName
from Products.photoprint.utils import translate
from Products.CMFDefault.utils import translate as cmf_translate
from Products.CMFCore.exceptions import AccessControl_Unauthorized
from Products.Plinn.RegistrationTool import MODE_PASS_ANONYMOUS
rtool = getToolByName(context, 'portal_registration')
ptool = getToolByName(context, 'portal_properties')
_ = lambda msg : translate(msg, context)

kg = lambda name : kw.get(name, '').strip()

cmfprops = {'username'	: kg('member_id')
		   ,'email'		: kg('member_email')}

failMessage = rtool.testPropertiesValidity(cmfprops)
if failMessage is not None :
	return context.setStatus(False, cmf_translate(failMessage, context))

mandatoryFields = [
	  ('given_name', _('Please enter a given name.'))
	, ('name', _('Please enter a name.'))
	, ('member_email', _('Please enter an email.'))
	, ('member_id', _('Please enter a member id.'))
	, ('billing_address', _('Please enter a billing address.'))
	, ('billing_city', _('Please enter a city.'))
	, ('billing_zipcode', _('Please enter zip code.'))
	, ('country', _('Please enter a country.'))
	, ('phone', _('Please enter a phone.'))
	]

for name, failMessage in mandatoryFields :
	value = kg(name)
	if not value :
		return context.setStatus(False, failMessage)


try:
	rtool.addMember( id=kg('member_id'),
					 password=kg('password'),
					 properties={'username'			: kg('member_id')
								,'given_name'		: kg('given_name')
								,'name'				: kg('name')
								,'email'			: kg('member_email')
								,'billing_address'	: kg('billing_address')
								,'billing_city'     : kg('billing_city')
								,'billing_zipcode'	: kg('billing_zipcode')
								,'country'			: kg('country')
								,'phone'			: kg('phone')
                                ,'collection_id'    : kg('collection_id')
                                ,'collection_password': kg('collection_password')} )
except ValueError, errmsg:
	return context.setStatus(False, _(errmsg))
except AccessControl_Unauthorized :
    if rtool.getMode() == MODE_PASS_ANONYMOUS :
        return context.setStatus(False, _('Wrong private collection credentials.'))
    raise


if kg('send_password') or ptool.getProperty('validate_email') :
	rtool.registeredNotify(kg('member_id'))

return context.setStatus(True, 'Success!')
