Name

profile — set UserDB profile

ATTRIBUTES

Attribute Pos. Req. Default Description
name profile name
tag default
restore
joiner
run
set
failure return value in case of failure
success return value in case of success
interpolate     0 interpolate output?
hide     0 Hide the tag return value?

DESCRIPTION

BEHAVIOR

This tag does not appear to be affected by, or affect, the rest of Interchange.

EXAMPLES

Example: Set profile

[profile dealer]

NOTES

AVAILABILITY

profile is available in Interchange versions:

4.6.0-5.9.0 (git-head)

SOURCE

Interchange 5.9.0:

Source: code/SystemTag/profile.coretag
Lines: 14


# Copyright 2002-2007 Interchange Development Group and others
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.  See the LICENSE file for details.
# 
# $Id: profile.coretag,v 1.5 2007-03-30 23:40:49 pajamian Exp $

UserTag profile             Order        name
UserTag profile             addAttr
UserTag profile             PosNumber    1
UserTag profile             Version      $Revision: 1.5 $
UserTag profile             MapRoutine   Vend::Interpolate::tag_profile

Source: lib/Vend/Interpolate.pm
Lines: 1444

sub tag_profile {
my($profile, $opt) = @_;
#::logDebug("in tag_profile=$profile opt=" . uneval_it($opt));

$opt = {} if ! $opt;
my $tag = $opt->{tag} || 'default';

if(! $profile) {
  if($opt->{restore}) {
    restore_profile();
    if(ref $Vend::Session->{Autoload}) {
       @{$Vend::Session->{Autoload}} = 
         grep $_ !~ /^$tag-/, @{$Vend::Session->{Autoload}};
    }
  }
  return if ! ref $Vend::Session->{Autoload};
  $opt->{joiner} = ' ' unless defined $opt->{joiner};
  return join $opt->{joiner},
    grep /^\w+-\w+$/, @{ $Vend::Session->{Autoload} };
}

if($profile =~ s/(\w+)-//) {
  $opt->{tag} = $1;
  $opt->{run} = 1;
}
elsif (! $opt->{set} and ! $opt->{run}) {
  $opt->{set} = $opt->{run} = 1;
}

if( "$profile$tag" =~ /\W/ ) {
  logError(
    "profile: invalid characters (tag=%s profile=%s), must be [A-Za-z_]+",
    $tag,
    $profile,
  );
  return $opt->{failure};
}

if($opt->{run}) {
#::logDebug("running profile=$profile tag=$tag");
  my $prof = $Vend::Cfg->{Profile_repository}{$profile};
    if (not $prof) {
    logError( "profile %s (%s) non-existant.", $profile, $tag );
    return $opt->{failure};
  } 
#::logDebug("found profile=$profile");
  $Vend::Cfg->{Profile} = $prof;
  restore_profile();
#::logDebug("restored profile");
  PROFSET: 
  for my $one (keys %$prof) {
#::logDebug("doing profile $one");
    next unless defined $Vend::Cfg->{$one};
    my $string;
    my $val = $prof->{$one};
    if( ! ref $Vend::Cfg->{$one} ) {
      # Do nothing
    }
    elsif( ref($Vend::Cfg->{$one}) eq 'HASH') {
      if( ref($val) ne 'HASH') {
      $string = '{' .  $prof->{$one}  . '}'
        unless  $prof->{$one} =~ /^{/
        and    $prof->{$one} =~ /}\s*$/;
    }
    }
    elsif( ref($Vend::Cfg->{$one}) eq 'ARRAY') {
      if( ref($val) ne 'ARRAY') {
      $string = '[' .  $prof->{$one}  . ']'
        unless  $prof->{$one} =~ /^\[/
        and    $prof->{$one} =~ /]\s*$/;
    }
    }
    else {
      logError( "profile: cannot handle object of type %s.",
            $Vend::Cfg->{$one},
            );
      logError("profile: profile for $one not changed.");
      next;
    }

#::logDebug("profile value=$val, string=$string");
    undef $@;
    $val = $ready_safe->reval($string) if $string;

    if($@) {
      logError( "profile: bad object %s: %s", $one, $string );
      next;
    }
    $Vend::Session->{Profile_save}{$one} = $Vend::Cfg->{$one}
      unless defined $Vend::Session->{Profile_save}{$one};

#::logDebug("set $one to value=$val, string=$string");
    $Vend::Cfg->{$one} = $val;
  }
  return $opt->{success}
    unless $opt->{set};
}

Source: lib/Vend/Interpolate.pm
Lines: 1444

sub tag_profile {
my($profile, $opt) = @_;
#::logDebug("in tag_profile=$profile opt=" . uneval_it($opt));

$opt = {} if ! $opt;
my $tag = $opt->{tag} || 'default';

if(! $profile) {
  if($opt->{restore}) {
    restore_profile();
    if(ref $Vend::Session->{Autoload}) {
       @{$Vend::Session->{Autoload}} = 
         grep $_ !~ /^$tag-/, @{$Vend::Session->{Autoload}};
    }
  }
  return if ! ref $Vend::Session->{Autoload};
  $opt->{joiner} = ' ' unless defined $opt->{joiner};
  return join $opt->{joiner},
    grep /^\w+-\w+$/, @{ $Vend::Session->{Autoload} };
}

if($profile =~ s/(\w+)-//) {
  $opt->{tag} = $1;
  $opt->{run} = 1;
}
elsif (! $opt->{set} and ! $opt->{run}) {
  $opt->{set} = $opt->{run} = 1;
}

if( "$profile$tag" =~ /\W/ ) {
  logError(
    "profile: invalid characters (tag=%s profile=%s), must be [A-Za-z_]+",
    $tag,
    $profile,
  );
  return $opt->{failure};
}

if($opt->{run}) {
#::logDebug("running profile=$profile tag=$tag");
  my $prof = $Vend::Cfg->{Profile_repository}{$profile};
    if (not $prof) {
    logError( "profile %s (%s) non-existant.", $profile, $tag );
    return $opt->{failure};
  } 
#::logDebug("found profile=$profile");
  $Vend::Cfg->{Profile} = $prof;
  restore_profile();
#::logDebug("restored profile");
  PROFSET: 
  for my $one (keys %$prof) {
#::logDebug("doing profile $one");
    next unless defined $Vend::Cfg->{$one};
    my $string;
    my $val = $prof->{$one};
    if( ! ref $Vend::Cfg->{$one} ) {
      # Do nothing
    }
    elsif( ref($Vend::Cfg->{$one}) eq 'HASH') {
      if( ref($val) ne 'HASH') {
      $string = '{' .  $prof->{$one}  . '}'
        unless  $prof->{$one} =~ /^{/
        and    $prof->{$one} =~ /}\s*$/;
    }
    }
    elsif( ref($Vend::Cfg->{$one}) eq 'ARRAY') {
      if( ref($val) ne 'ARRAY') {
      $string = '[' .  $prof->{$one}  . ']'
        unless  $prof->{$one} =~ /^\[/
        and    $prof->{$one} =~ /]\s*$/;
    }
    }
    else {
      logError( "profile: cannot handle object of type %s.",
            $Vend::Cfg->{$one},
            );
      logError("profile: profile for $one not changed.");
      next;
    }

#::logDebug("profile value=$val, string=$string");
    undef $@;
    $val = $ready_safe->reval($string) if $string;

    if($@) {
      logError( "profile: bad object %s: %s", $one, $string );
      next;
    }
    $Vend::Session->{Profile_save}{$one} = $Vend::Cfg->{$one}
      unless defined $Vend::Session->{Profile_save}{$one};

#::logDebug("set $one to value=$val, string=$string");
    $Vend::Cfg->{$one} = $val;
  }
  return $opt->{success}
    unless $opt->{set};
}

AUTHORS

Interchange Development Group

SEE ALSO

Profile(7ic)

DocBook! Interchange!