Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision c74f4c31

Von Jan Büren vor 2 Tagen hinzugefügt

  • ID c74f4c31b42a4023a1ba22f7a9eea3b4c62e21ef
  • Vorgänger 7800cf05
  • Nachfolger e5af8407

delete_user in Auth.pm überarbeitet

Unterschiede anzeigen:

SL/Auth.pm
550 550
  my $self  = shift;
551 551
  my $login = shift;
552 552

  
553
  my $dbh   = $self->dbconnect;
554
  my $id    = $self->get_user_id($login);
553
  die "Need login" unless $login;
555 554

  
556
  if (!$id) {
557
    $dbh->rollback;
558
    return;
559
  }
555
  my $user = SL::DB::Manager::AuthUser->find_by(login => $login) // undef;
556
  die ("Cannot find valid user for login:" . $login) unless ref $user eq 'SL::DB::AuthUser';
560 557

  
561
  $dbh->begin_work;
558
  my @clients = @{ $user->clients || [] };
559

  
560
  # get user metadata (email, name, etc)
561
  my $user_config_values_ref = $user->config_values();
562 562

  
563
  do_query($::form, $dbh, qq|DELETE FROM auth.user_group WHERE user_id = ?|, $id);
564
  do_query($::form, $dbh, qq|DELETE FROM auth.user_config WHERE user_id = ?|, $id);
565
  do_query($::form, $dbh, qq|DELETE FROM auth.user WHERE id = ?|, $id);
566 563

  
567
  # TODO: SL::Auth::delete_user
568
  # do_query($::form, $u_dbh, qq|UPDATE employee SET deleted = 't' WHERE login = ?|, $login) if $u_dbh && $user_db_exists;
564
  # Flag corresponding entries in 'employee' as deleted.
565
  # and restore the most important user data in employee
566
  # TODO try and catch the whole transaction {user->delete; update employee} {exception}
567
  # more or less impossible, because we access at least 2 different databases
568
  # at least user->delete is the last action and it is safe to run the updates on employees
569
  # more than once
570
  foreach my $client (@clients) {
571
    my $dbh = $client->dbconnect(AutoCommit => 1) || next;
572
    $dbh->do(qq|UPDATE employee SET deleted = TRUE, name = ?, deleted_email = ?,
573
                deleted_tel = ?, deleted_fax = ?, deleted_signature = ? WHERE login = ?|,undef,
574
              $user_config_values_ref->{name}, $user_config_values_ref->{email},
575
              $user_config_values_ref->{tel}, $user_config_values_ref->{fax},
576
              $user_config_values_ref->{signature}, $user->login);
577
    $dbh->do(qq|DELETE FROM user_preferences WHERE login= ?|, undef, $user->login);
569 578

  
570
  $dbh->commit;
579
    $dbh->disconnect;
580
  }
581
  die ('The user could not be deleted.') unless ($user->delete);
571 582
}
572 583

  
573 584
# --------------------------------------

Auch abrufbar als: Unified diff