]> wagnertech.de Git - kivitendo-erp.git/blob - SL/DB/AuthClient.pm
Admin-Controller: Weiterführungslinks zu altem admin.pl gefixt
[kivitendo-erp.git] / SL / DB / AuthClient.pm
1 package SL::DB::AuthClient;
2
3 use strict;
4
5 use Carp;
6 use File::Path ();
7
8 use SL::DB::MetaSetup::AuthClient;
9 use SL::DB::Manager::AuthClient;
10 use SL::DB::Helper::Util;
11
12 __PACKAGE__->meta->add_relationship(
13   users => {
14     type      => 'many to many',
15     map_class => 'SL::DB::AuthClientUser',
16     map_from  => 'client',
17     map_to    => 'user',
18   },
19   groups => {
20     type      => 'many to many',
21     map_class => 'SL::DB::AuthClientGroup',
22     map_from  => 'client',
23     map_to    => 'group',
24   },
25 );
26
27 __PACKAGE__->meta->initialize;
28
29 __PACKAGE__->before_save('_before_save_remember_old_name');
30 __PACKAGE__->after_save('_after_save_ensure_webdav_symlink_correctness');
31 __PACKAGE__->after_delete('_after_delete_delete_webdav_symlink');
32
33 sub _before_save_remember_old_name {
34   my ($self) = @_;
35
36   delete $self->{__before_save_remember_old_name};
37   if ($self->id && $::lx_office_conf{features}->{webdav}) {
38     $self->{__before_save_remember_old_name} = SL::DB::AuthClient->new(id => $self->id)->load->name;
39   }
40
41   return 1;
42 }
43
44 sub _after_save_ensure_webdav_symlink_correctness {
45   my ($self) = @_;
46
47   $self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::lx_office_conf{features}->{webdav};
48   return 1;
49 }
50
51 sub _after_delete_delete_webdav_symlink {
52   my ($self) = @_;
53
54   return 1 if !$::lx_office_conf{features}->{webdav};
55   my $name = $self->webdav_symlink_basename;
56   unlink "webdav/links/${name}";
57   return 1;
58 }
59
60 sub validate {
61   my ($self) = @_;
62
63   my @errors;
64   push @errors, $::locale->text('The name is missing.')                                           if !$self->name;
65   push @errors, $::locale->text('The database name is missing.')                                  if !$self->dbname;
66   push @errors, $::locale->text('The database host is missing.')                                  if !$self->dbhost;
67   push @errors, $::locale->text('The database port is missing.')                                  if !$self->dbport;
68   push @errors, $::locale->text('The database user is missing.')                                  if !$self->dbuser;
69   push @errors, $::locale->text('The name is not unique.')                                        if !SL::DB::Helper::Util::is_unique($self, 'name');
70   push @errors, $::locale->text('The combination of database host, port and name is not unique.') if !SL::DB::Helper::Util::is_unique($self, 'dbhost', 'dbport', 'dbname');
71
72   return @errors;
73 }
74
75 sub webdav_symlink_basename {
76   my ($self, $name) =  @_;
77
78   $name             =  $name || $self->name || '';
79   $name             =~ s:/+:_:g;
80
81   return $name;
82 }
83
84 sub ensure_webdav_symlink_correctness {
85   my ($self, $old_name) = @_;
86
87   return unless $::lx_office_conf{features}->{webdav};
88
89   croak "Need object ID" unless $self->id;
90
91   my $new_symlink = $self->webdav_symlink_basename;
92
93   croak "Need name" unless $new_symlink;
94
95   my $base_path = 'webdav/links';
96
97   if ($old_name) {
98     my $old_symlink = $self->webdav_symlink_basename($old_name);
99     return if $old_symlink eq $new_symlink;
100
101     if (-l "${base_path}/${old_symlink}") {
102       rename "${base_path}/${old_symlink}", "${base_path}/${new_symlink}";
103       return;
104     }
105   }
106
107   File::Path::make_path('webdav/' . $self->id);
108   symlink '../' . $self->id, "${base_path}/${new_symlink}";
109 }
110
111 1;