OpusVL-Preferences

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

0.27      2017-09-12 14:40:12+01:00 Europe/London

  * Fields are no longer masked if the mask happens to be the empty string

0.26      2016-12-14 14:19:22+00:00 Europe/London

  * Added missing pod

0.25      2016-12-14 13:35:17+00:00 Europe/London

  * Updated methods for pulling all the prefs out in datastructures to do 
    decryption and allow for a hash
  * Added Jenkinsfile for testing

0.24      2016-11-04 17:10:57+00:00 Europe/London

  * Updated dependency on Postgres module

0.23      2016-11-04 12:01:59+00:00 Europe/London

  * Added field mask function

lib/OpusVL/FB11X/Preferences/Role/ParameterValueEditing.pm  view on Meta::CPAN

package OpusVL::FB11X::Preferences::Role::ParameterValueEditing;

use v5.24;
use Moose::Role;
use Switch::Plain 'sswitch';

sub add_prefs_defaults
{
    my $self = shift;
    my $c = shift;
    my $args = shift;
    my $defaults = $args->{defaults};
    my $resultset = $args->{resultset};
    my $object = $args->{object};

    my $field_rs = $resultset ? $resultset->prf_defaults : $object->prf_defaults;
    my @fields = $field_rs->active->all;

lib/OpusVL/FB11X/Preferences/Role/ParameterValueEditing.pm  view on Meta::CPAN

            $defaults->{'confirm_global_fields_' . $field->name} = $value;
        }
        $defaults->{'global_fields_' . $field->name} = $value;
    }
    return $defaults;
}

# DEBT: I don't know how to decouple this from the token processor because it's
# doing audit trail stuff. The Brain architecture needs to be more mature to do
# that.
sub update_prefs_values
{
    my ($self, $c, $object) = @_;

    # FIXME: to use two methods below instead.
    my $form = $c->stash->{form};
    my @fields = $object->prf_defaults->active->all;
    my $params = OpusVL::FB11::Hive->service('sysparams')->for_component('preferences');

    for my $field (@fields)
    {

lib/OpusVL/FB11X/Preferences/Role/ParameterValueEditing.pm  view on Meta::CPAN

                        $object,
                        $object->prf_get('email'),
                    );
                }
            }
            $object->prf_set($name, $value);
        }
    }
}

sub get_prefs_values_from_form
{
    my ($self, $c, $object) = @_;

    my @fields = $object->prf_defaults->active->all;
    return $self->collect_values_from_form($c, @fields);
}

sub collect_values_from_form
{
    my ($self, $c, @fields) = @_;

lib/OpusVL/FB11X/Preferences/Role/ParameterValueEditing.pm  view on Meta::CPAN

        if ($value) {
            $value =~ s/^\s+//g;
            $value =~ s/\s+$//g;
        }

        $values->{$name} = $value;
    }
    return $values;
}

sub prefs_hash_to_array
{
    my $self = shift;
    my $rs = shift;
    my $hash = shift;

    my @d = sort { $a->{param}->display_order <=> $b->{param}->display_order 
                    || $a->{param}->name cmp $b->{param}->name } 
            map { { 
                name => $_, 
                value => $hash->{$_}, 
                param => $rs->prf_defaults->find({ name => $_ }),
            } } keys %$hash;
    return @d;
}

sub update_prefs_from_hash
{
    my ($self, $object, $hash) = @_;

    for my $name (keys %$hash)
    {
        my $value = $hash->{$name};
        unless($object->prf_get($name) eq $value)
        {
            $object->prf_set($name, $value);
        }

lib/OpusVL/FB11X/Preferences/Role/ParameterValueEditing.pm  view on Meta::CPAN

1;

=head1 NAME

OpusVL::AppKitX::TokenProcessor::Admin::Role::ParameterValueEditing

=head1 DESCRIPTION

=head1 METHODS

=head2 add_prefs_defaults

=head2 update_prefs_values

=head2 get_prefs_values_from_form

=head2 collect_values_from_form

=head2 prefs_hash_to_array

=head2 update_prefs_from_hash

=head2 construct_global_data_form

=head2 construct_global_data_search_form

=head2 construct_form_fields

=head2 field_type_info


lib/OpusVL/Preferences/RolesFor/Result/PrfOwner.pm  view on Meta::CPAN

    #     value => $_->value,
    #     param => # assocaited PrfDefault parameter definition.
    # } ];

=head2 safe_preferences_in_array

Returns the same as preferences_to_array but instead of the param object it returns the 
field label.  The safe refers to the fact that all the items in the hash are base types
and therefore are trivially serializable.

=head2 safe_prefs_to_hash

Returns the same as safe_prefs_to_hash but converts it to a hash for easier use.

=head1 COPYRIGHT and LICENSE

Copyright (C) 2011 OpusVL

This software is licensed according to the "IP Assignment Schedule" provided with the development project.

=cut

use v5.24;

lib/OpusVL/Preferences/RolesFor/Result/PrfOwner.pm  view on Meta::CPAN

    my $self = shift;
    my $extra_params = $self->preferences_to_array;
    my @cleaned_up = map { { 
        name => $_->{name},
        value => $_->{value},
        label => $_->{param}->comment,
    } } @$extra_params;
    return \@cleaned_up;
}

sub safe_prefs_to_hash
{
    my $self = shift;
    my $info = $self->safe_preferences_in_array;
    my %hash = map { $_->{name} => $_->{value} } @$info;
    return \%hash;
}

sub prf_get
{
	my $self = shift;

lib/OpusVL/Preferences/RolesFor/Result/PrfOwner.pm  view on Meta::CPAN

        )->search_related('unique_value')->delete;
    }
}

sub prf_set
{
	my $self     = shift;
	my $prefname = shift;
	my $value    = shift;

	my $allprefs = $self->prf_preferences;
	
	my $pref = $allprefs->search ({ name => $prefname })->first;
	my $field = $self->prf_defaults->search ({ name => $prefname })->first;
	unless($field)
	{
		die "Field $prefname not setup.";
	}

    if($field->encrypted)
    {
        my $schema = $self->result_source->schema;
        my $crypto = $schema->encryption_client;

lib/OpusVL/Preferences/RolesFor/Result/PrfOwner.pm  view on Meta::CPAN

        if($field->unique_field)
        {
            $self->_clear_out_inactive_unique_values($prefname, $field);
            my $place_holder = $value;
            if($field->data_type eq 'email')
            {
                $place_holder = lc $value; 
            }
            $data->{unique_value} = { value => $place_holder };
        }
		$allprefs->create($data);
	}
}

sub prf_reset
{
	my $self = shift;
	my $name = shift;

    my $val = $self->prf_preferences->search ({ 'me.name' => $name });
    $val->search_related('unique_value')->delete;

t/encrypt.t  view on Meta::CPAN


ok $results = TestOwner->with_fields({
    pin => '10013211',
});
# FIXME: how should we let the dev know about this?
is $results->count, 0, 'Search by pin should return 0 results because not using searchable crypto';

eq_or_diff {
    email => 'blackhole@opusvl.com',
    pin => 10013211,
}, $o->safe_prefs_to_hash;


# FIXME: test unique fields.
# default values
# also auditing
done_testing;



( run in 0.700 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )