Changeset 60
- Timestamp:
- 05/03/09 15:01:33 (15 years ago)
- Location:
- LATMOS-Accounts/lib/LATMOS/Accounts
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LATMOS-Accounts/lib/LATMOS/Accounts/Bases.pm
r57 r60 80 80 } 81 81 82 sub delayed_fields { 83 my ($self, $otype, $for) = @_; 84 $for ||= 'rw'; 85 my $pclass = $self->_load_obj_class($otype) or return; 86 $pclass->_delayed_fields($self, $for); 87 } 88 82 89 =head2 get_field_name($otype, $c_fields, $for) 83 90 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Objects.pm
r57 r60 127 127 =cut 128 128 129 sub _delayed_fields { 130 my ($self)= @_; 131 return (); 132 } 133 129 134 =head2 _get_fields_name($field, $for) 130 135 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Group.pm
r59 r60 56 56 ); 57 57 \%fields; 58 } 59 60 sub _delayed_fields { 61 my ($self)= @_; 62 return qw(memberUID); 58 63 } 59 64 -
LATMOS-Accounts/lib/LATMOS/Accounts/Synchro.pm
r57 r60 112 112 } 113 113 114 sub process { 115 my ($self, %options) = @_; 116 117 $self->from->load or return; 118 # if any cannot be loaded, return, 119 # TODO we need a way to force if some still can be sync 120 $self->load_dest and return; 121 122 # tracking current base revision: 123 my $current_rev = $self->from->current_rev; 124 114 sub _traverse { 115 my ($self, $attr_cb, %options) = @_; 116 125 117 # listing existing obj one time: 126 118 foreach my $otype ($self->from->list_supported_objects) { … … 141 133 ); 142 134 warn "objects $otype => " . $destbase->type . "\n"; 143 my @common_fields = $ self->_common_fields($self->from, $destbase, $otype);135 my @common_fields = $attr_cb->($self->from, $destbase, $otype) or next; 144 136 my %exists = map { $_ => 1 } $destbase->list_objects($otype); 145 137 foreach my $uid (@lobjfrom) { 138 my $sobj = $self->from->get_object($otype, $uid); 139 my %fields = map { $_ => $sobj->get_c_field($_, 'r') } @common_fields; 146 140 if (!$exists{$uid}) { 147 my $sobj = $self->from->get_object($otype, $uid);148 my %fields = map { $_ => $sobj->get_c_field($_, 'r') } @common_fields;149 141 $destbase->create_c_object($otype, $uid, %fields); 150 142 warn " $otype $uid: created\n"; 151 143 } else { 152 my $sobj = $self->from->get_object($otype, $uid);153 my %fields = map { $_ => $sobj->get_c_field($_, 'r') } @common_fields;154 144 my $dobj = $destbase->get_object($otype, $uid); 155 145 $dobj->set_c_fields(%fields); 156 157 146 warn " $otype $uid: synched\n"; 158 147 } … … 160 149 } 161 150 } 151 } 152 153 sub process { 154 my ($self, %options) = @_; 155 156 $self->from->load or return; 157 # if any cannot be loaded, return, 158 # TODO we need a way to force if some still can be sync 159 $self->load_dest and return; 160 161 # tracking current base revision: 162 $self->{current_rev} = $self->from->current_rev; 163 164 my %delayed; 165 $self->_traverse( 166 sub { 167 my ($from, $to, $otype) = @_; 168 my %fields = (); 169 my %delayed = map { $_ => 1 } $to->delayed_fields($otype); 170 foreach my $base ($from, $to) { 171 foreach ($base->list_canonicals_fields($otype)) { 172 $delayed{$_} and next; 173 $fields{$_} ||= 0; # avoid 174 $fields{$_}++; 175 } 176 } 177 # field having value are in both 178 grep { $fields{$_} == 2 } keys %fields; 179 }, 180 %options 181 ); 182 $self->_traverse( 183 sub { 184 my ($from, $to, $otype) = @_; 185 my %fields = (); 186 my %delayed = map { $_ => 1 } $to->delayed_fields($otype); 187 foreach my $base ($from, $to) { 188 foreach ($base->list_canonicals_fields($otype)) { 189 $delayed{$_} or next; 190 $fields{$_} ||= 0; # avoid 191 $fields{$_}++; 192 } 193 } 194 # field having value are in both 195 grep { $fields{$_} == 2 } keys %fields; 196 }, 197 %options 198 ); 162 199 163 200 foreach ($self->to) { 164 201 $_->commit or next; 165 $self->newval($self->from->label, $_->label, $ current_rev) if($current_rev);202 $self->newval($self->from->label, $_->label, $self->{current_rev}) if($self->{current_rev}); 166 203 } 167 204
Note: See TracChangeset
for help on using the changeset viewer.