Changeset 2446


Ignore:
Timestamp:
10/13/20 13:42:23 (4 years ago)
Author:
nanardon
Message:

Add la-cli sed(), Fill Changes

Location:
trunk/LATMOS-Accounts
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/Changes

    r2430 r2446  
    1 6.1.2.1 
     16.1.3 
    22    - Fix attribute constraint check during synchronisation 
     3    - la-cli: add sed function to change attribute using perl regular expression 
     4    - strip ' and " when building mail address 
     5    - clearly flag changes done by background process 
    36 
    476.1.2 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Cli/Object.pm

    r2422 r2446  
    377377                    $env->{_objects}[0]->get_attributes($args[0]); 
    378378                } 
     379            } 
     380        }, 
     381    }); 
     382    $self->add_func('sed', { 
     383        help => 'Apply regular expression on curent attribute', 
     384        code => sub { 
     385            my ($env, $attr, $reg) = @_; 
     386            $reg or do { 
     387                $self->print( "attribute and value must be specified\n" ); 
     388                return; 
     389            }; 
     390            foreach (@{$env->{_objects}}) { 
     391                my @newvalues; 
     392                my $Change = 0; 
     393                foreach my $val ($_->get_attributes($attr)) { 
     394                    my $nval = $val; 
     395                    eval "\$nval =~ $reg;"; 
     396                    if ($@) { 
     397                        $self->print("$@No change done\n"); 
     398                        $env->rollback; 
     399                        return; 
     400                    } 
     401                    if ($val ne $nval) { 
     402                        $self->printf("%s: %s => %s\n", $_->id, $val, $nval); 
     403                        $Change ++; 
     404                    } 
     405                    push(@newvalues, $nval) if($nval); 
     406                } 
     407                if ( $Change ) { 
     408                    defined $_->set_c_fields($attr => @newvalues <= 1 ? $newvalues[0] : \@newvalues) or do { 
     409                        $_->base->rollback; 
     410                        $self->printf ("Cannot set $attr to %s for %s\n", join(', ', @newvalues), $_->id); 
     411                        return; 
     412                    }; 
     413                } else { 
     414                    $self->printf("No change for %s\n", $_->id); 
     415                } 
     416            } 
     417            $env->commit; 
     418            $self->print( "Done.\n" ); 
     419        }, 
     420        completion => sub { 
     421            my ($env, $lastw, @args) = @_; 
     422            if (!$args[0]) { 
     423                return $env->base->list_canonical_fields($env->{_otype}, 'w') 
    379424            } 
    380425        }, 
Note: See TracChangeset for help on using the changeset viewer.