def save(self, *args, **kwargs): if not self.pk: if get_current_user() and get_current_user().is_authenticated(): self.created_by = get_current_user().get_profile() self.expires = datetime.datetime.now() + datetime.timedelta(days=7) parent = self._meta.parents.keys()[0] subclasses = parent._meta.get_all_related_objects() for klass in subclasses: if isinstance(klass, RelatedObject) and klass.field.primary_key and klass.opts == self._meta: self._class = klass.get_accessor_name() break return super(Application, self).save(*args, **kwargs)
def log_and_message(obj, flag, custom_message=None): user = get_current_user() opts = obj.__class__._meta if not custom_message: if flag == ADDITION: message = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)} elif flag == CHANGE: message = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)} elif flag == DELETION: message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)} else: message = custom_message LogEntry.objects.log_action( user.id, ContentType.objects.get_for_model(obj.__class__).id, obj._get_pk_val(), force_unicode(obj), flag, change_message=message, ) user.message_set.create(message=message)
def get_absolute_url(self): person = get_current_user().get_profile() if person == self: try: return reverse('kg_user_profile') except: pass return reverse('kg_user_detail', kwargs={'username': self.user.username})
def delete_account(self, ua): if not ua.date_deleted: ua.date_deleted = datetime.datetime.now() ua.save() for project in ua.project_list(): project.users.remove(ua.user) project.save() log(get_current_user(), ua.user, 3, 'Deleted account on %s' % ua.machine_category)
def deactivate(self): self.is_active = False try: self.deleted_by = get_current_user().get_profile() except: pass self.date_deleted = datetime.datetime.today() self.users.clear() self.save()
def clean_old(self): person = get_current_user().get_profile() from django.contrib.auth import authenticate user = authenticate(username=person.user.username, password=self.cleaned_data['old']) if user is None: raise forms.ValidationError(u'Your old password was incorrect') return self.cleaned_data['old']
def delete_account(self, ua): if not ua.date_deleted: ua.date_deleted = datetime.datetime.now() ua.save() from karaage.projects.utils import remove_user_from_project for project in ua.project_list(): remove_user_from_project(ua.user, project) log(get_current_user(), ua.user, 3, 'Deleted account on %s' % ua.machine_category)
def activate(self): if self.is_active == True: return self.is_active = True self.is_approved = True self.date_approved = datetime.datetime.today() try: self.approved_by = get_current_user().get_profile() except: pass self.save()
def create_new_user(self, data, hashed_password=None): """Creates a new user (not active) Keyword arguments: data -- a dictonary of user data hashed_password -- """ # Make sure username isn't taken in Datastore random_passwd = User.objects.make_random_password() user = User.objects.create_user(data['username'], data['email'], random_passwd) if hashed_password: user.password = hashed_password else: from karaage.datastores import create_password_hash user.password = create_password_hash(data['password1']) user.is_active = False user.save() #Create Person person = Person.objects.create( user=user, first_name=data['first_name'], last_name=data['last_name'], institute=data['institute'], position=data.get('position', ''), department=data.get('department', ''), title=data.get('title', ''), address=data.get('address', ''), country=data.get('country', ''), website=data.get('website', ''), fax=data.get('fax', ''), comment=data.get('comment', ''), telephone=data.get('telephone', ''), mobile=data.get('mobile', ''), supervisor=data.get('supervisor', ''), is_systemuser=data.get('is_systemuser', ''), saml_id=data.get('saml_id', None), ) try: current_user = get_current_user() if current_user.is_anonymous(): current_user = person.user except: current_user = person.user log(current_user, person, 1, 'Created') return person
def add_edit_project(request, project_id=None): if project_id is None: project = None flag = 1 else: project = get_object_or_404(Project, pk=project_id) flag = 2 if request.method == 'POST': form = ProjectForm(request.POST, instance=project) if form.is_valid(): project = form.save(commit=False) if project_id is not None: # if project is being edited, project_id cannot change, so we # should always use the value supplied on the URL. project.pid = project_id elif not project.pid: # if project was being created, did the user give a project_id # we should use? If not, then we have to generate one # ourselves. project.pid = get_new_pid(project.institute) project.save() project.activate() form.save_m2m() if flag == 1: messages.success(request, "Project '%s' created succesfully" % project) log(get_current_user(), project, 1, 'Created') else: messages.success(request, "Project '%s' edited succesfully" % project) log(get_current_user(), project, 2, 'Edited') return HttpResponseRedirect(project.get_absolute_url()) else: form = ProjectForm(instance=project) return render_to_response('projects/project_form.html', locals(), context_instance=RequestContext(request))
def send_bounced_warning(person): """Sends an email to each project leader for person informing them that person's email has bounced""" context = CONTEXT.copy() context['person'] = person for project in person.project_set.all(): if project.is_active: context['project'] = project for leader in project.leaders.all(): context['receiver'] = leader to_email = leader.email subject = render_to_string('requests/emails/bounced_email_subject.txt', context) body = render_to_string('requests/emails/bounced_email_body.txt', context) send_mail(subject.replace('\n', ''), body, settings.ACCOUNTS_EMAIL, [to_email]) active_user = get_current_user() log(active_user, leader, 2, 'Sent email about bounced emails from %s' % person)
def delete_user(self, person): """ Sets Person not active and deletes all UserAccounts""" person.user.is_active = False person.expires = None person.user.save() deletor = get_current_user() person.date_deleted = datetime.datetime.today() person.deleted_by = deletor.get_profile() person.save(update_datastore=False) from karaage.datastores import delete_account for ua in person.useraccount_set.filter(date_deleted__isnull=True): delete_account(ua) log(deletor, person, 3, 'Deleted')
def activate_user(self, person): """ Activates a user """ try: current_user = get_current_user() if current_user.is_anonymous(): current_user = person.user except: current_user = person.user person.date_approved = datetime.datetime.today() person.approved_by = current_user.get_profile() person.deleted_by = None person.date_deleted = None person.user.is_active = True person.user.save() log(current_user, person, 1, 'Activated') return person
def create_account(self, person, default_project): """Creates a UserAccount (if needed) and activates user. Keyword arguments: person_id -- Person id project_id -- Project id """ ua = UserAccount.objects.create( user=person, username=person.username, machine_category=self.machine_category, default_project=default_project, date_created=datetime.datetime.today()) if default_project is not None: from karaage.projects.utils import add_user_to_project add_user_to_project(person, default_project) log(get_current_user(), ua.user, 1, 'Created account on %s' % self.machine_category) return ua