Line # Revision Author
1 8 ahitrov@rambler.ru %# vim:syn=mason
2 <%args>
3 $object
4 $name => undef
5 $SETS => undef
6 </%args>
7 <%init>
8 return undef unless ref $SETS;
9 return undef unless $name;
10
11 # Если оно хранится в поле типа integer[] то нам вернется массив, если в data, то ссылка на массив.
12 # Просекаем фишку
13 my @ids = ref($object->$name) eq 'ARRAY' ? @{ $object->$name } : $object->$name;
14
15 my %ids;
16 $ids{$_} = 1 foreach @ids;
17
18 while (my ($k, $v) = each(%$SETS)) {
19 next unless $k =~ /^${name}_(add|delete)$/;
20 next unless $v;
21
22 275 ahitrov warn Dumper $v;
23 8 ahitrov@rambler.ru if ($1 eq 'add') {
24 $ids{$v} = 1;
25 } elsif ($1 eq 'delete') {
26 275 ahitrov if ( ref $v eq 'ARRAY' ) {
27 map { delete $ids{$_} } @$v;
28 } else {
29 delete $ids{$v};
30 }
31 8 ahitrov@rambler.ru }
32 }
33
34 return [keys %ids];
35 </%init>