Changeset 2433
- Timestamp:
- 07/03/20 09:49:38 (4 years ago)
- Location:
- trunk/LATMOS-Accounts
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm
r2414 r2433 1834 1834 1835 1835 if (%changes) { 1836 if (my $cres += $self->set_fields(%changes) ) {1836 if (my $cres += $self->set_fields(%changes) || 0) { 1837 1837 $res += $cres; 1838 1838 $self->base->log(LA_NOTICE, "Updating user %s to match unemployment", $self->id); -
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm
r2426 r2433 1106 1106 # foo=1 bar=1 => foo =1 and bar = 2 1107 1107 my $results = {}; 1108 my @attrsKeys = (); 1108 1109 my $noalias = 0; 1109 1110 … … 1146 1147 } 1147 1148 } 1148 my $attrKey = $attr; 1149 1150 $OpFilter ||= ''; 1151 my $attrKey = $OpFilter . $attr; 1149 1152 1150 1153 if ($attrref) { … … 1180 1183 } 1181 1184 1185 unshift(@attrsKeys, { key => $attrKey, op => $OpFilter || '' }) unless($results->{$attrKey}); 1186 $results->{$attrKey} ||= {}; 1182 1187 if ($OpFilter eq '-') { 1183 1188 # Filter result to filter from attribute result 1184 $results->{$attrKey} ||= {};1185 1189 $results->{$attrKey}{$_} = -1 foreach (@results); 1186 1190 } elsif ($OpFilter eq '+') { 1187 1191 # Filter result to filter from attribute result 1188 $results->{$attrKey} ||= {}; 1189 $results->{$attrKey}{$_} = 1 foreach (@results); 1192 $results->{$attrKey}{$_} = 2 foreach (@results); 1190 1193 } else { 1191 $results->{$attrKey} ||= {};1192 1194 $results->{$attrKey}{$_} ||= 1 foreach (@results); 1193 1195 } … … 1195 1197 1196 1198 # Merging filter result 1197 1198 my %mresults = map { $_ => 1 } $base->list_objects($class->type); 1199 1200 foreach my $attr (keys %{ $results }) { 1201 my @values = keys %mresults; 1202 foreach my $value (sort(@values)) { 1203 my $v = $results->{$attr}{$value} || 0; 1204 if ( $v < 1 ) { 1205 delete($mresults{$value}); 1199 my @Results; 1200 1201 { 1202 my @allObjects = $base->list_objects($class->type); 1203 1204 foreach my $obj (sort @allObjects) { 1205 my $retain = 1; 1206 foreach my $attrInfo (@attrsKeys) { 1207 my $attr = $attrInfo->{key}; 1208 my $v = $results->{$attr}{$obj} || 0; 1209 if ( $v < 0 ) { 1210 $retain = -1; 1211 last; 1212 } elsif ( $v == 0 ) { 1213 $retain = 0 if ($retain == 1 && $attrInfo->{op} ne '+'); 1214 } elsif ( $v >= 2 ) { 1215 $retain = 2; 1216 last; 1217 } 1206 1218 } 1207 1219 push(@Results, $obj) if ($retain > 0); 1208 1220 } 1209 1221 } 1210 1222 1211 1223 # We add to result aliases pointing to these object: 1212 if(scalar(keys %mresults) && !$noalias) { 1213 my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', keys %mresults)); 1214 foreach(@alias) { 1215 $mresults{$_} = 1; 1216 } 1217 } 1218 1219 return(sort keys %mresults); 1224 if(scalar(@Results) && !$noalias) { 1225 my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', @Results)); 1226 push(@Results, sort(@alias)); 1227 } 1228 1229 return(@Results); 1220 1230 } 1221 1231 -
trunk/LATMOS-Accounts/live-test/10_sql.t
r2327 r2433 18 18 plan skip_all => 'No SQL base defined'; 19 19 } else { 20 plan tests => 1 07; # Number of test20 plan tests => 110; # Number of test 21 21 } 22 22 … … 360 360 ), 'Can search using ~ operator'); 361 361 362 diag('Testing filter operator'); 363 364 ok(eq_set( 365 [ $base->search_objects('user', 'givenName=Firstnameb', '+memberOf=searchga') ], 366 [ qw(searchuaa searchuab searchuba searchubb) ] 367 ), 'Can search using filter operator +'); 368 ok(eq_set( 369 [ $base->search_objects('user', 'givenName=Firstnameb', '-memberOf=searchgb') ], 370 [ ] 371 ), 'Can search using filter operator -'); 372 ok(eq_set( 373 [ $base->search_objects('user', 'memberOf=searchga', '!memberOf=searchgb') ], 374 [ qw(searchuba) ] 375 ), 'Can search using filter operator !'); 376 362 377 ok($base->delete_object('user', 'searchuaa'), "deleting user searchuaa"); 363 378 ok($base->delete_object('user', 'searchuna'), "deleting user searchuna");
Note: See TracChangeset
for help on using the changeset viewer.