1 package SL::DB::AuthClient;
8 use SL::DB::MetaSetup::AuthClient;
9 use SL::DB::Manager::AuthClient;
10 use SL::DB::Helper::Util;
12 __PACKAGE__->meta->add_relationship(
14 type => 'many to many',
15 map_class => 'SL::DB::AuthClientUser',
20 type => 'many to many',
21 map_class => 'SL::DB::AuthClientGroup',
27 __PACKAGE__->meta->initialize;
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');
33 sub _before_save_remember_old_name {
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;
44 sub _after_save_ensure_webdav_symlink_correctness {
47 $self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::lx_office_conf{features}->{webdav};
51 sub _after_delete_delete_webdav_symlink {
54 return 1 if !$::lx_office_conf{features}->{webdav};
55 my $name = $self->webdav_symlink_basename;
56 unlink "webdav/links/${name}";
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');
75 sub webdav_symlink_basename {
76 my ($self, $name) = @_;
78 $name = $name || $self->name || '';
84 sub ensure_webdav_symlink_correctness {
85 my ($self, $old_name) = @_;
87 return unless $::lx_office_conf{features}->{webdav};
89 croak "Need object ID" unless $self->id;
91 my $new_symlink = $self->webdav_symlink_basename;
93 croak "Need name" unless $new_symlink;
95 my $base_path = 'webdav/links';
98 my $old_symlink = $self->webdav_symlink_basename($old_name);
99 return if $old_symlink eq $new_symlink;
101 if (-l "${base_path}/${old_symlink}") {
102 rename "${base_path}/${old_symlink}", "${base_path}/${new_symlink}";
107 File::Path::make_path('webdav/' . $self->id);
108 symlink '../' . $self->id, "${base_path}/${new_symlink}";