Changeset 1294 for branches


Ignore:
Timestamp:
03/20/15 18:48:21 (9 years ago)
Author:
nanardon
Message:

Backport changes reporting

Location:
branches/4.0
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/4.0

  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases.pm

    r1235 r1294  
    110110    my $prefix = 'Base(' . $self->type . '/' . $self->label . ')'; 
    111111    LATMOS::Accounts::Log::la_log($level, "$prefix $msg", @args); 
     112} 
     113 
     114=head2 ReportChange($otype, $name, $ref, $changetype, $message, @args) 
     115 
     116Functions to report back 
     117 
     118=cut  
     119 
     120sub ReportChange { 
     121    my ($self, $otype, $name, $ref, $changetype, $message, @args) = @_; 
     122 
    112123} 
    113124 
     
    437448    } 
    438449    #keys %data or return 0; # TODO: return an error ? 
    439     $self->create_object($otype, $id, %data); 
     450    my $obj = $self->create_object($otype, $id, %data) or return; 
     451    $obj->ReportChange('Create', 'Object created with %s', join(', ', sort keys %cdata)); 
     452 
     453    foreach my $attrname (keys %data) { 
     454        my $attribute = $self->attribute($obj->type, $attrname) or next; 
     455        $obj->ReportChange('Attributes', '%s set to %s', $attrname, 
     456            (ref $data{$attrname} 
     457                ? join(', ', @{ $data{$attrname} }) 
     458                : $data{$attrname}) || '(none)') if ($attribute->{notify}); 
     459    } 
     460 
     461    $obj 
    440462} 
    441463 
     
    614636        return; 
    615637    }; 
    616     $self->_delete_object($otype, $id); 
     638    my $ref = $obj->Iid; 
     639    if (my $res = $self->_delete_object($otype, $id)) { 
     640        $self->ReportChange($otype, $id, $ref, 'Delete', 'Object deleted'); 
     641        return $res; 
     642    } 
     643    return; 
    617644} 
    618645 
     
    650677    }; 
    651678 
    652     $self->_rename_object($otype, $id, $newid); 
     679    my $oldref = $obj->Iid; 
     680 
     681    if (my $res = $self->_rename_object($otype, $id, $newid)) { 
     682        my $newobj = $self->get_object($otype, $newid) or do { 
     683            $self->log(LA_WARN, 'Cannot get object %s/%s: rename failed ?', 
     684                $otype, $id); 
     685            return; 
     686        }; 
     687 
     688        $self->ReportChange($otype, $id, $oldref, 'Rename', 'Object rename to %s', $newid); 
     689        $newobj->ReportChange('Rename', 'Object renamed from %s', $id); 
     690        return $res; 
     691    } 
     692    return; 
    653693} 
    654694 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Objects.pm

    r1182 r1294  
    128128    my ($self) = @_; 
    129129    $self->{_id} 
     130} 
     131 
     132 
     133=head2 Iid 
     134 
     135Return internal id if different from Id 
     136 
     137=cut 
     138 
     139sub Iid { 
     140    my ($self) = @_; 
     141    $self->id 
    130142} 
    131143 
     
    368380            return 0; 
    369381        }; 
    370         $res += ($attribute->set($cdata{$cfield}) || 0); 
    371  
    372     } 
    373     $res 
     382    } 
     383 
     384    my %updated = (); 
     385    foreach my $cfield (keys %cdata) { 
     386        my $attribute = $self->attribute($cfield) or do { 
     387            $self->base->log(LA_ERR, 
     388                "Cannot set unsupported attribute %s to %s (%s)", 
     389                $cfield, $self->id, $self->type 
     390            ); 
     391            return; 
     392        }; 
     393        if ($attribute->set($cdata{$cfield})) { 
     394            $updated{$cfield} = $attribute->{notify}; 
     395        } 
     396    } 
     397     
     398    if (keys %updated) { 
     399        $self->ReportChange('Update', 'Attributes %s where updated', join(', ', sort keys %updated)); 
     400        foreach (sort keys %updated) { 
     401            $self->ReportChange('Attributes', '%s set to %s', $_,  
     402                (ref $cdata{$_} 
     403                    ? join(', ', @{ $cdata{$_} }) 
     404                    : $cdata{$_}) || '(none)') 
     405                if ($updated{$_}); 
     406        } 
     407    } 
     408    return scalar(keys %updated); 
    374409} 
    375410 
     
    390425    my ($self, $clear_pass) = @_; 
    391426    if ($self->base->check_acl($self, 'userPassword', 'w')) { 
    392         return $self->_set_password($clear_pass); 
     427        if ($self->_set_password($clear_pass)) { 
     428             $self->ReportChange('Password', 'user password has changed'); 
     429             return 1; 
     430        } else { 
     431            return; 
     432        } 
    393433    } else { 
    394434        $self->base->log(LA_ERROR, "Permission denied for %s to change its password", 
     
    619659} 
    620660 
     661=head2 ReportChange($changetype, $message, @args) 
     662 
     663Possible per database way to log changes 
     664 
     665=cut 
     666 
     667sub ReportChange { 
     668    my ($self, $changetype, $message, @args) = @_; 
     669 
     670    $self->base->ReportChange( 
     671        $self->type, 
     672        $self->id, 
     673        $self->Iid, 
     674        $changetype, $message, @args 
     675    ) 
     676} 
     677 
    6216781; 
    622679 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm

    r1285 r1294  
    637637} 
    638638 
     639sub ReportChange { 
     640    my ($self, $otype, $name, $ref, $changetype, $message, @args) = @_; 
     641 
     642    my $sth = $self->db->prepare(q{ 
     643        INSERT into objectslogs (ikey, otype, name, changetype, username, message) 
     644        VALUES (?,?,?,?,?,?) 
     645        }); 
     646 
     647    $sth->execute( 
     648        $ref, 
     649        $otype, 
     650        $name, 
     651        $changetype, 
     652        $self->user || '@Console', 
     653        sprintf($message, @args), 
     654    ); 
     655} 
     656 
    639657=head2 getobjectlogs($otype, $name) 
    640658 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Address.pm

    r1144 r1294  
    143143    my ($self, %data) = @_; 
    144144    my %fdata; 
     145    my $res = 0; 
    145146    foreach my $attr (keys %data) { 
    146147        $attr =~ /^site$/ and do { 
     
    161162    } 
    162163    if  (keys %fdata) { 
    163         $self->SUPER::set_fields(%fdata); 
     164        $res += $self->SUPER::set_fields(%fdata); 
    164165    } 
     166 
     167    $res; 
    165168} 
    166169 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Group.pm

    r1284 r1294  
    3636            date       => { inline => 1, ro => 1 }, 
    3737            memberUID  => { 
     38                notify => 1, 
    3839                hide => 1, 
    3940                reference => 'user', 
     
    4849            }, 
    4950            member     => { 
     51                notify => 1, 
    5052                reference => 'user', 
    5153                multiple => 1,  
     
    169171                next; 
    170172            } 
    171             $self->_set_group_members($data{$attr}); 
     173            $res += $self->_set_group_members($data{$attr}); 
    172174            next; 
    173175        }; 
     
    180182            $res += $self->populate_dyn_group; 
    181183        } 
    182             if (defined($setres)) { return $res + $setres; } 
    183             else { return; }  
    184     } else { 
    185         $res 
    186     } 
     184        return unless(defined($setres)); 
     185            $res += ($setres || 0); 
     186    } 
     187     
     188    $res 
    187189} 
    188190 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm

    r1284 r1294  
    521521        }; 
    522522        $attr =~ /^memberOf$/ and do { 
    523             my %member; 
     523            my %members; 
    524524            my $memberof = $self->get_field('memberOf'); 
    525525            foreach (ref $memberof 
    526526                ? @{ $memberof } 
    527527                : $memberof || ()) { 
    528                 $member{$_}{c} = 1; 
     528                $members{$_}{c} = 1; 
    529529            } 
    530530            foreach (grep { $_ } ref $data{$attr} ? @{ $data{$attr} || []} : $data{$attr}) { 
    531                 $member{$_}{n} = 1; 
    532             } 
    533  
    534             foreach (keys %member) { 
    535                 $member{$_}{c} && $member{$_}{n} and next; # no change ! 
    536                 my $group = $self->base->get_object('group', $_) or next; 
     531                $members{$_}{n} = 1; 
     532            } 
     533 
     534            foreach my $member (keys %members) { 
     535                $members{$member}{c} && $members{$member}{n} and next; # no change ! 
     536                my $group = $self->base->get_object('group', $member) or do { 
     537                    la_log(LA_WARN, "Cannot get group %s to set members", $member);  
     538                    next; 
     539                }; 
    537540                ($group->_get_c_field('sutype') || '') =~ /^(jobtype|contrattype)$/ and next; 
    538                 if ($member{$_}{n}) { 
    539                     my $sth = $self->db->prepare_cached( 
    540                         q{insert into group_attributes_users (value, attr, okey) values (?,?,?)} 
    541                     ); 
    542                     $sth->execute($self->id, 'memberUID', $group->_get_ikey); 
    543                     $res++; 
    544                 } elsif ($member{$_}{c}) { 
    545                     if (($self->get_c_field('department') || '') eq $group->id) { 
     541                if ($members{$member}{n}) { 
     542                    my @newmembers = $group->get_attributes('memberUID'); 
     543                    $res += $group->_set_c_fields('memberUID', [ $self->id, @newmembers ]); 
     544                } elsif ($members{$member}{c}) { 
     545                    if (($self->_get_c_field('department') || '') eq $group->id) { 
    546546                        $self->base->log(LA_WARN, 
    547547                            "Don't removing user %s from group %s: is it's department", 
     
    549549                        next; 
    550550                    } 
    551                     my $sth = $self->db->prepare_cached( 
    552                         q{delete from group_attributes_users where value = ? and attr = ? and okey = ?} 
    553                     ); 
    554                     $sth->execute($self->id, 'memberUID', $group->_get_ikey); 
    555                     $res++; 
     551                    my @newmembers = grep { $_ ne $self->id } $group->get_attributes('memberUID'); 
     552                    $res += $group->_set_c_fields('memberUID', [ @newmembers ]); 
    556553                } # else {} # can't happend 
    557554            } 
  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm

    r1284 r1294  
    129129} 
    130130 
     131sub Iid { $_[0]->_get_ikey } 
     132 
    131133sub _get_ikey { 
    132134    my ($class, $base, $id) = @_; 
     
    179181 
    180182    my $obj = $class->new($base, $id); 
    181     $obj->objectlog('Create', 'Object created'); 
    182     foreach (keys %first) { 
    183         my $attr = $obj->attribute($_); 
    184         $obj->objectlog('Attribute', '%s set to %s', $_, ( 
    185                 defined($data{$_})  
    186                 ? (ref $data{$_} 
    187                     ? join(', ', @{ $data{$_} }) 
    188                     : $data{$_}) 
    189                 : '(none)')) 
    190             if ($attr->{notify}); 
    191     } 
    192183    $obj->set_fields(%second); 
    193184 
     
    200191    my $obj = $base->get_object($class->type, $id) 
    201192        or return; 
    202     $obj->objectlog('Delete', 'Object deleted'); 
    203193 
    204194    my $sthd = $base->db->prepare_cached( 
     
    215205    my ($class, $base, $id, $newid) = @_; 
    216206 
    217     { 
    218         my $obj = $base->get_object($class->type, $id) 
    219             or return; 
    220         $obj->objectlog('Rename', 'Object rename to %s', $newid); 
    221     } 
    222  
    223207    my $sthr = $base->db->prepare_cached( 
    224208        sprintf( 
     
    238222    } 
    239223 
    240     { 
    241         my $obj = $base->get_object($class->type, $newid) 
    242             or return; 
    243         $obj->objectlog('Rename', 'Object renamed from %s', $id); 
    244     } 
    245224    1; 
    246225} 
     
    471450 
    472451    delete($self->base->{__cache}{"_" . $self->type}{$self->id}); 
    473     $self->objectlog('Update', 'Attributes %s where updated', join(', ', @updated_attributes)) 
    474         if(@updated_attributes); 
    475     foreach (@updated_attributes) { 
    476         my $attr = $self->attribute($_); 
    477         $self->objectlog('Attribute', '%s set to %s', $_, ( 
    478                 defined($data{$_})  
    479                 ? (ref $data{$_} 
    480                     ? join(', ', @{ $data{$_} }) 
    481                     : $data{$_}) 
    482                 : '(none)')) 
    483             if ($attr->{notify}); 
    484     } 
    485452    scalar(@updated_attributes); 
    486453} 
     
    546513                $self->id 
    547514            ); 
    548             $self->objectlog('Password', 'user password has changed%s', ($asymencrypted ? ' and stored using internal key' : '')); 
     515            $self->ReportChange('Password', 'Password stored using internal key'); 
    549516            return 1; 
    550517        } 
     
    749716} 
    750717 
    751 =head2 objectlog 
    752  
    753 =cut 
    754  
    755 sub objectlog { 
    756     my ($self, $changetype, $message, @args) = @_; 
    757  
    758     my $sth = $self->base->db->prepare(q{ 
    759         INSERT into objectslogs (ikey, otype, name, changetype, username, message) 
    760         VALUES (?,?,?,?,?,?) 
    761     }); 
    762  
    763     $sth->execute( 
    764         $self->_get_ikey, 
    765         $self->type, 
    766         $self->id, 
    767         $changetype, 
    768         $self->base->user || '@Console', 
    769         sprintf($message, @args), 
    770     ); 
    771 } 
    772  
    7737181; 
    774719 
Note: See TracChangeset for help on using the changeset viewer.