K2LL33D SHELL

 Apache/2.4.7 (Ubuntu)
 Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 safemode : OFF
 MySQL: ON | Perl: ON | cURL: OFF | WGet: ON
  >  / usr / share / perl5 / Debconf /
server ip : 172.67.156.115

your ip : 172.69.7.45

H O M E


Filename/usr/share/perl5/Debconf/Question.pm
Size5.73 kb
Permissionrw-r--r--
Ownerroot : root
Create time27-Apr-2025 09:50
Last modified23-Feb-2014 22:30
Last accessed05-Jul-2025 20:26
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
#!/usr/bin/perl -w
# This file was preprocessed, do not edit!


package Debconf::Question;
use strict;
use Debconf::Db;
use Debconf::Template;
use Debconf::Iterator;
use Debconf::Log qw(:all);


use fields qw(name priority);

our %question;


sub new {
my Debconf::Question $this=shift;
my $name=shift;
my $owner=shift;
my $type=shift || die "no type given for question";
die "A question called \"$name\" already exists"
if exists $question{$name};
unless (ref $this) {
$this = fields::new($this);
}
$this->{name}=$name;
return unless defined $this->addowner($owner, $type);
$this->flag('seen', 'false');
return $question{$name}=$this;
}


sub get {
my Debconf::Question $this=shift;
my $name=shift;
return $question{$name} if exists $question{$name};
if ($Debconf::Db::config->exists($name)) {
$this = fields::new($this);
$this->{name}=$name;
return $question{$name}=$this;
}
return undef;
}


sub iterator {
my $this=shift;

my $real_iterator=$Debconf::Db::config->iterator;
return Debconf::Iterator->new(callback => sub {
return unless my $name=$real_iterator->iterate;
return $this->get($name);
});
}


sub _expand_vars {
my $this=shift;
my $text=shift;

return '' unless defined $text;

my @vars=$Debconf::Db::config->variables($this->{name});

my $rest=$text;
my $result='';
my $variable;
my $varval;
my $escape;
while ($rest =~ m/^(.*?)(\\)?\${([^{}]+)}(.*)$/sg) {
$result.=$1; # copy anything before the variable
$escape=$2;
$variable=$3;
$rest=$4; # continue trying to expand rest of text
if (defined $escape && length $escape) {
$result.="\${$variable}";
}
else {
$varval=$Debconf::Db::config->getvariable($this->{name}, $variable);
$result.=$varval if defined($varval); # expand the variable
}
}
$result.=$rest; # add on anything that's left.

return $result;
}


sub description {
my $this=shift;
return $this->_expand_vars($this->template->description);
}


sub extended_description {
my $this=shift;
return $this->_expand_vars($this->template->extended_description);
}


sub choices {
my $this=shift;

return $this->_expand_vars($this->template->choices);
}


sub choices_split {
my $this=shift;

my @items;
my $item='';
for my $chunk (split /(\\[, ]|,\s+)/, $this->choices) {
if ($chunk=~/^\\([, ])$/) {
$item.=$1;
} elsif ($chunk=~/^,\s+$/) {
push @items, $item;
$item='';
} else {
$item.=$chunk;
}
}
push @items, $item if $item ne '';
return @items;
}


sub variable {
my $this=shift;
my $var=shift;

if (@_) {
return $Debconf::Db::config->setvariable($this->{name}, $var, shift);
}
else {
return $Debconf::Db::config->getvariable($this->{name}, $var);
}
}


sub flag {
my $this=shift;
my $flag=shift;

if ($flag eq 'isdefault') {
debug developer => "The isdefault flag is deprecated, use the seen flag instead";
if (@_) {
my $value=(shift eq 'true') ? 'false' : 'true';
$Debconf::Db::config->setflag($this->{name}, 'seen', $value);
}
return ($Debconf::Db::config->getflag($this->{name}, 'seen') eq 'true') ? 'false' : 'true';
}

if (@_) {
return $Debconf::Db::config->setflag($this->{name}, $flag, shift);
}
else {
return $Debconf::Db::config->getflag($this->{name}, $flag);
}
}


sub value {
my $this = shift;

unless (@_) {
my $ret=$Debconf::Db::config->getfield($this->{name}, 'value');
return $ret if defined $ret;
return $this->template->default if ref $this->template;
} else {
return $Debconf::Db::config->setfield($this->{name}, 'value', shift);
}
}


sub value_split {
my $this=shift;

my $value=$this->value;
$value='' if ! defined $value;
my @items;
my $item='';
for my $chunk (split /(\\[, ]|,\s+)/, $value) {
if ($chunk=~/^\\([, ])$/) {
$item.=$1;
} elsif ($chunk=~/^,\s+$/) {
push @items, $item;
$item='';
} else {
$item.=$chunk;
}
}
push @items, $item if $item ne '';
return @items;
}


sub addowner {
my $this=shift;

return $Debconf::Db::config->addowner($this->{name}, shift, shift);
}


sub removeowner {
my $this=shift;

my $template=$Debconf::Db::config->getfield($this->{name}, 'template');
return unless $Debconf::Db::config->removeowner($this->{name}, shift);
if (length $template and
not $Debconf::Db::config->exists($this->{name})) {
$Debconf::Db::templates->removeowner($template, $this->{name});
delete $question{$this->{name}};
}
}


sub owners {
my $this=shift;

return join(", ", sort($Debconf::Db::config->owners($this->{name})));
}


sub template {
my $this=shift;
if (@_) {
my $oldtemplate=$Debconf::Db::config->getfield($this->{name}, 'template');
my $newtemplate=shift;
if (not defined $oldtemplate or $oldtemplate ne $newtemplate) {
$Debconf::Db::templates->removeowner($oldtemplate, $this->{name})
if defined $oldtemplate and length $oldtemplate;

$Debconf::Db::config->setfield($this->{name}, 'template', $newtemplate);

$Debconf::Db::templates->addowner($newtemplate, $this->{name},
$Debconf::Db::templates->getfield($newtemplate, "type"));
}
}
return Debconf::Template->get(
$Debconf::Db::config->getfield($this->{name}, 'template'));
}


sub name {
my $this=shift;

return $this->{name};
}


sub priority {
my $this=shift;

$this->{priority}=shift if @_;

return $this->{priority};
}


sub AUTOLOAD {
(my $field = our $AUTOLOAD) =~ s/.*://;

no strict 'refs';
*$AUTOLOAD = sub {
my $this=shift;

if (@_) {
return $Debconf::Db::config->setfield($this->{name}, $field, shift);
}
my $ret=$Debconf::Db::config->getfield($this->{name}, $field);
unless (defined $ret) {
$ret = $this->template->$field() if ref $this->template;
}
if (defined $ret) {
if ($field =~ /^(?:description|extended_description|choices)-/i) {
return $this->_expand_vars($ret);
} else {
return $ret;
}
}
};
goto &$AUTOLOAD;
}

sub DESTROY {
}


1