def form_valid( self, form ):
		if( not PermissionHandler.create_update( self.request.user, **self.kwargs ) ):
			raise PermissionDenied( 'You do NOT have permission to make an update :P' ) # <--- change this to a more tactful message :)

		form.instance.user = self.request.user
		form.instance.parent = Project.objects.filter( pk = self.kwargs['project'] )[0]
		super( CreateUpdate, self ).form_valid( form )
		return HttpResponseRedirect(reverse('project:project_detail',args=[self.kwargs['project']]))
def add_task( request, **kwargs ):

	project = get_object_or_404( Project, pk = kwargs['project'] )

	# controller auth checking.
	if( (not PermissionHandler.create_update( request.user, **kwargs )) ): # check for permission using the permissions module.
		dajax = Dajax()	# controller feedback
		dajax.alert('You do NOT have this permission')
		return dajax.json()


	



	# error handling for form data
	# controller input data checking
	try:
		for x in ['content','title','deadline']:
			if x not in kwargs.keys() or kwargs[x] == '':
				if x+'_feedback_field' in kwargs.keys():
					raise ValueError(x+' missing..',kwargs[x+'_feedback_field']) # controller feedback
				else:
					raise ValueError(x+' missing..')
	except ValueError as e:
		if (len(e.args) == 2):	# intercept special value errors
			dajax = Dajax()
			# clear feedback fields. controller feedback initialization
			for x in ['content','title','deadline']:
				dajax.script('document.getElementById("'+kwargs[x+'_feedback_field']+'").innerHTML = ""')
			# write scripts to be executed on the client side to inform the client of the value error in a proper manner.
			dajax.script('document.getElementById("'+e.args[1]+'").innerHTML = "'+e.args[0]+'"')
			return dajax.json()

	# controller operation
	task = Task()
	task.content = kwargs['content']
	task.title = kwargs['title']
	task.deadline = kwargs['deadline']
	task.parent = project

	if 'assignees' in kwargs.keys():
		for i in kwargs['assignees']:
			user = get_object_or_404( User, pk=i )
			task.assigned.add(user)


	task.user = request.user
	task.save()

	# controller response on success.
	dajax = Dajax()
	dajax.script('location.reload(true)')
	return dajax.json()
def project_detail_view( request, *args, **kwargs ):
	# putting together the required context.
	if request.method == 'GET':
	# very basic implementation.
		ctx = { }
		ctx['project'] = get_object_or_404( Project, pk = kwargs['project'] )
		ctx['task_list'] = Task.objects.filter( parent = ctx['project'] )
		ctx['update_list'] = Update.objects.filter( parent = ctx['project'] )
		ctx['documents'] = Document.objects.filter( project = ctx['project'] )
		if Update.objects.filter( parent = ctx['project'] ).count():
			ctx['no_updates'] = 0
		else:
			ctx['no_updates'] = 1

		if Task.objects.filter( parent = ctx['project'] ).count():
			ctx['no_tasks'] = 0
		else:
			ctx['no_tasks'] = 1

		if not PermissionHandler.edit_project( request.user, project = kwargs['project'] ):
			ctx['allow_project_edit'] = 0
		else:
			ctx['allow_project_edit'] = 1

		if not PermissionHandler.create_update( request.user, project = kwargs['project'] ):
			ctx['allow_update'] = 0
		else:
			ctx['allow_update'] = 1

		if not PermissionHandler.create_task( request.user, project = kwargs['project'] ):
			ctx['allow_task'] = 0
		else:
			ctx['allow_task'] = 1

		if not PermissionHandler.add_user_to_project( request.user, project = kwargs['project'] ):
			ctx['allow_add_user'] = 0
		else:
			ctx['allow_add_user'] = 1

		if not PermissionHandler.add_mentor_to_project( request.user, project = kwargs['project'] ):
			ctx['allow_add_mentor'] = 0
		else:
			ctx['allow_add_mentor'] = 1


		return render_to_response( 'project/project_details.html', ctx, context_instance = RequestContext(request) )

	elif request.method == 'POST':
		return HttpResponse('Method inapplicable')
def add_update( request, **kwargs ):


	import pdb;pdb.set_trace()
	project = get_object_or_404( Project, pk = kwargs['project'] )

	if( (not PermissionHandler.create_update( request.user, **kwargs )) ): # check for permission using the permissions module.
		dajax = Dajax()
		dajax.alert('You do NOT have this permission')
		return dajax.json() 

	# error handling for form data
	# controller input data checking

	try:
		if 'content' not  in kwargs.keys() or kwargs['content'] == '':
			raise ValueError('Content missing..',kwargs['content_feedback_field']) # controller feedback

		if 'title' not in kwargs.keys() or kwargs['title'] == '':
			raise ValueError('Title missing..',kwargs['title_feedback_field']) # controller feedback
	except ValueError as e:
		if (len(e.args) == 2):	# intercept special value errors
			dajax = Dajax()
			# prepare the feedback handles.
			for x in ['content','title']:
				dajax.script('document.getElementById("'+kwargs[x+'_feedback_field']+'").innerHTML = ""')

			# write scripts to be executed on the client side to inform the client of the value error in a proper manner.
			dajax.script('document.getElementById("'+e.args[1]+'").innerHTML = "'+e.args[0]+'"')
			return dajax.json()

	# controller operation
	update = Update()
	update.parent = project
	update.content = kwargs['content']
	update.title = kwargs['title']
	update.user = request.user
	update.save()


	dajax = Dajax()
	dajax.script('location.reload(true)')
	return dajax.json()